@myagentroam/node 0.9.9 → 0.9.10

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 (214) hide show
  1. package/dist/capabilities.js +2 -92
  2. package/dist/claude-agent-sdk.js +2 -330
  3. package/dist/claude-channel.js +2 -44
  4. package/dist/codex-app-server.js +2 -503
  5. package/dist/config.js +2 -56
  6. package/dist/connector/node-connector-options.js +2 -1
  7. package/dist/connector/node-operation-router.js +2 -22
  8. package/dist/connector.js +2 -845
  9. package/dist/control-outbound-scheduler.js +2 -154
  10. package/dist/database.js +2 -1418
  11. package/dist/event-buffer.js +2 -19
  12. package/dist/fake-runner.js +2 -129
  13. package/dist/health.js +2 -3
  14. package/dist/main.js +2 -54
  15. package/dist/migrations/v001.js +3 -144
  16. package/dist/migrations/v002.js +2 -143
  17. package/dist/migrations/v003.js +2 -44
  18. package/dist/migrations/v004.js +34 -30
  19. package/dist/native-jsonl-reader.js +2 -186
  20. package/dist/native-session-history.js +2 -1119
  21. package/dist/opencode-runtime.js +2 -80
  22. package/dist/opencode-server.js +2 -263
  23. package/dist/operational.js +2 -122
  24. package/dist/process-tree.js +2 -18
  25. package/dist/rotating-log.js +2 -67
  26. package/dist/runner/abstract-runner.js +2 -232
  27. package/dist/runner/claude/managed-run-controller.js +2 -345
  28. package/dist/runner/claude-code-runner.js +2 -303
  29. package/dist/runner/codex/composer-image-markers.js +2 -0
  30. package/dist/runner/codex/conversation-parser.js +2 -861
  31. package/dist/runner/codex/managed-run-controller.js +2 -460
  32. package/dist/runner/codex-runner.js +2 -628
  33. package/dist/runner/fake-test-runner.js +2 -47
  34. package/dist/runner/opencode/conversation-parser.js +2 -221
  35. package/dist/runner/opencode/managed-run-controller.js +2 -537
  36. package/dist/runner/opencode-runner.js +2 -448
  37. package/dist/runner/runner-registry.js +2 -90
  38. package/dist/runner-command-engine.js +2 -70
  39. package/dist/runner-profiles.js +2 -215
  40. package/dist/runner-usage.js +2 -190
  41. package/dist/runtime-command-detector.js +2 -73
  42. package/dist/runtime-state.js +2 -982
  43. package/dist/service/attachment-domain-state.js +2 -7
  44. package/dist/service/conversation-history-service.js +2 -457
  45. package/dist/service/conversation-segment-service.js +2 -162
  46. package/dist/service/external-session-resume-service.js +2 -118
  47. package/dist/service/fake-managed-run-service.js +2 -60
  48. package/dist/service/managed-runner-session-service.js +2 -35
  49. package/dist/service/mcp-installation-verifier.js +2 -87
  50. package/dist/service/mcp-node-operation-service.js +2 -90
  51. package/dist/service/mcp-package-installer.js +2 -136
  52. package/dist/service/native-session-projection-service.js +2 -280
  53. package/dist/service/native-session-watch-service.js +2 -383
  54. package/dist/service/node-connection-lifecycle-service.js +2 -84
  55. package/dist/service/node-control-channel.js +2 -85
  56. package/dist/service/node-control-message-service.js +2 -107
  57. package/dist/service/node-request-service.js +2 -52
  58. package/dist/service/node-run-event-bridge.js +2 -83
  59. package/dist/service/node-terminal-channel.js +2 -182
  60. package/dist/service/node-upgrade-coordinator.js +2 -137
  61. package/dist/service/node-workspace-coordinator.js +2 -70
  62. package/dist/service/recent-run-projection-service.js +2 -78
  63. package/dist/service/run-attachment-service.js +2 -194
  64. package/dist/service/run-domain-state.js +2 -4
  65. package/dist/service/run-event-service.js +2 -193
  66. package/dist/service/run-workbench-service.js +2 -104
  67. package/dist/service/runner-channel-message-service.js +2 -20
  68. package/dist/service/runner-interaction-service.js +2 -243
  69. package/dist/service/runner-service.js +2 -71
  70. package/dist/service/session-catalog-service.js +2 -224
  71. package/dist/service/session-command-service.js +2 -76
  72. package/dist/service/session-context-service.js +2 -101
  73. package/dist/service/session-domain-state.js +2 -9
  74. package/dist/service/session-identity-service.js +2 -86
  75. package/dist/service/session-lifecycle-service.js +2 -240
  76. package/dist/service/session-message-service.js +2 -173
  77. package/dist/service/session-presentation-service.js +2 -43
  78. package/dist/service/session-query-service.js +2 -82
  79. package/dist/service/skill-directory-service.js +2 -238
  80. package/dist/service/skill-install-service.js +2 -434
  81. package/dist/service/skill-node-operation-service.js +2 -206
  82. package/dist/service/terminal-relay-state.js +2 -3
  83. package/dist/service/terminal-service.js +2 -52
  84. package/dist/service/workbench-event-service.js +2 -19
  85. package/dist/service/workbench-manifest-service.js +2 -69
  86. package/dist/service/workspace-change-service.js +2 -86
  87. package/dist/service/workspace-content-search-service.js +2 -477
  88. package/dist/service/workspace-domain-state.js +2 -41
  89. package/dist/service/workspace-file-service.js +2 -122
  90. package/dist/service/workspace-git-exclude-service.js +2 -119
  91. package/dist/service/workspace-queue-workbench-service.js +2 -304
  92. package/dist/service/workspace-service.js +2 -69
  93. package/dist/service/workspace-session-service.js +2 -139
  94. package/dist/service/workspace-upload-service.js +2 -262
  95. package/dist/service/workspace-watch-service.js +2 -146
  96. package/dist/service/workspace-workbench-service.js +2 -405
  97. package/dist/service.js +2 -38
  98. package/dist/storage.js +2 -32
  99. package/dist/supervisor.js +2 -136
  100. package/dist/terminal.js +2 -416
  101. package/dist/util/node-operation-parsers.js +2 -382
  102. package/dist/util/personal-instructions.js +2 -31
  103. package/dist/util/runner-error.js +2 -52
  104. package/dist/util/runner-native-session-parsers.js +2 -490
  105. package/dist/util/safe-error.js +2 -5
  106. package/dist/util/secret-environment.js +2 -25
  107. package/dist/workspace.js +2 -1519
  108. package/package.json +3 -3
  109. package/dist/capabilities.d.ts +0 -12
  110. package/dist/claude-agent-sdk.d.ts +0 -92
  111. package/dist/claude-channel.d.ts +0 -28
  112. package/dist/codex-app-server.d.ts +0 -133
  113. package/dist/config.d.ts +0 -18
  114. package/dist/connector/node-connector-options.d.ts +0 -27
  115. package/dist/connector/node-operation-router.d.ts +0 -9
  116. package/dist/connector.d.ts +0 -94
  117. package/dist/control-outbound-scheduler.d.ts +0 -29
  118. package/dist/database.d.ts +0 -305
  119. package/dist/event-buffer.d.ts +0 -9
  120. package/dist/fake-runner.d.ts +0 -42
  121. package/dist/health.d.ts +0 -4
  122. package/dist/main.d.ts +0 -2
  123. package/dist/migrations/v001.d.ts +0 -3
  124. package/dist/migrations/v002.d.ts +0 -4
  125. package/dist/migrations/v003.d.ts +0 -4
  126. package/dist/migrations/v004.d.ts +0 -4
  127. package/dist/native-jsonl-reader.d.ts +0 -35
  128. package/dist/native-session-history.d.ts +0 -126
  129. package/dist/opencode-runtime.d.ts +0 -33
  130. package/dist/opencode-server.d.ts +0 -49
  131. package/dist/operational.d.ts +0 -39
  132. package/dist/process-tree.d.ts +0 -9
  133. package/dist/rotating-log.d.ts +0 -17
  134. package/dist/runner/abstract-runner.d.ts +0 -172
  135. package/dist/runner/claude/managed-run-controller.d.ts +0 -51
  136. package/dist/runner/claude-code-runner.d.ts +0 -72
  137. package/dist/runner/codex/conversation-parser.d.ts +0 -59
  138. package/dist/runner/codex/managed-run-controller.d.ts +0 -90
  139. package/dist/runner/codex-runner.d.ts +0 -103
  140. package/dist/runner/fake-test-runner.d.ts +0 -26
  141. package/dist/runner/opencode/conversation-parser.d.ts +0 -31
  142. package/dist/runner/opencode/managed-run-controller.d.ts +0 -82
  143. package/dist/runner/opencode-runner.d.ts +0 -71
  144. package/dist/runner/runner-registry.d.ts +0 -19
  145. package/dist/runner-command-engine.d.ts +0 -28
  146. package/dist/runner-profiles.d.ts +0 -15
  147. package/dist/runner-usage.d.ts +0 -33
  148. package/dist/runtime-command-detector.d.ts +0 -3
  149. package/dist/runtime-state.d.ts +0 -171
  150. package/dist/service/attachment-domain-state.d.ts +0 -7
  151. package/dist/service/conversation-history-service.d.ts +0 -43
  152. package/dist/service/conversation-segment-service.d.ts +0 -20
  153. package/dist/service/external-session-resume-service.d.ts +0 -34
  154. package/dist/service/fake-managed-run-service.d.ts +0 -28
  155. package/dist/service/managed-runner-session-service.d.ts +0 -12
  156. package/dist/service/mcp-installation-verifier.d.ts +0 -9
  157. package/dist/service/mcp-node-operation-service.d.ts +0 -11
  158. package/dist/service/mcp-package-installer.d.ts +0 -8
  159. package/dist/service/native-session-projection-service.d.ts +0 -52
  160. package/dist/service/native-session-watch-service.d.ts +0 -62
  161. package/dist/service/node-connection-lifecycle-service.d.ts +0 -36
  162. package/dist/service/node-control-channel.d.ts +0 -32
  163. package/dist/service/node-control-message-service.d.ts +0 -27
  164. package/dist/service/node-request-service.d.ts +0 -14
  165. package/dist/service/node-run-event-bridge.d.ts +0 -40
  166. package/dist/service/node-terminal-channel.d.ts +0 -29
  167. package/dist/service/node-upgrade-coordinator.d.ts +0 -29
  168. package/dist/service/node-workspace-coordinator.d.ts +0 -29
  169. package/dist/service/recent-run-projection-service.d.ts +0 -14
  170. package/dist/service/run-attachment-service.d.ts +0 -38
  171. package/dist/service/run-domain-state.d.ts +0 -4
  172. package/dist/service/run-event-service.d.ts +0 -33
  173. package/dist/service/run-workbench-service.d.ts +0 -25
  174. package/dist/service/runner-channel-message-service.d.ts +0 -13
  175. package/dist/service/runner-interaction-service.d.ts +0 -39
  176. package/dist/service/runner-service.d.ts +0 -46
  177. package/dist/service/session-catalog-service.d.ts +0 -45
  178. package/dist/service/session-command-service.d.ts +0 -24
  179. package/dist/service/session-context-service.d.ts +0 -35
  180. package/dist/service/session-domain-state.d.ts +0 -9
  181. package/dist/service/session-identity-service.d.ts +0 -24
  182. package/dist/service/session-lifecycle-service.d.ts +0 -31
  183. package/dist/service/session-message-service.d.ts +0 -33
  184. package/dist/service/session-presentation-service.d.ts +0 -34
  185. package/dist/service/session-query-service.d.ts +0 -35
  186. package/dist/service/skill-directory-service.d.ts +0 -20
  187. package/dist/service/skill-install-service.d.ts +0 -21
  188. package/dist/service/skill-node-operation-service.d.ts +0 -44
  189. package/dist/service/terminal-relay-state.d.ts +0 -6
  190. package/dist/service/terminal-service.d.ts +0 -12
  191. package/dist/service/workbench-event-service.d.ts +0 -9
  192. package/dist/service/workbench-manifest-service.d.ts +0 -90
  193. package/dist/service/workspace-change-service.d.ts +0 -9
  194. package/dist/service/workspace-content-search-service.d.ts +0 -14
  195. package/dist/service/workspace-domain-state.d.ts +0 -79
  196. package/dist/service/workspace-file-service.d.ts +0 -18
  197. package/dist/service/workspace-git-exclude-service.d.ts +0 -4
  198. package/dist/service/workspace-queue-workbench-service.d.ts +0 -86
  199. package/dist/service/workspace-service.d.ts +0 -15
  200. package/dist/service/workspace-session-service.d.ts +0 -23
  201. package/dist/service/workspace-upload-service.d.ts +0 -39
  202. package/dist/service/workspace-watch-service.d.ts +0 -23
  203. package/dist/service/workspace-workbench-service.d.ts +0 -58
  204. package/dist/service.d.ts +0 -4
  205. package/dist/storage.d.ts +0 -2
  206. package/dist/supervisor.d.ts +0 -1
  207. package/dist/terminal.d.ts +0 -133
  208. package/dist/util/node-operation-parsers.d.ts +0 -92
  209. package/dist/util/personal-instructions.d.ts +0 -2
  210. package/dist/util/runner-error.d.ts +0 -6
  211. package/dist/util/runner-native-session-parsers.d.ts +0 -74
  212. package/dist/util/safe-error.d.ts +0 -2
  213. package/dist/util/secret-environment.d.ts +0 -1
  214. package/dist/workspace.d.ts +0 -217
