@wendongfly/zihi 1.0.0

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 (145) hide show
  1. package/bin/daemon.js +23 -0
  2. package/bin/zihi.js +603 -0
  3. package/dist/admin.html +297 -0
  4. package/dist/attach.js +2 -0
  5. package/dist/chat.html +2254 -0
  6. package/dist/client-dist/socket.io.esm.min.js +7 -0
  7. package/dist/client-dist/socket.io.js +4955 -0
  8. package/dist/client-dist/socket.io.min.js +7 -0
  9. package/dist/client-dist/socket.io.msgpack.min.js +7 -0
  10. package/dist/files.html +722 -0
  11. package/dist/icon.png +0 -0
  12. package/dist/icon.svg +4 -0
  13. package/dist/index.html +976 -0
  14. package/dist/index.js +485 -0
  15. package/dist/lib/ansi_up.js +431 -0
  16. package/dist/lib/xterm/LICENSE +21 -0
  17. package/dist/lib/xterm/README.md +230 -0
  18. package/dist/lib/xterm/css/xterm.css +209 -0
  19. package/dist/lib/xterm/lib/xterm.js +2 -0
  20. package/dist/lib/xterm/lib/xterm.js.map +1 -0
  21. package/dist/lib/xterm/package.json +100 -0
  22. package/dist/lib/xterm/src/browser/AccessibilityManager.ts +300 -0
  23. package/dist/lib/xterm/src/browser/Clipboard.ts +93 -0
  24. package/dist/lib/xterm/src/browser/ColorContrastCache.ts +34 -0
  25. package/dist/lib/xterm/src/browser/Lifecycle.ts +33 -0
  26. package/dist/lib/xterm/src/browser/Linkifier2.ts +416 -0
  27. package/dist/lib/xterm/src/browser/LocalizableStrings.ts +12 -0
  28. package/dist/lib/xterm/src/browser/OscLinkProvider.ts +128 -0
  29. package/dist/lib/xterm/src/browser/RenderDebouncer.ts +83 -0
  30. package/dist/lib/xterm/src/browser/ScreenDprMonitor.ts +72 -0
  31. package/dist/lib/xterm/src/browser/Terminal.ts +1305 -0
  32. package/dist/lib/xterm/src/browser/TimeBasedDebouncer.ts +86 -0
  33. package/dist/lib/xterm/src/browser/Types.d.ts +181 -0
  34. package/dist/lib/xterm/src/browser/Viewport.ts +401 -0
  35. package/dist/lib/xterm/src/browser/decorations/BufferDecorationRenderer.ts +134 -0
  36. package/dist/lib/xterm/src/browser/decorations/ColorZoneStore.ts +117 -0
  37. package/dist/lib/xterm/src/browser/decorations/OverviewRulerRenderer.ts +219 -0
  38. package/dist/lib/xterm/src/browser/input/CompositionHelper.ts +246 -0
  39. package/dist/lib/xterm/src/browser/input/Mouse.ts +54 -0
  40. package/dist/lib/xterm/src/browser/input/MoveToCell.ts +249 -0
  41. package/dist/lib/xterm/src/browser/public/Terminal.ts +260 -0
  42. package/dist/lib/xterm/src/browser/renderer/dom/DomRenderer.ts +506 -0
  43. package/dist/lib/xterm/src/browser/renderer/dom/DomRendererRowFactory.ts +522 -0
  44. package/dist/lib/xterm/src/browser/renderer/dom/WidthCache.ts +157 -0
  45. package/dist/lib/xterm/src/browser/renderer/shared/CellColorResolver.ts +137 -0
  46. package/dist/lib/xterm/src/browser/renderer/shared/CharAtlasCache.ts +96 -0
  47. package/dist/lib/xterm/src/browser/renderer/shared/CharAtlasUtils.ts +75 -0
  48. package/dist/lib/xterm/src/browser/renderer/shared/Constants.ts +14 -0
  49. package/dist/lib/xterm/src/browser/renderer/shared/CursorBlinkStateManager.ts +146 -0
  50. package/dist/lib/xterm/src/browser/renderer/shared/CustomGlyphs.ts +687 -0
  51. package/dist/lib/xterm/src/browser/renderer/shared/DevicePixelObserver.ts +41 -0
  52. package/dist/lib/xterm/src/browser/renderer/shared/README.md +1 -0
  53. package/dist/lib/xterm/src/browser/renderer/shared/RendererUtils.ts +58 -0
  54. package/dist/lib/xterm/src/browser/renderer/shared/SelectionRenderModel.ts +91 -0
  55. package/dist/lib/xterm/src/browser/renderer/shared/TextureAtlas.ts +1082 -0
  56. package/dist/lib/xterm/src/browser/renderer/shared/Types.d.ts +173 -0
  57. package/dist/lib/xterm/src/browser/selection/SelectionModel.ts +144 -0
  58. package/dist/lib/xterm/src/browser/selection/Types.d.ts +15 -0
  59. package/dist/lib/xterm/src/browser/services/CharSizeService.ts +102 -0
  60. package/dist/lib/xterm/src/browser/services/CharacterJoinerService.ts +339 -0
  61. package/dist/lib/xterm/src/browser/services/CoreBrowserService.ts +33 -0
  62. package/dist/lib/xterm/src/browser/services/MouseService.ts +46 -0
  63. package/dist/lib/xterm/src/browser/services/RenderService.ts +284 -0
  64. package/dist/lib/xterm/src/browser/services/SelectionService.ts +1029 -0
  65. package/dist/lib/xterm/src/browser/services/Services.ts +138 -0
  66. package/dist/lib/xterm/src/browser/services/ThemeService.ts +237 -0
  67. package/dist/lib/xterm/src/common/CircularList.ts +241 -0
  68. package/dist/lib/xterm/src/common/Clone.ts +23 -0
  69. package/dist/lib/xterm/src/common/Color.ts +356 -0
  70. package/dist/lib/xterm/src/common/CoreTerminal.ts +284 -0
  71. package/dist/lib/xterm/src/common/EventEmitter.ts +73 -0
  72. package/dist/lib/xterm/src/common/InputHandler.ts +3443 -0
  73. package/dist/lib/xterm/src/common/Lifecycle.ts +108 -0
  74. package/dist/lib/xterm/src/common/MultiKeyMap.ts +42 -0
  75. package/dist/lib/xterm/src/common/Platform.ts +43 -0
  76. package/dist/lib/xterm/src/common/SortedList.ts +118 -0
  77. package/dist/lib/xterm/src/common/TaskQueue.ts +166 -0
  78. package/dist/lib/xterm/src/common/TypedArrayUtils.ts +17 -0
  79. package/dist/lib/xterm/src/common/Types.d.ts +553 -0
  80. package/dist/lib/xterm/src/common/WindowsMode.ts +27 -0
  81. package/dist/lib/xterm/src/common/buffer/AttributeData.ts +196 -0
  82. package/dist/lib/xterm/src/common/buffer/Buffer.ts +654 -0
  83. package/dist/lib/xterm/src/common/buffer/BufferLine.ts +520 -0
  84. package/dist/lib/xterm/src/common/buffer/BufferRange.ts +13 -0
  85. package/dist/lib/xterm/src/common/buffer/BufferReflow.ts +223 -0
  86. package/dist/lib/xterm/src/common/buffer/BufferSet.ts +134 -0
  87. package/dist/lib/xterm/src/common/buffer/CellData.ts +94 -0
  88. package/dist/lib/xterm/src/common/buffer/Constants.ts +149 -0
  89. package/dist/lib/xterm/src/common/buffer/Marker.ts +43 -0
  90. package/dist/lib/xterm/src/common/buffer/Types.d.ts +52 -0
  91. package/dist/lib/xterm/src/common/data/Charsets.ts +256 -0
  92. package/dist/lib/xterm/src/common/data/EscapeSequences.ts +153 -0
  93. package/dist/lib/xterm/src/common/input/Keyboard.ts +398 -0
  94. package/dist/lib/xterm/src/common/input/TextDecoder.ts +346 -0
  95. package/dist/lib/xterm/src/common/input/UnicodeV6.ts +132 -0
  96. package/dist/lib/xterm/src/common/input/WriteBuffer.ts +246 -0
  97. package/dist/lib/xterm/src/common/input/XParseColor.ts +80 -0
  98. package/dist/lib/xterm/src/common/parser/Constants.ts +58 -0
  99. package/dist/lib/xterm/src/common/parser/DcsParser.ts +192 -0
  100. package/dist/lib/xterm/src/common/parser/EscapeSequenceParser.ts +792 -0
  101. package/dist/lib/xterm/src/common/parser/OscParser.ts +238 -0
  102. package/dist/lib/xterm/src/common/parser/Params.ts +229 -0
  103. package/dist/lib/xterm/src/common/parser/Types.d.ts +274 -0
  104. package/dist/lib/xterm/src/common/public/AddonManager.ts +53 -0
  105. package/dist/lib/xterm/src/common/public/BufferApiView.ts +35 -0
  106. package/dist/lib/xterm/src/common/public/BufferLineApiView.ts +29 -0
  107. package/dist/lib/xterm/src/common/public/BufferNamespaceApi.ts +36 -0
  108. package/dist/lib/xterm/src/common/public/ParserApi.ts +37 -0
  109. package/dist/lib/xterm/src/common/public/UnicodeApi.ts +27 -0
  110. package/dist/lib/xterm/src/common/services/BufferService.ts +151 -0
  111. package/dist/lib/xterm/src/common/services/CharsetService.ts +34 -0
  112. package/dist/lib/xterm/src/common/services/CoreMouseService.ts +318 -0
  113. package/dist/lib/xterm/src/common/services/CoreService.ts +87 -0
  114. package/dist/lib/xterm/src/common/services/DecorationService.ts +140 -0
  115. package/dist/lib/xterm/src/common/services/InstantiationService.ts +85 -0
  116. package/dist/lib/xterm/src/common/services/LogService.ts +124 -0
  117. package/dist/lib/xterm/src/common/services/OptionsService.ts +201 -0
  118. package/dist/lib/xterm/src/common/services/OscLinkService.ts +115 -0
  119. package/dist/lib/xterm/src/common/services/ServiceRegistry.ts +49 -0
  120. package/dist/lib/xterm/src/common/services/Services.ts +342 -0
  121. package/dist/lib/xterm/src/common/services/UnicodeService.ts +86 -0
  122. package/dist/lib/xterm/src/headless/Terminal.ts +136 -0
  123. package/dist/lib/xterm/src/headless/public/Terminal.ts +195 -0
  124. package/dist/lib/xterm/typings/xterm.d.ts +1844 -0
  125. package/dist/lib/xterm-fit/LICENSE +19 -0
  126. package/dist/lib/xterm-fit/README.md +24 -0
  127. package/dist/lib/xterm-fit/lib/xterm-addon-fit.js +2 -0
  128. package/dist/lib/xterm-fit/lib/xterm-addon-fit.js.map +1 -0
  129. package/dist/lib/xterm-fit/package.json +26 -0
  130. package/dist/lib/xterm-fit/src/FitAddon.ts +89 -0
  131. package/dist/lib/xterm-fit/typings/xterm-addon-fit.d.ts +55 -0
  132. package/dist/lib/xterm-links/LICENSE +19 -0
  133. package/dist/lib/xterm-links/README.md +21 -0
  134. package/dist/lib/xterm-links/lib/xterm-addon-web-links.js +2 -0
  135. package/dist/lib/xterm-links/lib/xterm-addon-web-links.js.map +1 -0
  136. package/dist/lib/xterm-links/package.json +26 -0
  137. package/dist/lib/xterm-links/src/WebLinkProvider.ts +198 -0
  138. package/dist/lib/xterm-links/src/WebLinksAddon.ts +57 -0
  139. package/dist/lib/xterm-links/typings/xterm-addon-web-links.d.ts +53 -0
  140. package/dist/login.html +163 -0
  141. package/dist/manifest.json +12 -0
  142. package/dist/package.json +1 -0
  143. package/dist/sw.js +127 -0
  144. package/dist/sync.html +816 -0
  145. package/package.json +47 -0
