@tutti-os/agent-gui 0.0.205 → 0.0.206

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 (58) hide show
  1. package/README.md +12 -0
  2. package/dist/{AgentRichTextReadonly-YU6STDUX.js → AgentRichTextReadonly-DFWY2WYO.js} +5 -5
  3. package/dist/agent-conversation/index.js +8 -8
  4. package/dist/agent-env/index.d.ts +8 -1
  5. package/dist/agent-env/index.js +1 -1
  6. package/dist/agent-gui.d.ts +13 -0
  7. package/dist/agent-gui.js +16 -16
  8. package/dist/agent-message-center/index.js +6 -6
  9. package/dist/agents.js +1 -1
  10. package/dist/{chunk-CX6XXG6R.js → chunk-3MVSOLX3.js} +2 -2
  11. package/dist/chunk-3MVSOLX3.js.map +1 -0
  12. package/dist/{chunk-JXFOFJYI.js → chunk-5RZVXSQQ.js} +2 -2
  13. package/dist/{chunk-VDTG6M6K.js → chunk-6LXC5BME.js} +4 -4
  14. package/dist/{chunk-GJZEMI6Z.js → chunk-CCFYCSBK.js} +551 -538
  15. package/dist/chunk-CCFYCSBK.js.map +1 -0
  16. package/dist/{chunk-UEBPMWKS.js → chunk-CKUR2VKA.js} +2 -2
  17. package/dist/{chunk-X5V6P2EB.js → chunk-DKRX5IZS.js} +4 -4
  18. package/dist/{chunk-K5AOJ5DO.js → chunk-FWR5BZYR.js} +2 -2
  19. package/dist/{chunk-XD5NTTFJ.js → chunk-HXAOFFZJ.js} +2 -2
  20. package/dist/{chunk-4OJSSUEU.js → chunk-JRYR2EA5.js} +4 -4
  21. package/dist/{chunk-CXC3ROXQ.js → chunk-JZ6KUUDY.js} +34 -17
  22. package/dist/chunk-JZ6KUUDY.js.map +1 -0
  23. package/dist/{chunk-RJMCV7OR.js → chunk-M2VRYG7U.js} +18 -6
  24. package/dist/chunk-M2VRYG7U.js.map +1 -0
  25. package/dist/{chunk-FHCARLIO.js → chunk-RAO2PI3T.js} +4 -4
  26. package/dist/{chunk-STOGLKFA.js → chunk-RTKIOE4R.js} +1594 -1543
  27. package/dist/chunk-RTKIOE4R.js.map +1 -0
  28. package/dist/{chunk-EOGTJQID.js → chunk-THRBLO2B.js} +2 -2
  29. package/dist/{chunk-GWKXYGUN.js → chunk-V2MU37VN.js} +2 -2
  30. package/dist/{chunk-ZTRTBLLP.js → chunk-VGPFDVSK.js} +3 -3
  31. package/dist/context-mention-palette/index.js +7 -7
  32. package/dist/i18n/index.d.ts +17 -5
  33. package/dist/i18n/index.js +2 -2
  34. package/dist/index.d.ts +551 -9
  35. package/dist/index.js +24 -16
  36. package/dist/index.js.map +1 -1
  37. package/dist/mention-search.js +5 -5
  38. package/dist/workbench/contribution.js +4 -4
  39. package/dist/workbench/index.js +4 -4
  40. package/dist/workbench/sessionTitle.js +2 -2
  41. package/package.json +14 -14
  42. package/dist/chunk-CX6XXG6R.js.map +0 -1
  43. package/dist/chunk-CXC3ROXQ.js.map +0 -1
  44. package/dist/chunk-GJZEMI6Z.js.map +0 -1
  45. package/dist/chunk-RJMCV7OR.js.map +0 -1
  46. package/dist/chunk-STOGLKFA.js.map +0 -1
  47. /package/dist/{AgentRichTextReadonly-YU6STDUX.js.map → AgentRichTextReadonly-DFWY2WYO.js.map} +0 -0
  48. /package/dist/{chunk-JXFOFJYI.js.map → chunk-5RZVXSQQ.js.map} +0 -0
  49. /package/dist/{chunk-VDTG6M6K.js.map → chunk-6LXC5BME.js.map} +0 -0
  50. /package/dist/{chunk-UEBPMWKS.js.map → chunk-CKUR2VKA.js.map} +0 -0
  51. /package/dist/{chunk-X5V6P2EB.js.map → chunk-DKRX5IZS.js.map} +0 -0
  52. /package/dist/{chunk-K5AOJ5DO.js.map → chunk-FWR5BZYR.js.map} +0 -0
  53. /package/dist/{chunk-XD5NTTFJ.js.map → chunk-HXAOFFZJ.js.map} +0 -0
  54. /package/dist/{chunk-4OJSSUEU.js.map → chunk-JRYR2EA5.js.map} +0 -0
  55. /package/dist/{chunk-FHCARLIO.js.map → chunk-RAO2PI3T.js.map} +0 -0
  56. /package/dist/{chunk-EOGTJQID.js.map → chunk-THRBLO2B.js.map} +0 -0
  57. /package/dist/{chunk-GWKXYGUN.js.map → chunk-V2MU37VN.js.map} +0 -0
  58. /package/dist/{chunk-ZTRTBLLP.js.map → chunk-VGPFDVSK.js.map} +0 -0
package/dist/index.js CHANGED
@@ -1,6 +1,10 @@
1
1
  import {
2
2
  AgentGUI,
3
+ AgentGUIAccountAvatar,
4
+ AgentGUIAccountMenu,
5
+ AgentGUIAccountRewardToast,
3
6
  AgentHandoffMenu,
7
+ agentGUIAccountInitials,
4
8
  agentGUIDefaultTargetProviders,
5
9
  createAgentStatusController,
6
10
  createLocalAgentGUIAgentTarget,
@@ -10,7 +14,7 @@ import {
10
14
  normalizeAgentGUIAgentTargets,
11
15
  resolveAgentGUIAgentTarget,
12
16
  selectAgentStatusControllerSnapshot
13
- } from "./chunk-STOGLKFA.js";
17
+ } from "./chunk-RTKIOE4R.js";
14
18
  import {
15
19
  AGENT_CONVERSATION_RAIL_RUNTIME_METHODS,
16
20
  createAgentConversationRailRuntime,
@@ -23,38 +27,38 @@ import {
23
27
  AGENT_GUI_STANDALONE_AUTO_COLLAPSE_WIDTH_PX,
24
28
  resolveAgentGUIExpandedWindowFrame,
25
29
  shouldAutoCollapseAgentGUIConversationRail
26
- } from "./chunk-X5V6P2EB.js";
30
+ } from "./chunk-DKRX5IZS.js";
27
31
  import "./chunk-KDN6SLJM.js";
28
32
  import "./chunk-4CHBM3G3.js";
29
33
  import "./chunk-CBMWHQ7P.js";
30
34
  import "./chunk-MGSRWYRN.js";
31
- import "./chunk-GWKXYGUN.js";
32
- import "./chunk-GJZEMI6Z.js";
33
- import "./chunk-XD5NTTFJ.js";
34
- import "./chunk-CXC3ROXQ.js";
35
+ import "./chunk-V2MU37VN.js";
36
+ import "./chunk-CCFYCSBK.js";
37
+ import "./chunk-HXAOFFZJ.js";
38
+ import "./chunk-JZ6KUUDY.js";
35
39
  import "./chunk-UP3ZDYTN.js";
36
40
  import "./chunk-GUFEHWUX.js";
37
- import "./chunk-VDTG6M6K.js";
41
+ import "./chunk-6LXC5BME.js";
38
42
  import {
39
43
  agentGUIAgentIsReady,
40
44
  normalizeAgentGUIAgents,
41
45
  projectAgentGUIAgentsToTargets,
42
46
  resolveAgentGUISelectedDirectoryAgent
43
- } from "./chunk-CX6XXG6R.js";
47
+ } from "./chunk-3MVSOLX3.js";
44
48
  import {
45
49
  agentGuiDockIconUrl,
46
50
  agentGuiDockIconUrls
47
51
  } from "./chunk-G7DS23D4.js";
48
52
  import {
49
53
  preloadAgentMentionBrowse
50
- } from "./chunk-4OJSSUEU.js";
54
+ } from "./chunk-JRYR2EA5.js";
51
55
  import "./chunk-VMPA46ET.js";
52
56
  import "./chunk-XJ34OIEQ.js";
53
57
  import "./chunk-JDVP33S5.js";
54
58
  import {
55
59
  createAgentSessionHandoffPrompt,
56
60
  createAgentSessionMarkdownLink
57
- } from "./chunk-JXFOFJYI.js";
61
+ } from "./chunk-5RZVXSQQ.js";
58
62
  import "./chunk-3V5OCA2M.js";
59
63
  import {
60
64
  AGENT_CONTEXT_MENTION_PROVIDER_IDS
@@ -66,13 +70,13 @@ import {
66
70
  import {
67
71
  dispatchAgentPlanPromptAction,
68
72
  selectAgentPlanPromptTurn
69
- } from "./chunk-FHCARLIO.js";
73
+ } from "./chunk-RAO2PI3T.js";
70
74
  import {
71
75
  useEngineSelector
72
76
  } from "./chunk-EVQ4JY3N.js";
73
- import "./chunk-ZTRTBLLP.js";
77
+ import "./chunk-VGPFDVSK.js";
74
78
  import "./chunk-ZVYUTXQJ.js";
75
- import "./chunk-UEBPMWKS.js";
79
+ import "./chunk-CKUR2VKA.js";
76
80
  import "./chunk-YMXYBG7U.js";
77
81
  import {
78
82
  AgentActivityHostProvider,
@@ -82,17 +86,17 @@ import {
82
86
  useAgentActivityRuntime,
83
87
  useAgentActivitySnapshot,
84
88
  useOptionalAgentActivityRuntime
85
- } from "./chunk-K5AOJ5DO.js";
89
+ } from "./chunk-FWR5BZYR.js";
86
90
  import "./chunk-F5UR6EJG.js";
87
91
  import "./chunk-M6HTOCQK.js";
88
92
  import {
89
93
  AgentGuiI18nProvider,
90
94
  agentGuiI18nModule,
91
95
  agentGuiI18nResources
92
- } from "./chunk-EOGTJQID.js";
96
+ } from "./chunk-THRBLO2B.js";
93
97
  import "./chunk-5BJYO6X3.js";
