@talex-touch/utils 1.0.42 → 1.0.45

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 (234) hide show
  1. package/.eslintcache +1 -0
  2. package/__tests__/cloud-sync-sdk.test.ts +442 -0
  3. package/__tests__/icons/icons.test.ts +84 -0
  4. package/__tests__/plugin-sdk-lifecycle.test.ts +130 -0
  5. package/__tests__/power-sdk.test.ts +143 -0
  6. package/__tests__/preset-export-types.test.ts +108 -0
  7. package/__tests__/search/fuzzy-match.test.ts +137 -0
  8. package/__tests__/transport/port-policy.test.ts +44 -0
  9. package/__tests__/transport-domain-sdks.test.ts +152 -0
  10. package/__tests__/types/update.test.ts +67 -0
  11. package/account/account-sdk.ts +915 -0
  12. package/account/index.ts +2 -0
  13. package/account/types.ts +321 -0
  14. package/analytics/client.ts +136 -0
  15. package/analytics/index.ts +2 -0
  16. package/analytics/types.ts +156 -0
  17. package/animation/auto-resize.ts +322 -0
  18. package/animation/window-node.ts +26 -19
  19. package/auth/clerk-types.ts +12 -30
  20. package/auth/index.ts +0 -2
  21. package/auth/useAuthState.ts +6 -14
  22. package/base/index.ts +2 -0
  23. package/base/log-level.ts +105 -0
  24. package/channel/index.ts +170 -69
  25. package/cloud-sync/cloud-sync-sdk.ts +450 -0
  26. package/cloud-sync/index.ts +1 -0
  27. package/common/file-scan-utils.ts +17 -9
  28. package/common/index.ts +4 -0
  29. package/common/logger/index.ts +46 -0
  30. package/common/logger/logger-manager.ts +303 -0
  31. package/common/logger/module-logger.ts +270 -0
  32. package/common/logger/transport-logger.ts +234 -0
  33. package/common/logger/types.ts +93 -0
  34. package/common/search/gather.ts +48 -6
  35. package/common/search/index.ts +8 -0
  36. package/common/storage/constants.ts +13 -0
  37. package/common/storage/entity/app-settings.ts +245 -0
  38. package/common/storage/entity/index.ts +3 -0
  39. package/common/storage/entity/layout-atom-types.ts +147 -0
  40. package/common/storage/entity/openers.ts +1 -0
  41. package/common/storage/entity/preset-cloud-api.ts +132 -0
  42. package/common/storage/entity/preset-export-types.ts +256 -0
  43. package/common/storage/entity/shortcut-settings.ts +1 -0
  44. package/common/storage/shortcut-storage.ts +11 -0
  45. package/common/utils/clone-diagnostics.ts +105 -0
  46. package/common/utils/file.ts +16 -8
  47. package/common/utils/index.ts +6 -2
  48. package/common/utils/payload-preview.ts +173 -0
  49. package/common/utils/polling.ts +167 -13
  50. package/common/utils/safe-path.ts +103 -0
  51. package/common/utils/safe-shell.ts +115 -0
  52. package/common/utils/task-queue.ts +4 -1
  53. package/core-box/builder/tuff-builder.ts +0 -1
  54. package/core-box/index.ts +1 -1
  55. package/core-box/recommendation.ts +38 -1
  56. package/core-box/tuff/tuff-dsl.ts +32 -0
  57. package/electron/download-manager.ts +10 -7
  58. package/electron/env-tool.ts +42 -40
  59. package/electron/index.ts +0 -1
  60. package/env/index.ts +156 -0
  61. package/eslint.config.js +55 -0
  62. package/i18n/index.ts +62 -0
  63. package/i18n/locales/en.json +226 -0
  64. package/i18n/locales/zh.json +226 -0
  65. package/i18n/message-keys.ts +236 -0
  66. package/i18n/resolver.ts +181 -0
  67. package/icons/index.ts +257 -0
  68. package/icons/svg.ts +69 -0
  69. package/index.ts +9 -1
  70. package/intelligence/client.ts +72 -42
  71. package/market/constants.ts +9 -5
  72. package/market/index.ts +1 -1
  73. package/market/types.ts +19 -4
  74. package/package.json +15 -5
  75. package/permission/index.ts +143 -46
  76. package/permission/legacy.ts +26 -0
  77. package/permission/registry.ts +304 -0
  78. package/permission/types.ts +164 -0
  79. package/plugin/channel.ts +68 -39
  80. package/plugin/index.ts +80 -7
  81. package/plugin/install.ts +3 -0
  82. package/plugin/log/types.ts +22 -5
  83. package/plugin/node/logger-manager.ts +11 -3
  84. package/plugin/node/logger.ts +24 -17
  85. package/plugin/preload.ts +25 -2
  86. package/plugin/providers/index.ts +4 -4
  87. package/plugin/providers/market-client.ts +6 -3
  88. package/plugin/providers/npm-provider.ts +22 -7
  89. package/plugin/providers/tpex-provider.ts +22 -8
  90. package/plugin/sdk/box-items.ts +14 -0
  91. package/plugin/sdk/box-sdk.ts +64 -0
  92. package/plugin/sdk/channel.ts +119 -4
  93. package/plugin/sdk/clipboard.ts +26 -12
  94. package/plugin/sdk/cloud-sync.ts +113 -0
  95. package/plugin/sdk/common.ts +19 -11
  96. package/plugin/sdk/core-box.ts +6 -15
  97. package/plugin/sdk/division-box.ts +160 -65
  98. package/plugin/sdk/examples/storage-onDidChange-example.js +5 -2
  99. package/plugin/sdk/feature-sdk.ts +111 -76
  100. package/plugin/sdk/flow.ts +146 -45
  101. package/plugin/sdk/hooks/bridge.ts +13 -6
  102. package/plugin/sdk/hooks/life-cycle.ts +35 -16
  103. package/plugin/sdk/index.ts +14 -3
  104. package/plugin/sdk/intelligence.ts +87 -0
  105. package/plugin/sdk/meta/README.md +179 -0
  106. package/plugin/sdk/meta-sdk.ts +244 -0
  107. package/plugin/sdk/notification.ts +9 -0
  108. package/plugin/sdk/plugin-info.ts +64 -0
  109. package/plugin/sdk/power.ts +155 -0
  110. package/plugin/sdk/recommend.ts +21 -0
  111. package/plugin/sdk/service/index.ts +12 -8
  112. package/plugin/sdk/sqlite.ts +141 -0
  113. package/plugin/sdk/storage.ts +2 -6
  114. package/plugin/sdk/system.ts +2 -9
  115. package/plugin/sdk/temp-files.ts +41 -0
  116. package/plugin/sdk/touch-sdk.ts +18 -0
  117. package/plugin/sdk/types.ts +44 -4
  118. package/plugin/sdk/window/index.ts +12 -9
  119. package/plugin/sdk-version.ts +231 -0
  120. package/preload/renderer.ts +3 -2
  121. package/renderer/hooks/arg-mapper.ts +16 -2
  122. package/renderer/hooks/index.ts +13 -0
  123. package/renderer/hooks/initialize.ts +2 -1
  124. package/renderer/hooks/use-agent-market-sdk.ts +7 -0
  125. package/renderer/hooks/use-agent-market.ts +106 -0
  126. package/renderer/hooks/use-agents-sdk.ts +7 -0
  127. package/renderer/hooks/use-app-sdk.ts +7 -0
  128. package/renderer/hooks/use-channel.ts +33 -4
  129. package/renderer/hooks/use-download-sdk.ts +21 -0
  130. package/renderer/hooks/use-intelligence-sdk.ts +7 -0
  131. package/renderer/hooks/use-intelligence-stats.ts +290 -0
  132. package/renderer/hooks/use-intelligence.ts +55 -214
  133. package/renderer/hooks/use-market-sdk.ts +16 -0
  134. package/renderer/hooks/use-notification-sdk.ts +7 -0
  135. package/renderer/hooks/use-permission-sdk.ts +7 -0
  136. package/renderer/hooks/use-permission.ts +325 -0
  137. package/renderer/hooks/use-platform-sdk.ts +7 -0
  138. package/renderer/hooks/use-plugin-sdk.ts +16 -0
  139. package/renderer/hooks/use-settings-sdk.ts +7 -0
  140. package/renderer/hooks/use-update-sdk.ts +21 -0
  141. package/renderer/index.ts +1 -0
  142. package/renderer/ref.ts +19 -10
  143. package/renderer/shared/components/SharedPluginDetailContent.vue +84 -0
  144. package/renderer/shared/components/SharedPluginDetailHeader.vue +116 -0
  145. package/renderer/shared/components/SharedPluginDetailMetaList.vue +39 -0
  146. package/renderer/shared/components/SharedPluginDetailReadme.vue +45 -0
  147. package/renderer/shared/components/SharedPluginDetailVersions.vue +98 -0
  148. package/renderer/shared/components/index.ts +5 -0
  149. package/renderer/shared/components/shims-vue.d.ts +5 -0
  150. package/renderer/shared/index.ts +2 -0
  151. package/renderer/shared/plugin-detail.ts +62 -0
  152. package/renderer/storage/app-settings.ts +3 -1
  153. package/renderer/storage/base-storage.ts +508 -82
  154. package/renderer/storage/intelligence-storage.ts +31 -40
  155. package/renderer/storage/openers.ts +3 -1
  156. package/renderer/storage/storage-subscription.ts +126 -42
  157. package/renderer/touch-sdk/env.ts +10 -10
  158. package/renderer/touch-sdk/index.ts +114 -18
  159. package/renderer/touch-sdk/terminal.ts +24 -13
  160. package/search/feature-matcher.ts +279 -0
  161. package/search/fuzzy-match.ts +64 -34
  162. package/search/index.ts +10 -0
  163. package/search/levenshtein-utils.ts +17 -11
  164. package/transport/errors.ts +310 -0
  165. package/transport/event/builder.ts +378 -0
  166. package/transport/event/index.ts +7 -0
  167. package/transport/event/types.ts +292 -0
  168. package/transport/events/index.ts +2690 -0
  169. package/transport/events/meta-overlay.ts +79 -0
  170. package/transport/events/types/agents.ts +177 -0
  171. package/transport/events/types/app-index.ts +20 -0
  172. package/transport/events/types/app.ts +475 -0
  173. package/transport/events/types/box-item.ts +222 -0
  174. package/transport/events/types/clipboard.ts +80 -0
  175. package/transport/events/types/core-box.ts +534 -0
  176. package/transport/events/types/device-idle.ts +7 -0
  177. package/transport/events/types/division-box.ts +99 -0
  178. package/transport/events/types/download.ts +115 -0
  179. package/transport/events/types/file-index.ts +84 -0
  180. package/transport/events/types/flow.ts +149 -0
  181. package/transport/events/types/index.ts +70 -0
  182. package/transport/events/types/market.ts +39 -0
  183. package/transport/events/types/meta-overlay.ts +184 -0
  184. package/transport/events/types/notification.ts +140 -0
  185. package/transport/events/types/permission.ts +90 -0
  186. package/transport/events/types/platform.ts +8 -0
  187. package/transport/events/types/plugin.ts +631 -0
  188. package/transport/events/types/sentry.ts +20 -0
  189. package/transport/events/types/storage.ts +208 -0
  190. package/transport/events/types/transport.ts +60 -0
  191. package/transport/events/types/tray.ts +16 -0
  192. package/transport/events/types/update.ts +78 -0
  193. package/transport/index.ts +141 -0
  194. package/transport/main.ts +2 -0
  195. package/transport/prelude.ts +208 -0
  196. package/transport/sdk/constants.ts +29 -0
  197. package/transport/sdk/domains/agents-market.ts +47 -0
  198. package/transport/sdk/domains/agents.ts +62 -0
  199. package/transport/sdk/domains/app.ts +48 -0
  200. package/transport/sdk/domains/disposable.ts +35 -0
  201. package/transport/sdk/domains/download.ts +139 -0
  202. package/transport/sdk/domains/index.ts +13 -0
  203. package/transport/sdk/domains/intelligence.ts +616 -0
  204. package/transport/sdk/domains/market.ts +35 -0
  205. package/transport/sdk/domains/notification.ts +62 -0
  206. package/transport/sdk/domains/permission.ts +85 -0
  207. package/transport/sdk/domains/platform.ts +19 -0
  208. package/transport/sdk/domains/plugin.ts +144 -0
  209. package/transport/sdk/domains/settings.ts +102 -0
  210. package/transport/sdk/domains/update.ts +64 -0
  211. package/transport/sdk/index.ts +60 -0
  212. package/transport/sdk/main-transport.ts +710 -0
  213. package/transport/sdk/main.ts +9 -0
  214. package/transport/sdk/plugin-transport.ts +654 -0
  215. package/transport/sdk/port-policy.ts +38 -0
  216. package/transport/sdk/renderer-transport.ts +1165 -0
  217. package/transport/types.ts +605 -0
  218. package/types/agent.ts +399 -0
  219. package/types/cloud-sync.ts +157 -0
  220. package/types/division-box.ts +31 -31
  221. package/types/download.ts +1 -0
  222. package/types/flow.ts +63 -12
  223. package/types/icon.ts +2 -1
  224. package/types/index.ts +5 -0
  225. package/types/intelligence.ts +166 -173
  226. package/types/modules/base.ts +2 -0
  227. package/types/path-browserify.d.ts +5 -0
  228. package/types/platform.ts +12 -0
  229. package/types/startup-info.ts +32 -0
  230. package/types/touch-app-core.ts +8 -8
  231. package/types/update.ts +94 -1
  232. package/vitest.config.ts +25 -0
  233. package/auth/useClerkConfig.ts +0 -40
  234. package/auth/useClerkProvider.ts +0 -52
