@deadragdoll/tellymcp 0.0.10 → 0.0.12

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 (154) hide show
  1. package/.env.example.client +42 -52
  2. package/.env.example.gateway +48 -62
  3. package/CHANGELOG.md +3 -3
  4. package/README-ru.md +226 -376
  5. package/README.md +213 -1184
  6. package/TOOLS.md +320 -377
  7. package/VERSION.md +13 -13
  8. package/config/codex/plugins/telly-workflows/.codex-plugin/plugin.json +18 -0
  9. package/config/codex/plugins/telly-workflows/references/invariants.md +10 -0
  10. package/config/codex/plugins/telly-workflows/skills/telly-browser-screenshot/SKILL.md +27 -0
  11. package/config/codex/plugins/telly-workflows/skills/telly-collab-artifact/SKILL.md +22 -0
  12. package/config/codex/plugins/telly-workflows/skills/telly-human-telegram/SKILL.md +31 -0
  13. package/config/codex/plugins/telly-workflows/skills/telly-partner-note/SKILL.md +36 -0
  14. package/config/templates/env.both.template +39 -20
  15. package/config/templates/env.client.template +34 -19
  16. package/config/templates/env.gateway.template +37 -22
  17. package/dist/cli.js +322 -75
  18. package/dist/codexPluginInstaller.js +215 -0
  19. package/dist/lib/mixins/session.errors.js +34 -1
  20. package/dist/lib/pinoTargets.js +2 -2
  21. package/dist/moleculer.config.js +7 -5
  22. package/dist/services/features/telegram-mcp/browser.service.js +94 -1
  23. package/dist/services/features/telegram-mcp/collaboration.service.js +40 -3
  24. package/dist/services/features/telegram-mcp/ensuredb.service.js +145 -26
  25. package/dist/services/features/telegram-mcp/gateway-delivery.service.js +285 -103
  26. package/dist/services/features/telegram-mcp/gateway-socket.service.js +907 -85
  27. package/dist/services/features/telegram-mcp/gateway.service.js +876 -81
  28. package/dist/services/features/telegram-mcp/mcp-http.service.js +8 -0
  29. package/dist/services/features/telegram-mcp/mcp-server.service.js +17 -26
  30. package/dist/services/features/telegram-mcp/notify.service.js +127 -1
  31. package/dist/services/features/telegram-mcp/session-context.service.js +28 -1
  32. package/dist/services/features/telegram-mcp/src/app/bootstrap/runtime.js +132 -10
  33. package/dist/services/features/telegram-mcp/src/app/config/env.js +158 -52
  34. package/dist/services/features/telegram-mcp/src/app/http.js +375 -42
  35. package/dist/services/features/telegram-mcp/src/app/webapp/assets.js +386 -58
  36. package/dist/services/features/telegram-mcp/src/app/webapp/auth.js +3 -0
  37. package/dist/services/features/telegram-mcp/src/app/webapp/terminal.js +12 -0
  38. package/dist/services/features/telegram-mcp/src/entities/request/model/schema.js +120 -104
  39. package/dist/services/features/telegram-mcp/src/entities/xchange/model/types.js +2 -0
  40. package/dist/services/features/telegram-mcp/src/features/ask-user/model/askUserTelegram.js +1 -1
  41. package/dist/services/features/telegram-mcp/src/features/browser/model/browserOpenTool.js +1 -1
  42. package/dist/services/features/telegram-mcp/src/features/browser/model/browserScreenshotTool.js +1 -1
  43. package/dist/services/features/telegram-mcp/src/features/browser/model/browserService.js +306 -26
  44. package/dist/services/features/telegram-mcp/src/features/collaboration/model/gatewaySessionsService.js +71 -0
  45. package/dist/services/features/telegram-mcp/src/features/collaboration/model/listGatewaySessionsTool.js +33 -0
  46. package/dist/services/features/telegram-mcp/src/features/collaboration/model/localCollaborationBackend.js +93 -82
  47. package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerFileService.js +47 -5
  48. package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerFileTool.js +1 -1
  49. package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerNoteTool.js +1 -1
  50. package/dist/services/features/telegram-mcp/src/features/distributed-client/model/gatewayClientAccess.js +82 -0
  51. package/dist/services/features/telegram-mcp/src/features/distributed-client/model/gatewayCollaborationBackend.js +22 -14
  52. package/dist/services/features/telegram-mcp/src/features/distributed-gateway/model/gatewayHttpService.js +697 -75
  53. package/dist/services/features/telegram-mcp/src/features/distributed-gateway/model/remoteConsoleActionClient.js +76 -0
  54. package/dist/services/features/telegram-mcp/src/features/embedded-runtime/model/embeddedRuntimeBroker.js +92 -0
  55. package/dist/services/features/telegram-mcp/src/features/foreground-terminal/model/foregroundTerminalRuntime.js +192 -0
  56. package/dist/services/features/telegram-mcp/src/features/notify/model/notifyService.js +382 -3
  57. package/dist/services/features/telegram-mcp/src/features/notify/model/notifyTelegramTool.js +1 -1
  58. package/dist/services/features/telegram-mcp/src/features/notify/model/sendFileToTelegramTool.js +33 -0
  59. package/dist/services/features/telegram-mcp/src/features/session-context/model/clearSessionContextTool.js +1 -1
  60. package/dist/services/features/telegram-mcp/src/features/session-context/model/getSessionContextTool.js +1 -1
  61. package/dist/services/features/telegram-mcp/src/features/session-context/model/renameSessionTool.js +1 -1
  62. package/dist/services/features/telegram-mcp/src/features/session-context/model/sessionContextService.js +42 -200
  63. package/dist/services/features/telegram-mcp/src/features/session-context/model/setSessionContextTool.js +1 -1
  64. package/dist/services/features/telegram-mcp/src/features/terminal-buffer/model/terminalBufferService.js +96 -0
  65. package/dist/services/features/telegram-mcp/src/features/terminal-input/model/terminalInputService.js +97 -0
  66. package/dist/services/features/telegram-mcp/src/features/tools-sync/model/refreshToolsMarkdownService.js +107 -58
  67. package/dist/services/features/telegram-mcp/src/features/tools-sync/model/refreshToolsMarkdownTool.js +1 -1
  68. package/dist/services/features/telegram-mcp/src/features/xchange/model/getXchangeRecordTool.js +28 -0
  69. package/dist/services/features/telegram-mcp/src/features/xchange/model/listXchangeRecordsTool.js +28 -0
  70. package/dist/services/features/telegram-mcp/src/features/xchange/model/markXchangeRecordReadTool.js +28 -0
  71. package/dist/services/features/telegram-mcp/src/features/xchange/model/xchangeService.js +169 -0
  72. package/dist/services/features/telegram-mcp/src/processes/human-approval/model/orchestrator.js +5 -4
  73. package/dist/services/features/telegram-mcp/src/shared/i18n/resources/en.js +143 -42
  74. package/dist/services/features/telegram-mcp/src/shared/i18n/resources/ru.js +139 -38
  75. package/dist/services/features/telegram-mcp/src/shared/integrations/memory/processLocalSessionStore.js +27 -0
  76. package/dist/services/features/telegram-mcp/src/shared/integrations/object-storage/minioExchangeStore.js +11 -8
  77. package/dist/services/features/telegram-mcp/src/shared/integrations/redis/stateStore.js +69 -70
  78. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/proxyFetch.js +21 -22
  79. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transport.js +444 -7093
  80. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportAttachmentStore.js +93 -0
  81. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportBroadcastActions.js +385 -0
  82. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportConsoleRegistry.js +149 -0
  83. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportConstructorWiring.js +642 -0
  84. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportContent.js +84 -0
  85. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportContext.js +78 -0
  86. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportDocumentActions.js +36 -0
  87. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportEventActions.js +292 -0
  88. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportFileHandoffActions.js +352 -0
  89. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportFormatting.js +75 -0
  90. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportGatewayActions.js +44 -0
  91. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportLifecycleActions.js +161 -0
  92. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportLive.js +56 -0
  93. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportLiveActions.js +77 -0
  94. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuCallbacks.js +254 -0
  95. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuFactories.js +538 -0
  96. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuFingerprints.js +93 -0
  97. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuFlow.js +344 -0
  98. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuShell.js +65 -0
  99. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuState.js +408 -0
  100. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuText.js +216 -0
  101. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMessageFlow.js +452 -0
  102. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportOutputActions.js +189 -0
  103. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportPartnerActions.js +286 -0
  104. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportPayloadState.js +108 -0
  105. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectActions.js +463 -0
  106. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectEntryActions.js +202 -0
  107. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectEvents.js +99 -0
  108. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectMenus.js +138 -0
  109. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectState.js +308 -0
  110. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectView.js +426 -0
  111. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportRequestFlow.js +278 -0
  112. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportSessionActions.js +143 -0
  113. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportTerminalActions.js +665 -0
  114. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportTerminalRuntime.js +226 -0
  115. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportTypes.js +2 -0
  116. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportUtils.js +330 -0
  117. package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportXchangeState.js +107 -0
  118. package/dist/services/features/telegram-mcp/src/shared/integrations/terminal/client.js +255 -0
  119. package/dist/services/features/telegram-mcp/src/shared/integrations/terminal/ptyRegistry.js +543 -0
  120. package/dist/services/features/telegram-mcp/src/shared/integrations/xchange/sqliteRecordStore.js +223 -0
  121. package/dist/services/features/telegram-mcp/src/shared/lib/gatewayScope.js +24 -0
  122. package/dist/services/features/telegram-mcp/src/shared/lib/logger/logger.js +6 -0
  123. package/dist/services/features/telegram-mcp/src/shared/lib/project-identity/projectIdentity.js +147 -76
  124. package/dist/services/features/telegram-mcp/src/shared/lib/telegramXchangeRecords.js +72 -0
  125. package/dist/services/features/telegram-mcp/src/shared/lib/terminalPromptDetection.js +409 -0
  126. package/dist/services/features/telegram-mcp/src/shared/lib/version/versionHandshake.js +129 -1
  127. package/dist/services/features/telegram-mcp/src/shared/lib/xchangeRecordHints.js +98 -0
  128. package/dist/services/features/telegram-mcp/standalone-http.service.js +12 -0
  129. package/dist/services/features/telegram-mcp/terminal-buffer.service.js +42 -0
  130. package/dist/services/features/telegram-mcp/terminal-input.service.js +41 -0
  131. package/dist/services/features/telegram-mcp/tools-sync.service.js +15 -1
  132. package/dist/services/features/telegram-mcp/xchange.service.js +123 -0
  133. package/docs/STANDALONE-ru.md +172 -0
  134. package/docs/STANDALONE.md +172 -0
  135. package/package.json +10 -5
  136. package/scripts/build-package-artifact.sh +27 -0
  137. package/scripts/deploy-gateway.sh +64 -0
  138. package/scripts/deploy-onebot-branch.sh +27 -0
  139. package/scripts/postinstall.js +11 -36
  140. package/STANDALONE-ru.md +0 -274
  141. package/STANDALONE.md +0 -274
  142. package/dist/services/features/telegram-mcp/inbox.service.js +0 -33
  143. package/dist/services/features/telegram-mcp/pair.service.js +0 -33
  144. package/dist/services/features/telegram-mcp/src/app/webapp/tmux.js +0 -10
  145. package/dist/services/features/telegram-mcp/src/features/inbox/model/deleteTelegramInboxMessageTool.js +0 -33
  146. package/dist/services/features/telegram-mcp/src/features/inbox/model/getTelegramInboxCountTool.js +0 -33
  147. package/dist/services/features/telegram-mcp/src/features/inbox/model/getTelegramInboxTool.js +0 -33
  148. package/dist/services/features/telegram-mcp/src/features/inbox/model/inboxService.js +0 -77
  149. package/dist/services/features/telegram-mcp/src/features/pair-session/model/clearSessionPairingTool.js +0 -33
  150. package/dist/services/features/telegram-mcp/src/features/pair-session/model/createSessionPairCodeTool.js +0 -33
  151. package/dist/services/features/telegram-mcp/src/features/pair-session/model/generatePairCode.js +0 -202
  152. package/dist/services/features/telegram-mcp/src/features/session-context/model/getTmuxTargetTool.js +0 -33
  153. package/dist/services/features/telegram-mcp/src/features/session-context/model/setTmuxTargetTool.js +0 -33
  154. package/dist/services/features/telegram-mcp/src/shared/integrations/tmux/client.js +0 -363