94
98
  import "./chunk-AFUVWWQY.js";
95
- import "./chunk-RJMCV7OR.js";
99
+ import "./chunk-M2VRYG7U.js";
96
100
  import "./chunk-MIJXEELH.js";
97
101
  import {
98
102
  getAgentCustomMentionKind,
@@ -118,8 +122,12 @@ export {
118
122
  AgentActivityHostProvider,
119
123
  AgentActivityRuntimeProvider,
120
124
  AgentGUI,
125
+ AgentGUIAccountAvatar,
126
+ AgentGUIAccountMenu,
127
+ AgentGUIAccountRewardToast,
121
128
  AgentGuiI18nProvider,
122
129
  AgentHandoffMenu,
130
+ agentGUIAccountInitials,
123
131
  agentGUIAgentIsReady,
124
132
  agentGUIDefaultTargetProviders,
125
133
  agentGuiDockIconUrl,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../index.ts"],"sourcesContent":["export {\n getAgentCustomMentionKind,\n registerAgentCustomMentionKind,\n resetAgentCustomMentionKindsForTests,\n type AgentCustomMentionChipContext,\n type AgentCustomMentionIdentity,\n type AgentCustomMentionKindDefinition,\n type AgentCustomMentionPresentation\n} from \"./shared/agentCustomMentionKinds\";\nexport {\n AGENT_PASTED_TEXT_BLOCK_KIND,\n AGENT_PASTED_TEXT_MENTION_KIND\n} from \"./shared/pastedTextKinds\";\nexport { AgentGUI } from \"./AgentGUI\";\nexport type {\n AgentGUIProps,\n AgentGUIReferenceProvenanceFilterCatalog\n} from \"./AgentGUI\";\nexport type {\n TuttiModePlanAssignmentAgentDetail,\n TuttiModePlanAssignmentAgentOption,\n TuttiModePlanAssignmentOptionsSource,\n TuttiModePlanReviewSnapshot,\n TuttiModePlanReviewRuntime,\n TuttiModePlanTaskAssignmentInput,\n TuttiPlanIssueMaterializationFailure,\n TuttiPlanIssueQueryResult,\n TuttiPlanIssueSnapshot,\n TuttiPlanIssueSource,\n TuttiPlanIssueTaskSnapshot\n} from \"./workspaceWorkflow\";\nexport type { AgentGUIComposerAppendRequest } from \"./agent-gui/agentGuiNode/controller/useAgentGUIComposerAppendRequest\";\nexport {\n createAgentStatusController,\n selectAgentStatusControllerSnapshot,\n type AgentStatusController,\n type AgentStatusControllerOptions,\n type AgentStatusControllerSnapshot,\n type AgentStatusFrame,\n type AgentStatusQuery,\n type AgentStatusRequestPhase,\n type AgentStatusRequestReason,\n type AgentStatusSelectionKey,\n type AgentStatusSectionState,\n type AgentStatusSource,\n type AgentStatusSourceError,\n type AgentStatusStreamObserver,\n type AgentStatusValue\n} from \"./agent-gui/agentGuiNode/controller/AgentStatusController\";\nexport {\n AgentHandoffMenu,\n type AgentHandoffMenuLabels,\n type AgentHandoffMenuProps\n} from \"./agent-gui/agentGuiNode/composer/AgentHandoffMenu\";\nexport {\n createAgentSessionHandoffPrompt,\n createAgentSessionMarkdownLink\n} from \"./agent-gui/agentGuiNode/agentRichText/agentMentionMarkdown\";\nexport type {\n CreateAgentSessionHandoffPromptInput,\n CreateAgentSessionMarkdownLinkInput\n} from \"./agent-gui/agentGuiNode/agentRichText/agentMentionMarkdown\";\nexport type { AgentComposerDraftFile } from \"./agent-gui/agentGuiNode/model/agentGuiNodeTypes\";\nexport type {\n AgentExternalPromptFilePreparationErrorCode,\n AgentExternalPromptFilePreparationResult,\n AgentExternalPromptFilePreparer,\n AgentPreparedExternalPromptFile\n} from \"./agent-gui/agentGuiNode/model/agentExternalPromptFiles\";\nexport type {\n AgentExternalPromptEntryResolution,\n AgentExternalPromptEntryResolver\n} from \"./agent-gui/agentGuiNode/model/agentExternalPromptEntries\";\nexport type { AgentGUIAccountMenuState } from \"./agent-gui/agentGuiNode/accountMenuState\";\nexport type {\n AgentGUIComposerContentType,\n AgentGUIComposerFocusMethod,\n AgentGUIEngagementContext,\n AgentGUIEngagementEvent,\n AgentGUIEngagementEventSink\n} from \"./agent-gui/agentGuiNode/engagement/agentGUIEngagement.types\";\nexport {\n agentGUIAgentIsReady,\n normalizeAgentGUIAgents,\n projectAgentGUIAgentsToTargets,\n resolveAgentGUISelectedDirectoryAgent\n} from \"./agents\";\nexport {\n agentGUIDefaultTargetProviders,\n createLocalAgentGUIAgentTarget,\n createLocalAgentGUIAgentTargets,\n createSharedAgentGUIAgentTarget,\n localAgentGUIAgentTargetId,\n normalizeAgentGUIAgentTargets,\n resolveAgentGUIAgentTarget\n} from \"./agentTargets\";\nexport type {\n AgentGUIAgent,\n AgentGUIAgentDirectoryPort,\n AgentGUIAgentDirectorySnapshot,\n AgentGUIAgentDirectoryStatus,\n AgentGUIAgentAvailability,\n AgentGUIAgentAvailabilityAction,\n AgentGUIAgentAvailabilityStatus,\n AgentGUIAgentOwner,\n AgentGUIAgentOwnership,\n AgentGUIHomeSuggestionId,\n AgentGUIAllAgentsPresentation,\n AgentGUIProvider,\n AgentGUIProviderRailAllPresentation,\n AgentGUIProviderRailMode,\n AgentGUIProviderReadinessGate,\n AgentGUIProviderReadinessGateAction,\n AgentGUIProviderReadinessGateStatus,\n AgentGUITargetConnectionSource,\n AgentGUITargetConnectionState,\n AgentGUITargetConnectionStatus,\n AgentGUIAgentTarget,\n AgentGUIAgentTargetBadge,\n AgentGUIAgentTargetRef\n} from \"./types\";\nexport {\n AgentGuiI18nProvider,\n agentGuiI18nModule,\n agentGuiI18nResources\n} from \"./i18n/index\";\nexport type { AgentGuiI18nLocale } from \"./i18n/index\";\nexport { agentGuiDockIconUrl, agentGuiDockIconUrls } from \"./dockIcons\";\nexport {\n AGENT_GUI_DETAIL_MIN_WIDTH_PX,\n AGENT_GUI_EXPANDED_TARGET_WIDTH_PX,\n AGENT_GUI_STANDALONE_AUTO_COLLAPSE_WIDTH_PX,\n resolveAgentGUIExpandedWindowFrame,\n shouldAutoCollapseAgentGUIConversationRail\n} from \"./agent-gui/agentGuiNode/model/agentGuiRailLayout\";\nexport type {\n AgentGUIAgentsEmptyRenderer,\n AgentGUIConversationRailLayout,\n AgentGUIProviderUnavailableStateContext,\n AgentGUIProviderUnavailableStateRenderer,\n AgentGUISidebarFooterContext,\n AgentGUISidebarFooterRenderer\n} from \"./agent-gui/agentGuiNode/AgentGUINodeView\";\nexport {\n AGENT_CONTEXT_MENTION_PROVIDER_IDS,\n type AgentContextMentionProviderId,\n type AgentContextMentionProvider\n} from \"./agent-gui/agentGuiNode/agentContextMentionProvider\";\nexport { preloadAgentMentionBrowse } from \"./agent-gui/agentGuiNode/AgentMentionSearchController\";\nexport { AgentActivityHostProvider } from \"./agentActivityHost\";\nexport type { AgentActivityHostProviderProps } from \"./agentActivityHost\";\nexport { useEngineSelector } from \"./shared/engine/useEngineSelector\";\nexport type { EngineStateStore } from \"./shared/engine/useEngineSelector\";\nexport {\n dispatchAgentPlanPromptAction,\n selectAgentPlanPromptTurn\n} from \"./shared/agentConversation/agentPlanPromptDispatch\";\nexport type { AgentPlanPromptAction } from \"./shared/agentConversation/agentPlanPromptDispatch\";\nexport {\n AgentActivityRuntimeProvider,\n resetAgentActivityRuntimeForTests,\n setAgentActivityRuntimeForTests,\n useAgentActivitySnapshot,\n useAgentActivityRuntime,\n useOptionalAgentActivityRuntime\n} from \"./agentActivityRuntime\";\nexport type {\n AgentActivityRuntime,\n AgentActivityRuntimeListSessionMessagesInput,\n AgentActivityRuntimeProviderProps,\n AgentActivityRuntimePromptContentBlock,\n AgentActivityRuntimeDeleteSessionsBatchInput,\n AgentActivityRuntimeDeleteSessionsBatchResult,\n AgentActivityRuntimeSessionSectionDeletionCandidates,\n AgentActivityRuntimeSessionSectionScopeInput,\n AgentActivityRuntimeSetSessionPinnedInput,\n AgentActivityRuntimeUploadPromptContentInput,\n AgentActivityRuntimeUploadPromptContentResult,\n AgentActivityRuntimeUpdateSessionSettingsInput,\n AgentActivityRuntimeUpdateSessionSettingsResult\n} from \"./agentActivityRuntime\";\nexport {\n AGENT_CONVERSATION_RAIL_RUNTIME_METHODS,\n createAgentConversationRailRuntime,\n inspectAgentConversationBatchDeletionCapability\n} from \"./agentConversationRailRuntime\";\nexport type {\n AgentConversationBatchDeletionCapability,\n AgentConversationRailRuntime,\n AgentConversationRailRuntimeSource\n} from \"./agentConversationRailRuntime\";\nexport type {\n AgentHostApi,\n AgentHostAgentTargetAuthenticatedAccount,\n AgentHostAgentTargetSetupSnapshot,\n AgentHostAgentTargetSetupState,\n AgentHostAgentTargetSetupWatch,\n AgentHostApplyWorkspaceGitPatchInput,\n AgentHostInputApi,\n AgentHostQuickPrompt,\n AgentHostQuickPromptSnapshot,\n AgentHostQuickPromptsApi,\n AgentHostSelectFilesInput,\n AgentHostRuntimeApi,\n AgentHostUserProject,\n AgentProviderProbeListInput,\n AgentProviderProbeListResult\n} from \"./host/agentHostApi\";\nexport type {\n AgentProbeProvider,\n AgentProbeSnapshot,\n PersistWriteResult,\n ReadWorkspaceAgentReadStateInput,\n AgentUsageQuota,\n AgentUsageSnapshot,\n WorkspaceAgentReadStateSnapshot,\n WriteWorkspaceAgentReadStateInput\n} from \"./shared/contracts/dto\";\nexport {\n selectNeedsAttentionCount,\n selectNeedsAttentionItems\n} from \"@tutti-os/agent-activity-core\";\nexport type {\n AgentActivityAdapter,\n AgentActivityMessage,\n AgentActivityNeedsAttentionItem,\n AgentActivitySnapshot\n} from \"@tutti-os/agent-activity-core\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0NA;AAAA,EACE;AAAA,EACA;AAAA,OACK;","names":[]}
1
+ {"version":3,"sources":["../index.ts"],"sourcesContent":["export {\n getAgentCustomMentionKind,\n registerAgentCustomMentionKind,\n resetAgentCustomMentionKindsForTests,\n type AgentCustomMentionChipContext,\n type AgentCustomMentionIdentity,\n type AgentCustomMentionKindDefinition,\n type AgentCustomMentionPresentation\n} from \"./shared/agentCustomMentionKinds\";\nexport {\n AGENT_PASTED_TEXT_BLOCK_KIND,\n AGENT_PASTED_TEXT_MENTION_KIND\n} from \"./shared/pastedTextKinds\";\nexport { AgentGUI } from \"./AgentGUI\";\nexport type {\n AgentGUIProps,\n AgentGUIReferenceProvenanceFilterCatalog\n} from \"./AgentGUI\";\nexport type {\n TuttiModePlanAssignmentAgentDetail,\n TuttiModePlanAssignmentAgentOption,\n TuttiModePlanAssignmentOptionsSource,\n TuttiModePlanReviewSnapshot,\n TuttiModePlanReviewRuntime,\n TuttiModePlanTaskAssignmentInput,\n TuttiPlanIssueMaterializationFailure,\n TuttiPlanIssueQueryResult,\n TuttiPlanIssueSnapshot,\n TuttiPlanIssueSource,\n TuttiPlanIssueTaskSnapshot\n} from \"./workspaceWorkflow\";\nexport type { AgentGUIComposerAppendRequest } from \"./agent-gui/agentGuiNode/controller/useAgentGUIComposerAppendRequest\";\nexport {\n createAgentStatusController,\n selectAgentStatusControllerSnapshot,\n type AgentStatusController,\n type AgentStatusControllerOptions,\n type AgentStatusControllerSnapshot,\n type AgentStatusFrame,\n type AgentStatusQuery,\n type AgentStatusRequestPhase,\n type AgentStatusRequestReason,\n type AgentStatusSelectionKey,\n type AgentStatusSectionState,\n type AgentStatusSource,\n type AgentStatusSourceError,\n type AgentStatusStreamObserver,\n type AgentStatusValue\n} from \"./agent-gui/agentGuiNode/controller/AgentStatusController\";\nexport {\n AgentHandoffMenu,\n type AgentHandoffMenuLabels,\n type AgentHandoffMenuProps\n} from \"./agent-gui/agentGuiNode/composer/AgentHandoffMenu\";\nexport {\n createAgentSessionHandoffPrompt,\n createAgentSessionMarkdownLink\n} from \"./agent-gui/agentGuiNode/agentRichText/agentMentionMarkdown\";\nexport type {\n CreateAgentSessionHandoffPromptInput,\n CreateAgentSessionMarkdownLinkInput\n} from \"./agent-gui/agentGuiNode/agentRichText/agentMentionMarkdown\";\nexport type { AgentComposerDraftFile } from \"./agent-gui/agentGuiNode/model/agentGuiNodeTypes\";\nexport type {\n AgentExternalPromptFilePreparationErrorCode,\n AgentExternalPromptFilePreparationResult,\n AgentExternalPromptFilePreparer,\n AgentPreparedExternalPromptFile\n} from \"./agent-gui/agentGuiNode/model/agentExternalPromptFiles\";\nexport type {\n AgentExternalPromptEntryResolution,\n AgentExternalPromptEntryResolver\n} from \"./agent-gui/agentGuiNode/model/agentExternalPromptEntries\";\nexport type {\n AgentGUIAccountMenuState,\n AgentGUIMembershipAccessState\n} from \"./agent-gui/agentGuiNode/accountMenuState\";\nexport {\n AgentGUIAccountAvatar,\n AgentGUIAccountMenu,\n agentGUIAccountInitials,\n type AgentGUIAccountMenuLabels,\n type AgentGUIAccountMenuProps\n} from \"./agent-gui/agentGuiNode/view/AgentGUIAccountMenu\";\nexport { AgentGUIAccountRewardToast } from \"./agent-gui/agentGuiNode/view/AgentGUIAccountConfig\";\nexport type { AgentGUICommercePresentation } from \"./shared/commerce/AgentCommercePresentationContext\";\nexport type {\n AgentGUIComposerContentType,\n AgentGUIComposerFocusMethod,\n AgentGUIEngagementContext,\n AgentGUIEngagementEvent,\n AgentGUIEngagementEventSink\n} from \"./agent-gui/agentGuiNode/engagement/agentGUIEngagement.types\";\nexport {\n agentGUIAgentIsReady,\n normalizeAgentGUIAgents,\n projectAgentGUIAgentsToTargets,\n resolveAgentGUISelectedDirectoryAgent\n} from \"./agents\";\nexport {\n agentGUIDefaultTargetProviders,\n createLocalAgentGUIAgentTarget,\n createLocalAgentGUIAgentTargets,\n createSharedAgentGUIAgentTarget,\n localAgentGUIAgentTargetId,\n normalizeAgentGUIAgentTargets,\n resolveAgentGUIAgentTarget\n} from \"./agentTargets\";\nexport type {\n AgentGUIAgent,\n AgentGUIAgentDirectoryPort,\n AgentGUIAgentDirectorySnapshot,\n AgentGUIAgentDirectoryStatus,\n AgentGUIAgentAvailability,\n AgentGUIAgentAvailabilityAction,\n AgentGUIAgentAvailabilityStatus,\n AgentGUIAgentOwner,\n AgentGUIAgentOwnership,\n AgentGUIHomeSuggestionId,\n AgentGUIAllAgentsPresentation,\n AgentGUIProvider,\n AgentGUIProviderRailAllPresentation,\n AgentGUIProviderRailMode,\n AgentGUIProviderReadinessGate,\n AgentGUIProviderReadinessGateAction,\n AgentGUIProviderReadinessGateStatus,\n AgentGUITargetConnectionSource,\n AgentGUITargetConnectionState,\n AgentGUITargetConnectionStatus,\n AgentGUIAgentTarget,\n AgentGUIAgentTargetBadge,\n AgentGUIAgentTargetRef\n} from \"./types\";\nexport {\n AgentGuiI18nProvider,\n agentGuiI18nModule,\n agentGuiI18nResources\n} from \"./i18n/index\";\nexport type { AgentGuiI18nLocale } from \"./i18n/index\";\nexport { agentGuiDockIconUrl, agentGuiDockIconUrls } from \"./dockIcons\";\nexport {\n AGENT_GUI_DETAIL_MIN_WIDTH_PX,\n AGENT_GUI_EXPANDED_TARGET_WIDTH_PX,\n AGENT_GUI_STANDALONE_AUTO_COLLAPSE_WIDTH_PX,\n resolveAgentGUIExpandedWindowFrame,\n shouldAutoCollapseAgentGUIConversationRail\n} from \"./agent-gui/agentGuiNode/model/agentGuiRailLayout\";\nexport type {\n AgentGUIAgentsEmptyRenderer,\n AgentGUIConversationRailLayout,\n AgentGUIProviderUnavailableStateContext,\n AgentGUIProviderUnavailableStateRenderer,\n AgentGUISidebarFooterContext,\n AgentGUISidebarFooterRenderer\n} from \"./agent-gui/agentGuiNode/AgentGUINodeView\";\nexport {\n AGENT_CONTEXT_MENTION_PROVIDER_IDS,\n type AgentContextMentionProviderId,\n type AgentContextMentionProvider\n} from \"./agent-gui/agentGuiNode/agentContextMentionProvider\";\nexport { preloadAgentMentionBrowse } from \"./agent-gui/agentGuiNode/AgentMentionSearchController\";\nexport { AgentActivityHostProvider } from \"./agentActivityHost\";\nexport type { AgentActivityHostProviderProps } from \"./agentActivityHost\";\nexport { useEngineSelector } from \"./shared/engine/useEngineSelector\";\nexport type { EngineStateStore } from \"./shared/engine/useEngineSelector\";\nexport {\n dispatchAgentPlanPromptAction,\n selectAgentPlanPromptTurn\n} from \"./shared/agentConversation/agentPlanPromptDispatch\";\nexport type { AgentPlanPromptAction } from \"./shared/agentConversation/agentPlanPromptDispatch\";\nexport {\n AgentActivityRuntimeProvider,\n resetAgentActivityRuntimeForTests,\n setAgentActivityRuntimeForTests,\n useAgentActivitySnapshot,\n useAgentActivityRuntime,\n useOptionalAgentActivityRuntime\n} from \"./agentActivityRuntime\";\nexport type {\n AgentActivityRuntime,\n AgentActivityRuntimeListSessionMessagesInput,\n AgentActivityRuntimeProviderProps,\n AgentActivityRuntimePromptContentBlock,\n AgentActivityRuntimeDeleteSessionsBatchInput,\n AgentActivityRuntimeDeleteSessionsBatchResult,\n AgentActivityRuntimeSessionSectionDeletionCandidates,\n AgentActivityRuntimeSessionSectionScopeInput,\n AgentActivityRuntimeSetSessionPinnedInput,\n AgentActivityRuntimeUploadPromptContentInput,\n AgentActivityRuntimeUploadPromptContentResult,\n AgentActivityRuntimeUpdateSessionSettingsInput,\n AgentActivityRuntimeUpdateSessionSettingsResult\n} from \"./agentActivityRuntime\";\nexport {\n AGENT_CONVERSATION_RAIL_RUNTIME_METHODS,\n createAgentConversationRailRuntime,\n inspectAgentConversationBatchDeletionCapability\n} from \"./agentConversationRailRuntime\";\nexport type {\n AgentConversationBatchDeletionCapability,\n AgentConversationRailRuntime,\n AgentConversationRailRuntimeSource\n} from \"./agentConversationRailRuntime\";\nexport type {\n AgentHostApi,\n AgentHostAgentTargetAuthenticatedAccount,\n AgentHostAgentTargetSetupSnapshot,\n AgentHostAgentTargetSetupState,\n AgentHostAgentTargetSetupWatch,\n AgentHostApplyWorkspaceGitPatchInput,\n AgentHostInputApi,\n AgentHostQuickPrompt,\n AgentHostQuickPromptSnapshot,\n AgentHostQuickPromptsApi,\n AgentHostSelectFilesInput,\n AgentHostRuntimeApi,\n AgentHostUserProject,\n AgentProviderProbeListInput,\n AgentProviderProbeListResult\n} from \"./host/agentHostApi\";\nexport type {\n AgentProbeProvider,\n AgentProbeSnapshot,\n PersistWriteResult,\n ReadWorkspaceAgentReadStateInput,\n AgentUsageQuota,\n AgentUsageSnapshot,\n WorkspaceAgentReadStateSnapshot,\n WriteWorkspaceAgentReadStateInput\n} from \"./shared/contracts/dto\";\nexport {\n selectNeedsAttentionCount,\n selectNeedsAttentionItems\n} from \"@tutti-os/agent-activity-core\";\nexport type {\n AgentActivityAdapter,\n AgentActivityMessage,\n AgentActivityNeedsAttentionItem,\n AgentActivitySnapshot\n} from \"@tutti-os/agent-activity-core\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsOA;AAAA,EACE;AAAA,EACA;AAAA,OACK;","names":[]}
@@ -3,22 +3,22 @@ import {
3
3
  MAX_BROWSE_CACHE_ENTRIES,
4
4
  preloadAgentMentionBrowse,
5
5
  resetAgentMentionSearchBrowseCacheForTests
6
- } from "./chunk-4OJSSUEU.js";
6
+ } from "./chunk-JRYR2EA5.js";
7
7
  import "./chunk-VMPA46ET.js";
8
8
  import "./chunk-XJ34OIEQ.js";
9
9
  import "./chunk-JDVP33S5.js";
10
- import "./chunk-JXFOFJYI.js";
10
+ import "./chunk-5RZVXSQQ.js";
11
11
  import "./chunk-3V5OCA2M.js";
12
12
  import "./chunk-RMQREVJY.js";
13
13
  import "./chunk-FGLQZ6I4.js";
14
14
  import "./chunk-YMXYBG7U.js";
15
- import "./chunk-K5AOJ5DO.js";
15
+ import "./chunk-FWR5BZYR.js";
16
16
  import "./chunk-F5UR6EJG.js";
17
17
  import "./chunk-M6HTOCQK.js";
18
- import "./chunk-EOGTJQID.js";
18
+ import "./chunk-THRBLO2B.js";
19
19
  import "./chunk-5BJYO6X3.js";
20
20
  import "./chunk-AFUVWWQY.js";
21
- import "./chunk-RJMCV7OR.js";
21
+ import "./chunk-M2VRYG7U.js";
22
22
  import "./chunk-MIJXEELH.js";
23
23
  import "./chunk-D2JUDUYY.js";
24
24
  import "./chunk-QNE2ZPPV.js";
@@ -18,17 +18,17 @@ import {
18
18
  resolveAgentGuiUnifiedDockLaunchPayload,
19
19
  resolveAgentGuiWorkbenchContributionCopy,
20
20
  resolveAgentGuiWorkbenchDefaultLaunchFrame
21
- } from "../chunk-X5V6P2EB.js";
21
+ } from "../chunk-DKRX5IZS.js";
22
22
  import "../chunk-KDN6SLJM.js";
