@co0ontty/wand 1.1.7 → 1.2.2
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/dist/claude-pty-bridge.js +3 -6
- package/dist/process-manager.d.ts +1 -1
- package/dist/process-manager.js +19 -192
- package/dist/pty-text-utils.d.ts +2 -0
- package/dist/pty-text-utils.js +20 -0
- package/dist/resume-policy.d.ts +80 -0
- package/dist/resume-policy.js +178 -0
- package/dist/server-session-routes.d.ts +6 -0
- package/dist/server-session-routes.js +359 -0
- package/dist/server.js +20 -331
- package/dist/web-ui/content/scripts.js +435 -45
- package/dist/web-ui/content/styles.css +143 -18
- package/dist/ws-broadcast.d.ts +1 -1
- package/package.json +3 -2
|
@@ -2042,6 +2042,10 @@
|
|
|
2042
2042
|
position: relative;
|
|
2043
2043
|
flex-shrink: 0;
|
|
2044
2044
|
}
|
|
2045
|
+
/* Desktop: expanded row is always hidden (mobile only) */
|
|
2046
|
+
.inline-shortcuts-expanded-row {
|
|
2047
|
+
display: none;
|
|
2048
|
+
}
|
|
2045
2049
|
.shortcuts-toggle {
|
|
2046
2050
|
display: none;
|
|
2047
2051
|
}
|
|
@@ -5128,14 +5132,18 @@
|
|
|
5128
5132
|
display: none;
|
|
5129
5133
|
}
|
|
5130
5134
|
|
|
5131
|
-
/* 移动端内联快捷键 -
|
|
5135
|
+
/* 移动端内联快捷键 - 折叠为展开按钮,展开到独立第二行 */
|
|
5132
5136
|
.inline-shortcuts-inline {
|
|
5133
5137
|
display: none;
|
|
5134
5138
|
}
|
|
5135
5139
|
.inline-shortcuts-wrap {
|
|
5136
|
-
|
|
5137
|
-
|
|
5138
|
-
|
|
5140
|
+
display: flex;
|
|
5141
|
+
align-items: center;
|
|
5142
|
+
flex-shrink: 0;
|
|
5143
|
+
}
|
|
5144
|
+
/* 移动端: strip 永远不显示,展开由独立的 expanded-row 承载 */
|
|
5145
|
+
.inline-shortcuts-strip {
|
|
5146
|
+
display: none !important;
|
|
5139
5147
|
}
|
|
5140
5148
|
.shortcuts-toggle {
|
|
5141
5149
|
display: inline-flex;
|
|
@@ -5158,30 +5166,31 @@
|
|
|
5158
5166
|
.shortcuts-toggle.active {
|
|
5159
5167
|
color: var(--accent);
|
|
5160
5168
|
}
|
|
5161
|
-
|
|
5169
|
+
/* 独立第二行:默认隐藏 */
|
|
5170
|
+
.inline-shortcuts-expanded-row {
|
|
5162
5171
|
display: none;
|
|
5163
|
-
|
|
5164
|
-
|
|
5165
|
-
|
|
5166
|
-
|
|
5172
|
+
}
|
|
5173
|
+
/* 独立第二行:展开时显示,居中、自动换行 */
|
|
5174
|
+
.inline-shortcuts-expanded-row.visible {
|
|
5175
|
+
display: flex;
|
|
5176
|
+
justify-content: center;
|
|
5177
|
+
align-items: flex-start;
|
|
5178
|
+
align-content: flex-start;
|
|
5179
|
+
flex-wrap: wrap;
|
|
5167
5180
|
gap: 3px;
|
|
5168
|
-
|
|
5169
|
-
min-width: 0;
|
|
5181
|
+
padding: 4px 6px;
|
|
5170
5182
|
}
|
|
5171
|
-
.inline-shortcuts-
|
|
5183
|
+
.inline-shortcuts-expanded-row .shortcut-sep {
|
|
5172
5184
|
display: none;
|
|
5173
5185
|
}
|
|
5174
|
-
.inline-shortcuts-
|
|
5175
|
-
display: flex;
|
|
5176
|
-
}
|
|
5177
|
-
.inline-shortcuts-strip .shortcut-key {
|
|
5186
|
+
.inline-shortcuts-expanded-row .shortcut-key {
|
|
5178
5187
|
height: 22px;
|
|
5179
5188
|
min-width: 22px;
|
|
5180
5189
|
font-size: 0.5625rem;
|
|
5181
5190
|
padding: 0 4px;
|
|
5182
|
-
flex
|
|
5191
|
+
flex: 0 0 auto;
|
|
5183
5192
|
}
|
|
5184
|
-
.inline-shortcuts-
|
|
5193
|
+
.inline-shortcuts-expanded-row .shortcut-key.shortcut-dir {
|
|
5185
5194
|
min-width: 20px;
|
|
5186
5195
|
}
|
|
5187
5196
|
|
|
@@ -5830,6 +5839,109 @@
|
|
|
5830
5839
|
to { opacity: 1; transform: translateX(-50%) translateY(0); }
|
|
5831
5840
|
}
|
|
5832
5841
|
|
|
5842
|
+
/* ── Notification Bubble ── */
|
|
5843
|
+
.notification-bubble {
|
|
5844
|
+
position: fixed;
|
|
5845
|
+
left: 50%;
|
|
5846
|
+
transform: translateX(-50%);
|
|
5847
|
+
z-index: 10000;
|
|
5848
|
+
min-width: 280px;
|
|
5849
|
+
max-width: 380px;
|
|
5850
|
+
background: var(--bg-primary);
|
|
5851
|
+
border: 1px solid var(--border);
|
|
5852
|
+
border-radius: var(--radius-lg);
|
|
5853
|
+
box-shadow: var(--shadow-lg);
|
|
5854
|
+
padding: 14px 16px;
|
|
5855
|
+
animation: notification-slide-in 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
5856
|
+
transition: top 0.25s ease, opacity 0.25s ease;
|
|
5857
|
+
}
|
|
5858
|
+
.notification-bubble.slide-out {
|
|
5859
|
+
animation: notification-slide-out 0.25s ease forwards;
|
|
5860
|
+
transform: translateX(-50%);
|
|
5861
|
+
}
|
|
5862
|
+
.notification-bubble-header {
|
|
5863
|
+
display: flex;
|
|
5864
|
+
align-items: center;
|
|
5865
|
+
gap: 8px;
|
|
5866
|
+
margin-bottom: 6px;
|
|
5867
|
+
}
|
|
5868
|
+
.notification-bubble-icon {
|
|
5869
|
+
width: 20px;
|
|
5870
|
+
height: 20px;
|
|
5871
|
+
flex-shrink: 0;
|
|
5872
|
+
display: flex;
|
|
5873
|
+
align-items: center;
|
|
5874
|
+
justify-content: center;
|
|
5875
|
+
border-radius: var(--radius-sm);
|
|
5876
|
+
font-size: 12px;
|
|
5877
|
+
}
|
|
5878
|
+
.notification-bubble-icon.info { background: var(--accent); color: white; }
|
|
5879
|
+
.notification-bubble-icon.warning { background: var(--warning); color: white; }
|
|
5880
|
+
.notification-bubble-icon.success { background: var(--success); color: white; }
|
|
5881
|
+
.notification-bubble-title {
|
|
5882
|
+
font-size: 0.875rem;
|
|
5883
|
+
font-weight: 600;
|
|
5884
|
+
color: var(--fg-primary);
|
|
5885
|
+
flex: 1;
|
|
5886
|
+
min-width: 0;
|
|
5887
|
+
}
|
|
5888
|
+
.notification-bubble-close {
|
|
5889
|
+
background: none;
|
|
5890
|
+
border: none;
|
|
5891
|
+
color: var(--fg-muted);
|
|
5892
|
+
cursor: pointer;
|
|
5893
|
+
font-size: 16px;
|
|
5894
|
+
line-height: 1;
|
|
5895
|
+
padding: 2px 4px;
|
|
5896
|
+
border-radius: var(--radius-sm);
|
|
5897
|
+
flex-shrink: 0;
|
|
5898
|
+
}
|
|
5899
|
+
.notification-bubble-close:hover {
|
|
5900
|
+
background: var(--bg-hover);
|
|
5901
|
+
color: var(--fg-primary);
|
|
5902
|
+
}
|
|
5903
|
+
.notification-bubble-body {
|
|
5904
|
+
font-size: 0.8125rem;
|
|
5905
|
+
color: var(--fg-secondary);
|
|
5906
|
+
line-height: 1.45;
|
|
5907
|
+
margin-bottom: 0;
|
|
5908
|
+
}
|
|
5909
|
+
.notification-bubble-actions {
|
|
5910
|
+
margin-top: 10px;
|
|
5911
|
+
display: flex;
|
|
5912
|
+
gap: 8px;
|
|
5913
|
+
justify-content: flex-end;
|
|
5914
|
+
}
|
|
5915
|
+
.notification-bubble-actions button {
|
|
5916
|
+
font-size: 0.8125rem;
|
|
5917
|
+
padding: 4px 12px;
|
|
5918
|
+
border-radius: var(--radius-sm);
|
|
5919
|
+
cursor: pointer;
|
|
5920
|
+
border: 1px solid var(--border);
|
|
5921
|
+
background: var(--bg-secondary);
|
|
5922
|
+
color: var(--fg-primary);
|
|
5923
|
+
transition: background 0.15s;
|
|
5924
|
+
}
|
|
5925
|
+
.notification-bubble-actions button:hover {
|
|
5926
|
+
background: var(--bg-hover);
|
|
5927
|
+
}
|
|
5928
|
+
.notification-bubble-actions button.primary {
|
|
5929
|
+
background: var(--accent);
|
|
5930
|
+
color: white;
|
|
5931
|
+
border-color: var(--accent);
|
|
5932
|
+
}
|
|
5933
|
+
.notification-bubble-actions button.primary:hover {
|
|
5934
|
+
filter: brightness(1.1);
|
|
5935
|
+
}
|
|
5936
|
+
@keyframes notification-slide-in {
|
|
5937
|
+
from { opacity: 0; transform: translateX(-50%) translateY(-20px); }
|
|
5938
|
+
to { opacity: 1; transform: translateX(-50%) translateY(0); }
|
|
5939
|
+
}
|
|
5940
|
+
@keyframes notification-slide-out {
|
|
5941
|
+
from { opacity: 1; transform: translateX(-50%) translateY(0); }
|
|
5942
|
+
to { opacity: 0; transform: translateX(-50%) translateY(-20px); }
|
|
5943
|
+
}
|
|
5944
|
+
|
|
5833
5945
|
/* File Preview Modal */
|
|
5834
5946
|
.file-preview-overlay {
|
|
5835
5947
|
position: fixed;
|
|
@@ -5931,6 +6043,19 @@
|
|
|
5931
6043
|
padding-top: 14px;
|
|
5932
6044
|
}
|
|
5933
6045
|
|
|
6046
|
+
.settings-notification-section {
|
|
6047
|
+
border-top: 1px solid var(--border-subtle);
|
|
6048
|
+
padding-top: 14px;
|
|
6049
|
+
margin-top: 4px;
|
|
6050
|
+
}
|
|
6051
|
+
.settings-section-title {
|
|
6052
|
+
font-size: 0.8125rem;
|
|
6053
|
+
font-weight: 600;
|
|
6054
|
+
color: var(--fg-primary);
|
|
6055
|
+
margin-bottom: 10px;
|
|
6056
|
+
letter-spacing: 0.02em;
|
|
6057
|
+
}
|
|
6058
|
+
|
|
5934
6059
|
.settings-update-actions {
|
|
5935
6060
|
display: flex;
|
|
5936
6061
|
gap: 8px;
|
package/dist/ws-broadcast.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { WebSocketServer } from "ws";
|
|
6
6
|
import type { SessionSnapshot } from "./types.js";
|
|
7
7
|
export interface ProcessEvent {
|
|
8
|
-
type: "output" | "status" | "started" | "ended" | "usage" | "task";
|
|
8
|
+
type: "output" | "status" | "started" | "ended" | "usage" | "task" | "notification";
|
|
9
9
|
sessionId: string;
|
|
10
10
|
data?: unknown;
|
|
11
11
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@co0ontty/wand",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.2",
|
|
4
4
|
"description": "A web terminal for local CLI tools like Claude.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
"build": "tsc -p tsconfig.json && npm run build:copy-content",
|
|
20
20
|
"build:copy-content": "cp -r src/web-ui/content dist/web-ui/",
|
|
21
21
|
"dev": "tsx src/cli.ts web",
|
|
22
|
-
"check": "tsc --noEmit -p tsconfig.json"
|
|
22
|
+
"check": "tsc --noEmit -p tsconfig.json",
|
|
23
|
+
"prepublishOnly": "TAG=$(git tag --sort=-v:refname --list 'v*' | head -1) && VER=${TAG#v} && npm version $VER --no-git-tag-version --allow-same-version && npm run build"
|
|
23
24
|
},
|
|
24
25
|
"keywords": [
|
|
25
26
|
"cli",
|