@@ -1,146 +1,2 @@
1
- const WATCH_TTL_MS = 45_000;
2
- export class WorkspaceWatchService {
3
- state;
4
- onSessionWatchRequired;
5
- onSessionWatchUnused;
6
- constructor(state, onSessionWatchRequired, onSessionWatchUnused) {
7
- this.state = state;
8
- this.onSessionWatchRequired = onSessionWatchRequired;
9
- this.onSessionWatchUnused = onSessionWatchUnused;
10
- }
11
- parseTopics(input) {
12
- if (!plain(input.topics))
13
- throw new Error('WORKSPACE_WATCH_INVALID');
14
- const sessions = input.topics.sessions === true;
15
- const changes = input.topics.changes === true;
16
- const rawFiles = input.topics.files;
17
- let files;
18
- if (rawFiles !== undefined) {
19
- if (!plain(rawFiles) || typeof rawFiles.path !== 'string')
20
- throw new Error('WORKSPACE_WATCH_INVALID');
21
- if ((rawFiles.cursor !== undefined && typeof rawFiles.cursor !== 'string') ||
22
- (rawFiles.limit !== undefined &&
23
- (typeof rawFiles.limit !== 'number' ||
24
- !Number.isInteger(rawFiles.limit) ||
25
- rawFiles.limit < 1 ||
26
- rawFiles.limit > 200)))
27
- throw new Error('WORKSPACE_WATCH_INVALID');
28
- files = {
29
- path: rawFiles.path,
30
- ...(typeof rawFiles.cursor === 'string' ? { cursor: rawFiles.cursor } : {}),
31
- ...(typeof rawFiles.limit === 'number' ? { limit: rawFiles.limit } : {})
32
- };
33
- }
34
- if (!sessions && !changes && files === undefined)
35
- throw new Error('WORKSPACE_WATCH_INVALID');
36
- return { sessions, changes, files };
37
- }
38
- key(input) {
39
- return `${this.sessionHash(input)}:${this.connectionId(input)}`;
40
- }
41
- sessionHash(input) {
42
- return typeof input.__workspaceWatchSessionHash === 'string'
43
- ? input.__workspaceWatchSessionHash
44
- : 'local-test';
45
- }
46
- connectionId(input) {
47
- if (typeof input.workbenchConnectionId !== 'string')
48
- throw new Error('WORKSPACE_WATCH_INVALID');
49
- return input.workbenchConnectionId;
50
- }
51
- create(workspaceId, watchId, sessionHash, workbenchConnectionId, nodeGeneration, topics) {
52
- const key = `${sessionHash}:${workbenchConnectionId}`;
53
- for (const [activeWorkspaceId, watches] of this.state.watches)
54
- if (watches.has(key))
55
- this.remove(activeWorkspaceId, key);
56
- const watch = {
57
- workspaceId,
58
- watchId,
59
- sessionHash,
60
- workbenchConnectionId,
61
- nodeGeneration,
62
- expiresAt: Date.now() + WATCH_TTL_MS,
63
- topics,
64
- timer: undefined
65
- };
66
- watch.timer = this.expiryTimer(workspaceId, key);
67
- const watches = this.state.watches.get(workspaceId) ?? new Map();
68
- watches.set(key, watch);
69
- this.state.watches.set(workspaceId, watches);
70
- if (topics.sessions)
71
- this.onSessionWatchRequired(workspaceId);
72
- return watch;
73
- }
74
- renew(workspaceId, key, watchId) {
75
- const watch = this.state.watches.get(workspaceId)?.get(key);
76
- if (watch === undefined || watch.watchId !== watchId)
77
- return undefined;
78
- if (watch.expiresAt <= Date.now()) {
79
- this.remove(workspaceId, key);
80
- return undefined;
81
- }
82
- clearTimeout(watch.timer);
83
- watch.expiresAt = Date.now() + WATCH_TTL_MS;
84
- watch.timer = this.expiryTimer(workspaceId, key);
85
- return watch;
86
- }
87
- matches(workspaceId, key, watchId) {
88
- const watch = this.state.watches.get(workspaceId)?.get(key);
89
- return watch !== undefined && watch.watchId === watchId && watch.expiresAt > Date.now();
90
- }
91
- existing(workspaceId, key) {
92
- const watch = this.state.watches.get(workspaceId)?.get(key);
93
- return watch !== undefined && watch.expiresAt > Date.now() ? watch : undefined;
94
- }
95
- remove(workspaceId, key) {
96
- const watches = this.state.watches.get(workspaceId);
97
- const watch = watches?.get(key);
98
- if (watch === undefined)
99
- return;
100
- clearTimeout(watch.timer);
101
- watches?.delete(key);
102
- if (watches?.size === 0)
103
- this.state.watches.delete(workspaceId);
104
- if (!this.topicActive(workspaceId, 'sessions'))
105
- this.onSessionWatchUnused(workspaceId);
106
- }
107
- clear(workspaceId) {
108
- const watches = this.state.watches.get(workspaceId);
109
- if (watches !== undefined)
110
- for (const watch of watches.values())
111
- clearTimeout(watch.timer);
112
- this.state.watches.delete(workspaceId);
113
- this.state.watchRevisions.delete(workspaceId);
114
- this.onSessionWatchUnused(workspaceId);
115
- }
116
- clearAll() {
117
- for (const watches of this.state.watches.values())
118
- for (const watch of watches.values())
119
- clearTimeout(watch.timer);
120
- this.state.watches.clear();
121
- this.state.watchRevisions.clear();
122
- }
123
- nextRevision(workspaceId) {
124
- const revision = (this.state.watchRevisions.get(workspaceId) ?? 0) + 1;
125
- this.state.watchRevisions.set(workspaceId, revision);
126
- return revision;
127
- }
128
- nextSnapshotSequence() {
129
- this.state.watchSnapshotSequence += 1;
130
- return this.state.watchSnapshotSequence;
131
- }
132
- topicActive(workspaceId, topic) {
133
- return [...(this.state.watches.get(workspaceId)?.values() ?? [])].some((watch) => topic === 'files' ? watch.topics.files !== undefined : watch.topics[topic]);
134
- }
135
- activeWatches(workspaceId) {
136
- return [...(this.state.watches.get(workspaceId)?.values() ?? [])].filter((watch) => watch.expiresAt > Date.now());
137
- }
138
- expiryTimer(workspaceId, key) {
139
- const timer = setTimeout(() => this.remove(workspaceId, key), WATCH_TTL_MS);
140
- timer.unref();
141
- return timer;
142
- }
143
- }
144
- function plain(value) {
145
- return typeof value === 'object' && value !== null && !Array.isArray(value);
146
- }
1
+ /* mar-release-protected */
2
+ const _0xb750ef=_0x34e2;(function(_0x16b6e7,_0xa93171){const _0x5afa4d=_0x34e2,_0x457406=_0x16b6e7();while(!![]){try{const _0x411f4f=parseInt(_0x5afa4d(0x9c))/(-0x265*-0x7+-0x1*0x10c0+-0x2)*(parseInt(_0x5afa4d(0xa6))/(0x17a3+-0x10e8+-0x6b9))+-parseInt(_0x5afa4d(0xb6))/(-0x3d9*-0x5+-0x1*-0x22ff+-0x3639)+parseInt(_0x5afa4d(0xc8))/(0x86f*-0x1+-0x16*0x1b7+-0x1*-0x2e2d)+-parseInt(_0x5afa4d(0x8f))/(0x2576+-0x1b24+-0xa4d)*(-parseInt(_0x5afa4d(0xc0))/(-0x129b+0x1e65+-0xbc4))+-parseInt(_0x5afa4d(0xc6))/(-0xda3+-0x23fe+0x31a8)*(-parseInt(_0x5afa4d(0x9b))/(-0x18e4+0x26b1+-0x1*0xdc5))+-parseInt(_0x5afa4d(0xa4))/(0x31*0xa+0x233+-0x414)+parseInt(_0x5afa4d(0xba))/(-0xd51+-0x510+0x5*0x3af);if(_0x411f4f===_0xa93171)break;else _0x457406['push'](_0x457406['shift']());}catch(_0x3bc9d9){_0x457406['push'](_0x457406['shift']());}}}(_0x36ec,0x77e7*-0x37+0x1*-0x5e0fd+0x2d0314));function _0x36ec(){const _0x46e32b=['zxHWAxjLC0f0','mtHLu01Ar3C','C2vZC2LVBKHHC2G','z2v0','y3jLyxrL','C3rYAw5N','CMvTB3zL','ndjAuKHxrvO','y2XLyxi','nte4otyZnLPhrxzKDa','CMvUzxC','AxnbCNjHEq','Bg9JywWTDgvZDa','nJK1mJKWzKjfAerx','zMLSzxm','x193B3jRC3bHy2vxyxrJAfnLC3nPB25iyxnO','Bwf0y2HLCW','zgvSzxrL','y2XLyxjbBgW','C2L6zq','BgLTAxq','D29YA2jLBMnOq29UBMvJDgLVBKLK','Cgf0Aa','zxHWAxj5vgLTzxi','DMfSDwvZ','mZK0otm2txH6vwrQ','nde5nty2tefxsxfo','D2f0y2HLCW','CgfYC2vuB3bPy3m','BMv4DfjLDMLZAw9U','Dg9WAwnby3rPDMu','BNvTyMvY','C3rHDgu','y2HHBMDLCW','mtq1ndi2nZDnvvjhwNm','C2v0','mM9TwufKEG','y3vYC29Y','BM93','y29UBMvJDgLVBKLK','D2f0y2HtBMfWC2HVDfnLCxvLBMnL','BMv4DfnUyxbZAg90u2vXDwvUy2u','zMLSDgvY','v09ss1nqqunfx1Dbvenix0LovKfmsuq','Dg9WAwnZ','C29Tzq','Dw5Yzwy','A2v5','B2jQzwn0','ywn0AxzLv2f0y2HLCW','zxHPC3rPBMC','D2f0y2Hjza','ndaWnZq0mMPIqvvLCq','B25tzxnZAw9Uv2f0y2Hszxf1AxjLza','AxnjBNrLz2vY','D2f0y2HszxzPC2LVBNm','mtm5nZCYmJbtsgDmD2m','B25tzxnZAw9Uv2f0y2HvBNvZzwq','C2vZC2LVBNm','AgfZ','DgLTzxi'];_0x36ec=function(){return _0x46e32b;};return _0x36ec();}function _0x34e2(_0x39f427,_0x22a3da){_0x39f427=_0x39f427-(0x3*-0x74d+-0x2543+0x1ddb*0x2);const _0x4747da=_0x36ec();let _0x358d21=_0x4747da[_0x39f427];if(_0x34e2['JTgQgG']===undefined){var _0x18cc18=function(_0x4e532d){const _0x5c8a4c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x266fac='',_0x395e5d='';for(let _0x17a349=-0x81a*0x2+-0x1*0x1543+0x8b*0x45,_0x18cf19,_0x479c4e,_0x3427df=0x1*-0x1693+-0x93*0x1+-0x1*-0x1726;_0x479c4e=_0x4e532d['charAt'](_0x3427df++);~_0x479c4e&&(_0x18cf19=_0x17a349%(0x3ad+-0xd47+-0x2*-0x4cf)?_0x18cf19*(0x1ae0+0x1*0x1c11+-0x36b1)+_0x479c4e:_0x479c4e,_0x17a349++%(0x25b1+0x954*-0x2+0x3*-0x657))?_0x266fac+=String['fromCharCode'](0x1270+0x201+-0x1372&_0x18cf19>>(-(-0x10*-0xad+0x4f9+0x7*-0x241)*_0x17a349&-0x879+0xd8d*-0x1+-0x160c*-0x1)):0x1bb4+0x8*-0x23e+-0x9c4){_0x479c4e=_0x5c8a4c['indexOf'](_0x479c4e);}for(let _0x5d7e0e=-0x47*-0x57+-0x7c9*0x1+-0x1058,_0x5245ae=_0x266fac['length'];_0x5d7e0e<_0x5245ae;_0x5d7e0e++){_0x395e5d+='%'+('00'+_0x266fac['charCodeAt'](_0x5d7e0e)['toString'](-0x1290+-0xb5d+0x1dfd))['slice'](-(0x1984+-0x20b4+0x133*0x6));}return decodeURIComponent(_0x395e5d);};_0x34e2['VVjAUT']=_0x18cc18,_0x34e2['ZslnvI']={},_0x34e2['JTgQgG']=!![];}const _0x4f9edd=_0x4747da[0x2496+0xa49+0x47*-0xa9];_0x34e2['NremcH']!==_0x4f9edd&&(_0x34e2['ZslnvI']={},_0x34e2['NremcH']=_0x4f9edd);const _0x47ca52=_0x34e2['ZslnvI'][_0x39f427];return _0x47ca52===undefined?(_0x358d21=_0x34e2['VVjAUT'](_0x358d21),_0x34e2['ZslnvI'][_0x39f427]=_0x358d21):_0x358d21=_0x47ca52,_0x358d21;}const WATCH_TTL_MS=-0x13d95+0xeb*0x97+0x162c0;export class WorkspaceWatchService{[_0xb750ef(0xa2)];[_0xb750ef(0xb7)];[_0xb750ef(0xbb)];constructor(_0x255886,_0x1f26b2,_0x27497e){const _0x37f767=_0xb750ef;this[_0x37f767(0xa2)]=_0x255886,this[_0x37f767(0xb7)]=_0x1f26b2,this[_0x37f767(0xbb)]=_0x27497e;}[_0xb750ef(0x9e)](_0x4da3c0){const _0x5526de=_0xb750ef;if(!plain(_0x4da3c0[_0x5526de(0xae)]))throw new Error(_0x5526de(0xad));const _0x5f49e9=_0x4da3c0[_0x5526de(0xae)][_0x5526de(0xbc)]===!![],_0x575fed=_0x4da3c0[_0x5526de(0xae)][_0x5526de(0xa3)]===!![],_0x1c9c54=_0x4da3c0[_0x5526de(0xae)][_0x5526de(0x90)];let _0x518099;if(_0x1c9c54!==undefined){if(!plain(_0x1c9c54)||typeof _0x1c9c54[_0x5526de(0x98)]!==_0x5526de(0xc4))throw new Error(_0x5526de(0xad));if(_0x1c9c54[_0x5526de(0xa7)]!==undefined&&typeof _0x1c9c54[_0x5526de(0xa7)]!==_0x5526de(0xc4)||_0x1c9c54[_0x5526de(0x96)]!==undefined&&(typeof _0x1c9c54[_0x5526de(0x96)]!==_0x5526de(0xa1)||!Number[_0x5526de(0xb8)](_0x1c9c54[_0x5526de(0x96)])||_0x1c9c54[_0x5526de(0x96)]<0x3*-0x31+0x18cd+-0x9*0x2b1||_0x1c9c54[_0x5526de(0x96)]>0x3ad+-0xd47+-0x3*-0x376))throw new Error(_0x5526de(0xad));_0x518099={'path':_0x1c9c54[_0x5526de(0x98)],...typeof _0x1c9c54[_0x5526de(0xa7)]===_0x5526de(0xc4)?{'cursor':_0x1c9c54[_0x5526de(0xa7)]}:{},...typeof _0x1c9c54[_0x5526de(0x96)]===_0x5526de(0xa1)?{'limit':_0x1c9c54[_0x5526de(0x96)]}:{}};}if(!_0x5f49e9&&!_0x575fed&&_0x518099===undefined)throw new Error(_0x5526de(0xad));return{'sessions':_0x5f49e9,'changes':_0x575fed,'files':_0x518099};}[_0xb750ef(0xb1)](_0x19cc23){const _0x288b03=_0xb750ef;return this[_0x288b03(0xc1)](_0x19cc23)+':'+this[_0x288b03(0xa9)](_0x19cc23);}[_0xb750ef(0xc1)](_0x41f9a8){const _0x1cb078=_0xb750ef;return typeof _0x41f9a8[_0x1cb078(0x91)]===_0x1cb078(0xc4)?_0x41f9a8[_0x1cb078(0x91)]:_0x1cb078(0x8e);}[_0xb750ef(0xa9)](_0x342f5a){const _0x3c15a1=_0xb750ef;if(typeof _0x342f5a[_0x3c15a1(0x97)]!==_0x3c15a1(0xc4))throw new Error(_0x3c15a1(0xad));return _0x342f5a[_0x3c15a1(0x97)];}[_0xb750ef(0xc3)](_0x3a720d,_0x5a97ed,_0x4d2310,_0x262f4d,_0x326c9a,_0x1d262d){const _0x451354=_0xb750ef,_0x586b41=_0x4d2310+':'+_0x262f4d;for(const [_0x1908eb,_0x21d157]of this[_0x451354(0xa2)][_0x451354(0x9d)])if(_0x21d157[_0x451354(0xbd)](_0x586b41))this[_0x451354(0xc5)](_0x1908eb,_0x586b41);const _0x136f06={'workspaceId':_0x3a720d,'watchId':_0x5a97ed,'sessionHash':_0x4d2310,'workbenchConnectionId':_0x262f4d,'nodeGeneration':_0x326c9a,'expiresAt':Date[_0x451354(0xa8)]()+WATCH_TTL_MS,'topics':_0x1d262d,'timer':undefined};_0x136f06[_0x451354(0xbe)]=this[_0x451354(0x99)](_0x3a720d,_0x586b41);const _0x1e52b0=this[_0x451354(0xa2)][_0x451354(0x9d)][_0x451354(0xc2)](_0x3a720d)??new Map();_0x1e52b0[_0x451354(0xa5)](_0x586b41,_0x136f06),this[_0x451354(0xa2)][_0x451354(0x9d)][_0x451354(0xa5)](_0x3a720d,_0x1e52b0);if(_0x1d262d[_0x451354(0xbc)])this[_0x451354(0xb7)](_0x3a720d);return _0x136f06;}[_0xb750ef(0x8c)](_0x5325a1,_0x180117,_0x24bb1b){const _0x388184=_0xb750ef,_0x4ed416=this[_0x388184(0xa2)][_0x388184(0x9d)][_0x388184(0xc2)](_0x5325a1)?.[_0x388184(0xc2)](_0x180117);if(_0x4ed416===undefined||_0x4ed416[_0x388184(0xb5)]!==_0x24bb1b)return undefined;if(_0x4ed416[_0x388184(0xbf)]<=Date[_0x388184(0xa8)]())return this[_0x388184(0xc5)](_0x5325a1,_0x180117),undefined;return clearTimeout(_0x4ed416[_0x388184(0xbe)]),_0x4ed416[_0x388184(0xbf)]=Date[_0x388184(0xa8)]()+WATCH_TTL_MS,_0x4ed416[_0x388184(0xbe)]=this[_0x388184(0x99)](_0x5325a1,_0x180117),_0x4ed416;}[_0xb750ef(0x92)](_0x7c64df,_0xeca8bd,_0x1b2206){const _0x55a1ff=_0xb750ef,_0x59aa43=this[_0x55a1ff(0xa2)][_0x55a1ff(0x9d)][_0x55a1ff(0xc2)](_0x7c64df)?.[_0x55a1ff(0xc2)](_0xeca8bd);return _0x59aa43!==undefined&&_0x59aa43[_0x55a1ff(0xb5)]===_0x1b2206&&_0x59aa43[_0x55a1ff(0xbf)]>Date[_0x55a1ff(0xa8)]();}[_0xb750ef(0xb4)](_0x4cb94a,_0x5c5755){const _0x4cf93e=_0xb750ef,_0x3c3d9a=this[_0x4cf93e(0xa2)][_0x4cf93e(0x9d)][_0x4cf93e(0xc2)](_0x4cb94a)?.[_0x4cf93e(0xc2)](_0x5c5755);return _0x3c3d9a!==undefined&&_0x3c3d9a[_0x4cf93e(0xbf)]>Date[_0x4cf93e(0xa8)]()?_0x3c3d9a:undefined;}[_0xb750ef(0xc5)](_0x11b626,_0x7f39c8){const _0x5a6771=_0xb750ef,_0x3589a8=this[_0x5a6771(0xa2)][_0x5a6771(0x9d)][_0x5a6771(0xc2)](_0x11b626),_0x453e0a=_0x3589a8?.[_0x5a6771(0xc2)](_0x7f39c8);if(_0x453e0a===undefined)return;clearTimeout(_0x453e0a[_0x5a6771(0xbe)]),_0x3589a8?.[_0x5a6771(0x93)](_0x7f39c8);if(_0x3589a8?.[_0x5a6771(0x95)]===0x1ae0+0x1*0x1c11+-0x36f1)this[_0x5a6771(0xa2)][_0x5a6771(0x9d)][_0x5a6771(0x93)](_0x11b626);if(!this[_0x5a6771(0xa0)](_0x11b626,_0x5a6771(0xbc)))this[_0x5a6771(0xbb)](_0x11b626);}[_0xb750ef(0xc7)](_0x39f427){const _0x4b070c=_0xb750ef,_0x22a3da=this[_0x4b070c(0xa2)][_0x4b070c(0x9d)][_0x4b070c(0xc2)](_0x39f427);if(_0x22a3da!==undefined){for(const _0x4747da of _0x22a3da[_0x4b070c(0x9a)]())clearTimeout(_0x4747da[_0x4b070c(0xbe)]);}this[_0x4b070c(0xa2)][_0x4b070c(0x9d)][_0x4b070c(0x93)](_0x39f427),this[_0x4b070c(0xa2)][_0x4b070c(0xb9)][_0x4b070c(0x93)](_0x39f427),this[_0x4b070c(0xbb)](_0x39f427);}[_0xb750ef(0x94)](){const _0x2aa185=_0xb750ef;for(const _0x358d21 of this[_0x2aa185(0xa2)][_0x2aa185(0x9d)][_0x2aa185(0x9a)]())for(const _0x18cc18 of _0x358d21[_0x2aa185(0x9a)]())clearTimeout(_0x18cc18[_0x2aa185(0xbe)]);this[_0x2aa185(0xa2)][_0x2aa185(0x9d)][_0x2aa185(0xc7)](),this[_0x2aa185(0xa2)][_0x2aa185(0xb9)][_0x2aa185(0xc7)]();}[_0xb750ef(0x9f)](_0x4f9edd){const _0x335c2e=_0xb750ef,_0x47ca52=(this[_0x335c2e(0xa2)][_0x335c2e(0xb9)][_0x335c2e(0xc2)](_0x4f9edd)??0x25b1+0x954*-0x2+0x1*-0x1309)+(0x1270+0x201+-0x1470);return this[_0x335c2e(0xa2)][_0x335c2e(0xb9)][_0x335c2e(0xa5)](_0x4f9edd,_0x47ca52),_0x47ca52;}[_0xb750ef(0xab)](){const _0x4a489c=_0xb750ef;return this[_0x4a489c(0xa2)][_0x4a489c(0xaa)]+=-0x10*-0xad+0x4f9+0x8*-0x1f9,this[_0x4a489c(0xa2)][_0x4a489c(0xaa)];}[_0xb750ef(0xa0)](_0x4e532d,_0x5c8a4c){const _0x4f4428=_0xb750ef;return[...this[_0x4f4428(0xa2)][_0x4f4428(0x9d)][_0x4f4428(0xc2)](_0x4e532d)?.[_0x4f4428(0x9a)]()??[]][_0x4f4428(0xaf)](_0x266fac=>_0x5c8a4c===_0x4f4428(0x90)?_0x266fac[_0x4f4428(0xae)][_0x4f4428(0x90)]!==undefined:_0x266fac[_0x4f4428(0xae)][_0x5c8a4c]);}[_0xb750ef(0xb3)](_0x395e5d){const _0x15f0e6=_0xb750ef;return[...this[_0x15f0e6(0xa2)][_0x15f0e6(0x9d)][_0x15f0e6(0xc2)](_0x395e5d)?.[_0x15f0e6(0x9a)]()??[]][_0x15f0e6(0xac)](_0x17a349=>_0x17a349[_0x15f0e6(0xbf)]>Date[_0x15f0e6(0xa8)]());}[_0xb750ef(0x99)](_0x18cf19,_0x479c4e){const _0x5c7895=_0xb750ef,_0x3427df=setTimeout(()=>this[_0x5c7895(0xc5)](_0x18cf19,_0x479c4e),WATCH_TTL_MS);return _0x3427df[_0x5c7895(0xb0)](),_0x3427df;}}function plain(_0x5d7e0e){const _0x3a25fd=_0xb750ef;return typeof _0x5d7e0e===_0x3a25fd(0xb2)&&_0x5d7e0e!==null&&!Array[_0x3a25fd(0x8d)](_0x5d7e0e);}
@@ -1,405 +1,2 @@
1
- import { listGitHistoryRefs, readGitHistory, readGitHistoryFileDiff, readGitHistoryFileContentRange, readGitHistoryFiles, readCurrentChangeDiff, readRestrictedDiff, resolveGitRepository, restoreCurrentChange } from '../workspace.js';
2
- import { WorkspaceContentSearchService } from './workspace-content-search-service.js';
3
- export class WorkspaceWorkbenchService {
4
- options;
5
- contentSearch;
6
- topicRefreshes = new Map();
7
- dirtyTopics = new Set();
8
- constructor(options) {
9
- this.options = options;
10
- this.contentSearch = new WorkspaceContentSearchService(options.files);
11
- }
12
- operations() {
13
- return {
14
- 'workspace.watch': (data) => this.watch(record(data)),
15
- 'workspace.unwatch': (data) => this.unwatch(record(data)),
16
- 'workspace.files.list': (data) => this.listFiles(record(data)),
17
- 'workspace.file.read': (data) => this.readFile(record(data)),
18
- 'workspace.file.content.read': (data) => this.readFileContent(record(data)),
19
- 'workspace.files.search': (data) => this.searchFiles(record(data)),
20
- 'workspace.files.mutate': (data) => this.mutateFile(record(data)),
21
- 'workspace.content.search': (data) => this.searchContent(record(data)),
22
- 'workspace.files.upload.preflight': (data) => this.preflight(record(data)),
23
- 'workspace.files.upload.create': (data) => this.createUpload(record(data)),
24
- 'workspace.files.upload.chunk': (data) => this.writeUpload(record(data)),
25
- 'workspace.files.upload.status': (data) => ({
26
- upload: this.options.uploads.status(record(data).uploadId)
27
- }),
28
- 'workspace.files.upload.complete': (data) => this.completeUpload(record(data)),
29
- 'workspace.files.upload.cancel': (data) => this.cancelUpload(record(data)),
30
- 'workspace.changes.current': (data) => this.currentChanges(record(data)),
31
- 'workspace.change.diff': (data) => this.changeDiff(record(data)),
32
- 'workspace.change.restore': (data) => this.restoreChange(record(data)),
33
- 'workspace.git.refs.list': (data) => this.gitRefs(record(data)),
34
- 'workspace.git.history.list': (data) => this.gitHistory(record(data)),
35
- 'workspace.git.commit.files': (data) => this.gitCommitFiles(record(data)),
36
- 'workspace.git.commit.file.diff': (data) => this.gitCommitFileDiff(record(data)),
37
- 'workspace.git.commit.file.content.read': (data) => this.gitCommitFileContent(record(data)),
38
- 'workspace.diff': (data) => this.diff(record(data))
39
- };
40
- }
41
- async refreshTopic(workspaceId, topic) {
42
- const key = `${workspaceId}:${topic}`;
43
- const active = this.topicRefreshes.get(key);
44
- if (active !== undefined) {
45
- this.dirtyTopics.add(key);
46
- return active;
47
- }
48
- const refresh = this.performTopicRefresh(workspaceId, topic).catch(() => {
49
- this.emitTopicFailure(workspaceId, topic);
50
- });
51
- this.topicRefreshes.set(key, refresh);
52
- try {
53
- await refresh;
54
- }
55
- finally {
56
- if (this.topicRefreshes.get(key) === refresh)
57
- this.topicRefreshes.delete(key);
58
- if (this.dirtyTopics.delete(key))
59
- void this.refreshTopic(workspaceId, topic);
60
- }
61
- }
62
- emitTopicFailure(workspaceId, topic) {
63
- for (const watch of this.options.watch.activeWatches(workspaceId)) {
64
- const subscribed = topic === 'files' ? watch.topics.files !== undefined : watch.topics[topic] === true;
65
- if (!subscribed)
66
- continue;
67
- this.options.emitWatchEvent({
68
- type: 'watch.failed',
69
- workbenchConnectionId: watch.workbenchConnectionId,
70
- watchType: 'workspace',
71
- watchId: watch.watchId,
72
- nodeGeneration: watch.nodeGeneration,
73
- nodeId: this.options.nodeId(),
74
- workspaceId,
75
- topic,
76
- code: 'WORKSPACE_WATCH_SNAPSHOT_FAILED',
77
- message: 'Workspace watch snapshot failed.'
78
- });
79
- }
80
- }
81
- async performTopicRefresh(workspaceId, topic) {
82
- const workspace = this.options.requireWorkspace(workspaceId);
83
- const watches = this.options.watch.activeWatches(workspaceId);
84
- if (topic === 'sessions') {
85
- const subscribers = watches.filter((watch) => watch.topics.sessions);
86
- if (subscribers.length === 0)
87
- return;
88
- const payload = await this.options.listSessions(workspace.id);
89
- for (const watch of subscribers)
90
- this.deliverSnapshot(workspace, watch, topic, payload);
91
- return;
92
- }
93
- if (topic === 'changes') {
94
- const subscribers = watches.filter((watch) => watch.topics.changes);
95
- if (subscribers.length === 0)
96
- return;
97
- const payload = workspace.kind === 'GIT_WORKSPACE' ? await this.options.changes.current(workspace) : null;
98
- for (const watch of subscribers)
99
- this.deliverSnapshot(workspace, watch, topic, payload);
100
- return;
101
- }
102
- const views = new Map();
103
- for (const watch of watches) {
104
- if (watch.topics.files === undefined)
105
- continue;
106
- const key = JSON.stringify(watch.topics.files);
107
- views.set(key, [...(views.get(key) ?? []), watch]);
108
- }
109
- await Promise.all([...views.values()].map(async (subscribers) => {
110
- const view = subscribers[0]?.topics.files;
111
- if (view === undefined)
112
- return;
113
- const payload = { files: await this.options.files.list(workspace, view) };
114
- for (const watch of subscribers)
115
- this.deliverSnapshot(workspace, watch, topic, payload);
116
- }));
117
- }
118
- async watch(input) {
119
- if (typeof input.workspaceId !== 'string' ||
120
- typeof input.watchId !== 'string' ||
121
- typeof input.workbenchConnectionId !== 'string' ||
122
- !/^[A-Za-z0-9_-]{8,128}$/.test(input.watchId) ||
123
- (input.mode !== 'initial' && input.mode !== 'renew'))
124
- throw new Error('WORKSPACE_WATCH_INVALID');
125
- const workspace = this.options.requireWorkspace(input.workspaceId);
126
- if (input.mode === 'renew') {
127
- const watch = this.options.watch.renew(workspace.id, this.options.watch.key(input), input.watchId);
128
- if (watch === undefined)
129
- throw new Error('WORKSPACE_WATCH_NOT_FOUND');
130
- return this.accepted(watch);
131
- }
132
- const topics = this.options.watch.parseTopics(input);
133
- const existing = this.options.watch.existing(workspace.id, this.options.watch.key(input));
134
- if (existing?.watchId === input.watchId &&
135
- JSON.stringify(existing.topics) === JSON.stringify(topics)) {
136
- this.options.watch.renew(workspace.id, this.options.watch.key(input), input.watchId);
137
- return this.accepted(existing);
138
- }
139
- const watch = this.options.watch.create(workspace.id, input.watchId, this.options.watch.sessionHash(input), input.workbenchConnectionId, this.options.nodeGeneration(), topics);
140
- void this.createInitialSnapshots(workspace, watch);
141
- return this.accepted(watch);
142
- }
143
- unwatch(input) {
144
- if (typeof input.workspaceId !== 'string' ||
145
- typeof input.watchId !== 'string' ||
146
- typeof input.workbenchConnectionId !== 'string' ||
147
- !/^[A-Za-z0-9_-]{8,128}$/.test(input.watchId))
148
- throw new Error('WORKSPACE_WATCH_INVALID');
149
- const key = this.options.watch.key(input);
150
- const watch = this.options.watch.renew(input.workspaceId, key, input.watchId);
151
- if (watch !== undefined)
152
- this.options.watch.remove(input.workspaceId, key);
153
- return { stopped: true };
154
- }
155
- accepted(watch) {
156
- return {
157
- accepted: true,
158
- watchId: watch.watchId,
159
- nodeGeneration: watch.nodeGeneration,
160
- expiresAt: watch.expiresAt
161
- };
162
- }
163
- async createInitialSnapshots(workspace, watch) {
164
- const tasks = [];
165
- const emit = async (topic, read) => {
166
- try {
167
- const payload = await read();
168
- if (!this.options.watch.matches(workspace.id, `${watch.sessionHash}:${watch.workbenchConnectionId}`, watch.watchId))
169
- return;
170
- this.options.emitWatchEvent({
171
- type: 'watch.workspace.snapshot',
172
- workbenchConnectionId: watch.workbenchConnectionId,
173
- watchId: watch.watchId,
174
- nodeGeneration: watch.nodeGeneration,
175
- nodeId: this.options.nodeId(),
176
- workspaceId: workspace.id,
177
- topic,
178
- revision: this.options.watch.nextRevision(workspace.id),
179
- snapshotSequence: this.options.watch.nextSnapshotSequence(),
180
- expiresAt: watch.expiresAt,
181
- payload
182
- });
183
- }
184
- catch {
185
- this.options.emitWatchEvent({
186
- type: 'watch.failed',
187
- workbenchConnectionId: watch.workbenchConnectionId,
188
- watchType: 'workspace',
189
- watchId: watch.watchId,
190
- nodeGeneration: watch.nodeGeneration,
191
- nodeId: this.options.nodeId(),
192
- workspaceId: workspace.id,
193
- topic,
194
- code: 'WORKSPACE_WATCH_SNAPSHOT_FAILED',
195
- message: 'Workspace watch snapshot failed.'
196
- });
197
- }
198
- };
199
- if (watch.topics.sessions)
200
- tasks.push(emit('sessions', () => this.options.listSessions(workspace.id)));
201
- if (watch.topics.files !== undefined)
202
- tasks.push(emit('files', async () => ({
203
- files: await this.options.files.list(workspace, watch.topics.files)
204
- })));
205
- if (watch.topics.changes)
206
- tasks.push(emit('changes', async () => workspace.kind === 'GIT_WORKSPACE' ? this.options.changes.current(workspace) : null));
207
- if (watch.topics.files !== undefined || watch.topics.changes)
208
- void this.options.files
209
- .index(workspace)
210
- .observe()
211
- .catch(() => undefined);
212
- await Promise.all(tasks);
213
- }
214
- async emitSnapshot(workspace, watch, topic, read) {
215
- try {
216
- const payload = await read();
217
- this.deliverSnapshot(workspace, watch, topic, payload);
218
- }
219
- catch {
220
- this.options.emitWatchEvent({
221
- type: 'watch.failed',
222
- workbenchConnectionId: watch.workbenchConnectionId,
223
- watchType: 'workspace',
224
- watchId: watch.watchId,
225
- nodeGeneration: watch.nodeGeneration,
226
- nodeId: this.options.nodeId(),
227
- workspaceId: workspace.id,
228
- topic,
229
- code: 'WORKSPACE_WATCH_SNAPSHOT_FAILED',
230
- message: 'Workspace watch snapshot failed.'
231
- });
232
- }
233
- }
234
- deliverSnapshot(workspace, watch, topic, payload) {
235
- if (!this.options.watch.matches(workspace.id, `${watch.sessionHash}:${watch.workbenchConnectionId}`, watch.watchId))
236
- return;
237
- this.options.emitWatchEvent({
238
- type: 'watch.workspace.snapshot',
239
- workbenchConnectionId: watch.workbenchConnectionId,
240
- watchId: watch.watchId,
241
- nodeGeneration: watch.nodeGeneration,
242
- nodeId: this.options.nodeId(),
243
- workspaceId: workspace.id,
244
- topic,
245
- revision: this.options.watch.nextRevision(workspace.id),
246
- snapshotSequence: this.options.watch.nextSnapshotSequence(),
247
- expiresAt: watch.expiresAt,
248
- payload
249
- });
250
- }
251
- async listFiles(input) {
252
- const workspace = this.options.requireWorkspace(input.workspaceId);
253
- return { files: await this.options.files.list(workspace, input) };
254
- }
255
- async readFile(input) {
256
- const workspace = this.options.requireWorkspace(input.workspaceId);
257
- return { file: await this.options.files.read(workspace, input) };
258
- }
259
- async searchFiles(input) {
260
- const workspace = this.options.requireWorkspace(input.workspaceId);
261
- return { files: await this.options.files.search(workspace, input) };
262
- }
263
- async mutateFile(input) {
264
- const workspace = this.options.requireWorkspace(input.workspaceId);
265
- return { file: await this.options.files.mutate(workspace, input) };
266
- }
267
- async searchContent(input) {
268
- const workspace = this.options.requireWorkspace(input.workspaceId);
269
- return { search: await this.contentSearch.search(workspace, input) };
270
- }
271
- async preflight(input) {
272
- return {
273
- uploads: await this.options.uploads.preflight(this.options.requireWorkspace(input.workspaceId), input)
274
- };
275
- }
276
- async createUpload(input) {
277
- return {
278
- upload: await this.options.uploads.create(this.options.requireWorkspace(input.workspaceId), input)
279
- };
280
- }
281
- async writeUpload(input) {
282
- return { upload: await this.options.uploads.write(input) };
283
- }
284
- async completeUpload(input) {
285
- return { upload: await this.options.uploads.complete(input.uploadId) };
286
- }
287
- async cancelUpload(input) {
288
- await this.options.uploads.cancel(input.uploadId);
289
- return { cancelled: true };
290
- }
291
- async currentChanges(input) {
292
- return this.options.changes.current(this.options.requireWorkspace(input.workspaceId));
293
- }
294
- async readFileContent(input) {
295
- if (typeof input.workspaceId !== 'string')
296
- throw new Error('WORKSPACE_NOT_FOUND');
297
- return {
298
- file: await this.options.files.readContent(this.options.requireWorkspace(input.workspaceId), input)
299
- };
300
- }
301
- async changeDiff(input) {
302
- if (typeof input.workspaceId !== 'string' ||
303
- typeof input.path !== 'string' ||
304
- (input.repositoryPath !== undefined && typeof input.repositoryPath !== 'string'))
305
- throw new Error('GIT_DIFF_INVALID');
306
- const workspace = this.gitWorkspace(input.workspaceId);
307
- const repository = await resolveGitRepository(workspace.path, input.repositoryPath ?? '');
308
- return { diff: await readCurrentChangeDiff(repository, input.path) };
309
- }
310
- async restoreChange(input) {
311
- if (typeof input.workspaceId !== 'string' ||
312
- typeof input.path !== 'string' ||
313
- (input.repositoryPath !== undefined && typeof input.repositoryPath !== 'string') ||
314
- (input.state !== 'STAGED' && input.state !== 'UNSTAGED' && input.state !== 'UNTRACKED'))
315
- throw new Error('GIT_CHANGE_RESTORE_UNAVAILABLE');
316
- const workspace = this.gitWorkspace(input.workspaceId);
317
- const repository = await resolveGitRepository(workspace.path, input.repositoryPath ?? '');
318
- await restoreCurrentChange(repository, input.path, input.state);
319
- this.options.invalidate(workspace.id);
320
- return { restored: true };
321
- }
322
- async gitRepository(input) {
323
- if (typeof input.workspaceId !== 'string' ||
324
- (input.repositoryPath !== undefined && typeof input.repositoryPath !== 'string'))
325
- throw new Error('GIT_REPOSITORY_INVALID');
326
- const workspace = this.gitWorkspace(input.workspaceId);
327
- return resolveGitRepository(workspace.path, input.repositoryPath ?? '');
328
- }
329
- refs(input) {
330
- if (input.refs === undefined)
331
- return undefined;
332
- if (!Array.isArray(input.refs) ||
333
- input.refs.length > 128 ||
334
- input.refs.some((ref) => typeof ref !== 'string'))
335
- throw new Error('GIT_HISTORY_REF_INVALID');
336
- return input.refs;
337
- }
338
- async gitRefs(input) {
339
- return { refs: await listGitHistoryRefs(await this.gitRepository(input)) };
340
- }
341
- async gitHistory(input) {
342
- const refs = this.refs(input);
343
- if (input.cursor !== undefined && typeof input.cursor !== 'string')
344
- throw new Error('GIT_HISTORY_CURSOR_INVALID');
345
- if (input.limit !== undefined &&
346
- (typeof input.limit !== 'number' ||
347
- !Number.isInteger(input.limit) ||
348
- input.limit < 1 ||
349
- input.limit > 100))
350
- throw new Error('GIT_HISTORY_LIMIT_INVALID');
351
- return readGitHistory(await this.gitRepository(input), {
352
- ...(refs === undefined ? {} : { refs }),
353
- ...(typeof input.cursor === 'string' ? { cursor: input.cursor } : {}),
354
- ...(typeof input.limit === 'number' ? { limit: input.limit } : {})
355
- });
356
- }
357
- async gitCommitFiles(input) {
358
- if (typeof input.commit !== 'string')
359
- throw new Error('GIT_HISTORY_COMMIT_INVALID');
360
- return {
361
- files: await readGitHistoryFiles(await this.gitRepository(input), input.commit, this.refs(input))
362
- };
363
- }
364
- async gitCommitFileDiff(input) {
365
- if (typeof input.commit !== 'string' ||
366
- typeof input.path !== 'string' ||
367
- (input.previousPath !== undefined && typeof input.previousPath !== 'string'))
368
- throw new Error('GIT_DIFF_INVALID');
369
- return {
370
- diff: await readGitHistoryFileDiff(await this.gitRepository(input), input.commit, input.path, this.refs(input), input.previousPath)
371
- };
372
- }
373
- async gitCommitFileContent(input) {
374
- if (typeof input.commit !== 'string' ||
375
- typeof input.path !== 'string' ||
376
- !Number.isSafeInteger(input.offset) ||
377
- input.offset < 0 ||
378
- !Number.isSafeInteger(input.limit) ||
379
- input.limit < 1 ||
380
- input.limit > 20 * 1024 * 1024)
381
- throw new Error('FILE_RANGE_INVALID');
382
- return {
383
- file: await readGitHistoryFileContentRange(await this.gitRepository(input), input.commit, input.path, input.offset, input.limit, this.refs(input))
384
- };
385
- }
386
- async diff(input) {
387
- if (typeof input.workspaceId !== 'string' ||
388
- typeof input.fromRef !== 'string' ||
389
- typeof input.toRef !== 'string')
390
- throw new Error('GIT_DIFF_INVALID');
391
- const workspace = this.gitWorkspace(input.workspaceId);
392
- return { diff: await readRestrictedDiff(workspace.path, input.fromRef, input.toRef) };
393
- }
394
- gitWorkspace(workspaceId) {
395
- const workspace = this.options.requireWorkspace(workspaceId);
396
- if (workspace.kind !== 'GIT_WORKSPACE')
397
- throw new Error('WORKSPACE_NOT_GIT');
398
- return workspace;
399
- }
400
- }
401
- function record(value) {
402
- return typeof value === 'object' && value !== null && !Array.isArray(value)
403
- ? value
404
- : {};
405
- }
1
+ /* mar-release-protected */
2
+ function _0x16e2(_0x1fd842,_0x48ce73){_0x1fd842=_0x1fd842-(0x22f3+0x1616+-0x3797);const _0x51043b=_0x1951();let _0x44309a=_0x51043b[_0x1fd842];if(_0x16e2['mvaorK']===undefined){var _0x263503=function(_0x17d452){const _0x2f8aba='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1358c0='',_0x57f143='';for(let _0x43fb6f=-0x15d0+0x6da*-0x5+0x3812*0x1,_0x54499e,_0x1c66bd,_0x58b3d6=-0x18e+0x199*-0x16+0x24b4;_0x1c66bd=_0x17d452['charAt'](_0x58b3d6++);~_0x1c66bd&&(_0x54499e=_0x43fb6f%(0x2303+0x1*0x24d2+-0x1*0x47d1)?_0x54499e*(-0x29c*0xd+-0x17f5+0x287*0x17)+_0x1c66bd:_0x1c66bd,_0x43fb6f++%(0x4*-0x94a+-0xe46+-0x893*-0x6))?_0x1358c0+=String['fromCharCode'](-0x1ec5+-0x154c+0x6a2*0x8&_0x54499e>>(-(0xfe+-0x3*0x9b1+0x1c17)*_0x43fb6f&0x2e*0x69+-0x1df1+0x3b3*0x3)):0x1f75*0x1+-0x11b+-0x1e5a){_0x1c66bd=_0x2f8aba['indexOf'](_0x1c66bd);}for(let _0x427ee1=0x31*-0x24+0x1999+0x1*-0x12b5,_0x1e8722=_0x1358c0['length'];_0x427ee1<_0x1e8722;_0x427ee1++){_0x57f143+='%'+('00'+_0x1358c0['charCodeAt'](_0x427ee1)['toString'](0x5*0x599+-0x15af+0x2*-0x31f))['slice'](-(0x671*-0x3+0x1*0x2c+-0xf*-0x147));}return decodeURIComponent(_0x57f143);};_0x16e2['oWLEdg']=_0x263503,_0x16e2['izajwj']={},_0x16e2['mvaorK']=!![];}const _0x448526=_0x51043b[-0xc*0x101+0x1*-0x2437+0x3043];_0x16e2['HgbBmX']!==_0x448526&&(_0x16e2['izajwj']={},_0x16e2['HgbBmX']=_0x448526);const _0x130a1e=_0x16e2['izajwj'][_0x1fd842];return _0x130a1e===undefined?(_0x44309a=_0x16e2['oWLEdg'](_0x44309a),_0x16e2['izajwj'][_0x1fd842]=_0x44309a):_0x44309a=_0x130a1e,_0x44309a;}const _0x3ae198=_0x16e2;(function(_0x3135b0,_0x3c8a3e){const _0xaad8f9=_0x16e2,_0x7cda8e=_0x3135b0();while(!![]){try{const _0x369d38=-parseInt(_0xaad8f9(0x1ae))/(0xfa2+-0x2236+-0x43*-0x47)+parseInt(_0xaad8f9(0x1d5))/(-0x1619*0x1+0x2c5*0x4+0x1*0xb07)+parseInt(_0xaad8f9(0x1f4))/(0x559+-0x225*-0x8+0x1*-0x167e)+parseInt(_0xaad8f9(0x1ca))/(0xec*0x21+0x70e+-0x2576)+-parseInt(_0xaad8f9(0x1eb))/(-0x2*0x4f9+0x16ab+-0xcb4*0x1)+-parseInt(_0xaad8f9(0x19b))/(-0x7ef+0xb03+-0x30e)*(parseInt(_0xaad8f9(0x193))/(-0x1d7f+-0x1ae4*0x1+0x386a))+parseInt(_0xaad8f9(0x174))/(-0x9e9*-0x1+0x107*0x2+-0xbef)*(-parseInt(_0xaad8f9(0x18b))/(-0x2*0x833+-0x1f15*-0x1+0xfa*-0xf));if(_0x369d38===_0x3c8a3e)break;else _0x7cda8e['push'](_0x7cda8e['shift']());}catch(_0xcf6f85){_0x7cda8e['push'](_0x7cda8e['shift']());}}}(_0x1951,-0x1865d3+0x141f07+0x1*0x112505));import{listGitHistoryRefs,readGitHistory,readGitHistoryFileDiff,readGitHistoryFileContentRange,readGitHistoryFiles,readCurrentChangeDiff,readRestrictedDiff,resolveGitRepository,restoreCurrentChange}from'../workspace.js';import{WorkspaceContentSearchService}from'./workspace-content-search-service.js';export class WorkspaceWorkbenchService{[_0x3ae198(0x1c8)];[_0x3ae198(0x1c7)];[_0x3ae198(0x1ea)]=new Map();[_0x3ae198(0x1e1)]=new Set();constructor(_0x2fe67a){const _0x2e88ae=_0x3ae198;this[_0x2e88ae(0x1c8)]=_0x2fe67a,this[_0x2e88ae(0x1c7)]=new WorkspaceContentSearchService(_0x2fe67a[_0x2e88ae(0x1b7)]);}[_0x3ae198(0x184)](){const _0x4879a0=_0x3ae198;return{'workspace.watch':_0x322cad=>this[_0x4879a0(0x1a3)](record(_0x322cad)),'workspace.unwatch':_0x580e3d=>this[_0x4879a0(0x19e)](record(_0x580e3d)),'workspace.files.list':_0x40e9d5=>this[_0x4879a0(0x1bb)](record(_0x40e9d5)),'workspace.file.read':_0x376981=>this[_0x4879a0(0x189)](record(_0x376981)),'workspace.file.content.read':_0x49125f=>this[_0x4879a0(0x1f6)](record(_0x49125f)),'workspace.files.search':_0x1fcb6f=>this[_0x4879a0(0x1c2)](record(_0x1fcb6f)),'workspace.files.mutate':_0x20fc16=>this[_0x4879a0(0x1e0)](record(_0x20fc16)),'workspace.content.search':_0x37c807=>this[_0x4879a0(0x1d7)](record(_0x37c807)),'workspace.files.upload.preflight':_0x5102b2=>this[_0x4879a0(0x1a9)](record(_0x5102b2)),'workspace.files.upload.create':_0x1b407a=>this[_0x4879a0(0x18a)](record(_0x1b407a)),'workspace.files.upload.chunk':_0x4cd960=>this[_0x4879a0(0x1f5)](record(_0x4cd960)),'workspace.files.upload.status':_0x38b4df=>({'upload':this[_0x4879a0(0x1c8)][_0x4879a0(0x1a4)][_0x4879a0(0x17e)](record(_0x38b4df)[_0x4879a0(0x1cb)])}),'workspace.files.upload.complete':_0x98f8bd=>this[_0x4879a0(0x1bc)](record(_0x98f8bd)),'workspace.files.upload.cancel':_0x1fd842=>this[_0x4879a0(0x1be)](record(_0x1fd842)),'workspace.changes.current':_0x48ce73=>this[_0x4879a0(0x180)](record(_0x48ce73)),'workspace.change.diff':_0x51043b=>this[_0x4879a0(0x178)](record(_0x51043b)),'workspace.change.restore':_0x44309a=>this[_0x4879a0(0x1fa)](record(_0x44309a)),'workspace.git.refs.list':_0x263503=>this[_0x4879a0(0x1ef)](record(_0x263503)),'workspace.git.history.list':_0x448526=>this[_0x4879a0(0x192)](record(_0x448526)),'workspace.git.commit.files':_0x130a1e=>this[_0x4879a0(0x188)](record(_0x130a1e)),'workspace.git.commit.file.diff':_0x17d452=>this[_0x4879a0(0x1e3)](record(_0x17d452)),'workspace.git.commit.file.content.read':_0x2f8aba=>this[_0x4879a0(0x1c1)](record(_0x2f8aba)),'workspace.diff':_0x1358c0=>this[_0x4879a0(0x1d3)](record(_0x1358c0))};}async[_0x3ae198(0x1f1)](_0x57f143,_0x43fb6f){const _0x6fbb4c=_0x3ae198,_0x54499e=_0x57f143+':'+_0x43fb6f,_0x1c66bd=this[_0x6fbb4c(0x1ea)][_0x6fbb4c(0x183)](_0x54499e);if(_0x1c66bd!==undefined)return this[_0x6fbb4c(0x1e1)][_0x6fbb4c(0x199)](_0x54499e),_0x1c66bd;const _0x58b3d6=this[_0x6fbb4c(0x1ad)](_0x57f143,_0x43fb6f)[_0x6fbb4c(0x1e2)](()=>{const _0x17ea7b=_0x6fbb4c;this[_0x17ea7b(0x173)](_0x57f143,_0x43fb6f);});this[_0x6fbb4c(0x1ea)][_0x6fbb4c(0x1fc)](_0x54499e,_0x58b3d6);try{await _0x58b3d6;}finally{if(this[_0x6fbb4c(0x1ea)][_0x6fbb4c(0x183)](_0x54499e)===_0x58b3d6)this[_0x6fbb4c(0x1ea)][_0x6fbb4c(0x196)](_0x54499e);if(this[_0x6fbb4c(0x1e1)][_0x6fbb4c(0x196)](_0x54499e))void this[_0x6fbb4c(0x1f1)](_0x57f143,_0x43fb6f);}}[_0x3ae198(0x173)](_0x427ee1,_0x1e8722){const _0x300ece=_0x3ae198;for(const _0x58a7b1 of this[_0x300ece(0x1c8)][_0x300ece(0x1a3)][_0x300ece(0x176)](_0x427ee1)){const _0x5b3d4f=_0x1e8722===_0x300ece(0x1b7)?_0x58a7b1[_0x300ece(0x1cc)][_0x300ece(0x1b7)]!==undefined:_0x58a7b1[_0x300ece(0x1cc)][_0x1e8722]===!![];if(!_0x5b3d4f)continue;this[_0x300ece(0x1c8)][_0x300ece(0x1c9)]({'type':_0x300ece(0x187),'workbenchConnectionId':_0x58a7b1[_0x300ece(0x1f9)],'watchType':_0x300ece(0x1d2),'watchId':_0x58a7b1[_0x300ece(0x18c)],'nodeGeneration':_0x58a7b1[_0x300ece(0x19f)],'nodeId':this[_0x300ece(0x1c8)][_0x300ece(0x1e4)](),'workspaceId':_0x427ee1,'topic':_0x1e8722,'code':_0x300ece(0x17f),'message':_0x300ece(0x1a7)});}}async[_0x3ae198(0x1ad)](_0x197ca8,_0x5e63e2){const _0x91e566=_0x3ae198,_0x431821=this[_0x91e566(0x1c8)][_0x91e566(0x1dd)](_0x197ca8),_0x2573aa=this[_0x91e566(0x1c8)][_0x91e566(0x1a3)][_0x91e566(0x176)](_0x197ca8);if(_0x5e63e2===_0x91e566(0x172)){const _0x17461c=_0x2573aa[_0x91e566(0x1e9)](_0x2cdf89=>_0x2cdf89[_0x91e566(0x1cc)][_0x91e566(0x172)]);if(_0x17461c[_0x91e566(0x17d)]===0x2232+0x224d+-0x447f)return;const _0x101a32=await this[_0x91e566(0x1c8)][_0x91e566(0x1b1)](_0x431821['id']);for(const _0x1e43e4 of _0x17461c)this[_0x91e566(0x1b8)](_0x431821,_0x1e43e4,_0x5e63e2,_0x101a32);return;}if(_0x5e63e2===_0x91e566(0x191)){const _0x1f8dc3=_0x2573aa[_0x91e566(0x1e9)](_0x621268=>_0x621268[_0x91e566(0x1cc)][_0x91e566(0x191)]);if(_0x1f8dc3[_0x91e566(0x17d)]===0x672+0x161a*0x1+-0x1c8c)return;const _0xcd65d2=_0x431821[_0x91e566(0x1f3)]===_0x91e566(0x1d4)?await this[_0x91e566(0x1c8)][_0x91e566(0x191)][_0x91e566(0x195)](_0x431821):null;for(const _0x4fb1f8 of _0x1f8dc3)this[_0x91e566(0x1b8)](_0x431821,_0x4fb1f8,_0x5e63e2,_0xcd65d2);return;}const _0x4a22cf=new Map();for(const _0x59d879 of _0x2573aa){if(_0x59d879[_0x91e566(0x1cc)][_0x91e566(0x1b7)]===undefined)continue;const _0x1ed9df=JSON[_0x91e566(0x18d)](_0x59d879[_0x91e566(0x1cc)][_0x91e566(0x1b7)]);_0x4a22cf[_0x91e566(0x1fc)](_0x1ed9df,[..._0x4a22cf[_0x91e566(0x183)](_0x1ed9df)??[],_0x59d879]);}await Promise[_0x91e566(0x1a5)]([..._0x4a22cf[_0x91e566(0x1d6)]()][_0x91e566(0x1ab)](async _0x386b5a=>{const _0x3b4444=_0x91e566,_0x477c72=_0x386b5a[-0x3*-0x687+0x414+-0x17a9]?.[_0x3b4444(0x1cc)][_0x3b4444(0x1b7)];if(_0x477c72===undefined)return;const _0x5b2a4f={'files':await this[_0x3b4444(0x1c8)][_0x3b4444(0x1b7)][_0x3b4444(0x1b9)](_0x431821,_0x477c72)};for(const _0x6fb683 of _0x386b5a)this[_0x3b4444(0x1b8)](_0x431821,_0x6fb683,_0x5e63e2,_0x5b2a4f);}));}async[_0x3ae198(0x1a3)](_0x3d7566){const _0x21474c=_0x3ae198;if(typeof _0x3d7566[_0x21474c(0x1cd)]!==_0x21474c(0x1b4)||typeof _0x3d7566[_0x21474c(0x18c)]!==_0x21474c(0x1b4)||typeof _0x3d7566[_0x21474c(0x1f9)]!==_0x21474c(0x1b4)||!/^[A-Za-z0-9_-]{8,128}$/[_0x21474c(0x1c4)](_0x3d7566[_0x21474c(0x18c)])||_0x3d7566[_0x21474c(0x198)]!==_0x21474c(0x1d0)&&_0x3d7566[_0x21474c(0x198)]!==_0x21474c(0x1f8))throw new Error(_0x21474c(0x1cf));const _0x14e9f2=this[_0x21474c(0x1c8)][_0x21474c(0x1dd)](_0x3d7566[_0x21474c(0x1cd)]);if(_0x3d7566[_0x21474c(0x198)]===_0x21474c(0x1f8)){const _0x20623a=this[_0x21474c(0x1c8)][_0x21474c(0x1a3)][_0x21474c(0x1f8)](_0x14e9f2['id'],this[_0x21474c(0x1c8)][_0x21474c(0x1a3)][_0x21474c(0x1bd)](_0x3d7566),_0x3d7566[_0x21474c(0x18c)]);if(_0x20623a===undefined)throw new Error(_0x21474c(0x175));return this[_0x21474c(0x1df)](_0x20623a);}const _0x5d17f8=this[_0x21474c(0x1c8)][_0x21474c(0x1a3)][_0x21474c(0x1e8)](_0x3d7566),_0x42f221=this[_0x21474c(0x1c8)][_0x21474c(0x1a3)][_0x21474c(0x197)](_0x14e9f2['id'],this[_0x21474c(0x1c8)][_0x21474c(0x1a3)][_0x21474c(0x1bd)](_0x3d7566));if(_0x42f221?.[_0x21474c(0x18c)]===_0x3d7566[_0x21474c(0x18c)]&&JSON[_0x21474c(0x18d)](_0x42f221[_0x21474c(0x1cc)])===JSON[_0x21474c(0x18d)](_0x5d17f8))return this[_0x21474c(0x1c8)][_0x21474c(0x1a3)][_0x21474c(0x1f8)](_0x14e9f2['id'],this[_0x21474c(0x1c8)][_0x21474c(0x1a3)][_0x21474c(0x1bd)](_0x3d7566),_0x3d7566[_0x21474c(0x18c)]),this[_0x21474c(0x1df)](_0x42f221);const _0x630223=this[_0x21474c(0x1c8)][_0x21474c(0x1a3)][_0x21474c(0x1b0)](_0x14e9f2['id'],_0x3d7566[_0x21474c(0x18c)],this[_0x21474c(0x1c8)][_0x21474c(0x1a3)][_0x21474c(0x18e)](_0x3d7566),_0x3d7566[_0x21474c(0x1f9)],this[_0x21474c(0x1c8)][_0x21474c(0x19f)](),_0x5d17f8);return void this[_0x21474c(0x19c)](_0x14e9f2,_0x630223),this[_0x21474c(0x1df)](_0x630223);}[_0x3ae198(0x19e)](_0x26d6b9){const _0x56235e=_0x3ae198;if(typeof _0x26d6b9[_0x56235e(0x1cd)]!==_0x56235e(0x1b4)||typeof _0x26d6b9[_0x56235e(0x18c)]!==_0x56235e(0x1b4)||typeof _0x26d6b9[_0x56235e(0x1f9)]!==_0x56235e(0x1b4)||!/^[A-Za-z0-9_-]{8,128}$/[_0x56235e(0x1c4)](_0x26d6b9[_0x56235e(0x18c)]))throw new Error(_0x56235e(0x1cf));const _0xdf8e05=this[_0x56235e(0x1c8)][_0x56235e(0x1a3)][_0x56235e(0x1bd)](_0x26d6b9),_0x526e79=this[_0x56235e(0x1c8)][_0x56235e(0x1a3)][_0x56235e(0x1f8)](_0x26d6b9[_0x56235e(0x1cd)],_0xdf8e05,_0x26d6b9[_0x56235e(0x18c)]);if(_0x526e79!==undefined)this[_0x56235e(0x1c8)][_0x56235e(0x1a3)][_0x56235e(0x1da)](_0x26d6b9[_0x56235e(0x1cd)],_0xdf8e05);return{'stopped':!![]};}[_0x3ae198(0x1df)](_0x42c4f1){const _0x4703b1=_0x3ae198;return{'accepted':!![],'watchId':_0x42c4f1[_0x4703b1(0x18c)],'nodeGeneration':_0x42c4f1[_0x4703b1(0x19f)],'expiresAt':_0x42c4f1[_0x4703b1(0x1bf)]};}async[_0x3ae198(0x19c)](_0x5e1d71,_0x2385d2){const _0x52b766=_0x3ae198,_0x46ad08=[],_0x2abdfb=async(_0x3c6bfa,_0x4bb458)=>{const _0x2c0b92=_0x16e2;try{const _0x1fa56c=await _0x4bb458();if(!this[_0x2c0b92(0x1c8)][_0x2c0b92(0x1a3)][_0x2c0b92(0x18f)](_0x5e1d71['id'],_0x2385d2[_0x2c0b92(0x18e)]+':'+_0x2385d2[_0x2c0b92(0x1f9)],_0x2385d2[_0x2c0b92(0x18c)]))return;this[_0x2c0b92(0x1c8)][_0x2c0b92(0x1c9)]({'type':_0x2c0b92(0x1b3),'workbenchConnectionId':_0x2385d2[_0x2c0b92(0x1f9)],'watchId':_0x2385d2[_0x2c0b92(0x18c)],'nodeGeneration':_0x2385d2[_0x2c0b92(0x19f)],'nodeId':this[_0x2c0b92(0x1c8)][_0x2c0b92(0x1e4)](),'workspaceId':_0x5e1d71['id'],'topic':_0x3c6bfa,'revision':this[_0x2c0b92(0x1c8)][_0x2c0b92(0x1a3)][_0x2c0b92(0x1a2)](_0x5e1d71['id']),'snapshotSequence':this[_0x2c0b92(0x1c8)][_0x2c0b92(0x1a3)][_0x2c0b92(0x1db)](),'expiresAt':_0x2385d2[_0x2c0b92(0x1bf)],'payload':_0x1fa56c});}catch{this[_0x2c0b92(0x1c8)][_0x2c0b92(0x1c9)]({'type':_0x2c0b92(0x187),'workbenchConnectionId':_0x2385d2[_0x2c0b92(0x1f9)],'watchType':_0x2c0b92(0x1d2),'watchId':_0x2385d2[_0x2c0b92(0x18c)],'nodeGeneration':_0x2385d2[_0x2c0b92(0x19f)],'nodeId':this[_0x2c0b92(0x1c8)][_0x2c0b92(0x1e4)](),'workspaceId':_0x5e1d71['id'],'topic':_0x3c6bfa,'code':_0x2c0b92(0x17f),'message':_0x2c0b92(0x1a7)});}};if(_0x2385d2[_0x52b766(0x1cc)][_0x52b766(0x172)])_0x46ad08[_0x52b766(0x1fb)](_0x2abdfb(_0x52b766(0x172),()=>this[_0x52b766(0x1c8)][_0x52b766(0x1b1)](_0x5e1d71['id'])));if(_0x2385d2[_0x52b766(0x1cc)][_0x52b766(0x1b7)]!==undefined)_0x46ad08[_0x52b766(0x1fb)](_0x2abdfb(_0x52b766(0x1b7),async()=>({'files':await this[_0x52b766(0x1c8)][_0x52b766(0x1b7)][_0x52b766(0x1b9)](_0x5e1d71,_0x2385d2[_0x52b766(0x1cc)][_0x52b766(0x1b7)])})));if(_0x2385d2[_0x52b766(0x1cc)][_0x52b766(0x191)])_0x46ad08[_0x52b766(0x1fb)](_0x2abdfb(_0x52b766(0x191),async()=>_0x5e1d71[_0x52b766(0x1f3)]===_0x52b766(0x1d4)?this[_0x52b766(0x1c8)][_0x52b766(0x191)][_0x52b766(0x195)](_0x5e1d71):null));if(_0x2385d2[_0x52b766(0x1cc)][_0x52b766(0x1b7)]!==undefined||_0x2385d2[_0x52b766(0x1cc)][_0x52b766(0x191)])void this[_0x52b766(0x1c8)][_0x52b766(0x1b7)][_0x52b766(0x1b6)](_0x5e1d71)[_0x52b766(0x1c0)]()[_0x52b766(0x1e2)](()=>undefined);await Promise[_0x52b766(0x1a5)](_0x46ad08);}async[_0x3ae198(0x1f0)](_0x246dfc,_0x1537d9,_0x27f34e,_0x4b7aae){const _0x41e3b7=_0x3ae198;try{const _0xfdd987=await _0x4b7aae();this[_0x41e3b7(0x1b8)](_0x246dfc,_0x1537d9,_0x27f34e,_0xfdd987);}catch{this[_0x41e3b7(0x1c8)][_0x41e3b7(0x1c9)]({'type':_0x41e3b7(0x187),'workbenchConnectionId':_0x1537d9[_0x41e3b7(0x1f9)],'watchType':_0x41e3b7(0x1d2),'watchId':_0x1537d9[_0x41e3b7(0x18c)],'nodeGeneration':_0x1537d9[_0x41e3b7(0x19f)],'nodeId':this[_0x41e3b7(0x1c8)][_0x41e3b7(0x1e4)](),'workspaceId':_0x246dfc['id'],'topic':_0x27f34e,'code':_0x41e3b7(0x17f),'message':_0x41e3b7(0x1a7)});}}[_0x3ae198(0x1b8)](_0x20d112,_0x5c2a84,_0x3d3cff,_0x348500){const _0x21c877=_0x3ae198;if(!this[_0x21c877(0x1c8)][_0x21c877(0x1a3)][_0x21c877(0x18f)](_0x20d112['id'],_0x5c2a84[_0x21c877(0x18e)]+':'+_0x5c2a84[_0x21c877(0x1f9)],_0x5c2a84[_0x21c877(0x18c)]))return;this[_0x21c877(0x1c8)][_0x21c877(0x1c9)]({'type':_0x21c877(0x1b3),'workbenchConnectionId':_0x5c2a84[_0x21c877(0x1f9)],'watchId':_0x5c2a84[_0x21c877(0x18c)],'nodeGeneration':_0x5c2a84[_0x21c877(0x19f)],'nodeId':this[_0x21c877(0x1c8)][_0x21c877(0x1e4)](),'workspaceId':_0x20d112['id'],'topic':_0x3d3cff,'revision':this[_0x21c877(0x1c8)][_0x21c877(0x1a3)][_0x21c877(0x1a2)](_0x20d112['id']),'snapshotSequence':this[_0x21c877(0x1c8)][_0x21c877(0x1a3)][_0x21c877(0x1db)](),'expiresAt':_0x5c2a84[_0x21c877(0x1bf)],'payload':_0x348500});}async[_0x3ae198(0x1bb)](_0x1ec92b){const _0x3ee9c2=_0x3ae198,_0x4900d8=this[_0x3ee9c2(0x1c8)][_0x3ee9c2(0x1dd)](_0x1ec92b[_0x3ee9c2(0x1cd)]);return{'files':await this[_0x3ee9c2(0x1c8)][_0x3ee9c2(0x1b7)][_0x3ee9c2(0x1b9)](_0x4900d8,_0x1ec92b)};}async[_0x3ae198(0x189)](_0x4fc18e){const _0xb39f67=_0x3ae198,_0x128c87=this[_0xb39f67(0x1c8)][_0xb39f67(0x1dd)](_0x4fc18e[_0xb39f67(0x1cd)]);return{'file':await this[_0xb39f67(0x1c8)][_0xb39f67(0x1b7)][_0xb39f67(0x186)](_0x128c87,_0x4fc18e)};}async[_0x3ae198(0x1c2)](_0x593f87){const _0x5d8123=_0x3ae198,_0x16623b=this[_0x5d8123(0x1c8)][_0x5d8123(0x1dd)](_0x593f87[_0x5d8123(0x1cd)]);return{'files':await this[_0x5d8123(0x1c8)][_0x5d8123(0x1b7)][_0x5d8123(0x19d)](_0x16623b,_0x593f87)};}async[_0x3ae198(0x1e0)](_0x5b0032){const _0x5d200b=_0x3ae198,_0x52f8a4=this[_0x5d200b(0x1c8)][_0x5d200b(0x1dd)](_0x5b0032[_0x5d200b(0x1cd)]);return{'file':await this[_0x5d200b(0x1c8)][_0x5d200b(0x1b7)][_0x5d200b(0x182)](_0x52f8a4,_0x5b0032)};}async[_0x3ae198(0x1d7)](_0x16d0b1){const _0x1ff27c=_0x3ae198,_0x5548ec=this[_0x1ff27c(0x1c8)][_0x1ff27c(0x1dd)](_0x16d0b1[_0x1ff27c(0x1cd)]);return{'search':await this[_0x1ff27c(0x1c7)][_0x1ff27c(0x19d)](_0x5548ec,_0x16d0b1)};}async[_0x3ae198(0x1a9)](_0x64dad0){const _0x42efa2=_0x3ae198;return{'uploads':await this[_0x42efa2(0x1c8)][_0x42efa2(0x1a4)][_0x42efa2(0x1a9)](this[_0x42efa2(0x1c8)][_0x42efa2(0x1dd)](_0x64dad0[_0x42efa2(0x1cd)]),_0x64dad0)};}async[_0x3ae198(0x18a)](_0x1dc7dd){const _0xe87e9d=_0x3ae198;return{'upload':await this[_0xe87e9d(0x1c8)][_0xe87e9d(0x1a4)][_0xe87e9d(0x1b0)](this[_0xe87e9d(0x1c8)][_0xe87e9d(0x1dd)](_0x1dc7dd[_0xe87e9d(0x1cd)]),_0x1dc7dd)};}async[_0x3ae198(0x1f5)](_0x4aaaee){const _0x1085f5=_0x3ae198;return{'upload':await this[_0x1085f5(0x1c8)][_0x1085f5(0x1a4)][_0x1085f5(0x1a1)](_0x4aaaee)};}async[_0x3ae198(0x1bc)](_0x3a205a){const _0x5be977=_0x3ae198;return{'upload':await this[_0x5be977(0x1c8)][_0x5be977(0x1a4)][_0x5be977(0x1e7)](_0x3a205a[_0x5be977(0x1cb)])};}async[_0x3ae198(0x1be)](_0x5df1f0){const _0x2ad24b=_0x3ae198;return await this[_0x2ad24b(0x1c8)][_0x2ad24b(0x1a4)][_0x2ad24b(0x1f7)](_0x5df1f0[_0x2ad24b(0x1cb)]),{'cancelled':!![]};}async[_0x3ae198(0x180)](_0x1ffc0e){const _0x55c4a5=_0x3ae198;return this[_0x55c4a5(0x1c8)][_0x55c4a5(0x191)][_0x55c4a5(0x195)](this[_0x55c4a5(0x1c8)][_0x55c4a5(0x1dd)](_0x1ffc0e[_0x55c4a5(0x1cd)]));}async[_0x3ae198(0x1f6)](_0x19ddea){const _0x4dac77=_0x3ae198;if(typeof _0x19ddea[_0x4dac77(0x1cd)]!==_0x4dac77(0x1b4))throw new Error(_0x4dac77(0x17b));return{'file':await this[_0x4dac77(0x1c8)][_0x4dac77(0x1b7)][_0x4dac77(0x1af)](this[_0x4dac77(0x1c8)][_0x4dac77(0x1dd)](_0x19ddea[_0x4dac77(0x1cd)]),_0x19ddea)};}async[_0x3ae198(0x178)](_0x23bd6e){const _0x42d048=_0x3ae198;if(typeof _0x23bd6e[_0x42d048(0x1cd)]!==_0x42d048(0x1b4)||typeof _0x23bd6e[_0x42d048(0x1ce)]!==_0x42d048(0x1b4)||_0x23bd6e[_0x42d048(0x1c6)]!==undefined&&typeof _0x23bd6e[_0x42d048(0x1c6)]!==_0x42d048(0x1b4))throw new Error(_0x42d048(0x190));const _0x491ae2=this[_0x42d048(0x1ed)](_0x23bd6e[_0x42d048(0x1cd)]),_0x2495b3=await resolveGitRepository(_0x491ae2[_0x42d048(0x1ce)],_0x23bd6e[_0x42d048(0x1c6)]??'');return{'diff':await readCurrentChangeDiff(_0x2495b3,_0x23bd6e[_0x42d048(0x1ce)])};}async[_0x3ae198(0x1fa)](_0x2ab8ad){const _0x33bc64=_0x3ae198;if(typeof _0x2ab8ad[_0x33bc64(0x1cd)]!==_0x33bc64(0x1b4)||typeof _0x2ab8ad[_0x33bc64(0x1ce)]!==_0x33bc64(0x1b4)||_0x2ab8ad[_0x33bc64(0x1c6)]!==undefined&&typeof _0x2ab8ad[_0x33bc64(0x1c6)]!==_0x33bc64(0x1b4)||_0x2ab8ad[_0x33bc64(0x1ee)]!==_0x33bc64(0x19a)&&_0x2ab8ad[_0x33bc64(0x1ee)]!==_0x33bc64(0x1a8)&&_0x2ab8ad[_0x33bc64(0x1ee)]!==_0x33bc64(0x1e6))throw new Error(_0x33bc64(0x1f2));const _0x3bc9cd=this[_0x33bc64(0x1ed)](_0x2ab8ad[_0x33bc64(0x1cd)]),_0x4d312a=await resolveGitRepository(_0x3bc9cd[_0x33bc64(0x1ce)],_0x2ab8ad[_0x33bc64(0x1c6)]??'');return await restoreCurrentChange(_0x4d312a,_0x2ab8ad[_0x33bc64(0x1ce)],_0x2ab8ad[_0x33bc64(0x1ee)]),this[_0x33bc64(0x1c8)][_0x33bc64(0x1b5)](_0x3bc9cd['id']),{'restored':!![]};}async[_0x3ae198(0x1aa)](_0x140dc7){const _0x252e55=_0x3ae198;if(typeof _0x140dc7[_0x252e55(0x1cd)]!==_0x252e55(0x1b4)||_0x140dc7[_0x252e55(0x1c6)]!==undefined&&typeof _0x140dc7[_0x252e55(0x1c6)]!==_0x252e55(0x1b4))throw new Error(_0x252e55(0x1ec));const _0x579bf4=this[_0x252e55(0x1ed)](_0x140dc7[_0x252e55(0x1cd)]);return resolveGitRepository(_0x579bf4[_0x252e55(0x1ce)],_0x140dc7[_0x252e55(0x1c6)]??'');}[_0x3ae198(0x1a6)](_0x272428){const _0x4f679d=_0x3ae198;if(_0x272428[_0x4f679d(0x1a6)]===undefined)return undefined;if(!Array[_0x4f679d(0x1d8)](_0x272428[_0x4f679d(0x1a6)])||_0x272428[_0x4f679d(0x1a6)][_0x4f679d(0x17d)]>0x20f4+0x106*-0x1a+-0x5d8||_0x272428[_0x4f679d(0x1a6)][_0x4f679d(0x1de)](_0x5d8a11=>typeof _0x5d8a11!==_0x4f679d(0x1b4)))throw new Error(_0x4f679d(0x1dc));return _0x272428[_0x4f679d(0x1a6)];}async[_0x3ae198(0x1ef)](_0x128389){const _0x2a1bda=_0x3ae198;return{'refs':await listGitHistoryRefs(await this[_0x2a1bda(0x1aa)](_0x128389))};}async[_0x3ae198(0x192)](_0x1cdc48){const _0x192c29=_0x3ae198,_0x523eaf=this[_0x192c29(0x1a6)](_0x1cdc48);if(_0x1cdc48[_0x192c29(0x1b2)]!==undefined&&typeof _0x1cdc48[_0x192c29(0x1b2)]!==_0x192c29(0x1b4))throw new Error(_0x192c29(0x179));if(_0x1cdc48[_0x192c29(0x1c5)]!==undefined&&(typeof _0x1cdc48[_0x192c29(0x1c5)]!==_0x192c29(0x1a0)||!Number[_0x192c29(0x1ba)](_0x1cdc48[_0x192c29(0x1c5)])||_0x1cdc48[_0x192c29(0x1c5)]<-0x6*0x261+-0x3bf*-0xa+-0x172f||_0x1cdc48[_0x192c29(0x1c5)]>-0x154c+0x104*-0x14+-0x200*-0x15))throw new Error(_0x192c29(0x17c));return readGitHistory(await this[_0x192c29(0x1aa)](_0x1cdc48),{..._0x523eaf===undefined?{}:{'refs':_0x523eaf},...typeof _0x1cdc48[_0x192c29(0x1b2)]===_0x192c29(0x1b4)?{'cursor':_0x1cdc48[_0x192c29(0x1b2)]}:{},...typeof _0x1cdc48[_0x192c29(0x1c5)]===_0x192c29(0x1a0)?{'limit':_0x1cdc48[_0x192c29(0x1c5)]}:{}});}async[_0x3ae198(0x188)](_0x4e9bd7){const _0xb1b1a8=_0x3ae198;if(typeof _0x4e9bd7[_0xb1b1a8(0x1ac)]!==_0xb1b1a8(0x1b4))throw new Error(_0xb1b1a8(0x1e5));return{'files':await readGitHistoryFiles(await this[_0xb1b1a8(0x1aa)](_0x4e9bd7),_0x4e9bd7[_0xb1b1a8(0x1ac)],this[_0xb1b1a8(0x1a6)](_0x4e9bd7))};}async[_0x3ae198(0x1e3)](_0x30f3db){const _0x551df6=_0x3ae198;if(typeof _0x30f3db[_0x551df6(0x1ac)]!==_0x551df6(0x1b4)||typeof _0x30f3db[_0x551df6(0x1ce)]!==_0x551df6(0x1b4)||_0x30f3db[_0x551df6(0x194)]!==undefined&&typeof _0x30f3db[_0x551df6(0x194)]!==_0x551df6(0x1b4))throw new Error(_0x551df6(0x190));return{'diff':await readGitHistoryFileDiff(await this[_0x551df6(0x1aa)](_0x30f3db),_0x30f3db[_0x551df6(0x1ac)],_0x30f3db[_0x551df6(0x1ce)],this[_0x551df6(0x1a6)](_0x30f3db),_0x30f3db[_0x551df6(0x194)])};}async[_0x3ae198(0x1c1)](_0x2f2f6e){const _0x52193f=_0x3ae198;if(typeof _0x2f2f6e[_0x52193f(0x1ac)]!==_0x52193f(0x1b4)||typeof _0x2f2f6e[_0x52193f(0x1ce)]!==_0x52193f(0x1b4)||!Number[_0x52193f(0x1c3)](_0x2f2f6e[_0x52193f(0x1d9)])||_0x2f2f6e[_0x52193f(0x1d9)]<-0x1a0+0x164f+-0x6e5*0x3||!Number[_0x52193f(0x1c3)](_0x2f2f6e[_0x52193f(0x1c5)])||_0x2f2f6e[_0x52193f(0x1c5)]<0x23c8+0x199*0xb+-0x1*0x355a||_0x2f2f6e[_0x52193f(0x1c5)]>(0xc93+0x1b93+-0x2812)*(-0x1*-0x1999+0x2*0x11d7+-0x155*0x2b)*(0x24c5+0x3*0x39f+-0x2ba2))throw new Error(_0x52193f(0x181));return{'file':await readGitHistoryFileContentRange(await this[_0x52193f(0x1aa)](_0x2f2f6e),_0x2f2f6e[_0x52193f(0x1ac)],_0x2f2f6e[_0x52193f(0x1ce)],_0x2f2f6e[_0x52193f(0x1d9)],_0x2f2f6e[_0x52193f(0x1c5)],this[_0x52193f(0x1a6)](_0x2f2f6e))};}async[_0x3ae198(0x1d3)](_0x3f97c3){const _0x32b7a6=_0x3ae198;if(typeof _0x3f97c3[_0x32b7a6(0x1cd)]!==_0x32b7a6(0x1b4)||typeof _0x3f97c3[_0x32b7a6(0x17a)]!==_0x32b7a6(0x1b4)||typeof _0x3f97c3[_0x32b7a6(0x1d1)]!==_0x32b7a6(0x1b4))throw new Error(_0x32b7a6(0x190));const _0x1a41fe=this[_0x32b7a6(0x1ed)](_0x3f97c3[_0x32b7a6(0x1cd)]);return{'diff':await readRestrictedDiff(_0x1a41fe[_0x32b7a6(0x1ce)],_0x3f97c3[_0x32b7a6(0x17a)],_0x3f97c3[_0x32b7a6(0x1d1)])};}[_0x3ae198(0x1ed)](_0x59b87a){const _0x28510e=_0x3ae198,_0x48e438=this[_0x28510e(0x1c8)][_0x28510e(0x1dd)](_0x59b87a);if(_0x48e438[_0x28510e(0x1f3)]!==_0x28510e(0x1d4))throw new Error(_0x28510e(0x177));return _0x48e438;}}function _0x1951(){const _0x40b029=['B3b0Aw9UCW','zw1PDfDHDgnOrxzLBNq','nJy2mZG0ofD1BhLMAG','DxbSB2fKswq','Dg9WAwnZ','D29YA3nWywnLswq','Cgf0Aa','v09ss1nqqunfx1Dbvenix0LovKfmsuq','Aw5PDgLHBa','Dg9szwy','D29YA3nWywnL','zgLMzG','r0Lux1DpuKTtuefdrq','mti3nte0nhbvuNvQzq','DMfSDwvZ','C2vHCMnOq29UDgvUDa','AxnbCNjHEq','B2zMC2v0','CMvTB3zL','BMv4DfnUyxbZAg90u2vXDwvUy2u','r0Lux0Hju1rpuLLFuKvgx0LovKfmsuq','CMvXDwLYzvDVCMTZCgfJzq','C29Tzq','ywnJzxb0zwq','Bxv0yxrLrMLSzq','zgLYDhLuB3bPy3m','y2f0y2G','z2L0q29TBwL0rMLSzurPzMy','BM9KzuLK','r0Lux0Hju1rpuLLFq09ntuLux0LovKfmsuq','vu5uuKfds0ve','y29TCgXLDgu','CgfYC2vuB3bPy3m','zMLSDgvY','Dg9WAwnszwzYzxnOzxm','mJCWmJK0mgXoC2XXrW','r0Lux1jfue9tsvrpuLLFsu5wquXjra','z2L0v29YA3nWywnL','C3rHDgu','z2L0uMvMCW','zw1PDfnUyxbZAg90','CMvMCMvZAfrVCgLJ','r0Lux0niqu5hrv9srvnut1jfx1voqvzbsuXbqKXf','A2LUza','mJqYntq0nKfAu2LcDq','D3jPDgvvCgXVywq','CMvHzezPBgvdB250zw50','y2fUy2vS','CMvUzxC','D29YA2jLBMnOq29UBMvJDgLVBKLK','CMvZDg9YzunOyw5Nzq','ChvZAa','C2v0','C2vZC2LVBNm','zw1PDfrVCgLJrMfPBhvYzq','nZjJsNf1A0i','v09ss1nqqunfx1Dbvenix05pvf9gt1vora','ywn0AxzLv2f0y2HLCW','v09ss1nqqunfx05pvf9hsvq','y2HHBMDLrgLMzG','r0Lux0Hju1rpuLLFq1vsu09sx0LovKfmsuq','zNjVBvjLzG','v09ss1nqqunfx05pvf9gt1vora','r0Lux0Hju1rpuLLFteLnsvrFsu5wquXjra','BgvUz3rO','C3rHDhvZ','v09ss1nqqunfx1Dbvenix1noqvbtse9ux0zbsuXfra','y3vYCMvUDenOyw5Nzxm','rKLmrv9squ5hrv9jtLzbteLe','Bxv0yxrL','z2v0','B3bLCMf0Aw9UCW','B2jQzwn0','CMvHza','D2f0y2GUzMfPBgvK','z2L0q29TBwL0rMLSzxm','CMvHzezPBgu','y3jLyxrLvxbSB2fK','odu1ownWAeHZCG','D2f0y2Hjza','C3rYAw5NAwz5','C2vZC2LVBKHHC2G','Bwf0y2HLCW','r0Lux0rjrKzFsu5wquXjra','y2HHBMDLCW','z2L0sgLZDg9YEq','n0TJrLPbCW','ChjLDMLVDxnqyxrO','y3vYCMvUDa','zgvSzxrL','zxHPC3rPBMC','Bw9Kzq','ywrK','u1rbr0ve','nJeYntiYmezuyxHmAW','y3jLyxrLsw5PDgLHBfnUyxbZAg90CW','C2vHCMnO','Dw53yxrJAa','BM9KzuDLBMvYyxrPB24','BNvTyMvY','D3jPDgu','BMv4DfjLDMLZAw9U','D2f0y2G','DxbSB2fKCW','ywXS','CMvMCW','v29YA3nWywnLihDHDgnOihnUyxbZAg90igzHAwXLzc4','vu5tvefhruq','ChjLzMXPz2H0','z2L0uMvWB3nPDg9YEq','BwfW','y29TBwL0','CgvYzM9YBvrVCgLJuMvMCMvZAa','nJK4nJC4DM95t1zR','CMvHzenVBNrLBNq','y3jLyxrL','BgLZDfnLC3nPB25Z','y3vYC29Y','D2f0y2GUD29YA3nWywnLlNnUyxbZAg90','C3rYAw5N','Aw52ywXPzgf0zq','Aw5KzxG','zMLSzxm','zgvSAxzLCLnUyxbZAg90','BgLZDa','AxnjBNrLz2vY','BgLZDezPBgvZ','y29TCgXLDgvvCgXVywq','A2v5','y2fUy2vSvxbSB2fK','zxHWAxjLC0f0','B2jZzxj2zq','z2L0q29TBwL0rMLSzunVBNrLBNq','C2vHCMnOrMLSzxm','AxntywzLsw50zwDLCG','DgvZDa','BgLTAxq','CMvWB3nPDg9YEvbHDgG','y29UDgvUDfnLyxjJAa'];_0x1951=function(){return _0x40b029;};return _0x1951();}function record(_0x1ad953){const _0x5216dc=_0x3ae198;return typeof _0x1ad953===_0x5216dc(0x185)&&_0x1ad953!==null&&!Array[_0x5216dc(0x1d8)](_0x1ad953)?_0x1ad953:{};}