@desktalk/core 0.1.0-alpha.1
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.
- package/LICENSE +21 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +82 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/frontend/assets/frontend-B3QNYf3p.js +413 -0
- package/dist/frontend/assets/frontend-B3QNYf3p.js.map +1 -0
- package/dist/frontend/assets/frontend-B4aeXn9d.js +416 -0
- package/dist/frontend/assets/frontend-B4aeXn9d.js.map +1 -0
- package/dist/frontend/assets/frontend-BwyRSlHp.js +6513 -0
- package/dist/frontend/assets/frontend-BwyRSlHp.js.map +1 -0
- package/dist/frontend/assets/frontend-Dix2OWTT.js +229 -0
- package/dist/frontend/assets/frontend-Dix2OWTT.js.map +1 -0
- package/dist/frontend/assets/frontend-Dx41dEM9.js +407 -0
- package/dist/frontend/assets/frontend-Dx41dEM9.js.map +1 -0
- package/dist/frontend/assets/frontend-WpQng8Mt.js +1991 -0
- package/dist/frontend/assets/frontend-WpQng8Mt.js.map +1 -0
- package/dist/frontend/assets/frontend-rTwBdJbn.js +2123 -0
- package/dist/frontend/assets/frontend-rTwBdJbn.js.map +1 -0
- package/dist/frontend/assets/highlighted-body-TPN3WLV5-DD4wpkf4.js +2 -0
- package/dist/frontend/assets/highlighted-body-TPN3WLV5-DD4wpkf4.js.map +1 -0
- package/dist/frontend/assets/index-C5-XUOS7.js +1863 -0
- package/dist/frontend/assets/index-C5-XUOS7.js.map +1 -0
- package/dist/frontend/assets/index-C_e3_6yE.css +1 -0
- package/dist/frontend/index.html +22 -0
- package/dist/frontend/pcm-capture-processor.js +65 -0
- package/dist/i18n/manifest.json +34 -0
- package/dist/i18n/zh-CN.json +7 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/server/admin-routes.d.ts +14 -0
- package/dist/server/admin-routes.d.ts.map +1 -0
- package/dist/server/admin-routes.js +118 -0
- package/dist/server/admin-routes.js.map +1 -0
- package/dist/server/api-routes.d.ts +8 -0
- package/dist/server/api-routes.d.ts.map +1 -0
- package/dist/server/api-routes.js +203 -0
- package/dist/server/api-routes.js.map +1 -0
- package/dist/server/auth-routes.d.ts +19 -0
- package/dist/server/auth-routes.d.ts.map +1 -0
- package/dist/server/auth-routes.js +155 -0
- package/dist/server/auth-routes.js.map +1 -0
- package/dist/server/dtfs-routes.d.ts +3 -0
- package/dist/server/dtfs-routes.d.ts.map +1 -0
- package/dist/server/dtfs-routes.js +183 -0
- package/dist/server/dtfs-routes.js.map +1 -0
- package/dist/server/index.d.ts +15 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +158 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/monaco-routes.d.ts +3 -0
- package/dist/server/monaco-routes.d.ts.map +1 -0
- package/dist/server/monaco-routes.js +45 -0
- package/dist/server/monaco-routes.js.map +1 -0
- package/dist/server/voice-routes.d.ts +7 -0
- package/dist/server/voice-routes.d.ts.map +1 -0
- package/dist/server/voice-routes.js +142 -0
- package/dist/server/voice-routes.js.map +1 -0
- package/dist/server/ws-routes.d.ts +29 -0
- package/dist/server/ws-routes.d.ts.map +1 -0
- package/dist/server/ws-routes.js +334 -0
- package/dist/server/ws-routes.js.map +1 -0
- package/dist/services/ai/action-tool.d.ts +9 -0
- package/dist/services/ai/action-tool.d.ts.map +1 -0
- package/dist/services/ai/action-tool.js +51 -0
- package/dist/services/ai/action-tool.js.map +1 -0
- package/dist/services/ai/app-tools.d.ts +15 -0
- package/dist/services/ai/app-tools.d.ts.map +1 -0
- package/dist/services/ai/app-tools.js +119 -0
- package/dist/services/ai/app-tools.js.map +1 -0
- package/dist/services/ai/chat-service.d.ts +27 -0
- package/dist/services/ai/chat-service.d.ts.map +1 -0
- package/dist/services/ai/chat-service.js +213 -0
- package/dist/services/ai/chat-service.js.map +1 -0
- package/dist/services/ai/create-liveapp-tool.d.ts +15 -0
- package/dist/services/ai/create-liveapp-tool.d.ts.map +1 -0
- package/dist/services/ai/create-liveapp-tool.js +142 -0
- package/dist/services/ai/create-liveapp-tool.js.map +1 -0
- package/dist/services/ai/desktop-tool.d.ts +27 -0
- package/dist/services/ai/desktop-tool.d.ts.map +1 -0
- package/dist/services/ai/desktop-tool.js +106 -0
- package/dist/services/ai/desktop-tool.js.map +1 -0
- package/dist/services/ai/edit-history.d.ts +16 -0
- package/dist/services/ai/edit-history.d.ts.map +1 -0
- package/dist/services/ai/edit-history.js +137 -0
- package/dist/services/ai/edit-history.js.map +1 -0
- package/dist/services/ai/edit-tool.d.ts +9 -0
- package/dist/services/ai/edit-tool.d.ts.map +1 -0
- package/dist/services/ai/edit-tool.js +113 -0
- package/dist/services/ai/edit-tool.js.map +1 -0
- package/dist/services/ai/generate-html-tool.d.ts +15 -0
- package/dist/services/ai/generate-html-tool.d.ts.map +1 -0
- package/dist/services/ai/generate-html-tool.js +140 -0
- package/dist/services/ai/generate-html-tool.js.map +1 -0
- package/dist/services/ai/generate-icon-tool.d.ts +10 -0
- package/dist/services/ai/generate-icon-tool.d.ts.map +1 -0
- package/dist/services/ai/generate-icon-tool.js +58 -0
- package/dist/services/ai/generate-icon-tool.js.map +1 -0
- package/dist/services/ai/html-bridge-script.d.ts +2 -0
- package/dist/services/ai/html-bridge-script.d.ts.map +1 -0
- package/dist/services/ai/html-bridge-script.js +2 -0
- package/dist/services/ai/html-bridge-script.js.map +1 -0
- package/dist/services/ai/html-guidelines-tool.d.ts +3 -0
- package/dist/services/ai/html-guidelines-tool.d.ts.map +1 -0
- package/dist/services/ai/html-guidelines-tool.js +157 -0
- package/dist/services/ai/html-guidelines-tool.js.map +1 -0
- package/dist/services/ai/html-stream-coordinator.d.ts +92 -0
- package/dist/services/ai/html-stream-coordinator.d.ts.map +1 -0
- package/dist/services/ai/html-stream-coordinator.js +314 -0
- package/dist/services/ai/html-stream-coordinator.js.map +1 -0
- package/dist/services/ai/html-theme-link.d.ts +9 -0
- package/dist/services/ai/html-theme-link.d.ts.map +1 -0
- package/dist/services/ai/html-theme-link.js +12 -0
- package/dist/services/ai/html-theme-link.js.map +1 -0
- package/dist/services/ai/html-ui-script.d.ts +9 -0
- package/dist/services/ai/html-ui-script.d.ts.map +1 -0
- package/dist/services/ai/html-ui-script.js +9 -0
- package/dist/services/ai/html-ui-script.js.map +1 -0
- package/dist/services/ai/image-generation-service.d.ts +26 -0
- package/dist/services/ai/image-generation-service.d.ts.map +1 -0
- package/dist/services/ai/image-generation-service.js +205 -0
- package/dist/services/ai/image-generation-service.js.map +1 -0
- package/dist/services/ai/manual-pages/desktop-actions.md +36 -0
- package/dist/services/ai/manual-pages/desktop-windows.md +24 -0
- package/dist/services/ai/manual-pages/dt-badge.md +36 -0
- package/dist/services/ai/manual-pages/dt-button.md +38 -0
- package/dist/services/ai/manual-pages/dt-card.md +22 -0
- package/dist/services/ai/manual-pages/dt-chart.md +261 -0
- package/dist/services/ai/manual-pages/dt-divider.md +25 -0
- package/dist/services/ai/manual-pages/dt-grid.md +29 -0
- package/dist/services/ai/manual-pages/dt-list-view.md +96 -0
- package/dist/services/ai/manual-pages/dt-markdown-editor.md +90 -0
- package/dist/services/ai/manual-pages/dt-markdown.md +86 -0
- package/dist/services/ai/manual-pages/dt-select.md +21 -0
- package/dist/services/ai/manual-pages/dt-stack.md +31 -0
- package/dist/services/ai/manual-pages/dt-stat.md +43 -0
- package/dist/services/ai/manual-pages/dt-table-view.md +120 -0
- package/dist/services/ai/manual-pages/dt-tooltip.md +18 -0
- package/dist/services/ai/manual-pages/editing-preview.md +25 -0
- package/dist/services/ai/manual-pages/html-actions.md +74 -0
- package/dist/services/ai/manual-pages/html-bridge.md +187 -0
- package/dist/services/ai/manual-pages/html-components.md +66 -0
- package/dist/services/ai/manual-pages/html-examples.md +185 -0
- package/dist/services/ai/manual-pages/html-layouts.md +128 -0
- package/dist/services/ai/manual-pages/html-storage.md +153 -0
- package/dist/services/ai/manual-pages/html-tokens.md +26 -0
- package/dist/services/ai/manual-pages/index.d.ts +10 -0
- package/dist/services/ai/manual-pages/index.d.ts.map +1 -0
- package/dist/services/ai/manual-pages/index.js +186 -0
- package/dist/services/ai/manual-pages/index.js.map +1 -0
- package/dist/services/ai/manual-tool.d.ts +3 -0
- package/dist/services/ai/manual-tool.d.ts.map +1 -0
- package/dist/services/ai/manual-tool.js +104 -0
- package/dist/services/ai/manual-tool.js.map +1 -0
- package/dist/services/ai/pi-session-service.d.ts +101 -0
- package/dist/services/ai/pi-session-service.d.ts.map +1 -0
- package/dist/services/ai/pi-session-service.js +697 -0
- package/dist/services/ai/pi-session-service.js.map +1 -0
- package/dist/services/ai/providers.d.ts +21 -0
- package/dist/services/ai/providers.d.ts.map +1 -0
- package/dist/services/ai/providers.js +93 -0
- package/dist/services/ai/providers.js.map +1 -0
- package/dist/services/ai/redo-edit-tool.d.ts +9 -0
- package/dist/services/ai/redo-edit-tool.d.ts.map +1 -0
- package/dist/services/ai/redo-edit-tool.js +44 -0
- package/dist/services/ai/redo-edit-tool.js.map +1 -0
- package/dist/services/ai/system-prompt.d.ts +7 -0
- package/dist/services/ai/system-prompt.d.ts.map +1 -0
- package/dist/services/ai/system-prompt.js +72 -0
- package/dist/services/ai/system-prompt.js.map +1 -0
- package/dist/services/ai/undo-edit-tool.d.ts +9 -0
- package/dist/services/ai/undo-edit-tool.d.ts.map +1 -0
- package/dist/services/ai/undo-edit-tool.js +44 -0
- package/dist/services/ai/undo-edit-tool.js.map +1 -0
- package/dist/services/ai/window-tools.d.ts +27 -0
- package/dist/services/ai/window-tools.d.ts.map +1 -0
- package/dist/services/ai/window-tools.js +155 -0
- package/dist/services/ai/window-tools.js.map +1 -0
- package/dist/services/backend-host.d.ts +10 -0
- package/dist/services/backend-host.d.ts.map +1 -0
- package/dist/services/backend-host.js +117 -0
- package/dist/services/backend-host.js.map +1 -0
- package/dist/services/backend-ipc.d.ts +60 -0
- package/dist/services/backend-ipc.d.ts.map +1 -0
- package/dist/services/backend-ipc.js +2 -0
- package/dist/services/backend-ipc.js.map +1 -0
- package/dist/services/backend-process-manager.d.ts +60 -0
- package/dist/services/backend-process-manager.d.ts.map +1 -0
- package/dist/services/backend-process-manager.js +203 -0
- package/dist/services/backend-process-manager.js.map +1 -0
- package/dist/services/filesystem.d.ts +8 -0
- package/dist/services/filesystem.d.ts.map +1 -0
- package/dist/services/filesystem.js +94 -0
- package/dist/services/filesystem.js.map +1 -0
- package/dist/services/i18n.d.ts +28 -0
- package/dist/services/i18n.d.ts.map +1 -0
- package/dist/services/i18n.js +76 -0
- package/dist/services/i18n.js.map +1 -0
- package/dist/services/liveapp-icon.d.ts +9 -0
- package/dist/services/liveapp-icon.d.ts.map +1 -0
- package/dist/services/liveapp-icon.js +28 -0
- package/dist/services/liveapp-icon.js.map +1 -0
- package/dist/services/liveapps.d.ts +12 -0
- package/dist/services/liveapps.d.ts.map +1 -0
- package/dist/services/liveapps.js +84 -0
- package/dist/services/liveapps.js.map +1 -0
- package/dist/services/logger.d.ts +34 -0
- package/dist/services/logger.d.ts.map +1 -0
- package/dist/services/logger.js +74 -0
- package/dist/services/logger.js.map +1 -0
- package/dist/services/messaging.d.ts +14 -0
- package/dist/services/messaging.d.ts.map +1 -0
- package/dist/services/messaging.js +41 -0
- package/dist/services/messaging.js.map +1 -0
- package/dist/services/miniapp-icon.d.ts +9 -0
- package/dist/services/miniapp-icon.d.ts.map +1 -0
- package/dist/services/miniapp-icon.js +25 -0
- package/dist/services/miniapp-icon.js.map +1 -0
- package/dist/services/miniapp-registry.d.ts +73 -0
- package/dist/services/miniapp-registry.d.ts.map +1 -0
- package/dist/services/miniapp-registry.js +144 -0
- package/dist/services/miniapp-registry.js.map +1 -0
- package/dist/services/onboarding-config.d.ts +37 -0
- package/dist/services/onboarding-config.d.ts.map +1 -0
- package/dist/services/onboarding-config.js +76 -0
- package/dist/services/onboarding-config.js.map +1 -0
- package/dist/services/preferences.d.ts +10 -0
- package/dist/services/preferences.d.ts.map +1 -0
- package/dist/services/preferences.js +48 -0
- package/dist/services/preferences.js.map +1 -0
- package/dist/services/proxy-dispatcher.d.ts +18 -0
- package/dist/services/proxy-dispatcher.d.ts.map +1 -0
- package/dist/services/proxy-dispatcher.js +33 -0
- package/dist/services/proxy-dispatcher.js.map +1 -0
- package/dist/services/storage.d.ts +7 -0
- package/dist/services/storage.d.ts.map +1 -0
- package/dist/services/storage.js +55 -0
- package/dist/services/storage.js.map +1 -0
- package/dist/services/theme-css.d.ts +21 -0
- package/dist/services/theme-css.d.ts.map +1 -0
- package/dist/services/theme-css.js +213 -0
- package/dist/services/theme-css.js.map +1 -0
- package/dist/services/user-db.d.ts +69 -0
- package/dist/services/user-db.d.ts.map +1 -0
- package/dist/services/user-db.js +175 -0
- package/dist/services/user-db.js.map +1 -0
- package/dist/services/voice/audio-format.d.ts +5 -0
- package/dist/services/voice/audio-format.d.ts.map +1 -0
- package/dist/services/voice/audio-format.js +27 -0
- package/dist/services/voice/audio-format.js.map +1 -0
- package/dist/services/voice/azure-openai-whisper-adapter.d.ts +23 -0
- package/dist/services/voice/azure-openai-whisper-adapter.d.ts.map +1 -0
- package/dist/services/voice/azure-openai-whisper-adapter.js +60 -0
- package/dist/services/voice/azure-openai-whisper-adapter.js.map +1 -0
- package/dist/services/voice/openai-whisper-adapter.d.ts +22 -0
- package/dist/services/voice/openai-whisper-adapter.d.ts.map +1 -0
- package/dist/services/voice/openai-whisper-adapter.js +61 -0
- package/dist/services/voice/openai-whisper-adapter.js.map +1 -0
- package/dist/services/voice/stt-adapter.d.ts +31 -0
- package/dist/services/voice/stt-adapter.d.ts.map +1 -0
- package/dist/services/voice/stt-adapter.js +8 -0
- package/dist/services/voice/stt-adapter.js.map +1 -0
- package/dist/services/voice/vad-segmenter.d.ts +68 -0
- package/dist/services/voice/vad-segmenter.d.ts.map +1 -0
- package/dist/services/voice/vad-segmenter.js +159 -0
- package/dist/services/voice/vad-segmenter.js.map +1 -0
- package/dist/services/voice/voice-session.d.ts +54 -0
- package/dist/services/voice/voice-session.d.ts.map +1 -0
- package/dist/services/voice/voice-session.js +137 -0
- package/dist/services/voice/voice-session.js.map +1 -0
- package/dist/services/window-manager.d.ts +94 -0
- package/dist/services/window-manager.d.ts.map +1 -0
- package/dist/services/window-manager.js +282 -0
- package/dist/services/window-manager.js.map +1 -0
- package/dist/services/workspace.d.ts +51 -0
- package/dist/services/workspace.d.ts.map +1 -0
- package/dist/services/workspace.js +144 -0
- package/dist/services/workspace.js.map +1 -0
- package/package.json +89 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 DeskTalk contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { Command } from 'commander';
|
|
4
|
+
import { initWorkspace, migrateToMultiUser } from '../services/workspace.js';
|
|
5
|
+
import { registerBuiltinMiniApps } from '../services/miniapp-registry.js';
|
|
6
|
+
import { createServer } from '../server/index.js';
|
|
7
|
+
import { processManager } from '../services/backend-process-manager.js';
|
|
8
|
+
import { createRootLogger, getLoggerConfig } from '../services/logger.js';
|
|
9
|
+
import { initUserDb, closeUserDb } from '../services/user-db.js';
|
|
10
|
+
import { initGlobalProxyDispatcher } from '../services/proxy-dispatcher.js';
|
|
11
|
+
const require = createRequire(import.meta.url);
|
|
12
|
+
const { version } = require('../../package.json');
|
|
13
|
+
const program = new Command();
|
|
14
|
+
program
|
|
15
|
+
.name('desktalk')
|
|
16
|
+
.description('DeskTalk — Browser-based OS-like desktop environment with AI assistant')
|
|
17
|
+
.version(version);
|
|
18
|
+
program
|
|
19
|
+
.command('start')
|
|
20
|
+
.description('Start the DeskTalk server')
|
|
21
|
+
.option('-H, --host <host>', 'Host to bind to', 'localhost')
|
|
22
|
+
.option('-p, --port <port>', 'Port to listen on', '3000')
|
|
23
|
+
.option('-d, --dev', 'Enable development mode (pretty stdout logging)', false)
|
|
24
|
+
.action(async (opts) => {
|
|
25
|
+
// Install proxy dispatcher before any outbound HTTP traffic
|
|
26
|
+
initGlobalProxyDispatcher();
|
|
27
|
+
const host = opts.host;
|
|
28
|
+
const port = parseInt(opts.port, 10);
|
|
29
|
+
const dev = opts.dev || process.env.NODE_ENV !== 'production';
|
|
30
|
+
const paths = initWorkspace();
|
|
31
|
+
const rootLogger = createRootLogger({ dev, logDir: paths.log });
|
|
32
|
+
const log = rootLogger.child({ scope: 'core' });
|
|
33
|
+
log.info({ config: paths.config, data: paths.data, logs: paths.log, cache: paths.cache }, 'workspace initialized');
|
|
34
|
+
// Initialize the user database and run legacy data migration
|
|
35
|
+
initUserDb(paths.data);
|
|
36
|
+
migrateToMultiUser();
|
|
37
|
+
log.info('user database initialized');
|
|
38
|
+
// Initialize the process manager with logger config so child processes can recreate it
|
|
39
|
+
const loggerConfig = getLoggerConfig({ dev, level: rootLogger.level, logDir: paths.log });
|
|
40
|
+
processManager.init(rootLogger.child({ scope: 'process-mgr' }), loggerConfig);
|
|
41
|
+
log.info('registering built-in MiniApps');
|
|
42
|
+
await registerBuiltinMiniApps(rootLogger.child({ scope: 'registry' }));
|
|
43
|
+
log.info({ host, port, dev }, 'starting DeskTalk server');
|
|
44
|
+
await createServer({ dev, host, port, logger: rootLogger });
|
|
45
|
+
if (dev) {
|
|
46
|
+
log.info({
|
|
47
|
+
apiUrl: `http://${host}:${port}`,
|
|
48
|
+
frontendUrl: 'http://localhost:5173',
|
|
49
|
+
}, 'DeskTalk dev mode is running');
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
log.info({ url: `http://${host}:${port}` }, 'DeskTalk is running');
|
|
53
|
+
}
|
|
54
|
+
// Graceful shutdown — kill all backend child processes
|
|
55
|
+
async function shutdown() {
|
|
56
|
+
log.info('shutting down backend processes');
|
|
57
|
+
await processManager.killAll();
|
|
58
|
+
closeUserDb();
|
|
59
|
+
process.exit(0);
|
|
60
|
+
}
|
|
61
|
+
process.on('SIGINT', shutdown);
|
|
62
|
+
process.on('SIGTERM', shutdown);
|
|
63
|
+
});
|
|
64
|
+
program
|
|
65
|
+
.command('list')
|
|
66
|
+
.description('List installed MiniApps')
|
|
67
|
+
.action(async () => {
|
|
68
|
+
initWorkspace();
|
|
69
|
+
await registerBuiltinMiniApps();
|
|
70
|
+
const { registry } = await import('../services/miniapp-registry.js');
|
|
71
|
+
const manifests = registry.getManifests();
|
|
72
|
+
if (manifests.length === 0) {
|
|
73
|
+
console.log('No MiniApps installed.');
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
console.log('Installed MiniApps:');
|
|
77
|
+
for (const m of manifests) {
|
|
78
|
+
console.log(` ${m.id} (${m.name}) v${m.version}${m.description ? ' — ' + m.description : ''}`);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
program.parse();
|
|
82
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
import{W as Xe,a as Ge,u as S,c as Je,A as Qe,b as Y}from"./index-C5-XUOS7.js";(()=>{if(typeof document>"u")return;const n="desktalk-style-desktalk-miniapp-file-explorer-56nb29";if(document.getElementById(n))return;const t=document.createElement("style");t.id=n,t.textContent=`/* src/components/FileBreadcrumb.module.css */
|
|
2
|
+
.FileBreadcrumb_breadcrumb {
|
|
3
|
+
display: flex;
|
|
4
|
+
flex: 1;
|
|
5
|
+
align-items: center;
|
|
6
|
+
gap: 2px;
|
|
7
|
+
overflow: hidden;
|
|
8
|
+
font-size: 13px;
|
|
9
|
+
}
|
|
10
|
+
.FileBreadcrumb_breadcrumbSegment {
|
|
11
|
+
padding: 2px 6px;
|
|
12
|
+
border: none;
|
|
13
|
+
border-radius: 4px;
|
|
14
|
+
background: none;
|
|
15
|
+
color: var(--dt-text-muted);
|
|
16
|
+
cursor: pointer;
|
|
17
|
+
font-family: inherit;
|
|
18
|
+
font-size: 13px;
|
|
19
|
+
transition: background 0.1s, color 0.1s;
|
|
20
|
+
white-space: nowrap;
|
|
21
|
+
}
|
|
22
|
+
.FileBreadcrumb_breadcrumbSegment:hover {
|
|
23
|
+
background: var(--dt-surface-hover);
|
|
24
|
+
color: var(--dt-text);
|
|
25
|
+
}
|
|
26
|
+
.FileBreadcrumb_breadcrumbSegmentActive {
|
|
27
|
+
color: var(--dt-text);
|
|
28
|
+
font-weight: 500;
|
|
29
|
+
}
|
|
30
|
+
.FileBreadcrumb_breadcrumbSeparator {
|
|
31
|
+
color: var(--dt-text-muted);
|
|
32
|
+
font-size: 11px;
|
|
33
|
+
opacity: 0.5;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* src/components/FileList.module.css */
|
|
37
|
+
.FileList_sortIndicator {
|
|
38
|
+
margin-left: 4px;
|
|
39
|
+
font-size: 10px;
|
|
40
|
+
}
|
|
41
|
+
.FileList_fileTable {
|
|
42
|
+
width: 100%;
|
|
43
|
+
border-collapse: collapse;
|
|
44
|
+
table-layout: fixed;
|
|
45
|
+
}
|
|
46
|
+
.FileList_fileTableHead {
|
|
47
|
+
position: sticky;
|
|
48
|
+
top: 0;
|
|
49
|
+
z-index: 1;
|
|
50
|
+
background: var(--dt-window-body);
|
|
51
|
+
}
|
|
52
|
+
.FileList_fileTableHead th {
|
|
53
|
+
padding: 8px 12px;
|
|
54
|
+
border-bottom: 1px solid var(--dt-border);
|
|
55
|
+
color: var(--dt-text-muted);
|
|
56
|
+
cursor: pointer;
|
|
57
|
+
font-size: 11px;
|
|
58
|
+
font-weight: 600;
|
|
59
|
+
letter-spacing: 0.03em;
|
|
60
|
+
text-align: left;
|
|
61
|
+
text-transform: uppercase;
|
|
62
|
+
transition: color 0.15s;
|
|
63
|
+
-webkit-user-select: none;
|
|
64
|
+
user-select: none;
|
|
65
|
+
}
|
|
66
|
+
.FileList_fileTableHead th:hover {
|
|
67
|
+
color: var(--dt-text);
|
|
68
|
+
}
|
|
69
|
+
.FileList_colName {
|
|
70
|
+
width: auto;
|
|
71
|
+
}
|
|
72
|
+
.FileList_colSize {
|
|
73
|
+
width: 90px;
|
|
74
|
+
}
|
|
75
|
+
.FileList_colModified {
|
|
76
|
+
width: 110px;
|
|
77
|
+
}
|
|
78
|
+
.FileList_fileRow {
|
|
79
|
+
cursor: pointer;
|
|
80
|
+
transition: background 0.1s;
|
|
81
|
+
}
|
|
82
|
+
.FileList_fileRow:hover {
|
|
83
|
+
background: var(--dt-surface-hover);
|
|
84
|
+
}
|
|
85
|
+
.FileList_fileRowSelected {
|
|
86
|
+
background: var(--dt-surface);
|
|
87
|
+
}
|
|
88
|
+
.FileList_fileRow td {
|
|
89
|
+
padding: 6px 12px;
|
|
90
|
+
border-bottom: 1px solid var(--dt-border);
|
|
91
|
+
font-size: 13px;
|
|
92
|
+
overflow: hidden;
|
|
93
|
+
text-overflow: ellipsis;
|
|
94
|
+
white-space: nowrap;
|
|
95
|
+
}
|
|
96
|
+
.FileList_fileName {
|
|
97
|
+
display: flex;
|
|
98
|
+
align-items: center;
|
|
99
|
+
gap: 8px;
|
|
100
|
+
}
|
|
101
|
+
.FileList_fileIcon {
|
|
102
|
+
flex-shrink: 0;
|
|
103
|
+
font-size: 16px;
|
|
104
|
+
}
|
|
105
|
+
.FileList_fileNameText {
|
|
106
|
+
overflow: hidden;
|
|
107
|
+
text-overflow: ellipsis;
|
|
108
|
+
white-space: nowrap;
|
|
109
|
+
}
|
|
110
|
+
.FileList_fileSize {
|
|
111
|
+
color: var(--dt-text-muted);
|
|
112
|
+
font-size: 12px;
|
|
113
|
+
}
|
|
114
|
+
.FileList_fileModified {
|
|
115
|
+
color: var(--dt-text-muted);
|
|
116
|
+
font-size: 12px;
|
|
117
|
+
}
|
|
118
|
+
.FileList_fileListScroll {
|
|
119
|
+
flex: 1;
|
|
120
|
+
overflow-y: auto;
|
|
121
|
+
}
|
|
122
|
+
.FileList_emptyState {
|
|
123
|
+
display: flex;
|
|
124
|
+
height: 100%;
|
|
125
|
+
min-height: 220px;
|
|
126
|
+
flex-direction: column;
|
|
127
|
+
align-items: center;
|
|
128
|
+
justify-content: center;
|
|
129
|
+
gap: 8px;
|
|
130
|
+
padding: 48px 16px;
|
|
131
|
+
color: var(--dt-text-muted);
|
|
132
|
+
font-size: 13px;
|
|
133
|
+
text-align: center;
|
|
134
|
+
}
|
|
135
|
+
.FileList_emptyStateHint {
|
|
136
|
+
max-width: 320px;
|
|
137
|
+
color: var(--dt-text-muted);
|
|
138
|
+
font-size: 12px;
|
|
139
|
+
line-height: 1.5;
|
|
140
|
+
}
|
|
141
|
+
.FileList_renameInput {
|
|
142
|
+
width: 100%;
|
|
143
|
+
padding: 2px 6px;
|
|
144
|
+
border: 1px solid var(--dt-accent);
|
|
145
|
+
border-radius: 4px;
|
|
146
|
+
background: var(--dt-surface);
|
|
147
|
+
color: var(--dt-text);
|
|
148
|
+
font-family: inherit;
|
|
149
|
+
font-size: 13px;
|
|
150
|
+
outline: none;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/* src/components/FilePreview.module.css */
|
|
154
|
+
.FilePreview_previewPanel {
|
|
155
|
+
display: flex;
|
|
156
|
+
width: 360px;
|
|
157
|
+
min-width: 280px;
|
|
158
|
+
flex-direction: column;
|
|
159
|
+
overflow: hidden;
|
|
160
|
+
border-left: 1px solid var(--dt-border);
|
|
161
|
+
}
|
|
162
|
+
.FilePreview_previewHeader {
|
|
163
|
+
display: flex;
|
|
164
|
+
flex-shrink: 0;
|
|
165
|
+
align-items: center;
|
|
166
|
+
justify-content: space-between;
|
|
167
|
+
gap: 8px;
|
|
168
|
+
padding: 10px 14px;
|
|
169
|
+
border-bottom: 1px solid var(--dt-border);
|
|
170
|
+
}
|
|
171
|
+
.FilePreview_previewTitle {
|
|
172
|
+
overflow: hidden;
|
|
173
|
+
font-size: 14px;
|
|
174
|
+
font-weight: 600;
|
|
175
|
+
text-overflow: ellipsis;
|
|
176
|
+
white-space: nowrap;
|
|
177
|
+
}
|
|
178
|
+
.FilePreview_previewCloseBtn {
|
|
179
|
+
display: flex;
|
|
180
|
+
width: 24px;
|
|
181
|
+
height: 24px;
|
|
182
|
+
flex-shrink: 0;
|
|
183
|
+
align-items: center;
|
|
184
|
+
justify-content: center;
|
|
185
|
+
padding: 0;
|
|
186
|
+
border: none;
|
|
187
|
+
border-radius: 4px;
|
|
188
|
+
background: none;
|
|
189
|
+
color: var(--dt-text-muted);
|
|
190
|
+
cursor: pointer;
|
|
191
|
+
font-size: 14px;
|
|
192
|
+
transition: background 0.15s, color 0.15s;
|
|
193
|
+
}
|
|
194
|
+
.FilePreview_previewCloseBtn:hover {
|
|
195
|
+
background: var(--dt-surface-hover);
|
|
196
|
+
color: var(--dt-text);
|
|
197
|
+
}
|
|
198
|
+
.FilePreview_previewBody {
|
|
199
|
+
flex: 1;
|
|
200
|
+
overflow-y: auto;
|
|
201
|
+
padding: 14px;
|
|
202
|
+
}
|
|
203
|
+
.FilePreview_previewCode {
|
|
204
|
+
overflow-x: auto;
|
|
205
|
+
margin: 0;
|
|
206
|
+
padding: 0;
|
|
207
|
+
border: none;
|
|
208
|
+
background: transparent;
|
|
209
|
+
color: var(--dt-text);
|
|
210
|
+
font-family: var(--font-mono);
|
|
211
|
+
font-size: 12px;
|
|
212
|
+
line-height: 1.6;
|
|
213
|
+
white-space: pre-wrap;
|
|
214
|
+
word-break: break-all;
|
|
215
|
+
}
|
|
216
|
+
.FilePreview_previewImage {
|
|
217
|
+
max-width: 100%;
|
|
218
|
+
border-radius: 6px;
|
|
219
|
+
}
|
|
220
|
+
.FilePreview_previewMeta {
|
|
221
|
+
display: flex;
|
|
222
|
+
flex-direction: column;
|
|
223
|
+
gap: 12px;
|
|
224
|
+
}
|
|
225
|
+
.FilePreview_previewMetaRow {
|
|
226
|
+
display: flex;
|
|
227
|
+
flex-direction: column;
|
|
228
|
+
gap: 2px;
|
|
229
|
+
}
|
|
230
|
+
.FilePreview_previewMetaLabel {
|
|
231
|
+
color: var(--dt-text-muted);
|
|
232
|
+
font-size: 11px;
|
|
233
|
+
font-weight: 600;
|
|
234
|
+
letter-spacing: 0.03em;
|
|
235
|
+
text-transform: uppercase;
|
|
236
|
+
}
|
|
237
|
+
.FilePreview_previewMetaValue {
|
|
238
|
+
font-size: 13px;
|
|
239
|
+
}
|
|
240
|
+
.FilePreview_previewPlaceholder {
|
|
241
|
+
display: flex;
|
|
242
|
+
height: 100%;
|
|
243
|
+
align-items: center;
|
|
244
|
+
justify-content: center;
|
|
245
|
+
color: var(--dt-text-muted);
|
|
246
|
+
font-size: 13px;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/* src/components/ContextMenu.module.css */
|
|
250
|
+
.ContextMenu_contextMenu {
|
|
251
|
+
position: fixed;
|
|
252
|
+
z-index: 1000;
|
|
253
|
+
min-width: 160px;
|
|
254
|
+
border: 1px solid var(--dt-border);
|
|
255
|
+
border-radius: 8px;
|
|
256
|
+
background: var(--dt-surface);
|
|
257
|
+
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
|
|
258
|
+
}
|
|
259
|
+
.ContextMenu_contextMenuList {
|
|
260
|
+
padding: 4px 0;
|
|
261
|
+
}
|
|
262
|
+
.ContextMenu_contextMenuItem {
|
|
263
|
+
display: flex;
|
|
264
|
+
align-items: center;
|
|
265
|
+
width: 100%;
|
|
266
|
+
padding: 7px 14px;
|
|
267
|
+
border: none;
|
|
268
|
+
background: none;
|
|
269
|
+
color: var(--dt-text);
|
|
270
|
+
cursor: pointer;
|
|
271
|
+
font-family: inherit;
|
|
272
|
+
font-size: 13px;
|
|
273
|
+
text-align: left;
|
|
274
|
+
transition: background 0.1s;
|
|
275
|
+
}
|
|
276
|
+
.ContextMenu_contextMenuItem:hover {
|
|
277
|
+
background: var(--dt-surface-hover);
|
|
278
|
+
}
|
|
279
|
+
.ContextMenu_contextMenuSubmenuTrigger {
|
|
280
|
+
position: relative;
|
|
281
|
+
}
|
|
282
|
+
.ContextMenu_contextSubmenu {
|
|
283
|
+
position: absolute;
|
|
284
|
+
top: -5px;
|
|
285
|
+
left: calc(100% - 2px);
|
|
286
|
+
z-index: 1001;
|
|
287
|
+
display: none;
|
|
288
|
+
min-width: 160px;
|
|
289
|
+
padding: 4px 0;
|
|
290
|
+
border: 1px solid var(--dt-border);
|
|
291
|
+
border-radius: 8px;
|
|
292
|
+
background: var(--dt-surface);
|
|
293
|
+
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
|
|
294
|
+
}
|
|
295
|
+
.ContextMenu_contextMenuSubmenuTrigger:hover > .ContextMenu_contextSubmenu {
|
|
296
|
+
display: block;
|
|
297
|
+
}
|
|
298
|
+
.ContextMenu_contextMenuChevron {
|
|
299
|
+
margin-left: auto;
|
|
300
|
+
color: var(--dt-text-muted);
|
|
301
|
+
font-size: 11px;
|
|
302
|
+
}
|
|
303
|
+
.ContextMenu_contextMenuSeparator {
|
|
304
|
+
margin: 4px 0;
|
|
305
|
+
border: none;
|
|
306
|
+
border-top: 1px solid var(--dt-border);
|
|
307
|
+
}
|
|
308
|
+
.ContextMenu_contextMenuDanger {
|
|
309
|
+
color: var(--dt-danger, #e55);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/* src/FileExplorerApp.module.css */
|
|
313
|
+
.FileExplorerApp_root {
|
|
314
|
+
display: flex;
|
|
315
|
+
height: 100%;
|
|
316
|
+
flex-direction: column;
|
|
317
|
+
overflow: hidden;
|
|
318
|
+
background: var(--dt-window-body);
|
|
319
|
+
color: var(--dt-text);
|
|
320
|
+
font-family: var(--font-sans);
|
|
321
|
+
}
|
|
322
|
+
.FileExplorerApp_navBar {
|
|
323
|
+
display: flex;
|
|
324
|
+
flex-shrink: 0;
|
|
325
|
+
align-items: center;
|
|
326
|
+
gap: 8px;
|
|
327
|
+
padding: 8px 12px;
|
|
328
|
+
border-bottom: 1px solid var(--dt-border);
|
|
329
|
+
}
|
|
330
|
+
.FileExplorerApp_navBtn {
|
|
331
|
+
display: flex;
|
|
332
|
+
width: 28px;
|
|
333
|
+
height: 28px;
|
|
334
|
+
flex-shrink: 0;
|
|
335
|
+
align-items: center;
|
|
336
|
+
justify-content: center;
|
|
337
|
+
padding: 0;
|
|
338
|
+
border: 1px solid var(--dt-border);
|
|
339
|
+
border-radius: 6px;
|
|
340
|
+
background: var(--dt-surface);
|
|
341
|
+
color: var(--dt-text);
|
|
342
|
+
cursor: pointer;
|
|
343
|
+
font-size: 14px;
|
|
344
|
+
line-height: 1;
|
|
345
|
+
transition:
|
|
346
|
+
background 0.15s,
|
|
347
|
+
border-color 0.15s,
|
|
348
|
+
color 0.15s;
|
|
349
|
+
}
|
|
350
|
+
.FileExplorerApp_navBtn:hover:not(:disabled) {
|
|
351
|
+
border-color: var(--dt-accent);
|
|
352
|
+
background: var(--dt-surface-hover);
|
|
353
|
+
color: var(--dt-accent);
|
|
354
|
+
}
|
|
355
|
+
.FileExplorerApp_navBtn:disabled {
|
|
356
|
+
cursor: default;
|
|
357
|
+
opacity: 0.35;
|
|
358
|
+
}
|
|
359
|
+
.FileExplorerApp_body {
|
|
360
|
+
display: flex;
|
|
361
|
+
flex: 1;
|
|
362
|
+
overflow: hidden;
|
|
363
|
+
}
|
|
364
|
+
.FileExplorerApp_fileListPanel {
|
|
365
|
+
display: flex;
|
|
366
|
+
flex: 1;
|
|
367
|
+
min-width: 0;
|
|
368
|
+
flex-direction: column;
|
|
369
|
+
overflow: hidden;
|
|
370
|
+
}
|
|
371
|
+
.FileExplorerApp_fileListDropZone {
|
|
372
|
+
position: relative;
|
|
373
|
+
display: flex;
|
|
374
|
+
flex: 1;
|
|
375
|
+
min-height: 0;
|
|
376
|
+
flex-direction: column;
|
|
377
|
+
}
|
|
378
|
+
.FileExplorerApp_dropOverlay {
|
|
379
|
+
position: absolute;
|
|
380
|
+
inset: 0;
|
|
381
|
+
z-index: 2;
|
|
382
|
+
display: flex;
|
|
383
|
+
align-items: center;
|
|
384
|
+
justify-content: center;
|
|
385
|
+
background: color-mix(in srgb, var(--dt-window-body) 76%, transparent);
|
|
386
|
+
pointer-events: none;
|
|
387
|
+
}
|
|
388
|
+
.FileExplorerApp_dropOverlayCard {
|
|
389
|
+
display: flex;
|
|
390
|
+
min-width: 260px;
|
|
391
|
+
max-width: 360px;
|
|
392
|
+
flex-direction: column;
|
|
393
|
+
gap: 6px;
|
|
394
|
+
padding: 18px 20px;
|
|
395
|
+
border: 1px dashed var(--dt-accent);
|
|
396
|
+
border-radius: 14px;
|
|
397
|
+
background: color-mix(in srgb, var(--dt-surface) 92%, white 8%);
|
|
398
|
+
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.12);
|
|
399
|
+
text-align: center;
|
|
400
|
+
}
|
|
401
|
+
.FileExplorerApp_dropOverlayTitle {
|
|
402
|
+
color: var(--dt-text);
|
|
403
|
+
font-size: 15px;
|
|
404
|
+
font-weight: 600;
|
|
405
|
+
}
|
|
406
|
+
.FileExplorerApp_dropOverlayHint {
|
|
407
|
+
color: var(--dt-text-muted);
|
|
408
|
+
font-size: 12px;
|
|
409
|
+
line-height: 1.5;
|
|
410
|
+
}
|
|
411
|
+
/*# sourceMappingURL=frontend.css.map */
|
|
412
|
+
`,document.head.appendChild(t)})();var u=window.React,X=u;u.Children;u.Component;u.Fragment;u.Profiler;u.PureComponent;u.StrictMode;u.Suspense;u.cloneElement;u.createContext;u.createElement;u.createRef;u.forwardRef;u.isValidElement;u.lazy;u.memo;u.startTransition;var v=u.useCallback;u.useContext;u.useDebugValue;u.useDeferredValue;var Q=u.useEffect;u.useId;u.useImperativeHandle;u.useInsertionEffect;u.useLayoutEffect;var en=u.useMemo;u.useReducer;var H=u.useRef;u.useState;u.useSyncExternalStore;u.useTransition;u.version;var fe=window.ReactDOM,nn=fe.createRoot;fe.hydrateRoot;var tn=function(n){return typeof n=="function"},rn=function(n){tn(n)||console.error("useMemoizedFn expected parameter is a function, got ".concat(typeof n));var t=H(n);t.current=en(function(){return n},[n]);var r=H(void 0);return r.current||(r.current=function(){for(var l=[],a=0;a<arguments.length;a++)l[a]=arguments[a];return t.current.apply(this,l)}),r.current},B=rn,pe=n=>{let t;const r=new Set,l=(M,w)=>{const g=typeof M=="function"?M(t):M;if(!Object.is(g,t)){const b=t;t=w??(typeof g!="object"||g===null)?g:Object.assign({},t,g),r.forEach(R=>R(t,b))}},a=()=>t,C={setState:l,getState:a,getInitialState:()=>L,subscribe:M=>(r.add(M),()=>r.delete(M))},L=t=n(l,a,C);return C},an=n=>n?pe(n):pe,on=n=>n;function d(n,t=on){const r=X.useSyncExternalStore(n.subscribe,X.useCallback(()=>t(n.getState()),[n,t]),X.useCallback(()=>t(n.getInitialState()),[n,t]));return X.useDebugValue(r),r}var K={breadcrumb:"FileBreadcrumb_breadcrumb",breadcrumbSegment:"FileBreadcrumb_breadcrumbSegment",breadcrumbSegmentActive:"FileBreadcrumb_breadcrumbSegment FileBreadcrumb_breadcrumbSegmentActive",breadcrumbSeparator:"FileBreadcrumb_breadcrumbSeparator"},ee=window.__desktalk_jsx_runtime,i=ee.jsx,p=ee.jsxs;ee.jsxDEV;ee.Fragment;function ln({currentPath:n,onNavigate:t}){const r=n==="."?[]:n.split("/").filter(Boolean);return p("div",{className:K.breadcrumb,children:[i("button",{className:r.length===0?K.breadcrumbSegmentActive:K.breadcrumbSegment,onClick:()=>t("."),children:"~"}),r.map((l,a)=>{const f=r.slice(0,a+1).join("/"),x=a===r.length-1;return p(X.Fragment,{children:[i("span",{className:K.breadcrumbSeparator,children:"/"}),i("button",{className:x?K.breadcrumbSegmentActive:K.breadcrumbSegment,onClick:()=>t(f),children:l})]},f)})]})}var y={sortIndicator:"FileList_sortIndicator",fileTable:"FileList_fileTable",fileTableHead:"FileList_fileTableHead",colName:"FileList_colName",colSize:"FileList_colSize",colModified:"FileList_colModified",fileRow:"FileList_fileRow",fileRowSelected:"FileList_fileRow FileList_fileRowSelected",fileName:"FileList_fileName",fileIcon:"FileList_fileIcon",fileNameText:"FileList_fileNameText",fileSize:"FileList_fileSize",fileModified:"FileList_fileModified",fileListScroll:"FileList_fileListScroll",emptyState:"FileList_emptyState",emptyStateHint:"FileList_emptyStateHint",renameInput:"FileList_renameInput"};function sn(n){return n===null?"--":n<1024?`${n} B`:n<1024*1024?`${(n/1024).toFixed(1)} KB`:`${(n/(1024*1024)).toFixed(1)} MB`}function cn(n){const t=new Date(n),r=new Date,l=t.toLocaleString("default",{month:"short"}),a=t.getDate();return t.getFullYear()!==r.getFullYear()?`${l} ${a}, ${t.getFullYear()}`:`${l} ${a}`}function dn(n){if(n.type==="directory")return"📁";const t=n.name.includes(".")?n.name.slice(n.name.lastIndexOf(".")).toLowerCase():"";return new Set([".png",".jpg",".jpeg",".gif",".svg",".webp",".bmp",".ico"]).has(t)?"🖼️":new Set([".ts",".tsx",".js",".jsx",".py",".rb",".go",".rs",".java",".c",".cpp",".h"]).has(t)?"📝":t===".json"?"{}":t===".md"?"📝":"📄"}function pn(n,t,r){const l=[...n];return l.sort((a,f)=>{if(a.type!==f.type)return a.type==="directory"?-1:1;let x=0;switch(t){case"name":x=a.name.localeCompare(f.name);break;case"size":x=(a.size??-1)-(f.size??-1);break;case"modifiedAt":x=a.modifiedAt.localeCompare(f.modifiedAt);break}return r==="asc"?x:-x}),l}function un({entries:n,sortColumn:t,sortDirection:r,selectedPath:l,renamingPath:a,renameValue:f,isUploading:x=!1,onSort:C,onSelect:L,onOpen:M,onContextMenu:w,onRenameChange:g,onRenameSubmit:b,onRenameCancel:R}){const z=H(null),P=pn(n,t,r);Q(()=>{if(!a||!z.current)return;const c=n.find($=>$.path===a);if(!c)return;const h=z.current,_=c.type==="file"?c.name.lastIndexOf("."):-1,F=_>0?_:c.name.length;h.focus(),h.setSelectionRange(0,F)},[n,a]);const O=v(c=>{c.key==="Enter"?b():c.key==="Escape"&&R()},[b,R]);function I(c){return t!==c?null:i("span",{className:y.sortIndicator,children:r==="asc"?"▲":"▼"})}return n.length===0?p("div",{className:y.emptyState,children:[i("div",{children:"This directory is empty."}),i("div",{className:y.emptyStateHint,children:x?"Uploading files...":"Drag files here to upload them to this folder."})]}):i("div",{className:y.fileListScroll,children:p("table",{className:y.fileTable,children:[i("thead",{className:y.fileTableHead,children:p("tr",{children:[p("th",{className:y.colName,onClick:()=>C("name"),children:["Name",I("name")]}),p("th",{className:y.colSize,onClick:()=>C("size"),children:["Size",I("size")]}),p("th",{className:y.colModified,onClick:()=>C("modifiedAt"),children:["Modified",I("modifiedAt")]})]})}),i("tbody",{children:P.map(c=>p("tr",{className:l===c.path?y.fileRowSelected:y.fileRow,onClick:()=>L(c),onDoubleClick:()=>M(c),onContextMenu:h=>w(h,c),children:[i("td",{children:p("div",{className:y.fileName,children:[i("span",{className:y.fileIcon,children:dn(c)}),a===c.path?i("input",{ref:z,className:y.renameInput,type:"text",value:f,onChange:h=>g(h.target.value),onKeyDown:O,onBlur:()=>{b()},autoFocus:!0}):i("span",{className:y.fileNameText,children:c.name})]})}),i("td",{className:y.fileSize,children:sn(c.size)}),i("td",{className:y.fileModified,children:cn(c.modifiedAt)})]},c.path))})]})})}var s={previewPanel:"FilePreview_previewPanel",previewHeader:"FilePreview_previewHeader",previewTitle:"FilePreview_previewTitle",previewCloseBtn:"FilePreview_previewCloseBtn",previewBody:"FilePreview_previewBody",previewCode:"FilePreview_previewCode",previewMeta:"FilePreview_previewMeta",previewMetaRow:"FilePreview_previewMetaRow",previewMetaLabel:"FilePreview_previewMetaLabel",previewMetaValue:"FilePreview_previewMetaValue",previewPlaceholder:"FilePreview_previewPlaceholder"};function ue(n){return n===null?"--":n<1024?`${n} bytes`:n<1024*1024?`${(n/1024).toFixed(2)} KB`:`${(n/(1024*1024)).toFixed(2)} MB`}function mn(n){return n!==null&&n.startsWith("image/")}function fn(n){return n===null?!1:n.startsWith("text/")||n==="application/json"||n==="application/xml"}function hn({entry:n,content:t,loading:r,onClose:l}){if(!n)return i("div",{className:s.previewPanel,children:i("div",{className:s.previewPlaceholder,children:"Select a file to preview"})});const a=()=>r?i("div",{className:s.previewPlaceholder,children:"Loading..."}):n.type==="directory"?p("div",{className:s.previewMeta,children:[p("div",{className:s.previewMetaRow,children:[i("span",{className:s.previewMetaLabel,children:"Type"}),i("span",{className:s.previewMetaValue,children:"Directory"})]}),p("div",{className:s.previewMetaRow,children:[i("span",{className:s.previewMetaLabel,children:"Path"}),i("span",{className:s.previewMetaValue,children:n.path})]}),p("div",{className:s.previewMetaRow,children:[i("span",{className:s.previewMetaLabel,children:"Last Modified"}),i("span",{className:s.previewMetaValue,children:new Date(n.modifiedAt).toLocaleString()})]})]}):mn(n.mimeType)&&t?n.mimeType==="image/svg+xml"?i("div",{className:s.previewBody,dangerouslySetInnerHTML:{__html:t}}):p("div",{className:s.previewMeta,children:[p("div",{className:s.previewMetaRow,children:[i("span",{className:s.previewMetaLabel,children:"Type"}),i("span",{className:s.previewMetaValue,children:n.mimeType})]}),p("div",{className:s.previewMetaRow,children:[i("span",{className:s.previewMetaLabel,children:"Size"}),i("span",{className:s.previewMetaValue,children:ue(n.size)})]}),p("div",{className:s.previewMetaRow,children:[i("span",{className:s.previewMetaLabel,children:"Last Modified"}),i("span",{className:s.previewMetaValue,children:new Date(n.modifiedAt).toLocaleString()})]})]}):fn(n.mimeType)&&t!==null?i("pre",{className:s.previewCode,children:t}):p("div",{className:s.previewMeta,children:[p("div",{className:s.previewMetaRow,children:[i("span",{className:s.previewMetaLabel,children:"Name"}),i("span",{className:s.previewMetaValue,children:n.name})]}),p("div",{className:s.previewMetaRow,children:[i("span",{className:s.previewMetaLabel,children:"Type"}),i("span",{className:s.previewMetaValue,children:n.mimeType??"Unknown"})]}),p("div",{className:s.previewMetaRow,children:[i("span",{className:s.previewMetaLabel,children:"Size"}),i("span",{className:s.previewMetaValue,children:ue(n.size)})]}),p("div",{className:s.previewMetaRow,children:[i("span",{className:s.previewMetaLabel,children:"Last Modified"}),i("span",{className:s.previewMetaValue,children:new Date(n.modifiedAt).toLocaleString()})]})]});return p("div",{className:s.previewPanel,children:[p("div",{className:s.previewHeader,children:[i("span",{className:s.previewTitle,children:n.name}),i("button",{className:s.previewCloseBtn,onClick:l,title:"Close preview",children:"✕"})]}),i("div",{className:s.previewBody,children:a()})]})}var vn=50,xn=200;function wn({children:n,currentPath:t,onNavigated:r,onFileCreated:l,onDirectoryCreated:a,onDeleted:f,onRenamed:x,onRefresh:C}){const L=S("files.create"),M=S("files.delete"),w=S("files.rename"),g=S("files.list"),b=v(async c=>{const h=c?.limit!=null?Number(c.limit):vn,_=Math.max(1,Math.min(h,xn));return await g({path:t,limit:_})},[g,t]),R=v(async c=>{const h=c?.path||".";r(h)},[r]),z=v(async c=>{const h=c?.name||"";if(!h)return;const _=t==="."?h:`${t}/${h}`,F=c?.content??"",$=await L({path:_,type:"file",content:F});return l($),$},[L,t,l]),P=v(async c=>{const h=c?.name||"";if(!h)return;const _=t==="."?h:`${t}/${h}`,F=await L({path:_,type:"directory"});return a(F),F},[L,t,a]),O=v(async c=>{const h=c?.path||"";h&&(await M({path:h}),f(h))},[M,f]),I=v(async c=>{const h=c?.path||"",_=c?.newName||"";if(!h||!_)return;const F=await w({path:h,newName:_});return x(F),F},[w,x]);return p(Qe,{children:[i(Y,{name:"List Files",description:"List files and directories in the current folder. Returns up to limit entries (default 50, max 200).",params:{limit:{type:"number",description:"Maximum number of entries to return (default 50, max 200)",required:!1}},handler:b}),i(Y,{name:"Navigate",description:"Navigate to a directory",params:{path:{type:"string",description:"Directory path to navigate to",required:!0}},handler:R}),i(Y,{name:"Create File",description:"Create a new file in the current directory",params:{name:{type:"string",description:"File name",required:!0},content:{type:"string",description:"File content",required:!1}},handler:z}),i(Y,{name:"Create Directory",description:"Create a new directory in the current directory",params:{name:{type:"string",description:"Directory name",required:!0}},handler:P}),i(Y,{name:"Delete",description:"Delete a file or directory",params:{path:{type:"string",description:"Path of file or directory to delete",required:!0}},handler:O}),i(Y,{name:"Rename",description:"Rename a file or directory",params:{path:{type:"string",description:"Current path",required:!0},newName:{type:"string",description:"New name",required:!0}},handler:I}),n]})}var j={contextMenu:"ContextMenu_contextMenu",contextMenuList:"ContextMenu_contextMenuList",contextMenuItem:"ContextMenu_contextMenuItem",contextMenuSubmenuTrigger:"ContextMenu_contextMenuSubmenuTrigger",contextSubmenu:"ContextMenu_contextSubmenu",contextMenuChevron:"ContextMenu_contextMenuChevron",contextMenuDanger:"ContextMenu_contextMenuItem ContextMenu_contextMenuDanger"};function gn({x:n,y:t,actions:r,onClose:l}){const a=H(null),f=v(L=>{a.current&&!a.current.contains(L.target)&&l()},[l]);Q(()=>(document.addEventListener("mousedown",f),()=>{document.removeEventListener("mousedown",f)}),[f]);const x={left:n,top:t},C=(L,M=!1)=>i("div",{className:M?j.contextSubmenu:j.contextMenuList,children:L.map((w,g)=>{const b=w.danger?j.contextMenuDanger:j.contextMenuItem;return w.children&&w.children.length>0?p("div",{className:j.contextMenuSubmenuTrigger,children:[p("button",{type:"button",className:b,children:[i("span",{children:w.label}),i("span",{className:j.contextMenuChevron,children:"▸"})]}),C(w.children,!0)]},`${w.label}-${g}`):i("button",{type:"button",className:b,onClick:()=>{w.handler?.(),l()},children:w.label},`${w.label}-${g}`)})});return i("div",{ref:a,className:j.contextMenu,style:x,children:C(r)})}var bn={currentPath:".",history:["."],historyIndex:0,entries:[],sortColumn:"name",sortDirection:"asc",isDragActive:!1,isUploading:!1,miniAppManifests:[],selectedPath:null,previewEntry:null,previewContent:null,previewLoading:!1,renamingPath:null,renameValue:"",contextMenu:null};function ae(){return{selectedPath:null,previewEntry:null,previewContent:null,previewLoading:!1,contextMenu:null}}function yn(){return an((n,t)=>({...bn,setEntries(r){n({entries:r})},setSortColumn(r){n({sortColumn:r})},setSortDirection(r){n({sortDirection:r})},setDragActive(r){n({isDragActive:r})},setUploading(r){n({isUploading:r})},setMiniAppManifests(r){n({miniAppManifests:r})},setSelectedPath(r){n({selectedPath:r})},setPreviewEntry(r){n({previewEntry:r})},setPreviewContent(r){n({previewContent:r})},setPreviewLoading(r){n({previewLoading:r})},setRenameValue(r){n({renameValue:r})},setContextMenu(r){n({contextMenu:r})},startRename(r,l){n({renamingPath:r,renameValue:l})},stopRename(){n({renamingPath:null,renameValue:""})},closePreview(){n({previewEntry:null,previewContent:null,previewLoading:!1})},navigateTo(r){const{history:l,historyIndex:a}=t(),f=[...l.slice(0,a+1),r];n({currentPath:r,history:f,historyIndex:f.length-1,...ae()})},goBack(){const{history:r,historyIndex:l}=t();if(l<=0)return;const a=l-1;n({currentPath:r[a],historyIndex:a,...ae()})},goForward(){const{history:r,historyIndex:l}=t();if(l>=r.length-1)return;const a=l+1;n({currentPath:r[a],historyIndex:a,...ae()})}}))}var E={root:"FileExplorerApp_root",navBar:"FileExplorerApp_navBar",navBtn:"FileExplorerApp_navBtn",body:"FileExplorerApp_body",fileListPanel:"FileExplorerApp_fileListPanel",fileListDropZone:"FileExplorerApp_fileListDropZone",dropOverlay:"FileExplorerApp_dropOverlay",dropOverlayCard:"FileExplorerApp_dropOverlayCard",dropOverlayTitle:"FileExplorerApp_dropOverlayTitle",dropOverlayHint:"FileExplorerApp_dropOverlayHint"},Fn=["player","preview","text-edit"];function Mn(n){const t=new Set(n.filter(l=>l.type==="directory").map(l=>l.name.toLowerCase()));if(!t.has("new folder"))return"New folder";let r=2;for(;t.has(`new folder ${r}`);)r+=1;return`New folder ${r}`}function _n(n){const t=n.toLowerCase();if(t.startsWith("."))return t;const r=t.lastIndexOf(".");return r>=0?t.slice(r):null}function Cn(n,t){if(n.type!=="file")return!1;const r=t.fileAssociations;if(!r)return!1;const l=_n(n.name),a=l!==null&&r.extensions?.some(x=>x.toLowerCase()===l),f=n.mimeType!==null&&r.mimeTypes?.some(x=>x===n.mimeType);return!!(a||f)}function he(n,t){return t.filter(r=>Cn(n,r))}function me(n,t){const r=he(n,t);for(const l of Fn){const a=r.find(f=>f.id===l);if(a)return a}return r[0]??null}function Ln(){const n=H(null);n.current||(n.current=yn());const t=n.current,r=d(t,e=>e.currentPath),l=d(t,e=>e.history),a=d(t,e=>e.historyIndex),f=d(t,e=>e.entries),x=d(t,e=>e.sortColumn),C=d(t,e=>e.sortDirection),L=d(t,e=>e.isDragActive),M=d(t,e=>e.isUploading),w=d(t,e=>e.miniAppManifests),g=d(t,e=>e.selectedPath),b=d(t,e=>e.previewEntry),R=d(t,e=>e.previewContent),z=d(t,e=>e.previewLoading),P=d(t,e=>e.renamingPath),O=d(t,e=>e.renameValue),I=d(t,e=>e.contextMenu),c=d(t,e=>e.setEntries),h=d(t,e=>e.setSortColumn),_=d(t,e=>e.setSortDirection),F=d(t,e=>e.setDragActive),$=d(t,e=>e.setUploading),oe=d(t,e=>e.setMiniAppManifests),D=d(t,e=>e.setSelectedPath),ne=d(t,e=>e.setPreviewEntry),G=d(t,e=>e.setPreviewContent),te=d(t,e=>e.setPreviewLoading),ve=d(t,e=>e.setRenameValue),T=d(t,e=>e.setContextMenu),le=d(t,e=>e.startRename),Z=d(t,e=>e.stopRename),J=d(t,e=>e.closePreview),U=d(t,e=>e.navigateTo),xe=d(t,e=>e.goBack),we=d(t,e=>e.goForward),ge=S("files.list"),se=S("files.read"),be=S("files.delete"),ye=S("files.rename"),Fe=S("files.create"),Me=S("files.copy"),_e=S("files.move"),Ce=S("files.upload"),q=H(null),re=H(!1),W=Je(),Le=a>0,Ne=a<l.length-1,Se=v(e=>new Promise((o,m)=>{const N=new FileReader;N.onerror=()=>m(new Error(`Failed to read file: ${e.name}`)),N.onload=()=>{const A=N.result;if(typeof A!="string"){m(new Error(`Failed to read file: ${e.name}`));return}const de=A.indexOf(",");o(de>=0?A.slice(de+1):A)},N.readAsDataURL(e)}),[]),V=B(async e=>{try{const o=await ge({path:e});c(o)}catch(o){console.error("Failed to list directory:",o),c([])}});Q(()=>{V(r)},[r,V]),Q(()=>{let e=!1;return(async()=>{try{const o=await fetch("/api/miniapps");if(!o.ok)throw new Error(`Failed to load MiniApps (${o.status})`);const m=await o.json();e||oe(m)}catch(o){console.error("Failed to load MiniApps:",o)}})(),()=>{e=!0}},[oe]);const k=B(()=>{V(r)}),Ae=v(e=>{x===e?_(C==="asc"?"desc":"asc"):(h(e),_("asc"))},[h,_,x,C]),Ee=v(e=>{D(e.path),T(null)},[T,D]),ie=v(async e=>{ne(e),te(!0),G(null);try{const o=await se({path:e.path});G(o.content)}catch(o){console.error("Failed to read file:",o),G(null)}finally{te(!1)}},[se,G,ne,te]),Pe=v(async e=>{if(e.type==="directory"){U(e.path);return}const o=me(e,w);if(o){W(o.id,{path:e.path});return}await ie(e)},[w,U,ie,W]),Ie=v((e,o)=>{e.preventDefault(),D(o.path),T({x:e.clientX,y:e.clientY,entry:o})},[T,D]),ke=v(e=>{e.target.closest("tr")||(e.preventDefault(),D(null),T({x:e.clientX,y:e.clientY,entry:null}))},[T,D]),De=v(()=>{T(null)},[T]),Re=B(async()=>{if(re.current)return;if(!P||!O.trim()){Z(),await V(r);return}const e=f.find(m=>m.path===P),o=O.trim();if(e&&e.name===o){Z();return}re.current=!0;try{const m=await ye({path:P,newName:o});await V(r),g===P&&D(m.path),b?.path===P&&ne(m)}catch(m){console.error("Failed to rename:",m),await V(r)}finally{re.current=!1,Z()}}),Te=v(()=>{Z()},[Z]),Be=B(async()=>{const e=Mn(f),o=r==="."?e:`${r}/${e}`;try{const m=await Fe({path:o,type:"directory"});await V(r),D(m.path),le(m.path,m.name)}catch(m){console.error("Failed to create directory:",m)}}),ze=v(()=>{W("terminal",{cwd:r})},[r,W]),Oe=B(async e=>{try{await be({path:e}),b?.path===e&&J(),g===e&&D(null),k()}catch(o){console.error("Failed to delete:",o)}}),$e=v(e=>{q.current={path:e,mode:"copy"}},[]),Ve=v(e=>{q.current={path:e,mode:"cut"}},[]),je=B(async()=>{if(!q.current)return;const{path:e,mode:o}=q.current,m=e.includes("/")?e.split("/").pop():e,N=r==="."?m:`${r}/${m}`;try{o==="copy"?await Me({source:e,destination:N}):(await _e({source:e,destination:N}),q.current=null),k()}catch(A){console.error(`Failed to ${o}:`,A)}}),He=v(e=>{Array.from(e.dataTransfer.types).includes("Files")&&(e.preventDefault(),e.dataTransfer.dropEffect="copy",F(!0))},[F]),Ue=v(e=>{const o=e.relatedTarget;o&&e.currentTarget.contains(o)||F(!1)},[F]),qe=B(async e=>{if(!Array.from(e.dataTransfer.types).includes("Files"))return;e.preventDefault(),F(!1);const o=Array.from(e.dataTransfer.files).filter(m=>m.size>=0);if(o.length!==0){$(!0);try{await Promise.all(o.map(async m=>{const N=await Se(m),A=r==="."?m.name:`${r}/${m.name}`;await Ce({path:A,contentBase64:N})})),k()}catch(m){console.error("Failed to upload dropped files:",m)}finally{$(!1)}}}),We=B(e=>{if(e===null)return[{label:"New folder",handler:()=>{Be()}},{label:"Open in Terminal",handler:ze}];const o=[];if(e.type==="directory")o.push({label:"Open",handler:()=>U(e.path)});else{const m=he(e,w),N=me(e,w);o.push({label:"Open",handler:()=>{if(N){W(N.id,{path:e.path});return}ie(e)}}),m.length>0&&o.push({label:"Open with",children:m.map(A=>({label:A.name,handler:()=>W(A.id,{path:e.path})}))})}return o.push({label:"Rename",handler:()=>le(e.path,e.name)}),o.push({label:"Copy",handler:()=>$e(e.path)}),o.push({label:"Cut",handler:()=>Ve(e.path)}),q.current&&o.push({label:"Paste here",handler:je}),o.push({label:"Delete",danger:!0,handler:()=>Oe(e.path)}),o}),Ye=v(e=>{U(e)},[U]),ce=v(()=>{k()},[k]),Ke=v(e=>{b?.path===e&&J(),k()},[J,b,k]),Ze=v(()=>{k()},[k]);return i(wn,{currentPath:r,onNavigated:Ye,onFileCreated:ce,onDirectoryCreated:ce,onDeleted:Ke,onRenamed:Ze,onRefresh:k,children:p("div",{className:E.root,children:[p("div",{className:E.navBar,children:[i("button",{className:E.navBtn,onClick:xe,disabled:!Le,title:"Back",children:"◀"}),i("button",{className:E.navBtn,onClick:we,disabled:!Ne,title:"Forward",children:"▶"}),i(ln,{currentPath:r,onNavigate:U})]}),p("div",{className:E.body,children:[i("div",{className:E.fileListPanel,children:p("div",{className:E.fileListDropZone,onContextMenu:ke,onDragOver:He,onDragLeave:Ue,onDrop:qe,children:[i(un,{entries:f,sortColumn:x,sortDirection:C,selectedPath:g,renamingPath:P,renameValue:O,isUploading:M,onSort:Ae,onSelect:Ee,onOpen:Pe,onContextMenu:Ie,onRenameChange:ve,onRenameSubmit:Re,onRenameCancel:Te}),L&&i("div",{className:E.dropOverlay,children:p("div",{className:E.dropOverlayCard,children:[i("div",{className:E.dropOverlayTitle,children:"Drop files to upload"}),i("div",{className:E.dropOverlayHint,children:"Files will be added to this folder."})]})})]})}),b&&i(hn,{entry:b,content:R,loading:z,onClose:J})]}),I&&i(gn,{x:I.x,y:I.y,actions:We(I.entry),onClose:De})]})})}function Sn(n){const t=nn(n.root);return t.render(i(Xe,{windowId:n.windowId,children:i(Ge,{miniAppId:n.miniAppId,children:i(Ln,{})})})),{deactivate(){t.unmount()}}}export{Sn as activate};
|
|
413
|
+
//# sourceMappingURL=frontend-B3QNYf3p.js.map
|