@@ -0,0 +1,642 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildTransportConstructorWiring = buildTransportConstructorWiring;
4
+ const grammy_1 = require("grammy");
5
+ const proxyFetch_1 = require("./proxyFetch");
6
+ const transportFormatting_1 = require("./transportFormatting");
7
+ const transportContent_1 = require("./transportContent");
8
+ const transportAttachmentStore_1 = require("./transportAttachmentStore");
9
+ const transportBroadcastActions_1 = require("./transportBroadcastActions");
10
+ const transportContext_1 = require("./transportContext");
11
+ const transportConsoleRegistry_1 = require("./transportConsoleRegistry");
12
+ const transportDocumentActions_1 = require("./transportDocumentActions");
13
+ const transportEventActions_1 = require("./transportEventActions");
14
+ const transportFileHandoffActions_1 = require("./transportFileHandoffActions");
15
+ const transportGatewayActions_1 = require("./transportGatewayActions");
16
+ const transportLifecycleActions_1 = require("./transportLifecycleActions");
17
+ const transportLiveActions_1 = require("./transportLiveActions");
18
+ const transportMenuCallbacks_1 = require("./transportMenuCallbacks");
19
+ const transportMenuFactories_1 = require("./transportMenuFactories");
20
+ const transportMenuFingerprints_1 = require("./transportMenuFingerprints");
21
+ const transportMenuFlow_1 = require("./transportMenuFlow");
22
+ const transportMenuShell_1 = require("./transportMenuShell");
23
+ const transportMenuState_1 = require("./transportMenuState");
24
+ const transportMessageFlow_1 = require("./transportMessageFlow");
25
+ const transportOutputActions_1 = require("./transportOutputActions");
26
+ const transportPartnerActions_1 = require("./transportPartnerActions");
27
+ const transportPayloadState_1 = require("./transportPayloadState");
28
+ const transportProjectActions_1 = require("./transportProjectActions");
29
+ const transportProjectEntryActions_1 = require("./transportProjectEntryActions");
30
+ const transportProjectEvents_1 = require("./transportProjectEvents");
31
+ const transportProjectMenus_1 = require("./transportProjectMenus");
32
+ const transportProjectState_1 = require("./transportProjectState");
33
+ const transportProjectView_1 = require("./transportProjectView");
34
+ const transportRequestFlow_1 = require("./transportRequestFlow");
35
+ const transportSessionActions_1 = require("./transportSessionActions");
36
+ const transportTerminalActions_1 = require("./transportTerminalActions");
37
+ const transportTerminalRuntime_1 = require("./transportTerminalRuntime");
38
+ const transportXchangeState_1 = require("./transportXchangeState");
39
+ const transportUtils_1 = require("./transportUtils");
40
+ function buildTransportConstructorWiring(host) {
41
+ const telegramBaseFetchConfig = (0, proxyFetch_1.createTelegramBaseFetchConfig)(host.config, host.logger);
42
+ const telegramFetch = (0, proxyFetch_1.createTelegramFetch)(host.config, host.logger);
43
+ const bot = Object.keys(telegramBaseFetchConfig).length > 0
44
+ ? new grammy_1.Bot(host.config.telegram.botToken ?? "0:disabled", {
45
+ client: {
46
+ baseFetchConfig: telegramBaseFetchConfig,
47
+ },
48
+ })
49
+ : new grammy_1.Bot(host.config.telegram.botToken ?? "0:disabled");
50
+ const context = new transportContext_1.TransportContext({
51
+ config: host.config,
52
+ localeStore: host.localeStore,
53
+ });
54
+ const payloadState = new transportPayloadState_1.TransportPayloadState({
55
+ menuPayloadStore: host.menuPayloadStore,
56
+ menuPayloadTtlSeconds: host.config.telegram.menuPayloadTtlSeconds,
57
+ });
58
+ const xchangeState = new transportXchangeState_1.TransportXchangeState({
59
+ config: host.config,
60
+ sessionStore: host.sessionStore,
61
+ xchangeFileMetaStore: host.xchangeFileMetaStore,
62
+ callGatewayJson: (path, payload) => host.callGatewayJson(path, payload),
63
+ });
64
+ const outputActions = new transportOutputActions_1.TransportOutputActions({
65
+ config: host.config,
66
+ logger: host.logger,
67
+ bot,
68
+ });
69
+ const consoleRegistry = new transportConsoleRegistry_1.TransportConsoleRegistry({
70
+ config: host.config,
71
+ logger: host.logger,
72
+ sessionStore: host.sessionStore,
73
+ bindingStore: host.bindingStore,
74
+ callGatewayJson: (path, payload) => host.callGatewayJson(path, payload),
75
+ });
76
+ const liveActions = new transportLiveActions_1.TransportLiveActions({
77
+ config: host.config,
78
+ webAppLaunchRegistry: host.webAppLaunchRegistry,
79
+ logger: host.logger,
80
+ t: (locale, key, vars) => context.t(locale, key, vars),
81
+ ensureGatewayClientUuid: (principal, actor) => gatewayActions.ensureGatewayClientUuid(principal, actor),
82
+ sendChatMessage: (telegramChatId, text, options, meta) => outputActions.sendChatMessage(telegramChatId, text, options, meta),
83
+ });
84
+ const terminalActions = new transportTerminalActions_1.TransportTerminalActions({
85
+ config: host.config,
86
+ sessionStore: host.sessionStore,
87
+ bindingStore: host.bindingStore,
88
+ logger: host.logger,
89
+ terminalNudgeFailureNoticeAt: host.terminalNudgeFailureNoticeAt,
90
+ terminalPromptNoticeState: host.terminalPromptNoticeState,
91
+ sendTypingForSession: (sessionId) => terminalRuntime.sendTypingForSession(sessionId),
92
+ resolveLocaleForTelegramUserId: (userId) => context.resolveLocaleForTelegramUserId(userId),
93
+ sendNotification: (input) => requestFlow.sendNotification(input),
94
+ sendLiveViewLauncherMessage: (input) => liveActions.sendLauncherMessage(input),
95
+ callGatewayJson: (path, payload) => host.callGatewayJson(path, payload),
96
+ createTerminalPromptActionPayload: (sessionId, actions) => payloadState.createTerminalPromptActionPayload(sessionId, actions),
97
+ getMenuPayloadByKey: (key) => host.menuPayloadStore.getMenuPayload(key),
98
+ resolveLocaleForContext: (ctx) => context.resolveLocaleForContext(ctx),
99
+ sendChatMessage: (telegramChatId, text, options, meta) => outputActions.sendChatMessage(telegramChatId, text, options, meta),
100
+ t: (locale, key, vars) => context.t(locale, key, vars),
101
+ });
102
+ const terminalRuntime = new transportTerminalRuntime_1.TransportTerminalRuntime({
103
+ config: host.config,
104
+ logger: host.logger,
105
+ bot,
106
+ sessionStore: host.sessionStore,
107
+ bindingStore: host.bindingStore,
108
+ isTelegramEnabled: () => host.config.distributed.mode !== "client" && Boolean(host.config.telegram.botToken?.trim()),
109
+ terminalActions,
110
+ terminalNudgeDebounceTimers: host.terminalNudgeDebounceTimers,
111
+ ensureGatewayScopedConsolesBoundForPrincipal: async (principal) => {
112
+ await consoleRegistry.ensureScopedConsolesBound({ principal });
113
+ },
114
+ });
115
+ const menuFingerprints = new transportMenuFingerprints_1.TransportMenuFingerprints({
116
+ logger: host.logger,
117
+ bindingStore: host.bindingStore,
118
+ sessionStore: host.sessionStore,
119
+ getMenuPayloadByKey: (key) => host.menuPayloadStore.getMenuPayload(key),
120
+ resolveLocaleForContext: (ctx) => context.resolveLocaleForContext(ctx),
121
+ getPrincipalFromContext: (ctx) => context.getPrincipalFromContext(ctx),
122
+ t: (locale, key, vars) => context.t(locale, key, vars),
123
+ listActiveSessionStorageEntries: (sessionId) => xchangeState.listActiveSessionStorageEntries(sessionId),
124
+ listActiveSessionScreenshots: (sessionId) => xchangeState.listActiveSessionScreenshots(sessionId),
125
+ });
126
+ const documentActions = new transportDocumentActions_1.TransportDocumentActions({
127
+ logger: host.logger,
128
+ });
129
+ const projectMenus = new transportProjectMenus_1.TransportProjectMenus({
130
+ createMenuOptions: (onMenuOutdated) => host.createMenuOptions(onMenuOutdated),
131
+ buildProjectsFingerprint: (ctx) => gatewayActions.buildProjectsFingerprint(ctx),
132
+ loadProjectsContext: (ctx) => gatewayActions.loadProjectsContext(ctx),
133
+ tForContext: (ctx, key, vars) => context.tForContext(ctx, key, vars),
134
+ createProjectMenuPayload: (sessionId, projectUuid, title) => payloadState.createProjectMenuPayload(sessionId, projectUuid, title),
135
+ createProjectDeleteMenuPayload: (sessionId, projectUuid, title) => payloadState.createProjectDeleteMenuPayload(sessionId, projectUuid, title),
136
+ handleProjectSelect: (ctx) => projectEntryActions.handleProjectSelect(ctx),
137
+ handleProjectDeleteSelect: (ctx) => projectEntryActions.handleProjectDeleteSelect(ctx),
138
+ beginProjectMode: (ctx, mode) => projectEntryActions.beginProjectMode(ctx, mode),
139
+ beginProjectBroadcast: (ctx) => broadcastActions.beginProjectBroadcast(ctx),
140
+ handleCollabHistoryExport: (ctx) => menuFlow.handleCollabHistoryExport(ctx),
141
+ showCollabToolsMenu: (ctx) => menuFlow.showCollabToolsMenu(ctx),
142
+ showCollabDeleteMenu: (ctx) => menuFlow.showCollabDeleteMenu(ctx),
143
+ showProjectsMenu: (ctx) => menuFlow.showProjectsMenu(ctx),
144
+ showMainMenu: (ctx) => menuState.showMainMenu(ctx),
145
+ });
146
+ const menuFactories = new transportMenuFactories_1.TransportMenuFactories({
147
+ logger: host.logger,
148
+ bindingStore: host.bindingStore,
149
+ sessionStore: host.sessionStore,
150
+ createMenuOptions: (onMenuOutdated) => host.createMenuOptions(onMenuOutdated),
151
+ tForContext: (ctx, key, vars) => context.tForContext(ctx, key, vars),
152
+ getPrincipalFromContext: (ctx) => context.getPrincipalFromContext(ctx),
153
+ buildMainMenuFingerprint: (ctx) => menuFingerprints.buildMainMenuFingerprint(ctx),
154
+ buildStorageFingerprint: (ctx) => menuFingerprints.buildStorageFingerprint(ctx),
155
+ buildScreenshotsFingerprint: (ctx) => menuFingerprints.buildScreenshotsFingerprint(ctx),
156
+ buildSessionsFingerprint: (ctx) => menuFingerprints.buildSessionsFingerprint(ctx),
157
+ buildScreenshotsButtonLabel: (ctx) => menuFingerprints.buildScreenshotsButtonLabel(ctx),
158
+ showLiveViewLauncher: (ctx) => menuFlow.showLiveViewLauncher(ctx),
159
+ showBufferMenu: (ctx) => menuFlow.showBufferMenu(ctx),
160
+ showBrowserMenu: (ctx) => menuFlow.showBrowserMenu(ctx),
161
+ showMainMenu: (ctx) => menuState.showMainMenu(ctx),
162
+ showProjectsEntryPoint: (ctx) => menuFlow.showProjectsMenu(ctx),
163
+ showStorageMenu: (ctx) => menuFlow.showStorageMenu(ctx),
164
+ showSettingsMenu: (ctx) => menuFlow.showSettingsMenu(ctx),
165
+ showSessionsMenu: (ctx) => menuFlow.showSessionsMenu(ctx),
166
+ showScreenshotsMenu: (ctx) => menuFlow.showScreenshotsMenu(ctx),
167
+ sendActiveSessionBuffer: (ctx, input) => menuFlow.sendActiveSessionBuffer(ctx, input),
168
+ showUnpairConfirmMenu: (ctx) => menuFlow.showUnpairConfirmMenu(ctx),
169
+ showDeveloperMenu: (ctx) => menuFlow.showDeveloperMenu(ctx),
170
+ showDeveloperInfo: (ctx) => menuFlow.showDeveloperInfo(ctx),
171
+ showPruneConfirmMenu: (ctx) => menuFlow.showPruneConfirmMenu(ctx),
172
+ showActiveSessionInfo: (ctx) => menuFlow.showActiveSessionInfo(ctx),
173
+ beginRenameActiveSession: (ctx) => sessionActions.beginRenameActiveSession(ctx),
174
+ beginBroadcast: (ctx) => broadcastActions.beginBroadcast(ctx),
175
+ pruneAllSessions: (ctx) => sessionActions.pruneAllSessions(ctx),
176
+ unpairActiveSession: (ctx) => sessionActions.unpairActiveSession(ctx),
177
+ handleStorageOpen: (ctx) => menuCallbacks.handleStorageOpen(ctx, (0, transportUtils_1.readMenuPayloadKey)(ctx)),
178
+ handleStorageGet: (ctx) => menuCallbacks.handleStorageGet(ctx, (0, transportUtils_1.readMenuPayloadKey)(ctx)),
179
+ handleStorageDelete: (ctx) => menuCallbacks.handleStorageDelete(ctx, (0, transportUtils_1.readMenuPayloadKey)(ctx)),
180
+ handleScreenshotOpen: (ctx) => menuCallbacks.handleScreenshotOpen(ctx, (0, transportUtils_1.readMenuPayloadKey)(ctx)),
181
+ handleScreenshotGet: (ctx) => menuCallbacks.handleScreenshotGet(ctx, (0, transportUtils_1.readMenuPayloadKey)(ctx)),
182
+ handleScreenshotDelete: (ctx) => menuCallbacks.handleScreenshotDelete(ctx, (0, transportUtils_1.readMenuPayloadKey)(ctx)),
183
+ handleSessionSelection: (ctx) => menuCallbacks.handleSessionSelection(ctx, (0, transportUtils_1.readMenuPayloadKey)(ctx)),
184
+ handleSessionGroupSelection: (ctx) => menuCallbacks.handleSessionGroupSelection(ctx, (0, transportUtils_1.readMenuPayloadKey)(ctx)),
185
+ getMenuPayloadByKey: (key) => host.menuPayloadStore.getMenuPayload(key),
186
+ createFileMenuPayload: (sessionId, filePath) => payloadState.createFileMenuPayload(sessionId, filePath),
187
+ createSessionMenuPayload: (sessionId, ownerLabel, ownerKey) => payloadState.createSessionMenuPayload(sessionId, ownerLabel, ownerKey),
188
+ createSessionGroupMenuPayload: (ownerLabel, ownerKey) => payloadState.createSessionGroupMenuPayload(ownerLabel, ownerKey),
189
+ formatStoragePreviewLabel: (filePath, meta) => (0, transportFormatting_1.formatStoragePreviewLabel)(filePath, meta),
190
+ formatFilePreviewLabel: (filePath) => (0, transportFormatting_1.formatFilePreviewLabel)(filePath),
191
+ formatSessionMenuLabel: (input) => (0, transportFormatting_1.formatSessionMenuLabel)(input),
192
+ listActiveSessionStorageEntries: (sessionId) => xchangeState.listActiveSessionStorageEntries(sessionId),
193
+ listActiveSessionScreenshots: (sessionId) => xchangeState.listActiveSessionScreenshots(sessionId),
194
+ });
195
+ const mainMenu = menuFactories.createMainMenu();
196
+ const storageMenu = menuFactories.createStorageMenu();
197
+ const browserMenu = menuFactories.createBrowserMenu();
198
+ const screenshotsMenu = menuFactories.createScreenshotsMenu();
199
+ const sessionsMenu = menuFactories.createSessionsMenu();
200
+ const bufferMenu = menuFactories.createBufferMenu();
201
+ const settingsMenu = menuFactories.createSettingsMenu();
202
+ const developerMenu = menuFactories.createDeveloperMenu();
203
+ const unpairConfirmMenu = menuFactories.createUnpairConfirmMenu();
204
+ const pruneConfirmMenu = menuFactories.createPruneConfirmMenu();
205
+ const storageMessageMenu = menuFactories.createStorageMessageMenu();
206
+ const screenshotMessageMenu = menuFactories.createScreenshotMessageMenu();
207
+ const projectsMenu = projectMenus.createProjectsMenu();
208
+ const collabToolsMenu = projectMenus.createCollabToolsMenu();
209
+ const collabDeleteMenu = projectMenus.createCollabDeleteMenu();
210
+ const menuState = new transportMenuState_1.TransportMenuState({
211
+ logger: host.logger,
212
+ t: (locale, key, vars) => context.t(locale, key, vars),
213
+ resolveLocaleForContext: (ctx) => context.resolveLocaleForContext(ctx),
214
+ getPrincipalFromContext: (ctx) => context.getPrincipalFromContext(ctx),
215
+ getTerminalStatusLine: async (locale) => context.t(locale, "menu:main.screen.terminal_mode_direct"),
216
+ setCurrentAttachmentTargetForContext: (ctx, target) => menuFlow.setCurrentAttachmentTargetForContext(ctx, target),
217
+ renderMenuHtmlScreen: (ctx, text, meta, menu) => menuFlow.renderMenuHtmlScreen(ctx, text, meta, menu),
218
+ renderMenuScreen: (ctx, text, meta, menu) => menuFlow.renderMenuScreen(ctx, text, meta, menu),
219
+ renderMenuMarkdownScreen: (ctx, text, meta, menu) => menuFlow.renderMenuMarkdownScreen(ctx, text, meta, menu),
220
+ replyText: (ctx, text, meta, options) => outputActions.replyText(ctx, text, meta, options),
221
+ getMenuPayloadByKey: (key) => host.menuPayloadStore.getMenuPayload(key),
222
+ getMainMenu: () => mainMenu,
223
+ getSessionsMenu: () => sessionsMenu,
224
+ getStorageMenu: () => storageMenu,
225
+ getBrowserMenu: () => browserMenu,
226
+ getScreenshotsMenu: () => screenshotsMenu,
227
+ getSettingsMenu: () => settingsMenu,
228
+ getBufferMenu: () => bufferMenu,
229
+ getDeveloperMenu: () => developerMenu,
230
+ getUnpairConfirmMenu: () => unpairConfirmMenu,
231
+ getPruneConfirmMenu: () => pruneConfirmMenu,
232
+ sessionStore: host.sessionStore,
233
+ bindingStore: host.bindingStore,
234
+ listActiveSessionScreenshots: (sessionId) => xchangeState.listActiveSessionScreenshots(sessionId),
235
+ listActiveSessionStorageEntries: (sessionId) => xchangeState.listActiveSessionStorageEntries(sessionId),
236
+ callGatewayJson: (path, payload) => host.callGatewayJson(path, payload),
237
+ });
238
+ const projectState = new transportProjectState_1.TransportProjectState({
239
+ config: host.config,
240
+ getGatewayActorFromContext: (ctx) => context.getGatewayActorFromContext(ctx),
241
+ getPrincipalFromContext: (ctx) => context.getPrincipalFromContext(ctx),
242
+ callGatewayJson: (path, payload) => host.callGatewayJson(path, payload),
243
+ sessionStore: host.sessionStore,
244
+ bindingStore: host.bindingStore,
245
+ maintenanceStore: host.maintenanceStore,
246
+ menuPayloadStore: host.menuPayloadStore,
247
+ });
248
+ const gatewayActions = new transportGatewayActions_1.TransportGatewayActions({
249
+ getCollaborationService: () => host.getCollaborationService(),
250
+ projectState,
251
+ });
252
+ const attachmentStore = new transportAttachmentStore_1.TransportAttachmentStore({
253
+ sessionStore: host.sessionStore,
254
+ xchangeFileMetaStore: host.xchangeFileMetaStore,
255
+ objectStore: host.objectStore,
256
+ telegramFetch: (input, init) => telegramFetch(input, init),
257
+ getRequiredBotToken: (action) => host.getRequiredBotToken(action),
258
+ getTelegramFile: (fileId) => bot.api.getFile(fileId),
259
+ });
260
+ const lifecycleActions = new transportLifecycleActions_1.TransportLifecycleActions({
261
+ logger: host.logger,
262
+ config: host.config,
263
+ sessionStore: host.sessionStore,
264
+ bindingStore: host.bindingStore,
265
+ isTelegramEnabled: () => host.config.distributed.mode !== "client" &&
266
+ Boolean(host.config.telegram.botToken?.trim()),
267
+ resolveLocaleForTelegramUserId: (telegramUserId, telegramLanguageCode) => context.resolveLocaleForTelegramUserId(telegramUserId, telegramLanguageCode),
268
+ t: (locale, key, options) => context.t(locale, key, options),
269
+ sendNotification: (input) => host.sendNotification(input),
270
+ });
271
+ const projectView = new transportProjectView_1.TransportProjectView({
272
+ config: host.config,
273
+ projectsMenu,
274
+ collabToolsMenu,
275
+ collabDeleteMenu,
276
+ t: (locale, key, vars) => context.t(locale, key, vars),
277
+ resolveLocaleForContext: (ctx) => context.resolveLocaleForContext(ctx),
278
+ resolveLocaleForTelegramUserId: (telegramUserId, telegramLanguageCode) => context.resolveLocaleForTelegramUserId(telegramUserId, telegramLanguageCode),
279
+ getPrincipalFromContext: (ctx) => context.getPrincipalFromContext(ctx),
280
+ getGatewayActorFromContext: (ctx) => context.getGatewayActorFromContext(ctx),
281
+ ensureGatewayClientUuid: (principal, actor) => gatewayActions.ensureGatewayClientUuid(principal, actor),
282
+ loadProjectsContext: (ctx) => gatewayActions.loadProjectsContext(ctx),
283
+ listGatewayProjects: (principal, actor) => gatewayActions.listGatewayProjects(principal, actor),
284
+ listGatewayProjectSessions: (principal, projectUuid) => gatewayActions.listGatewayProjectSessions(principal, projectUuid),
285
+ listGatewaySessionHistory: (principal, localSessionId) => gatewayActions.listGatewaySessionHistory(principal, localSessionId),
286
+ collectCollabBroadcastTargets: (principal, _sessionId) => broadcastActions.listCollabBroadcastTargets(principal),
287
+ ensureOpenedProjectIsActive: (input) => gatewayActions.ensureOpenedProjectIsActive(input),
288
+ setCurrentAttachmentTargetForContext: (ctx, target) => menuFlow.setCurrentAttachmentTargetForContext(ctx, target),
289
+ renderMenuScreen: (ctx, text, meta, menu) => menuFlow.renderMenuScreen(ctx, text, meta, menu),
290
+ replyText: (ctx, text, meta, options) => outputActions.replyText(ctx, text, meta, options),
291
+ editText: (ctx, text, meta, options) => outputActions.editText(ctx, text, meta, options),
292
+ replyDocumentWithRetry: (ctx, document, options, meta) => documentActions.replyDocumentWithRetry(ctx, document, options, meta),
293
+ sessionStore: host.sessionStore,
294
+ bindingStore: host.bindingStore,
295
+ maintenanceStore: host.maintenanceStore,
296
+ xchangeFileMetaStore: host.xchangeFileMetaStore,
297
+ webAppLaunchRegistry: host.webAppLaunchRegistry,
298
+ createProjectMemberMenuPayload: (sessionId, projectUuid, targetSessionId, title, extra) => payloadState.createProjectMemberMenuPayload(sessionId, projectUuid, targetSessionId, title, extra),
299
+ listActiveSessionFiles: (sessionId) => xchangeState.listActiveSessionFiles(sessionId),
300
+ formatFilePreviewLabel: (filePath, meta) => (0, transportFormatting_1.formatFilePreviewLabel)(filePath, meta),
301
+ });
302
+ const menuFlow = new transportMenuFlow_1.TransportMenuFlow({
303
+ config: host.config,
304
+ logger: host.logger,
305
+ bindingStore: host.bindingStore,
306
+ sessionStore: host.sessionStore,
307
+ menuState,
308
+ projectView,
309
+ liveActions,
310
+ terminalActions,
311
+ pendingRenames: host.pendingRenames,
312
+ pendingBroadcasts: host.pendingBroadcasts,
313
+ pendingPartnerNotes: host.pendingPartnerNotes,
314
+ pendingFileHandoffs: host.pendingFileHandoffs,
315
+ pendingProjects: host.pendingProjects,
316
+ currentAttachmentTargets: host.currentAttachmentTargets,
317
+ resolveLocaleForContext: (ctx) => context.resolveLocaleForContext(ctx),
318
+ getPrincipalFromContext: (ctx) => context.getPrincipalFromContext(ctx),
319
+ ensureGatewayScopeConsolesBound: ({ principal, ctx }) => consoleRegistry.ensureScopedConsolesBound({ principal, ctx }),
320
+ getGatewayActorFromContext: (ctx) => context.getGatewayActorFromContext(ctx),
321
+ t: (locale, key, options) => context.t(locale, key, options),
322
+ replyText: (ctx, text, meta, options) => outputActions.replyText(ctx, text, meta, options),
323
+ editText: (ctx, text, meta, options) => outputActions.editText(ctx, text, meta, options),
324
+ replyDocumentWithRetry: (ctx, document, options, meta) => documentActions.replyDocumentWithRetry(ctx, document, options, meta),
325
+ captureRelaySessionBuffer: (sessionId, scope) => host.callGatewayJson("/live/capture-buffer", {
326
+ session_id: sessionId,
327
+ scope,
328
+ }),
329
+ });
330
+ const broadcastActions = new transportBroadcastActions_1.TransportBroadcastActions({
331
+ config: host.config,
332
+ logger: host.logger,
333
+ pendingBroadcasts: host.pendingBroadcasts,
334
+ pendingRenames: host.pendingRenames,
335
+ getPrincipalFromContext: (ctx) => context.getPrincipalFromContext(ctx),
336
+ resolveLocaleForContext: (ctx) => context.resolveLocaleForContext(ctx),
337
+ t: (locale, key, vars) => context.t(locale, key, vars),
338
+ tForContext: (ctx, key, vars) => context.tForContext(ctx, key, vars),
339
+ replyText: (ctx, text, meta, options) => outputActions.replyText(ctx, text, meta, options),
340
+ deleteMessage: (chatId, messageId) => host.deleteMessage(chatId, messageId),
341
+ showCollabToolsMenu: (ctx) => menuFlow.showCollabToolsMenu(ctx),
342
+ showDeveloperMenu: (ctx) => menuFlow.showDeveloperMenu(ctx),
343
+ ensureGatewayClientUuid: (principal) => gatewayActions.ensureGatewayClientUuid(principal),
344
+ listGatewayProjects: (principal) => gatewayActions.listGatewayProjects(principal),
345
+ listGatewayProjectSessions: (principal, projectUuid) => gatewayActions.listGatewayProjectSessions(principal, projectUuid),
346
+ bindingStore: host.bindingStore,
347
+ sessionStore: host.sessionStore,
348
+ routeTelegramInboxToRelaySession: (input) => messageFlow.routeTelegramInboxToRelaySession(input),
349
+ scheduleTerminalNudgeForInboxMessage: (sessionId, session) => terminalRuntime.scheduleTerminalNudgeForInboxMessage(sessionId, session),
350
+ sendPartnerNote: (input) => gatewayActions.sendPartnerNote(input),
351
+ });
352
+ const partnerActions = new transportPartnerActions_1.TransportPartnerActions({
353
+ config: host.config,
354
+ logger: host.logger,
355
+ pendingPartnerNotes: host.pendingPartnerNotes,
356
+ getPrincipalFromContext: (ctx) => context.getPrincipalFromContext(ctx),
357
+ resolveLocaleForContext: (ctx) => context.resolveLocaleForContext(ctx),
358
+ t: (locale, key, vars) => context.t(locale, key, vars),
359
+ replyText: (ctx, text, meta, options) => outputActions.replyText(ctx, text, meta, options),
360
+ deleteMessage: (chatId, messageId) => host.deleteMessage(chatId, messageId),
361
+ showProjectsMenu: (ctx, introText) => menuFlow.showProjectsMenu(ctx, introText),
362
+ showMainMenu: (ctx, introText) => menuState.showMainMenu(ctx, introText),
363
+ bindingStore: host.bindingStore,
364
+ sessionStore: host.sessionStore,
365
+ maintenanceStore: host.maintenanceStore,
366
+ ensureProjectSessionRegistered: (input) => gatewayActions.ensureProjectSessionRegistered(input),
367
+ sendPartnerNote: (input) => gatewayActions.sendPartnerNote(input),
368
+ nudgeSessionInbox: (sessionId) => host.nudgeSessionInbox(sessionId),
369
+ });
370
+ const fileHandoffActions = new transportFileHandoffActions_1.TransportFileHandoffActions({
371
+ logger: host.logger,
372
+ config: host.config,
373
+ pendingFileHandoffs: host.pendingFileHandoffs,
374
+ getPrincipalFromContext: (ctx) => context.getPrincipalFromContext(ctx),
375
+ resolveLocaleForContext: (ctx) => context.resolveLocaleForContext(ctx),
376
+ t: (locale, key, vars) => context.t(locale, key, vars),
377
+ replyText: (ctx, text, meta, options) => outputActions.replyText(ctx, text, meta, options),
378
+ deleteMessage: (chatId, messageId) => host.deleteMessage(chatId, messageId),
379
+ showProjectsMenu: (ctx) => menuFlow.showProjectsMenu(ctx),
380
+ showMainMenu: (ctx) => menuState.showMainMenu(ctx),
381
+ showProjectMemberDetail: (ctx, input) => projectView.showProjectMemberDetail(ctx, {
382
+ ...input,
383
+ inviteToken: input.inviteToken ?? "",
384
+ }),
385
+ getProjectPayloadByUuid: (sessionId, projectUuid) => projectState.getProjectPayloadByUuid(sessionId, projectUuid),
386
+ ensureProjectSessionRegistered: (input) => gatewayActions.ensureProjectSessionRegistered(input),
387
+ sendPartnerNote: (input) => gatewayActions.sendPartnerNote(input),
388
+ xchangeFileMetaStore: host.xchangeFileMetaStore,
389
+ sessionStore: host.sessionStore,
390
+ maintenanceStore: host.maintenanceStore,
391
+ objectStore: host.objectStore,
392
+ nudgeSessionInbox: (sessionId) => host.nudgeSessionInbox(sessionId),
393
+ });
394
+ const menuCallbacks = new transportMenuCallbacks_1.TransportMenuCallbacks({
395
+ logger: host.logger,
396
+ getMenuPayloadByKey: (key) => host.menuPayloadStore.getMenuPayload(key),
397
+ getPrincipalFromContext: (ctx) => context.getPrincipalFromContext(ctx),
398
+ tForContext: (ctx, key, vars) => context.tForContext(ctx, key, vars),
399
+ replyText: (ctx, text, meta, options) => outputActions.replyText(ctx, text, meta, options),
400
+ editText: (ctx, text, meta, options) => outputActions.editText(ctx, text, meta, options),
401
+ showMainMenu: (ctx, introText) => menuState.showMainMenu(ctx, introText),
402
+ showSessionsMenu: (ctx, introText) => menuFlow.showSessionsMenu(ctx, introText),
403
+ showScreenshotsMenu: (ctx, introText) => menuFlow.showScreenshotsMenu(ctx, introText),
404
+ showStorageMenu: (ctx, introText) => menuFlow.showStorageMenu(ctx, introText),
405
+ storageMessageMenu,
406
+ screenshotMessageMenu,
407
+ xchangeFileMetaStore: host.xchangeFileMetaStore,
408
+ sessionStore: host.sessionStore,
409
+ bindingStore: host.bindingStore,
410
+ objectStore: host.objectStore,
411
+ formatScreenshotDetail: (sessionId, filePath, meta) => (0, transportContent_1.formatScreenshotDetail)(sessionId, filePath, meta),
412
+ formatStorageDetail: (sessionId, filePath, meta) => (0, transportContent_1.formatStorageDetail)(sessionId, filePath, meta),
413
+ formatFilePreviewLabel: (filePath, meta) => (0, transportFormatting_1.formatFilePreviewLabel)(filePath, meta),
414
+ listActiveSessionFiles: (sessionId) => xchangeState.listActiveSessionFiles(sessionId),
415
+ createPartnerFileTargetPayload: (sessionId, targetSessionId, title, filePath) => payloadState.createPartnerFileTargetPayload(sessionId, targetSessionId, title, filePath),
416
+ ensureStoredXchangeFile: (sessionId, filePath, source) => attachmentStore.ensureStoredXchangeFile(sessionId, filePath, source),
417
+ sendDocumentToChat: (chatId, filePath, caption) => host.sendDocumentToChat(chatId, filePath, caption),
418
+ maybeNotifyToolsMismatchForSession: (sessionId) => host.maybeNotifyToolsMismatchForSession(sessionId),
419
+ callGatewayJson: (path, payload) => host.callGatewayJson(path, payload),
420
+ });
421
+ const requestFlow = new transportRequestFlow_1.TransportRequestFlow({
422
+ logger: host.logger,
423
+ config: host.config,
424
+ adminAuthStore: host.adminAuthStore,
425
+ maintenanceStore: host.maintenanceStore,
426
+ waiters: host.waiters,
427
+ isTelegramEnabled: () => host.config.distributed.mode !== "client" &&
428
+ Boolean(host.config.telegram.botToken?.trim()),
429
+ isAdminAuthEnabled: () => host.isAdminAuthEnabled(),
430
+ resolveLocaleForTelegramUserId: (telegramUserId, telegramLanguageCode) => context.resolveLocaleForTelegramUserId(telegramUserId, telegramLanguageCode),
431
+ t: (locale, key, options) => context.t(locale, key, options),
432
+ sendTextChunks: (chatId, body, meta) => outputActions.sendTextChunks(chatId, body, meta),
433
+ callGatewayJson: (path, payload) => host.callGatewayJson(path, payload),
434
+ });
435
+ const projectEvents = new transportProjectEvents_1.TransportProjectEvents({
436
+ sessionStore: host.sessionStore,
437
+ bindingStore: host.bindingStore,
438
+ resolveLocaleForTelegramUserId: (telegramUserId, telegramLanguageCode) => context.resolveLocaleForTelegramUserId(telegramUserId, telegramLanguageCode),
439
+ t: (locale, key, options) => context.t(locale, key, options),
440
+ sendNotification: (input) => host.sendNotification(input),
441
+ });
442
+ const sessionActions = new transportSessionActions_1.TransportSessionActions({
443
+ logger: host.logger,
444
+ config: host.config,
445
+ bindingStore: host.bindingStore,
446
+ sessionStore: host.sessionStore,
447
+ maintenanceStore: host.maintenanceStore,
448
+ pendingRenames: host.pendingRenames,
449
+ pendingBroadcasts: host.pendingBroadcasts,
450
+ getMainMenu: () => mainMenu,
451
+ resolveLocaleForContext: (ctx) => context.resolveLocaleForContext(ctx),
452
+ getPrincipalFromContext: (ctx) => context.getPrincipalFromContext(ctx),
453
+ t: (locale, key, options) => context.t(locale, key, options),
454
+ replyText: (ctx, text, meta, options) => outputActions.replyText(ctx, text, meta, options),
455
+ showSessionsMenu: (ctx, introText) => menuFlow.showSessionsMenu(ctx, introText),
456
+ clearPendingInteractionsForContext: (ctx) => menuFlow.clearPendingInteractionsForContext(ctx),
457
+ clearTerminalNudgeDebounceTimers: () => terminalRuntime.clearTerminalNudgeDebounceTimers(),
458
+ callGatewayJson: (path, payload) => host.callGatewayJson(path, payload),
459
+ });
460
+ const projectActions = new transportProjectActions_1.TransportProjectActions({
461
+ resolveLocaleForContext: (ctx) => context.resolveLocaleForContext(ctx),
462
+ t: (locale, key, vars) => context.t(locale, key, vars),
463
+ getPrincipalFromContext: (ctx) => context.getPrincipalFromContext(ctx),
464
+ extractCallbackSuffix: (ctx, prefix) => (0, transportUtils_1.extractCallbackSuffix)(ctx, prefix),
465
+ getGatewayActorFromContext: (ctx) => context.getGatewayActorFromContext(ctx),
466
+ bindingStore: host.bindingStore,
467
+ sessionStore: host.sessionStore,
468
+ pendingProjects: host.pendingProjects,
469
+ ensureGatewayClientUuid: (principal, actor) => gatewayActions.ensureGatewayClientUuid(principal, actor),
470
+ listGatewayProjects: (principal) => gatewayActions.listGatewayProjects(principal),
471
+ callGatewayJson: (path, payload) => host.callGatewayJson(path, payload),
472
+ activateProjectForSession: (input) => gatewayActions.activateProjectForSession(input),
473
+ ensureProjectSessionRegistered: (input) => gatewayActions.ensureProjectSessionRegistered(input),
474
+ ensureOpenedProjectIsActive: (input) => gatewayActions.ensureOpenedProjectIsActive(input),
475
+ getProjectPayloadByUuid: (sessionId, projectUuid) => projectState.getProjectPayloadByUuid(sessionId, projectUuid),
476
+ getProjectMemberPayloadByKey: (payloadKey) => projectState.getProjectMemberPayloadByKey(payloadKey),
477
+ getPartnerFileTargetPayloadByKey: (payloadKey) => projectState.getPartnerFileTargetPayloadByKey(payloadKey),
478
+ getLiveApprovalPayloadByKey: (payloadKey) => projectState.getLiveApprovalPayloadByKey(payloadKey),
479
+ beginFileHandoffModeForTarget: (ctx, input) => fileHandoffActions.beginModeForTarget(ctx, input),
480
+ beginPartnerNoteMode: (ctx, kind, target) => partnerActions.beginPartnerNoteMode(ctx, kind, target),
481
+ showProjectMembers: (ctx, input) => projectView.showProjectMembers(ctx, input),
482
+ showProjectMemberDetail: (ctx, input) => projectView.showProjectMemberDetail(ctx, input),
483
+ showProjectMemberFiles: (ctx, input) => projectView.showProjectMemberFiles(ctx, input),
484
+ showProjectsMenu: (ctx, introText) => menuFlow.showProjectsMenu(ctx, introText),
485
+ showCollabDeleteMenu: (ctx, introText) => menuFlow.showCollabDeleteMenu(ctx, introText),
486
+ replyText: (ctx, text, meta) => outputActions.replyText(ctx, text, meta),
487
+ editText: (ctx, text, meta) => outputActions.editText(ctx, text, meta),
488
+ });
489
+ const projectEntryActions = new transportProjectEntryActions_1.TransportProjectEntryActions({
490
+ bindingStore: host.bindingStore,
491
+ sessionStore: host.sessionStore,
492
+ menuPayloadStore: host.menuPayloadStore,
493
+ pendingProjects: host.pendingProjects,
494
+ resolveLocaleForContext: (ctx) => context.resolveLocaleForContext(ctx),
495
+ getPrincipalFromContext: (ctx) => context.getPrincipalFromContext(ctx),
496
+ t: (locale, key, options) => context.t(locale, key, options),
497
+ replyText: (ctx, text, meta) => outputActions.replyText(ctx, text, meta),
498
+ showProjectsMenu: (ctx, introText) => menuFlow.showProjectsMenu(ctx, introText),
499
+ listGatewayProjects: (principal) => gatewayActions.listGatewayProjects(principal),
500
+ getProjectPayloadByUuid: (sessionId, projectUuid) => projectState.getProjectPayloadByUuid(sessionId, projectUuid),
501
+ ensureOpenedProjectIsActive: (input) => gatewayActions.ensureOpenedProjectIsActive(input),
502
+ showProjectMembers: (ctx, input) => projectView.showProjectMembers(ctx, input),
503
+ ensureGatewayClientUuid: (principal) => gatewayActions.ensureGatewayClientUuid(principal),
504
+ callGatewayJson: (path, payload) => host.callGatewayJson(path, payload),
505
+ });
506
+ const messageFlow = new transportMessageFlow_1.TransportMessageFlow({
507
+ logger: host.logger,
508
+ config: host.config,
509
+ bindingStore: host.bindingStore,
510
+ sessionStore: host.sessionStore,
511
+ isAdminAuthEnabled: () => host.isAdminAuthEnabled(),
512
+ isPrincipalAdminAuthorized: (principal) => host.isPrincipalAdminAuthorized(principal),
513
+ setPrincipalAdminAuthorized: (principal) => host.setPrincipalAdminAuthorized(principal),
514
+ waiters: host.waiters,
515
+ currentAttachmentTargets: host.currentAttachmentTargets,
516
+ isAdminBotProfile: () => host.isAdminBotProfile(),
517
+ getPrincipalFromContext: (ctx) => context.getPrincipalFromContext(ctx),
518
+ ensureGatewayUserForPrincipal: ({ principal, ctx }) => host.ensureGatewayUserForPrincipal({ principal, ctx }),
519
+ extractIncomingText: (message) => (0, transportContent_1.extractIncomingText)(message),
520
+ collectIncomingAttachments: (message) => (0, transportContent_1.collectIncomingAttachments)(message),
521
+ buildInboxText: (text, attachments) => (0, transportFormatting_1.buildInboxText)(text, attachments),
522
+ clearPendingInteractionsForContext: (ctx) => menuFlow.clearPendingInteractionsForContext(ctx),
523
+ handlePendingRename: (ctx, text) => sessionActions.handlePendingRename(ctx, text),
524
+ handlePendingBroadcast: (ctx, text) => broadcastActions.handlePendingBroadcast(ctx, text),
525
+ handlePendingPartnerNote: (ctx, text) => partnerActions.handlePendingPartnerNote(ctx, text),
526
+ handlePendingFileHandoff: (ctx, text) => fileHandoffActions.handlePending(ctx, text),
527
+ handlePendingProject: (ctx, text) => projectActions.handlePendingProject(ctx, text),
528
+ replyText: (ctx, text, meta, options) => outputActions.replyText(ctx, text, meta, options),
529
+ tForContext: (ctx, key, options) => context.tForContext(ctx, key, options),
530
+ showSessionsMenu: (ctx, introText) => menuFlow.showSessionsMenu(ctx, introText),
531
+ showHelp: (ctx) => menuFlow.showHelp(ctx),
532
+ ensureGatewayScopeConsolesBound: ({ principal, ctx }) => consoleRegistry.ensureScopedConsolesBound({ principal, ctx }),
533
+ getMainMenu: () => mainMenu,
534
+ clearWaiter: (requestId) => requestFlow.clearWaiter(requestId),
535
+ callGatewayJson: (path, payload) => host.callGatewayJson(path, payload),
536
+ scheduleTerminalNudgeForInboxMessage: (sessionId, session) => terminalRuntime.scheduleTerminalNudgeForInboxMessage(sessionId, session),
537
+ downloadIncomingAttachments: (session, sessionId, sourceTelegramMessageId, attachments) => attachmentStore.downloadIncomingAttachments(session, sessionId, sourceTelegramMessageId, attachments),
538
+ storeTelegramUploadMetas: (input) => attachmentStore.storeTelegramUploadMetas(input),
539
+ deliverAttachmentToPartner: (input) => fileHandoffActions.deliverToPartnerPublic(input).then(() => { }),
540
+ });
541
+ const eventActions = new transportEventActions_1.TransportEventActions({
542
+ logger: host.logger,
543
+ config: host.config,
544
+ sessionStore: host.sessionStore,
545
+ bindingStore: host.bindingStore,
546
+ webAppLaunchRegistry: host.webAppLaunchRegistry,
547
+ createLiveApprovalMenuPayload: (input) => payloadState.createLiveApprovalMenuPayload(input),
548
+ nudgeSessionInbox: (sessionId) => host.nudgeSessionInbox(sessionId),
549
+ sendNotification: (input) => host.sendNotification(input),
550
+ resolveLocaleForTelegramUserId: (telegramUserId, telegramLanguageCode) => context.resolveLocaleForTelegramUserId(telegramUserId, telegramLanguageCode),
551
+ t: (locale, key, options) => context.t(locale, key, options),
552
+ tForTelegramUserId: (telegramUserId, key, options) => context.tForTelegramUserId(telegramUserId, key, options),
553
+ sendChatMessage: (telegramChatId, text, options, meta) => outputActions.sendChatMessage(telegramChatId, text, options, meta),
554
+ buildLiveViewUrl: (input) => liveActions.buildUrl(input),
555
+ buildLiveViewKeyboard: (buildUrlForMode, locale) => liveActions.buildKeyboard(buildUrlForMode, locale),
556
+ });
557
+ const menuShell = new transportMenuShell_1.TransportMenuShell({
558
+ logger: host.logger,
559
+ tForContext: (ctx, key) => context.tForContext(ctx, key),
560
+ showProjectsMenu: (ctx) => menuFlow.showProjectsMenu(ctx),
561
+ handleMessage: (ctx) => messageFlow.handleMessage(ctx),
562
+ cancelPendingBroadcast: (ctx) => broadcastActions.cancelPendingBroadcast(ctx),
563
+ cancelPendingPartnerNote: (ctx) => partnerActions.cancelPendingPartnerNote(ctx),
564
+ cancelPendingFileHandoff: (ctx) => fileHandoffActions.cancelPending(ctx),
565
+ handleProjectSetCallback: (ctx) => projectActions.handleProjectSetCallback(ctx),
566
+ handleProjectMembersCallback: (ctx) => projectActions.handleProjectMembersCallback(ctx),
567
+ handleProjectMemberOpenCallback: (ctx) => projectActions.handleProjectMemberOpenCallback(ctx),
568
+ handleProjectMemberNoteCallback: (ctx) => projectActions.handleProjectMemberNoteCallback(ctx),
569
+ handleProjectMemberLiveCallback: (ctx) => projectActions.handleProjectMemberLiveCallback(ctx),
570
+ handleLiveApprovalCallback: (ctx) => projectActions.handleLiveApprovalCallback(ctx),
571
+ handleTerminalPromptActionCallback: (ctx) => terminalActions.handlePromptActionCallback(ctx),
572
+ handleProjectDetailCallback: (ctx) => projectActions.handleProjectDetailCallback(ctx),
573
+ handleProjectDeleteCallback: (ctx) => projectActions.handleProjectDeleteCallback(ctx),
574
+ handleProjectLeaveCallback: (ctx) => projectActions.handleProjectLeaveCallback(ctx),
575
+ });
576
+ mainMenu.register([
577
+ storageMenu,
578
+ browserMenu,
579
+ projectsMenu,
580
+ collabToolsMenu,
581
+ collabDeleteMenu,
582
+ screenshotsMenu,
583
+ sessionsMenu,
584
+ bufferMenu,
585
+ settingsMenu,
586
+ developerMenu,
587
+ unpairConfirmMenu,
588
+ pruneConfirmMenu,
589
+ storageMessageMenu,
590
+ screenshotMessageMenu,
591
+ ]);
592
+ return {
593
+ telegramFetch,
594
+ bot,
595
+ mainMenu,
596
+ storageMenu,
597
+ browserMenu,
598
+ projectsMenu,
599
+ collabToolsMenu,
600
+ collabDeleteMenu,
601
+ screenshotsMenu,
602
+ sessionsMenu,
603
+ bufferMenu,
604
+ settingsMenu,
605
+ developerMenu,
606
+ unpairConfirmMenu,
607
+ pruneConfirmMenu,
608
+ storageMessageMenu,
609
+ screenshotMessageMenu,
610
+ terminalActions,
611
+ liveActions,
612
+ lifecycleActions,
613
+ attachmentStore,
614
+ broadcastActions,
615
+ context,
616
+ documentActions,
617
+ eventActions,
618
+ partnerActions,
619
+ fileHandoffActions,
620
+ menuFactories,
621
+ menuFingerprints,
622
+ menuFlow,
623
+ menuShell,
624
+ consoleRegistry,
625
+ gatewayActions,
626
+ messageFlow,
627
+ menuCallbacks,
628
+ menuState,
629
+ payloadState,
630
+ projectMenus,
631
+ projectEvents,
632
+ projectState,
633
+ projectView,
634
+ projectActions,
635
+ projectEntryActions,
636
+ requestFlow,
637
+ sessionActions,
638
+ outputActions,
639
+ terminalRuntime,
640
+ xchangeState,
641
+ };
642
+ }