23
23
  import "../chunk-4CHBM3G3.js";
24
24
  import "../chunk-CBMWHQ7P.js";
25
25
  import "../chunk-MGSRWYRN.js";
26
- import "../chunk-GWKXYGUN.js";
27
- import "../chunk-CX6XXG6R.js";
26
+ import "../chunk-V2MU37VN.js";
27
+ import "../chunk-3MVSOLX3.js";
28
28
  import "../chunk-G7DS23D4.js";
29
29
  import "../chunk-EVQ4JY3N.js";
30
30
  import "../chunk-AFUVWWQY.js";
31
- import "../chunk-RJMCV7OR.js";
31
+ import "../chunk-M2VRYG7U.js";
32
32
  import "../chunk-MIJXEELH.js";
33
33
  import "../chunk-QNE2ZPPV.js";
34
34
  import "../chunk-O433KXLK.js";
@@ -14,7 +14,7 @@ import {
14
14
  resolveAgentGuiUnifiedDockLaunchPayload,
15
15
  resolveAgentGuiWorkbenchContributionCopy,
16
16
  resolveAgentGuiWorkbenchConversationIdentity
17
- } from "../chunk-X5V6P2EB.js";
17
+ } from "../chunk-DKRX5IZS.js";
18
18
  import {
19
19
  areAgentGuiWorkbenchNodeStatesEqual,
20
20
  areAgentGuiWorkbenchStatesEqual,
@@ -56,12 +56,12 @@ import {
56
56
  import {
57
57
  resolveAgentGuiWorkbenchHeaderTitle,
58
58
  resolveAgentGuiWorkbenchSessionTitle
59
- } from "../chunk-GWKXYGUN.js";
60
- import "../chunk-CX6XXG6R.js";
59
+ } from "../chunk-V2MU37VN.js";
60
+ import "../chunk-3MVSOLX3.js";
61
61
  import "../chunk-G7DS23D4.js";
62
62
  import "../chunk-EVQ4JY3N.js";
63
63
  import "../chunk-AFUVWWQY.js";
64
- import "../chunk-RJMCV7OR.js";
64
+ import "../chunk-M2VRYG7U.js";
65
65
  import "../chunk-MIJXEELH.js";
66
66
  import "../chunk-QNE2ZPPV.js";
67
67
  import "../chunk-O433KXLK.js";
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  resolveAgentGuiWorkbenchHeaderTitle,
3
3
  resolveAgentGuiWorkbenchSessionTitle
4
- } from "../chunk-GWKXYGUN.js";
5
- import "../chunk-RJMCV7OR.js";
4
+ } from "../chunk-V2MU37VN.js";
5
+ import "../chunk-M2VRYG7U.js";
6
6
  import "../chunk-MIJXEELH.js";