package/types/update.ts CHANGED
@@ -97,6 +97,14 @@ export interface UpdateSettings {
97
97
  updateChannel: AppPreviewChannel
98
98
  ignoredVersions: string[]
99
99
  customSources: CustomUpdateConfig[]
100
+ /**
101
+ * Automatically download update packages when available.
102
+ */
103
+ autoDownload?: boolean
104
+ /**
105
+ * Enable experimental renderer override updates.
106
+ */
107
+ rendererOverrideEnabled?: boolean
100
108
  /**
101
109
  * Timestamp (ms) of the last successful update check.
102
110
  */
@@ -123,6 +131,11 @@ export interface UpdateSettings {
123
131
  retryDelay?: number
124
132
  }
125
133
 
134
+ export const UPDATE_GITHUB_REPO = 'talex-touch/tuff'
135
+ export const UPDATE_GITHUB_RELEASES_API = `https://api.github.com/repos/${UPDATE_GITHUB_REPO}/releases`
136
+ export const UPDATE_TAG_PREFIX = 'v'
137
+ export const UPDATE_RELEASE_MANIFEST_NAME = 'tuff-release-manifest.json'
138
+
126
139
  /**
127
140
  * Safe defaults used when no user configuration exists yet.
128
141
  */
@@ -132,13 +145,15 @@ export const defaultUpdateSettings: UpdateSettings = {
132
145
  source: {
133
146
  type: UpdateProviderType.GITHUB,
134
147
  name: 'GitHub Releases',
135
- url: 'https://api.github.com/repos/talex-touch/tuff/releases',
148
+ url: UPDATE_GITHUB_RELEASES_API,
136
149
  enabled: true,
137
150
  priority: 1,
138
151
  },
139
152
  updateChannel: AppPreviewChannel.RELEASE,
140
153
  ignoredVersions: [],
141
154
  customSources: [],
155
+ autoDownload: false,
156
+ rendererOverrideEnabled: false,
142
157
  lastCheckedAt: null,
143
158
  cacheEnabled: true,
144
159
  cacheTTL: 30,
@@ -147,6 +162,84 @@ export const defaultUpdateSettings: UpdateSettings = {
147
162
  retryDelay: 2000,
148
163
  }
149
164
 
165
+ const UPDATE_CHANNEL_LABELS = {
166
+ beta: ['BETA', 'SNAPSHOT', 'ALPHA'],
167
+ release: ['RELEASE', 'MASTER'],
168
+ }
169
+
170
+ /**
171
+ * Resolve a release channel from the tag suffix label.
172
+ */
173
+ export function resolveUpdateChannelLabel(label?: string): AppPreviewChannel {
174
+ const normalized = (label || '').trim().toUpperCase()
175
+
176
+ if (UPDATE_CHANNEL_LABELS.beta.some((value) => normalized.startsWith(value))) {
177
+ return AppPreviewChannel.BETA
178
+ }
179
+ if (UPDATE_CHANNEL_LABELS.release.some((value) => normalized.startsWith(value))) {
180
+ return AppPreviewChannel.RELEASE
181
+ }
182
+
183
+ return AppPreviewChannel.RELEASE
184
+ }
185
+
186
+ /**
187
+ * Split an update tag into the numeric version part and optional channel label.
188
+ * Expected format: v<major>.<minor>.<patch>[-<channel>]
189
+ */
190
+ export function splitUpdateTag(tag: string): { version: string; channelLabel?: string } {
191
+ const trimmed = tag.trim()
192
+ const cleaned = trimmed.toLowerCase().startsWith(UPDATE_TAG_PREFIX)
193
+ ? trimmed.slice(UPDATE_TAG_PREFIX.length)
194
+ : trimmed
195
+ const [version = '', channelLabel] = cleaned.split('-', 2)
196
+ return { version, channelLabel }
197
+ }
198
+
199
+ export function parseUpdateTag(tag: string): { version: string; channel: AppPreviewChannel } {
200
+ const { version, channelLabel } = splitUpdateTag(tag)
201
+ return { version, channel: resolveUpdateChannelLabel(channelLabel) }
202
+ }
203
+
204
+ export type UpdateArtifactComponent = 'core' | 'renderer' | 'extensions'
205
+
206
+ export type SystemUpdateType = 'announcement' | 'config' | 'data'
207
+
208
+ export interface FxRatePayload {
209
+ kind: 'fx-rate'
210
+ base: string
211
+ asOf?: string
212
+ providerUpdatedAt?: string | null
213
+ fetchedAt: string
214
+ providerNextUpdateAt?: string | null
215
+ ttlMs?: number
216
+ source?: string
217
+ rates: Record<string, number>
218
+ }
219
+
220
+ export type SystemUpdatePayload = FxRatePayload | { kind: string; [key: string]: unknown }
221
+
222
+ export interface UpdateReleaseArtifact {
223
+ name: string
224
+ component: UpdateArtifactComponent
225
+ platform?: 'win32' | 'darwin' | 'linux'
226
+ arch?: 'x64' | 'arm64'
227
+ sha256: string
228
+ signature?: string
229
+ signatureKey?: string
230
+ coreRange?: string
231
+ }
232
+
233
+ export interface UpdateReleaseManifest {
234
+ schemaVersion: 1
235
+ release: {
236
+ version: string
237
+ channel: AppPreviewChannel
238
+ tag: string
239
+ }
240
+ artifacts: UpdateReleaseArtifact[]
241
+ }
242
+
150
243
  /**
151
244
  * Categorized error types emitted by the updater pipeline.
152
245
  */
@@ -0,0 +1,25 @@
1
+ import { defineConfig } from 'vitest/config'
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ globals: true,
6
+ environment: 'node',
7
+ include: ['__tests__/**/*.test.ts'],
8
+ exclude: ['**/node_modules/**', '**/dist/**'],
9
+ testTimeout: 10000,
10
+ coverage: {
11
+ provider: 'v8',
12
+ reporter: ['text', 'json', 'html'],
13
+ include: [
14
+ 'core-box/**/*.ts',
15
+ 'search/**/*.ts',
16
+ 'transport/**/*.ts',
17
+ ],
18
+ exclude: [
19
+ '**/*.d.ts',
20
+ '**/index.ts',
21
+ '**/types.ts',
22
+ ],
23
+ },
24
+ },
25
+ })
@@ -1,40 +0,0 @@
1
- import type { ClerkConfig } from './clerk-types'
2
-
3
- const clerkPublishableKey = (import.meta.env as any).VITE_CLERK_PUBLISHABLE_KEY
4
- const clerkDomain = (import.meta.env as any).VITE_CLERK_DOMAIN
5
-
6
- if (!clerkPublishableKey?.length) {
7
- throw new Error('VITE_CLERK_PUBLISHABLE_KEY is not set')
8
- }
9
-
10
- export const CLERK_PUBLISHABLE_KEY_KEY = 'clerk-publishable-key'
11
-
12
- export const defaultClerkConfig: ClerkConfig = {
13
- publishableKey: clerkPublishableKey,
14
- domain: clerkDomain,
15
- signInUrl: '/sign-in',
16
- signUpUrl: '/sign-up',
17
- afterSignInUrl: '/home',
18
- afterSignUpUrl: '/home',
19
- }
20
-
21
- export function useClerkConfig() {
22
- const getClerkConfig = (): ClerkConfig => {
23
- return {
24
- ...defaultClerkConfig,
25
- publishableKey:
26
- localStorage.getItem(CLERK_PUBLISHABLE_KEY_KEY) || defaultClerkConfig.publishableKey,
27
- }
28
- }
29
-
30
- const setClerkConfig = (config: Partial<ClerkConfig>): void => {
31
- if (config.publishableKey) {
32
- localStorage.setItem(CLERK_PUBLISHABLE_KEY_KEY, config.publishableKey)
33
- }
34
- }
35
-
36
- return {
37
- getClerkConfig,
38
- setClerkConfig,
39
- }
40
- }
@@ -1,52 +0,0 @@
1
- import { Clerk } from '@clerk/clerk-js'
2
- import { useClerkConfig } from './useClerkConfig'
3
-
4
- let clerkInstance: Clerk | null = null
5
-
6
- export function useClerkProvider() {
7
- const initializeClerk = async (): Promise<Clerk> => {
8
- if (clerkInstance) {
9
- return clerkInstance
10
- }
11
-
12
- const { getClerkConfig } = useClerkConfig()
13
- const config = getClerkConfig()
14
-
15
- if (!config.publishableKey) {
16
- throw new Error('Clerk publishable key is required')
17
- }
18
-
19
- try {
20
- clerkInstance = new Clerk(config.publishableKey)
21
- await clerkInstance.load()
22
-
23
- console.log('Clerk initialized successfully')
24
- return clerkInstance
25
- }
26
- catch (error) {
27
- console.error('Failed to initialize Clerk:', error)
28
- throw error
29
- }
30
- }
31
-
32
- const getClerk = (): Clerk | null => {
33
- return clerkInstance
34
- }
35
-
36
- const isClerkInitialized = (): boolean => {
37
- return clerkInstance !== null
38
- }
39
-
40
- const cleanupClerk = (): void => {
41
- if (clerkInstance) {
42
- clerkInstance = null
43
- }
44
- }
45
-
46
- return {
47
- initializeClerk,
48
- getClerk,
49
- isClerkInitialized,
50
- cleanupClerk,
51
- }
52
- }