@@ -0,0 +1,163 @@
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, viewport-fit=cover">
6
+ <meta name="theme-color" content="#0d1117">
7
+ <meta name="apple-mobile-web-app-capable" content="yes">
8
+ <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
9
+ <link rel="apple-touch-icon" href="/icon.png">
10
+ <link rel="manifest" href="/manifest.json">
11
+ <title>weHi</title>
12
+ <style>
13
+ * { box-sizing: border-box; margin: 0; padding: 0; }
14
+ html, body {
15
+ height: 100%;
16
+ background: #0d1117;
17
+ color: #e6edf3;
18
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
19
+ }
20
+ body {
21
+ display: flex;
22
+ align-items: center;
23
+ justify-content: center;
24
+ padding: env(safe-area-inset-top) env(safe-area-inset-right)
25
+ env(safe-area-inset-bottom) env(safe-area-inset-left);
26
+ }
27
+
28
+ .card {
29
+ width: 100%;
30
+ max-width: 340px;
31
+ padding: 2.5rem 2rem;
32
+ display: flex;
33
+ flex-direction: column;
34
+ align-items: center;
35
+ gap: 1.5rem;
36
+ }
37
+
38
+ .logo {
39
+ font-size: 2.2rem;
40
+ font-weight: 800;
41
+ letter-spacing: -1px;
42
+ }
43
+ .logo span { color: #f97316; }
44
+
45
+ form {
46
+ width: 100%;
47
+ display: flex;
48
+ flex-direction: column;
49
+ gap: 0.85rem;
50
+ }
51
+
52
+ input[type=password] {
53
+ width: 100%;
54
+ background: #161b22;
55
+ border: 1.5px solid #21262d;
56
+ border-radius: 10px;
57
+ padding: 0.85rem 1rem;
58
+ color: #e6edf3;
59
+ font-size: 1.1rem;
60
+ text-align: center;
61
+ letter-spacing: 0.2em;
62
+ outline: none;
63
+ transition: border-color 0.15s;
64
+ -webkit-appearance: none;
65
+ }
66
+ input[type=password]:focus { border-color: #f97316; }
67
+ input[type=password]::placeholder { letter-spacing: normal; font-size: 0.9rem; color: #4a5568; }
68
+
69
+ button {
70
+ width: 100%;
71
+ background: #f97316;
72
+ color: #fff;
73
+ border: none;
74
+ border-radius: 10px;
75
+ padding: 0.85rem;
76
+ font-size: 1rem;
77
+ font-weight: 600;
78
+ cursor: pointer;
79
+ transition: background 0.15s;
80
+ -webkit-appearance: none;
81
+ }
82
+ button:active { background: #6d28d9; }
83
+ button:disabled { background: #4a5568; cursor: not-allowed; }
84
+
85
+ .error {
86
+ font-size: 0.82rem;
87
+ color: #f85149;
88
+ text-align: center;
89
+ min-height: 1.2em;
90
+ }
91
+
92
+ .occupied {
93
+ font-size: 0.9rem;
94
+ color: #f0883e;
95
+ text-align: center;
96
+ line-height: 1.6;
97
+ padding: 0.8rem;
98
+ background: rgba(240, 136, 62, 0.1);
99
+ border-radius: 10px;
100
+ display: none;
101
+ }
102
+
103
+ .hint {
104
+ font-size: 0.75rem;
105
+ color: #4a5568;
106
+ text-align: center;
107
+ line-height: 1.5;
108
+ }
109
+ </style>
110
+ </head>
111
+ <body>
112
+ <div class="card">
113
+ <div class="logo">we<span>Hi</span></div>
114
+
115
+ <div class="occupied" id="occupied"></div>
116
+
117
+ <form method="POST" action="/login">
118
+ <input type="password" name="password" placeholder="输入密码" autofocus autocomplete="current-password">
119
+ <div class="error" id="err"></div>
120
+ <button type="submit" id="btn">进入</button>
121
+ </form>
122
+
123
+ <div class="hint">密码见服务器启动日志<br>或编辑 ~/.zihi/password</div>
124
+ </div>
125
+
126
+ <script>
127
+ const errType = new URLSearchParams(location.search).get('error');
128
+ const errUser = new URLSearchParams(location.search).get('user');
129
+ if (errType === 'locked') {
130
+ document.getElementById('err').textContent = '登录尝试过多,请 5 分钟后重试';
131
+ } else if (errType === 'occupied' && errUser) {
132
+ document.getElementById('err').textContent = errUser + ' 正在使用中,同账号可直接登录,不同账号请让对方退出';
133
+ } else if (errType) {
134
+ document.getElementById('err').textContent = '密码错误,请重试';
135
+ }
136
+ document.querySelector('input').focus();
137
+
138
+ // 轮询登录状态(独占模式)
139
+ const occupiedEl = document.getElementById('occupied');
140
+ const btnEl = document.getElementById('btn');
141
+ const inputEl = document.querySelector('input[type=password]');
142
+
143
+ async function checkStatus() {
144
+ try {
145
+ const res = await fetch('/api/status');
146
+ const data = await res.json();
147
+ if (data.occupied) {
148
+ occupiedEl.textContent = data.userName + ' 正在使用中' + (data.releasing ? '\n对方已离线,即将自动释放…' : '\n同账号可直接登录');
149
+ occupiedEl.style.display = 'block';
150
+ } else if (data.onlineUsers && data.onlineUsers.length > 0) {
151
+ occupiedEl.textContent = '当前在线: ' + data.onlineUsers.join(', ');
152
+ occupiedEl.style.display = 'block';
153
+ } else {
154
+ occupiedEl.style.display = 'none';
155
+ }
156
+ } catch {}
157
+ }
158
+
159
+ checkStatus();
160
+ setInterval(checkStatus, 3000);
161
+ </script>
162
+ </body>
163
+ </html>
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "ZiHi",
3
+ "short_name": "ZiHi",
4
+ "start_url": "/",
5
+ "display": "standalone",
6
+ "background_color": "#0d1117",
7
+ "theme_color": "#f97316",
8
+ "icons": [
9
+ { "src": "/icon.png", "sizes": "192x192", "type": "image/png" },
10
+ { "src": "/icon.svg", "sizes": "any", "type": "image/svg+xml" }
11
+ ]
12
+ }
@@ -0,0 +1 @@
1
+ {"type":"module","version":"1.0.0"}
package/dist/sw.js ADDED
@@ -0,0 +1,127 @@
1
+ /**
2
+ * weHi Service Worker
3
+ * 离线缓存 + 推送通知
4
+ */
5
+
6
+ const CACHE_NAME = 'zihi-v2';
7
+ const STATIC_ASSETS = [
8
+ '/',
9
+ '/login.html',
10
+ '/lib/ansi_up.js',
11
+ ];
12
+
13
+ // ── Install: 预缓存静态资源 ──
14
+ self.addEventListener('install', (event) => {
15
+ event.waitUntil(
16
+ caches.open(CACHE_NAME).then((cache) => {
17
+ console.log('[SW] 预缓存静态资源');
18
+ return cache.addAll(STATIC_ASSETS);
19
+ })
20
+ );
21
+ self.skipWaiting();
22
+ });
23
+
24
+ // ── Activate: 清理旧缓存 ──
25
+ self.addEventListener('activate', (event) => {
26
+ event.waitUntil(
27
+ caches.keys().then((keys) =>
28
+ Promise.all(
29
+ keys.filter((k) => k !== CACHE_NAME).map((k) => caches.delete(k))
30
+ )
31
+ )
32
+ );
33
+ self.clients.claim();
34
+ });
35
+
36
+ // ── Fetch: 网络优先,失败回退缓存 ──
37
+ self.addEventListener('fetch', (event) => {
38
+ const url = new URL(event.request.url);
39
+
40
+ // API 请求和 WebSocket 不缓存
41
+ if (url.pathname.startsWith('/api/') || url.pathname.startsWith('/socket.io/')) {
42
+ return;
43
+ }
44
+
45
+ event.respondWith(
46
+ fetch(event.request)
47
+ .then((response) => {
48
+ // 成功拿到网络响应,更新缓存
49
+ if (response.ok && event.request.method === 'GET') {
50
+ const clone = response.clone();
51
+ caches.open(CACHE_NAME).then((cache) => cache.put(event.request, clone));
52
+ }
53
+ return response;
54
+ })
55
+ .catch(() => {
56
+ // 网络失败,从缓存返回
57
+ return caches.match(event.request).then((cached) => {
58
+ if (cached) return cached;
59
+ // 导航请求:仅首页和登录页可从缓存回退
60
+ if (event.request.mode === 'navigate') {
61
+ const path = url.pathname;
62
+ if (path === '/' || path === '/login') {
63
+ return caches.match(path);
64
+ }
65
+ }
66
+ return new Response('离线不可用', { status: 503 });
67
+ });
68
+ })
69
+ );
70
+ });
71
+
72
+ // ── Push 通知(从服务器推送时触发)──
73
+ self.addEventListener('push', (event) => {
74
+ const data = event.data ? event.data.json() : {};
75
+ const title = data.title || 'weHi 权限请求';
76
+ const options = {
77
+ body: data.body || '有操作需要你的审批',
78
+ icon: data.icon || '/icon-192.png',
79
+ badge: '/icon-192.png',
80
+ tag: data.tag || 'zihi-permission',
81
+ data: data,
82
+ requireInteraction: true,
83
+ actions: [
84
+ { action: 'allow', title: '允许' },
85
+ { action: 'deny', title: '拒绝' },
86
+ ],
87
+ };
88
+ event.waitUntil(self.registration.showNotification(title, options));
89
+ });
90
+
91
+ // ── 通知点击处理 ──
92
+ self.addEventListener('notificationclick', (event) => {
93
+ event.notification.close();
94
+ const data = event.notification.data || {};
95
+ const sessionUrl = data.sessionUrl || '/';
96
+
97
+ if (event.action === 'allow' || event.action === 'deny') {
98
+ // 通知按钮点击:转发到页面处理
99
+ event.waitUntil(
100
+ self.clients.matchAll({ type: 'window' }).then((clients) => {
101
+ for (const client of clients) {
102
+ client.postMessage({
103
+ type: 'permission-response',
104
+ requestId: data.requestId,
105
+ allow: event.action === 'allow',
106
+ });
107
+ client.focus();
108
+ return;
109
+ }
110
+ // 没有打开的窗口,打开新窗口
111
+ return self.clients.openWindow(sessionUrl);
112
+ })
113
+ );
114
+ } else {
115
+ // 点击通知主体:打开/聚焦会话页面
116
+ event.waitUntil(
117
+ self.clients.matchAll({ type: 'window' }).then((clients) => {
118
+ for (const client of clients) {
119
+ if (client.url.includes(sessionUrl)) {
120
+ return client.focus();
121
+ }
122
+ }
123
+ return self.clients.openWindow(sessionUrl);
124
+ })
125
+ );
126
+ }
127
+ });