7
7
  import "../chunk-O433KXLK.js";
8
8
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tutti-os/agent-gui",
3
- "version": "0.0.205",
3
+ "version": "0.0.206",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -143,19 +143,19 @@
143
143
  "dependencies": {
144
144
  "@monaco-editor/react": "^4.7.0",
145
145
  "@tanstack/react-virtual": "^3.13.12",
146
- "@tutti-os/agent-activity-core": "0.0.205",
147
- "@tutti-os/browser-node": "0.0.205",
148
- "@tutti-os/ui-i18n-runtime": "0.0.205",
149
- "@tutti-os/ui-react-hooks": "0.0.205",
150
- "@tutti-os/ui-rich-text": "0.0.205",
151
- "@tutti-os/ui-system": "0.0.205",
152
- "@tutti-os/workbench-surface": "0.0.205",
153
- "@tutti-os/workspace-external-core": "0.0.205",
154
- "@tutti-os/workspace-file-manager": "0.0.205",
155
- "@tutti-os/workspace-file-preview": "0.0.205",
156
- "@tutti-os/workspace-file-reference": "0.0.205",
157
- "@tutti-os/workspace-issue-manager": "0.0.205",
158
- "@tutti-os/workspace-user-project": "0.0.205",
146
+ "@tutti-os/agent-activity-core": "0.0.206",
147
+ "@tutti-os/browser-node": "0.0.206",
148
+ "@tutti-os/ui-i18n-runtime": "0.0.206",
149
+ "@tutti-os/ui-react-hooks": "0.0.206",
150
+ "@tutti-os/ui-rich-text": "0.0.206",
151
+ "@tutti-os/ui-system": "0.0.206",
152
+ "@tutti-os/workbench-surface": "0.0.206",
153
+ "@tutti-os/workspace-external-core": "0.0.206",
154
+ "@tutti-os/workspace-file-manager": "0.0.206",
155
+ "@tutti-os/workspace-file-preview": "0.0.206",
156
+ "@tutti-os/workspace-file-reference": "0.0.206",
157
+ "@tutti-os/workspace-issue-manager": "0.0.206",
158
+ "@tutti-os/workspace-user-project": "0.0.206",
159
159
  "clsx": "^2.1.1",
160
160
  "framer-motion": "^12.40.0",
161
161
  "lodash": "^4.17.21",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../agents.ts"],"sourcesContent":["import type {\n AgentGUIAgent,\n AgentGUIAgentAvailabilityStatus,\n AgentGUIAgentTarget\n} from \"./types.ts\";\n\nexport function normalizeAgentGUIAgents(\n agents: readonly AgentGUIAgent[] | null | undefined\n): AgentGUIAgent[] {\n const normalized: AgentGUIAgent[] = [];\n const seenAgentTargetIds = new Set<string>();\n for (const agent of agents ?? []) {\n const agentTargetId = agent.agentTargetId.trim();\n const name = agent.name.trim();\n const iconUrl = agent.iconUrl.trim();\n const maskIconUrl = agent.maskIconUrl?.trim() ?? \"\";\n const heroImageUrl = agent.heroImageUrl?.trim() ?? \"\";\n const ownerDeviceLabel = agent.ownerDeviceLabel?.trim() ?? \"\";\n if (\n !agentTargetId ||\n !name ||\n !iconUrl ||\n seenAgentTargetIds.has(agentTargetId)\n ) {\n continue;\n }\n seenAgentTargetIds.add(agentTargetId);\n const ownerName = agent.owner?.name?.trim() ?? \"\";\n const ownerAvatarUrl = agent.owner?.avatarUrl?.trim() ?? \"\";\n const reason = agent.availability.reason?.trim() ?? \"\";\n normalized.push({\n agentTargetId,\n name,\n iconUrl,\n ...(maskIconUrl ? { maskIconUrl } : {}),\n ...(heroImageUrl ? { heroImageUrl } : {}),\n ...(agent.description?.trim()\n ? { description: agent.description.trim() }\n : {}),\n ...(ownerDeviceLabel ? { ownerDeviceLabel } : {}),\n ...(ownerName || ownerAvatarUrl\n ? {\n owner: {\n ...(ownerName ? { name: ownerName } : {}),\n ...(ownerAvatarUrl ? { avatarUrl: ownerAvatarUrl } : {})\n }\n }\n : {}),\n ...(agent.ownership === \"self\" || agent.ownership === \"shared\"\n ? { ownership: agent.ownership }\n : {}),\n availability: {\n status: normalizeAgentGUIAgentAvailabilityStatus(\n agent.availability.status\n ),\n ...(reason ? { reason } : {}),\n ...(agent.availability.pendingAction\n ? { pendingAction: agent.availability.pendingAction }\n : {})\n },\n provider: agent.provider,\n ...(agent.setupKind === \"target_runtime\"\n ? { setupKind: \"target_runtime\" as const }\n : {})\n });\n }\n return normalized;\n}\n\nexport function agentGUIAgentIsReady(agent: AgentGUIAgent): boolean {\n return agent.availability.status === \"ready\";\n}\n\nexport function resolveAgentGUISelectedDirectoryAgent(input: {\n agents: readonly AgentGUIAgent[];\n agentTargetId?: string | null;\n defaultAgentTargetId?: string | null;\n}): AgentGUIAgent | null {\n const explicitAgentTargetId =\n input.agentTargetId?.trim() || input.defaultAgentTargetId?.trim() || \"\";\n if (explicitAgentTargetId) {\n return (\n input.agents.find(\n (agent) => agent.agentTargetId === explicitAgentTargetId\n ) ?? null\n );\n }\n return (\n input.agents.find((agent) => agentGUIAgentIsReady(agent)) ??\n input.agents[0] ??\n null\n );\n}\n\n/** Projects the canonical Agent directory into target rows for selection menus. */\nexport function projectAgentGUIAgentsToTargets(\n agents: readonly AgentGUIAgent[]\n): AgentGUIAgentTarget[] {\n return agents.map((agent) => ({\n targetId: agent.agentTargetId,\n agentTargetId: agent.agentTargetId,\n provider: agent.provider,\n ref: {\n kind: \"agent-directory\",\n provider: agent.provider,\n agentTargetId: agent.agentTargetId,\n ...(agent.setupKind ? { setupKind: agent.setupKind } : {})\n },\n label: agent.name,\n availability: agent.availability,\n ...(agent.description ? { description: agent.description } : {}),\n iconUrl: agent.iconUrl,\n ...(agent.maskIconUrl ? { maskIconUrl: agent.maskIconUrl } : {}),\n ...(agent.heroImageUrl ? { heroImageUrl: agent.heroImageUrl } : {}),\n ...(agent.ownerDeviceLabel\n ? { ownerDeviceLabel: agent.ownerDeviceLabel }\n : {}),\n ...(agent.owner?.avatarUrl\n ? {\n badge: {\n iconUrl: agent.owner.avatarUrl,\n ...(agent.owner.name ? { label: agent.owner.name } : {})\n }\n }\n : {}),\n ...(agent.owner?.name ? { ownerLabel: agent.owner.name } : {}),\n ...(agent.ownership ? { ownership: agent.ownership } : {}),\n ...(agent.availability.status !== \"ready\" && !agent.setupKind\n ? { disabled: true }\n : {}),\n ...(agent.availability.reason\n ? { unavailableReason: agent.availability.reason }\n : {})\n }));\n}\n\nfunction normalizeAgentGUIAgentAvailabilityStatus(\n status: AgentGUIAgentAvailabilityStatus\n): AgentGUIAgentAvailabilityStatus {\n switch (status) {\n case \"ready\":\n case \"checking\":\n case \"coming_soon\":\n case \"not_installed\":\n case \"auth_required\":\n case \"unavailable\":\n return status;\n }\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../shared/agentEnv/agentEnvPanelActions.ts","../shared/agentEnv/agentErrorPresentation.ts","../shared/agentEnv/codexSetupContract.ts","../shared/agentEnv/agentEnvWizardFlow.ts","../shared/agentEnv/agentEnvViewModel.ts"],"sourcesContent":["import {\n createContext,\n createElement,\n useContext,\n type ReactElement,\n type ReactNode\n} from \"react\";\n\n/** Setup section requested by an AgentGUI remediation action. */\nexport type AgentEnvPanelFocus =\n | \"detect\"\n | \"install\"\n | \"repair\"\n | \"upgrade\"\n | \"auth\"\n | \"network\"\n | \"registry\";\n\nexport interface OpenAgentEnvPanelInput {\n provider?: string | null;\n focus?: AgentEnvPanelFocus | null;\n}\n\nexport type OpenAgentEnvPanelAction = (input?: OpenAgentEnvPanelInput) => void;\n\nconst AgentEnvPanelActionContext =\n createContext<OpenAgentEnvPanelAction | null>(null);\n\nexport function AgentEnvPanelActionProvider({\n children,\n openPanel\n}: {\n children: ReactNode;\n openPanel?: OpenAgentEnvPanelAction;\n}): ReactElement {\n return createElement(\n AgentEnvPanelActionContext.Provider,\n { value: openPanel ?? null },\n children\n );\n}\n\n/** Host-injected command; AgentGUI never owns the panel workflow state. */\nexport function useOpenAgentEnvPanel(): OpenAgentEnvPanelAction | null {\n return useContext(AgentEnvPanelActionContext);\n}\n","import type { AgentEnvPanelFocus } from \"./agentEnvPanelActions\";\n\n/**\n * Run-failure codes actually emitted by the daemon runtime classifier\n * (packages/agent/daemon/runtime/visible_error.go `visibleFailureCode`). These\n * are the codes the conversation error card really receives — unlike the\n * aspirational `CODEX_*` codes, which the run pipeline never produces.\n *\n * Keep this union aligned with the Go switch in `visibleFailureCode`.\n */\nexport type AgentRunErrorCode =\n | \"auth_required\"\n | \"cli_not_found\"\n | \"cli_version_unsupported\"\n | \"network_error\"\n | \"runtime_unavailable\"\n | \"request_timed_out\"\n | \"provider_config_timeout\"\n | \"provider_stream_disconnected\"\n | \"provider_concurrency_limit\"\n | \"insufficient_credits\"\n | \"quota_or_rate_limit\"\n | \"process_exited\"\n | \"provider_error\"\n | \"unknown\";\n\nexport interface AgentErrorPresentation {\n /**\n * i18n key for the one human sentence shown in the card, or null to let the\n * caller fall back to its phase-aware generic title.\n */\n messageKey: string | null;\n /**\n * Env-panel section the remediation button deep-links to, or null when the\n * failure is transient/server-side and the wizard cannot fix it — in which\n * case no call-to-action is shown (showing one would misrepresent reality).\n */\n focus: AgentEnvPanelFocus | null;\n /** i18n key for the remediation button. */\n actionKey: string | null;\n /** External remediation destination, when the action is account-level. */\n externalUrl?: string | null;\n}\n\nconst NO_CTA = { focus: null, actionKey: null } as const;\n\n// The escape hatch for hard failures whose cause is ambiguous from the message\n// alone (a non-zero exit, an unclassified provider error): send the user into\n// the wizard to self-detect, but keep the generic message.\nconst SELF_DETECT = {\n messageKey: null,\n focus: \"detect\" as const,\n actionKey: \"agentHost.agentGui.visibleErrorActionDetect\"\n};\n\nconst PRESENTATIONS: Record<AgentRunErrorCode, AgentErrorPresentation> = {\n // Environment problems the wizard can detect or repair → route to its step.\n auth_required: {\n messageKey: \"agentHost.agentGui.visibleErrorAuthRequired\",\n focus: \"auth\",\n actionKey: \"agentHost.agentGui.visibleErrorActionRelogin\"\n },\n cli_not_found: {\n messageKey: \"agentHost.agentGui.visibleErrorCliNotFound\",\n focus: \"install\",\n actionKey: \"agentHost.agentGui.visibleErrorActionInstall\"\n },\n cli_version_unsupported: {\n messageKey: \"agentHost.agentGui.visibleErrorVersionUnsupported\",\n focus: \"upgrade\",\n actionKey: \"agentHost.agentGui.visibleErrorActionUpgrade\"\n },\n network_error: {\n messageKey: \"agentHost.agentGui.visibleErrorNetwork\",\n focus: \"network\",\n actionKey: \"agentHost.agentGui.visibleErrorActionCheckNetwork\"\n },\n runtime_unavailable: {\n messageKey: \"agentHost.agentGui.visibleErrorRuntimeUnavailable\",\n focus: \"detect\",\n actionKey: \"agentHost.agentGui.visibleErrorActionDetect\"\n },\n // Transient / server-side failures: accurate copy, but no wizard CTA — it\n // cannot fix a rate limit or a dropped stream.\n request_timed_out: {\n messageKey: \"agentHost.agentGui.visibleErrorRequestTimedOut\",\n ...NO_CTA\n },\n provider_config_timeout: {\n messageKey: \"agentHost.agentGui.visibleErrorConfigTimeout\",\n ...NO_CTA\n },\n provider_stream_disconnected: {\n messageKey: \"agentHost.agentGui.visibleErrorStreamDisconnected\",\n ...NO_CTA\n },\n provider_concurrency_limit: {\n messageKey: \"agentHost.agentGui.visibleErrorConcurrencyLimit\",\n ...NO_CTA\n },\n insufficient_credits: {\n messageKey: \"agentHost.agentGui.visibleErrorInsufficientCredits\",\n focus: null,\n actionKey: \"agentHost.agentGui.visibleErrorActionViewPlans\",\n externalUrl: \"https://tutti.sh/profile/plan\"\n },\n quota_or_rate_limit: {\n messageKey: \"agentHost.agentGui.visibleErrorQuotaOrRateLimit\",\n ...NO_CTA\n },\n // Ambiguous hard failures → generic message + self-detect escape hatch.\n process_exited: SELF_DETECT,\n provider_error: SELF_DETECT,\n unknown: SELF_DETECT\n};\n\n/**\n * Resolves the card presentation for a run-failure code. Returns null for codes\n * outside the known vocabulary so the caller renders its plain generic card with\n * no call-to-action.\n */\nexport function resolveAgentErrorPresentation(\n code: string | null | undefined\n): AgentErrorPresentation | null {\n if (!code) {\n return null;\n }\n return PRESENTATIONS[code as AgentRunErrorCode] ?? null;\n}\n\nconst FAILED_MESSAGE_CODE_MARKERS: ReadonlyArray<\n readonly [AgentRunErrorCode, readonly string[]]\n> = [\n [\n \"auth_required\",\n [\n \"authentication_failed\",\n \"invalid authentication credentials\",\n \"401 invalid authentication\",\n \"unauthorized\",\n \"not logged in\",\n \"please run /login\",\n \"invalid api key\"\n ]\n ],\n [\n \"cli_version_unsupported\",\n [\"requires a newer version\", \"version is too old\", \"unsupported version\"]\n ],\n [\n \"cli_not_found\",\n [\n \"no such file or directory\",\n \"command not found\",\n \"enoent\",\n \"executable file not found\"\n ]\n ],\n [\n \"network_error\",\n [\"enotfound\", \"econnrefused\", \"econnreset\", \"getaddrinfo\", \"socket hang up\"]\n ],\n [\n \"quota_or_rate_limit\",\n [\"upgrade your plan to continue\", \"add a payment method to continue\"]\n ]\n];\n\n/**\n * Some providers (notably Claude Code) report an environment failure — e.g. a\n * dropped login (401) — as a plain failed assistant message rather than a\n * structured visibleError, so it never gets the remediation card. This recovers\n * the env-fixable code from that message's text so the caller can still route the\n * user to the wizard. Returns null when the text isn't a recognized env failure\n * (so transient/unknown failures stay plain).\n */\nexport function classifyFailedAgentMessage(\n body: string | null | undefined\n): AgentRunErrorCode | null {\n if (!body) {\n return null;\n }\n const lower = body.toLowerCase();\n for (const [code, markers] of FAILED_MESSAGE_CODE_MARKERS) {\n if (markers.some((marker) => lower.includes(marker))) {\n return code;\n }\n }\n return null;\n}\n\nconst COMPLETED_AUTH_MESSAGE_MAX_LENGTH = 160;\nconst COMPLETED_AUTH_MESSAGE_PATTERN =\n /^not logged in\\s*(?:[·•:—-]|\\.)?\\s*please run\\s+\\/login[.!]?$/i;\n\n/**\n * Resolves a plain assistant message that should be recovered into a visible\n * error card. Failed messages keep the provider-agnostic fallback above.\n *\n * Claude Code demonstrates why completed messages need a narrow exception: its\n * SDK can return the standalone \"Not logged in · Please run /login\" notice\n * together with a successful result. Match the provider-owned output shape,\n * rather than branching on provider identity, and keep it short and\n * whole-message anchored so normal answers are not reclassified.\n */\nexport function classifyRecoverableAgentMessage(input: {\n body: string | null | undefined;\n statusKind: string | null | undefined;\n}): AgentRunErrorCode | null {\n if (input.statusKind === \"failed\") {\n return classifyFailedAgentMessage(input.body);\n }\n if (\n input.statusKind !== \"completed\" ||\n !input.body ||\n input.body.length > COMPLETED_AUTH_MESSAGE_MAX_LENGTH\n ) {\n return null;\n }\n return COMPLETED_AUTH_MESSAGE_PATTERN.test(input.body.trim())\n ? \"auth_required\"\n : null;\n}\n\n/** True when detail text is a provider plan/payment gate (not a generic quota). */\nexport function isProviderPlanLimitMessage(\n detail: string | null | undefined\n): boolean {\n const normalized = detail?.trim().toLowerCase() ?? \"\";\n if (!normalized) {\n return false;\n }\n const markers =\n FAILED_MESSAGE_CODE_MARKERS.find(\n ([code]) => code === \"quota_or_rate_limit\"\n )?.[1] ?? [];\n return markers.some((marker) => normalized.includes(marker));\n}\n","import type {\n AgentProviderActiveAction,\n AgentProviderActiveActionError,\n AgentProviderActiveActionPhase,\n AgentProviderActiveActionStep,\n AgentProviderActiveActionStepStatus,\n AgentProviderStatus\n} from \"@tutti-os/client-tuttid-ts\";\n\n// Compatibility aliases for the existing Agent Environment UI. The wire\n// contract is generated from OpenAPI; this module must not maintain a second\n// parser or enum vocabulary.\nexport type CodexSetupStepStatus = AgentProviderActiveActionStepStatus;\nexport type CodexSetupStep = AgentProviderActiveActionStep;\nexport type CodexSetupPhase = AgentProviderActiveActionPhase;\nexport type CodexSetupActiveActionError = AgentProviderActiveActionError;\nexport type CodexSetupActiveAction = AgentProviderActiveAction;\n\nexport function readCodexSetupActiveAction(\n status: Pick<AgentProviderStatus, \"activeAction\"> | null | undefined\n): AgentProviderActiveAction | null {\n return status?.activeAction ?? null;\n}\n","import type { AgentEnvPanelFocus } from \"./agentEnvPanelActions\";\nimport type {\n CodexSetupPhase,\n CodexSetupStepStatus\n} from \"./codexSetupContract\";\n\nexport type AgentSetupStageId =\n | \"detect\"\n | \"network\"\n | \"install\"\n | \"adapter\"\n | \"login\"\n | \"ready\";\n\nexport type StageDetailToken =\n | { kind: \"text\"; text: string }\n | { kind: \"version-floor\"; current: string; required: string }\n | { kind: \"version-mismatch\"; current: string; required: string };\n\n// Whether an availability reason code means the CLI itself is on an unsupported\n// version — as opposed to an ADAPTER version mismatch. The adapter reason code\n// `acp_adapter_version_mismatch` also contains the substring \"version\", so a\n// plain `includes(\"version\")` test wrongly paints the CLI step red (\"版本不受支持\")\n// when only the adapter is mismatched. Require \"version\" but exclude any adapter\n// reason so the CLI and adapter stages stay independent.\nexport function reasonCodeIndicatesCliVersionUnsupported(\n reasonCode: string | null | undefined\n): boolean {\n const lower = (reasonCode ?? \"\").toLowerCase();\n return lower.includes(\"version\") && !lower.includes(\"adapter\");\n}\n\nexport interface AgentSetupStage {\n id: AgentSetupStageId;\n label: string;\n status: CodexSetupStepStatus;\n detail: StageDetailToken | null;\n /**\n * Optional explicit problem token for a blocked stage that can't be inferred\n * from `status` alone. Today only the install stage sets it — when the codex\n * launcher is present but its platform subpackage is missing, the stage is\n * `pending` (the daemon repairs it via the install action) yet needs a distinct\n * \"platform package missing\" problem rather than the generic \"install-missing\".\n */\n problem?: StageProblem;\n authMethod?: string | null;\n}\n\nexport interface AgentSetupStageLabels {\n detect: string;\n network: string;\n install: string;\n adapter: string;\n login: string;\n ready: string;\n}\n\nexport interface DeriveAgentSetupStagesInput {\n detected: boolean;\n cliInstalled: boolean;\n versionTooOld: boolean;\n /**\n * The codex CLI launcher is resolved but its platform-specific optional\n * dependency subpackage (e.g. @openai/codex-darwin-arm64) is missing — the\n * binary spawns ENOENT. The daemon repairs this in place via the install\n * action, so the install stage is `pending` (not `ok`) with a distinct\n * \"platform package missing\" problem token.\n */\n platformPackageIncomplete?: boolean;\n adapterInstalled: boolean;\n adapterVersionMismatch: boolean;\n authenticated: boolean;\n authRequired: boolean;\n ready: boolean;\n activePhase: CodexSetupPhase | null;\n /**\n * Whether the daemon-driven install action is in flight. This is the\n * authoritative \"installing\" signal: the adapter (external-registry) installer\n * emits no activeAction phase, so without this an in-progress adapter install\n * would show no spinner.\n */\n installActionPending: boolean;\n /** Whether a provider CLI update is in flight. */\n updateActionPending: boolean;\n loginPending: boolean;\n /**\n * Active connectivity probe verdict: true (reachable), false (offline), or\n * null when the daemon reported no network info (older daemon / not probed) —\n * null is treated as \"don't block\".\n */\n networkReachable: boolean | null;\n cliVersionDetail: StageDetailToken | null;\n adapterDetail: StageDetailToken | null;\n accountDetail: StageDetailToken | null;\n authMethod: string | null;\n networkDetail: StageDetailToken | null;\n labels: AgentSetupStageLabels;\n}\n\nconst INSTALLING_PHASES: ReadonlySet<CodexSetupPhase> = new Set([\n \"install\",\n \"repair\",\n \"verify\"\n]);\n\n/**\n * Maps primitive provider-status flags onto the fixed 5-stage track the wizard\n * renders. Version verification folds into the install (CLI) stage (an\n * unsupported version means install is `error`, not `ok`). The adapter stage\n * covers any provider runtime component installed separately from its CLI,\n * such as an SDK sidecar; where no separate component exists it simply tracks\n * the CLI. Login `running` is driven\n * by the caller's pending flag because login runs as a terminal action, not via\n * the activeAction phase stream.\n */\nexport function deriveAgentSetupStages(\n input: DeriveAgentSetupStagesInput\n): AgentSetupStage[] {\n const installing =\n input.installActionPending ||\n (input.activePhase ? INSTALLING_PHASES.has(input.activePhase) : false);\n const updating = input.updateActionPending || input.activePhase === \"update\";\n\n const detectStatus: CodexSetupStepStatus = input.detected ? \"ok\" : \"running\";\n\n // Network is an independent live-connectivity check (registry + provider API),\n // so it is NOT folded into the `ready` short-circuit — a real outage shows even\n // when the CLI is otherwise configured. It can only be judged once detection\n // has run; `false` is the only blocking value (null = no daemon verdict).\n const networkStatus: CodexSetupStepStatus = !input.detected\n ? \"pending\"\n : input.networkReachable === false\n ? \"error\"\n : \"ok\";\n\n // A satisfied CLI stays checked even while an install runs, so the spinner\n // lands on the stage actually being worked on (e.g. the adapter during a\n // repair) rather than flipping every install-related stage back to running.\n // A present launcher with a missing platform subpackage is NOT ok — the\n // daemon repairs it via the install action, so it reads as a pending install.\n const cliOk =\n input.ready ||\n (input.cliInstalled &&\n !input.versionTooOld &&\n !input.platformPackageIncomplete);\n const installStatus: CodexSetupStepStatus = updating\n ? \"running\"\n : cliOk\n ? \"ok\"\n : installing\n ? \"running\"\n : input.versionTooOld\n ? \"error\"\n : \"pending\";\n const installProblem: StageProblem | undefined =\n input.platformPackageIncomplete && !cliOk\n ? \"install-platform-incomplete\"\n : undefined;\n\n const adapterOk =\n input.ready || (input.adapterInstalled && !input.adapterVersionMismatch);\n const adapterStatus: CodexSetupStepStatus = adapterOk\n ? \"ok\"\n : installing\n ? \"running\"\n : input.adapterVersionMismatch\n ? \"error\"\n : \"pending\";\n\n const loginStatus: CodexSetupStepStatus = input.authenticated\n ? \"ok\"\n : input.loginPending\n ? \"running\"\n : \"pending\";\n\n const readyStatus: CodexSetupStepStatus = input.ready ? \"ok\" : \"pending\";\n\n return [\n {\n id: \"detect\",\n label: input.labels.detect,\n status: detectStatus,\n detail: null\n },\n {\n id: \"network\",\n label: input.labels.network,\n status: networkStatus,\n detail: input.networkDetail\n },\n {\n id: \"install\",\n label: input.labels.install,\n status: installStatus,\n detail: input.cliVersionDetail,\n ...(installProblem ? { problem: installProblem } : {})\n },\n {\n id: \"adapter\",\n label: input.labels.adapter,\n status: adapterStatus,\n detail: input.adapterDetail\n },\n {\n id: \"login\",\n label: input.labels.login,\n status: loginStatus,\n detail: input.accountDetail,\n authMethod: input.authMethod\n },\n {\n id: \"ready\",\n label: input.labels.ready,\n status: readyStatus,\n detail: null\n }\n ];\n}\n\n/**\n * Step-by-step reveal: even when prerequisites are already satisfied, the wizard\n * walks a cursor down the track so each stage visibly \"checks off\" one at a time\n * instead of all flashing complete at once.\n *\n * `revealIndex` is the cursor position. Stages before it show their real status\n * (already revealed). The stage AT the cursor is shown as `running` when its\n * real status is terminal-ok (the brief \"working on it\" moment before it checks\n * off) and otherwise shows its real status (so a genuinely running install, an\n * error, or a blocked prerequisite are honest). Stages after the cursor are\n * dimmed to `pending`.\n */\nexport function projectRevealedStages(\n realStages: AgentSetupStage[],\n revealIndex: number\n): AgentSetupStage[] {\n return realStages.map((stage, index) => {\n if (index < revealIndex) {\n return stage;\n }\n if (index === revealIndex) {\n if (stage.status === \"ok\" || stage.status === \"skipped\") {\n return { ...stage, status: \"running\" };\n }\n return stage;\n }\n return { ...stage, status: \"pending\" };\n });\n}\n\n/**\n * The reveal cursor advances past a stage only once that stage is really done\n * (`ok`/`skipped`). It parks on a stage that is still `running` (a real install\n * in progress), `error`, or `pending` (a blocked prerequisite) — so the\n * animation never races ahead of reality.\n */\nexport function shouldAdvanceReveal(\n realStages: AgentSetupStage[],\n revealIndex: number\n): boolean {\n const cursor = realStages[revealIndex];\n if (!cursor) {\n return false;\n }\n return cursor.status === \"ok\" || cursor.status === \"skipped\";\n}\n\nexport type StageActionId = \"install\" | \"login\" | \"redetect\" | \"update\";\n\n/**\n * The problem token a blocked stage represents. The UI maps this to \"未xxx\"\n * copy; keeping it i18n-agnostic here lets the mapping stay tested without\n * pulling translation strings into the pure flow module.\n */\nexport type StageProblem =\n | \"network-unreachable\"\n | \"install-missing\"\n | \"install-outdated\"\n | \"install-platform-incomplete\"\n | \"adapter-missing\"\n | \"adapter-mismatch\"\n | \"login-missing\";\n\nexport interface StageRemediation {\n actionId: StageActionId;\n problem: StageProblem;\n}\n\n/**\n * For a stage the user must act on (idle `pending`/`error`, never `running` or\n * `ok`), returns what is wrong and which action fixes it. `detect`/`ready` never\n * carry their own remediation — they reflect prerequisites, not user actions.\n *\n * `error` means a version problem on the install/adapter stages (the only stages\n * derive marks `error`); `pending` means the step simply has not run yet.\n */\nexport function stageRemediation(\n stage: AgentSetupStage\n): StageRemediation | null {\n if (stage.status !== \"pending\" && stage.status !== \"error\") {\n return null;\n }\n switch (stage.id) {\n case \"network\":\n // Connectivity isn't fixed by an install/login action — re-running\n // detection (which re-probes the network) is the remediation.\n return { actionId: \"redetect\", problem: \"network-unreachable\" };\n case \"install\":\n // An explicit problem token (today: platform subpackage missing) takes\n // precedence — the daemon repairs it in place via the install action, so\n // route through install rather than the manual-upgrade error path.\n if (stage.problem) {\n return { actionId: \"install\", problem: stage.problem };\n }\n // A genuinely missing CLI is installed for the user; a present-but-\n // outdated CLI is NOT — we don't silently reinstall a binary the user\n // manages. Instead the panel shows the manual upgrade command and\n // re-detection confirms it once they've upgraded.\n return stage.status === \"error\"\n ? { actionId: \"redetect\", problem: \"install-outdated\" }\n : { actionId: \"install\", problem: \"install-missing\" };\n case \"adapter\":\n return {\n actionId: \"install\",\n problem:\n stage.status === \"error\" ? \"adapter-mismatch\" : \"adapter-missing\"\n };\n case \"login\":\n return { actionId: \"login\", problem: \"login-missing\" };\n default:\n return null;\n }\n}\n\nexport interface ResolveWizardAutoStartInput {\n focus: AgentEnvPanelFocus | null;\n detected: boolean;\n ready: boolean;\n installPending: boolean;\n loginPending: boolean;\n}\n\n/**\n * Decides whether opening the wizard with a remediation focus should auto-start\n * an action. Returns the action id to run, or null when nothing should run\n * (non-remediation focus, detection not settled, already ready, or already\n * pending). The caller is responsible for firing this at most once per open.\n */\nexport function resolveWizardAutoStartAction(\n input: ResolveWizardAutoStartInput\n): \"install\" | \"login\" | null {\n const candidate = autoStartCandidate(input.focus);\n if (!candidate) {\n return null;\n }\n if (!input.detected || input.ready) {\n return null;\n }\n if (candidate === \"install\" && input.installPending) {\n return null;\n }\n if (candidate === \"login\" && input.loginPending) {\n return null;\n }\n return candidate;\n}\n\nfunction autoStartCandidate(\n focus: AgentEnvPanelFocus | null\n): \"install\" | \"login\" | null {\n switch (focus) {\n case \"install\":\n case \"repair\":\n return \"install\";\n case \"upgrade\":\n // CLI upgrades are user-driven: opening the panel from a version error\n // shows the manual upgrade command rather than auto-running an install\n // (which can't upgrade an already-present binary anyway).\n return null;\n case \"auth\":\n return \"login\";\n default:\n return null;\n }\n}\n","import type {\n AgentProviderStatus,\n WorkspaceAgentProvider\n} from \"@tutti-os/client-tuttid-ts\";\nimport {\n deriveAgentSetupStages,\n projectRevealedStages,\n reasonCodeIndicatesCliVersionUnsupported,\n type AgentSetupStage,\n type AgentSetupStageId,\n type AgentSetupStageLabels,\n type StageDetailToken\n} from \"./agentEnvWizardFlow.ts\";\nimport type {\n CodexSetupActiveAction,\n CodexSetupActiveActionError,\n CodexSetupPhase\n} from \"./codexSetupContract.ts\";\n\nexport interface NetworkCheck {\n kind: \"registry\" | \"api\" | \"proxy\";\n reachable: boolean;\n host: string | null;\n configured?: boolean;\n}\n\nconst MANUAL_INSTALL_COMMANDS: Partial<Record<WorkspaceAgentProvider, string>> =\n {\n codex: \"npm install -g @openai/codex --include=optional\",\n \"claude-code\": \"curl -fsSL https://claude.ai/install.sh | bash\",\n cursor: \"curl https://cursor.com/install -fsS | bash\",\n opencode: \"curl -fsSL https://opencode.ai/install | bash\"\n };\n\nfunction endpointHost(endpoint: string | null | undefined): string | null {\n if (!endpoint) {\n return null;\n }\n return endpoint.replace(/^https?:\\/\\//, \"\").replace(/\\/.*$/, \"\") || null;\n}\n\n// A proxy URL may carry credentials (http://user:pass@host:port). Strip the\n// userinfo before it reaches the renderer/UI so proxy passwords are never\n// surfaced; the scheme + host:port are kept for display.\nfunction scrubProxyUrl(url: string | null | undefined): string | null {\n if (!url) {\n return null;\n }\n try {\n const parsed = new URL(url);\n parsed.username = \"\";\n parsed.password = \"\";\n return `${parsed.protocol}//${parsed.host}`;\n } catch {\n // Not a parseable URL — still strip a leading userinfo segment defensively.\n return url.replace(/\\/\\/[^/@]*@/, \"//\") || null;\n }\n}\n\nfunction textToken(text: string | null): StageDetailToken | null {\n return text ? { kind: \"text\", text } : null;\n}\n\nfunction joinDetail(parts: Array<string | null | undefined>): string | null {\n const joined = parts.filter((p): p is string => Boolean(p)).join(\" · \");\n return joined || null;\n}\n\nexport function deriveHasAnomaly(\n stages: AgentSetupStage[],\n activeActionError: CodexSetupActiveActionError | null\n): boolean {\n return stages.some((s) => s.status === \"error\") || Boolean(activeActionError);\n}\n\nexport interface AgentEnvWizardViewModelInput {\n provider: WorkspaceAgentProvider;\n status: AgentProviderStatus | null;\n isLoading: boolean;\n activeAction: CodexSetupActiveAction | null;\n installActionPending: boolean;\n updateActionPending: boolean;\n loginPending: boolean;\n revealIndex: number;\n stageLabels: AgentSetupStageLabels;\n}\n\nexport interface AgentEnvWizardViewModel {\n ready: boolean;\n busy: boolean;\n redetecting: boolean;\n displayStages: AgentSetupStage[];\n blockingStageId: AgentSetupStageId | null;\n networkChecks: NetworkCheck[];\n hasAnomaly: boolean;\n activePhase: CodexSetupPhase | null;\n log: string[];\n registry: string | null;\n error: CodexSetupActiveActionError | null;\n manualCommand: string | null;\n installPending: boolean;\n updateAvailable: boolean;\n updating: boolean;\n loginPending: boolean;\n}\n\nexport function buildAgentEnvWizardViewModel(\n input: AgentEnvWizardViewModelInput\n): AgentEnvWizardViewModel {\n const { status, activeAction, provider } = input;\n const ready = status?.availability.status === \"ready\";\n const installPending = input.installActionPending;\n const updatePending = input.updateActionPending;\n const loginPending = input.loginPending;\n const updating = updatePending || activeAction?.phase === \"update\";\n const busy =\n installPending ||\n updating ||\n activeAction?.phase === \"install\" ||\n activeAction?.phase === \"repair\" ||\n activeAction?.phase === \"verify\";\n\n const reasonCode = (status?.availability.reasonCode ?? \"\").toLowerCase();\n const versionTooOld = reasonCodeIndicatesCliVersionUnsupported(reasonCode);\n const cliBelowFloor = versionTooOld;\n // The codex launcher is present but its platform subpackage is missing — the\n // CLI spawns ENOENT. The daemon repairs this in place via the install action;\n // the wizard must NOT mark the install stage ok just because the launcher\n // resolved.\n const platformPackageIncomplete = reasonCode.includes(\n \"codex_platform_pkg_incomplete\"\n );\n const adapterVersionMismatch = reasonCode.includes(\n \"acp_adapter_version_mismatch\"\n );\n\n const cliDetail: StageDetailToken | null =\n cliBelowFloor && status?.cli.version && status.cli.minVersion\n ? {\n kind: \"version-floor\",\n current: status.cli.version,\n required: status.cli.minVersion\n }\n : status?.cli.installed\n ? textToken(joinDetail([status?.cli.version, status?.cli.binaryPath]))\n : textToken(status?.cli.version ?? null);\n\n const adapterDetail: StageDetailToken | null =\n adapterVersionMismatch &&\n status?.adapter.version &&\n status?.adapter.requiredVersion\n ? {\n kind: \"version-mismatch\",\n current: status.adapter.version,\n required: status.adapter.requiredVersion\n }\n : status?.adapter.installed\n ? textToken(\n joinDetail([status?.adapter.version, status?.adapter.binaryPath])\n )\n : textToken(\n status?.adapter.binaryPath ??\n (status?.adapter.command?.length\n ? status.adapter.command.join(\" \")\n : null)\n );\n\n const networkChecks: NetworkCheck[] = status?.network\n ? [\n {\n kind: \"registry\",\n reachable: status.network.registry.reachable,\n host: endpointHost(status.network.registry.endpoint)\n },\n ...(status.network.providerApi\n ? [\n {\n kind: \"api\" as const,\n reachable: status.network.providerApi.reachable,\n host: endpointHost(status.network.providerApi.endpoint)\n }\n ]\n : []),\n ...(status.network.proxy\n ? [\n {\n kind: \"proxy\" as const,\n reachable:\n !status.network.proxy.configured ||\n status.network.proxy.reachable,\n host: scrubProxyUrl(status.network.proxy.url),\n configured: status.network.proxy.configured\n }\n ]\n : [])\n ]\n : [];\n const networkReachable =\n networkChecks.length === 0 ? null : networkChecks.every((c) => c.reachable);\n\n const accountDetail: StageDetailToken | null = status?.auth.accountLabel\n ? { kind: \"text\", text: status.auth.accountLabel }\n : status?.auth.status === \"authenticated\"\n ? { kind: \"text\", text: \"__SIGNED_IN__\" }\n : null;\n const authMethod: string | null = status?.auth.authMethod ?? null;\n\n const stages = deriveAgentSetupStages({\n detected: status !== null,\n cliInstalled: status?.cli.installed ?? false,\n versionTooOld,\n platformPackageIncomplete,\n adapterInstalled: status?.adapter.installed ?? false,\n adapterVersionMismatch,\n authenticated: status?.auth.status === \"authenticated\",\n authRequired: status?.auth.status === \"required\",\n ready: Boolean(ready),\n activePhase: activeAction?.phase ?? null,\n installActionPending: installPending,\n updateActionPending: updatePending,\n loginPending,\n networkReachable,\n cliVersionDetail: cliDetail,\n adapterDetail,\n accountDetail,\n authMethod,\n networkDetail: null,\n labels: input.stageLabels\n });\n\n const registry = activeAction?.registry ?? null;\n const stagesWithDetail = registry\n ? stages.map((s) =>\n s.id === \"ready\"\n ? { ...s, detail: { kind: \"text\" as const, text: registry } }\n : s\n )\n : stages;\n const displayStages = projectRevealedStages(\n stagesWithDetail,\n input.revealIndex\n );\n\n const blockingIndex = stages.findIndex((s) => s.status !== \"ok\");\n const blockingStage = blockingIndex >= 0 ? stages[blockingIndex] : undefined;\n const blockingStageId: AgentSetupStageId | null =\n blockingStage && input.revealIndex >= blockingIndex\n ? blockingStage.id\n : null;\n\n return {\n ready: Boolean(ready),\n busy: Boolean(busy),\n redetecting: input.isLoading,\n displayStages,\n blockingStageId,\n networkChecks,\n hasAnomaly: deriveHasAnomaly(stages, activeAction?.error ?? null),\n activePhase: activeAction?.phase ?? null,\n log: activeAction?.log ?? [],\n registry,\n error: activeAction?.error ?? null,\n manualCommand: MANUAL_INSTALL_COMMANDS[provider] ?? null,\n installPending,\n updateAvailable:\n updatePending ||\n (status?.update?.updateAvailable === true &&\n status.actions.some((action) => action.id === \"update\")),\n updating,\n loginPending\n };\n}\n"],"mappings":"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","names":[]}