dsh-plain-talk 0.1.1 → 0.1.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/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 0.1.2
2
+
3
+ - 输入框按钮改用聊天气泡笑脸图:开启时带声波,关闭时用插件图标本体。
4
+ - 插件图标换成同一张笑脸(`icon.png`)。
5
+
1
6
  # 0.1.1
2
7
 
3
8
  - README 重写:只保留用户需要的信息,删除 npm 发布与收录流程说明。
package/icon.png ADDED
Binary file
package/lib/client.js CHANGED
@@ -1,155 +1,142 @@
1
- window.__ModuleLoader__.load({ id: "dsh-plain-talk", factory: (require) => {
2
- var module = { exports: {} }; var exports = module.exports;
3
- var React = require("react");
4
-
5
- /**
6
- * dsh-plain-talk — browser half.
7
- *
8
- * One composer control, placed in `conversation.input.left`: the list slot the
9
- * composer renders at the end of its left-hand tool row, so the button lands
10
- * immediately after the shipped plan control.
11
- *
12
- * The switch is per Session. It reads and writes the host's loopback state
13
- * route; the host owns the sidecar file and decides whether the prompt section
14
- * is injected, so a failed write never leaves the UI claiming a state the
15
- * model does not have.
16
- */
17
-
18
- var ROUTE_STATE = '/plain-talk/state';
19
- var ACCENT = '#2f6feb';
20
-
21
- function isZh() {
22
- try { return String(navigator.language || '').toLowerCase().indexOf('zh') === 0 } catch (e) { return false }
23
- }
24
-
25
- function labelFor(on) {
26
- if (isZh()) return on ? '说人话:已开启' : '说人话:已关闭';
27
- return on ? 'Plain talk: on' : 'Plain talk: off';
28
- }
29
-
30
- function readHostState(sessionId) {
31
- return fetch(ROUTE_STATE + '?sessionId=' + encodeURIComponent(sessionId), {
32
- headers: { accept: 'application/json' },
33
- credentials: 'same-origin',
34
- }).then(function (r) { return r.json() }).then(function (p) { return p && p.ok ? p : undefined });
35
- }
36
-
37
- function writeHostState(sessionId, enabled) {
38
- return fetch(ROUTE_STATE, {
39
- method: 'POST',
40
- headers: { 'content-type': 'application/json', accept: 'application/json' },
41
- credentials: 'same-origin',
42
- body: JSON.stringify({ sessionId: sessionId, enabled: enabled }),
43
- }).then(function (r) { return r.json() }).then(function (p) {
44
- if (!p || p.ok !== true) throw new Error('host rejected the switch');
45
- return p;
46
- });
47
- }
48
-
49
- function Glyph(props) {
50
- var color = props.on ? ACCENT : 'currentColor';
51
- var opacity = props.on ? 1 : 0.55;
52
- return React.createElement('svg', {
53
- width: '18', height: '18', viewBox: '0 0 24 24', 'aria-hidden': 'true', focusable: 'false',
54
- style: { display: 'block', color: color, opacity: opacity, transition: 'color .15s ease, opacity .15s ease' },
55
- }, [
56
- React.createElement('path', {
57
- key: 'bubble',
58
- d: 'M4 7a3 3 0 0 1 3-3h10a3 3 0 0 1 3 3v7a3 3 0 0 1-3 3h-6.4L6 20.6V17H7a3 3 0 0 1-3-3z',
59
- fill: 'none', stroke: 'currentColor', strokeWidth: '1.7', strokeLinejoin: 'round',
60
- }),
61
- React.createElement('path', {
62
- key: 'l1', d: 'M8 8.2h8M8 11.6h5',
63
- fill: 'none', stroke: 'currentColor', strokeWidth: '1.7', strokeLinecap: 'round',
64
- }),
65
- React.createElement('path', {
66
- key: 'spark',
67
- d: 'M17.2 12.2l.7 1.9 1.9.7-1.9.7-.7 1.9-.7-1.9-1.9-.7 1.9-.7z',
68
- fill: 'currentColor',
69
- }),
70
- ]);
71
- }
72
-
73
- function PlainTalkButton(props) {
74
- var sessionId = props.sessionId;
75
- var hostPair = React.useState(null);
76
- var host = hostPair[0];
77
- var setHost = hostPair[1];
78
- var busyPair = React.useState(false);
79
- var busy = busyPair[0];
80
- var setBusy = busyPair[1];
81
- var hoverPair = React.useState(false);
82
- var hover = hoverPair[0];
83
- var setHover = hoverPair[1];
84
-
85
- React.useEffect(function () {
86
- if (!sessionId) return undefined;
87
- var alive = true;
88
- readHostState(sessionId)
89
- .then(function (payload) { if (alive && payload) setHost(payload) })
90
- .catch(function () { /* unreachable host: keep the control hidden */ });
91
- return function () { alive = false };
92
- }, [sessionId]);
93
-
94
- if (!host || !sessionId) return null;
95
-
96
- var on = host.enabled === true;
97
- var toggle = function () {
98
- if (busy) return;
99
- var next = !on;
100
- setBusy(true);
101
- setHost(function (previous) { return previous ? Object.assign({}, previous, { enabled: next }) : previous });
102
- writeHostState(sessionId, next)
103
- .then(function (payload) { setHost(payload) })
104
- .catch(function () {
105
- setHost(function (previous) { return previous ? Object.assign({}, previous, { enabled: !next }) : previous });
106
- })
107
- .then(function () { setBusy(false) });
108
- };
109
-
110
- return React.createElement('button', {
111
- type: 'button',
112
- role: 'switch',
113
- 'aria-checked': on,
114
- 'aria-label': labelFor(on),
115
- title: labelFor(on),
116
- onClick: toggle,
117
- onMouseEnter: function () { setHover(true) },
118
- onMouseLeave: function () { setHover(false) },
119
- style: {
120
- flex: 'none',
121
- display: 'inline-flex',
122
- alignItems: 'center',
123
- justifyContent: 'center',
124
- width: '24px',
125
- height: '24px',
126
- padding: '0',
127
- margin: '0',
128
- border: '0',
129
- borderRadius: '6px',
130
- background: hover ? 'rgba(127, 127, 127, 0.14)' : 'transparent',
131
- cursor: busy ? 'default' : 'pointer',
132
- userSelect: 'none',
133
- WebkitTapHighlightColor: 'transparent',
134
- appearance: 'none',
135
- WebkitAppearance: 'none',
136
- lineHeight: '0',
137
- },
138
- }, React.createElement(Glyph, { on: on }));
139
- }
140
-
141
- exports.name = 'plain-talk';
142
- exports.inject = ['slots'];
143
- exports.apply = function apply(ctx) {
144
- ctx.slots.inject('conversation.input.left', function () {
145
- return ctx.slots.register({
146
- name: 'conversation.input.left',
147
- id: 'plain-talk',
148
- order: 40,
149
- }, function (props) {
150
- return React.createElement(PlainTalkButton, props);
151
- });
152
- });
153
- };
154
-
155
- return module.exports; } });
1
+ window.__ModuleLoader__.load({ id: "dsh-plain-talk", factory: (require) => {
2
+ var module = { exports: {} }; var exports = module.exports;
3
+ var React = require("react");
4
+
5
+ /**
6
+ * dsh-plain-talk — browser half.
7
+ *
8
+ * One composer control, placed in `conversation.input.left`: the list slot the
9
+ * composer renders at the end of its left-hand tool row, so the button lands
10
+ * immediately after the shipped plan control.
11
+ *
12
+ * The switch is per Session. It reads and writes the host's loopback state
13
+ * route; the host owns the sidecar file and decides whether the prompt section
14
+ * is injected, so a failed write never leaves the UI claiming a state the
15
+ * model does not have.
16
+ */
17
+
18
+ var ROUTE_STATE = '/plain-talk/state';
19
+ var ACCENT = '#2f6feb';
20
+
21
+ function isZh() {
22
+ try { return String(navigator.language || '').toLowerCase().indexOf('zh') === 0 } catch (e) { return false }
23
+ }
24
+
25
+ function labelFor(on) {
26
+ if (isZh()) return on ? '说人话:已开启' : '说人话:已关闭';
27
+ return on ? 'Plain talk: on' : 'Plain talk: off';
28
+ }
29
+
30
+ function readHostState(sessionId) {
31
+ return fetch(ROUTE_STATE + '?sessionId=' + encodeURIComponent(sessionId), {
32
+ headers: { accept: 'application/json' },
33
+ credentials: 'same-origin',
34
+ }).then(function (r) { return r.json() }).then(function (p) { return p && p.ok ? p : undefined });
35
+ }
36
+
37
+ function writeHostState(sessionId, enabled) {
38
+ return fetch(ROUTE_STATE, {
39
+ method: 'POST',
40
+ headers: { 'content-type': 'application/json', accept: 'application/json' },
41
+ credentials: 'same-origin',
42
+ body: JSON.stringify({ sessionId: sessionId, enabled: enabled }),
43
+ }).then(function (r) { return r.json() }).then(function (p) {
44
+ if (!p || p.ok !== true) throw new Error('host rejected the switch');
45
+ return p;
46
+ });
47
+ }
48
+
49
+ var ICON_ON = 'data:image/png;base64,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';
50
+ var ICON_OFF = 'data:image/png;base64,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';
51
+
52
+ function Glyph(props) {
53
+ return React.createElement('img', {
54
+ src: props.on ? ICON_ON : ICON_OFF,
55
+ width: '18', height: '18', alt: '', 'aria-hidden': 'true', draggable: 'false',
56
+ style: { display: 'block', opacity: props.on ? 1 : 0.8, transition: 'opacity .15s ease' },
57
+ });
58
+ }
59
+
60
+ function PlainTalkButton(props) {
61
+ var sessionId = props.sessionId;
62
+ var hostPair = React.useState(null);
63
+ var host = hostPair[0];
64
+ var setHost = hostPair[1];
65
+ var busyPair = React.useState(false);
66
+ var busy = busyPair[0];
67
+ var setBusy = busyPair[1];
68
+ var hoverPair = React.useState(false);
69
+ var hover = hoverPair[0];
70
+ var setHover = hoverPair[1];
71
+
72
+ React.useEffect(function () {
73
+ if (!sessionId) return undefined;
74
+ var alive = true;
75
+ readHostState(sessionId)
76
+ .then(function (payload) { if (alive && payload) setHost(payload) })
77
+ .catch(function () { /* unreachable host: keep the control hidden */ });
78
+ return function () { alive = false };
79
+ }, [sessionId]);
80
+
81
+ if (!host || !sessionId) return null;
82
+
83
+ var on = host.enabled === true;
84
+ var toggle = function () {
85
+ if (busy) return;
86
+ var next = !on;
87
+ setBusy(true);
88
+ setHost(function (previous) { return previous ? Object.assign({}, previous, { enabled: next }) : previous });
89
+ writeHostState(sessionId, next)
90
+ .then(function (payload) { setHost(payload) })
91
+ .catch(function () {
92
+ setHost(function (previous) { return previous ? Object.assign({}, previous, { enabled: !next }) : previous });
93
+ })
94
+ .then(function () { setBusy(false) });
95
+ };
96
+
97
+ return React.createElement('button', {
98
+ type: 'button',
99
+ role: 'switch',
100
+ 'aria-checked': on,
101
+ 'aria-label': labelFor(on),
102
+ title: labelFor(on),
103
+ onClick: toggle,
104
+ onMouseEnter: function () { setHover(true) },
105
+ onMouseLeave: function () { setHover(false) },
106
+ style: {
107
+ flex: 'none',
108
+ display: 'inline-flex',
109
+ alignItems: 'center',
110
+ justifyContent: 'center',
111
+ width: '24px',
112
+ height: '24px',
113
+ padding: '0',
114
+ margin: '0',
115
+ border: '0',
116
+ borderRadius: '6px',
117
+ background: hover ? 'rgba(127, 127, 127, 0.14)' : 'transparent',
118
+ cursor: busy ? 'default' : 'pointer',
119
+ userSelect: 'none',
120
+ WebkitTapHighlightColor: 'transparent',
121
+ appearance: 'none',
122
+ WebkitAppearance: 'none',
123
+ lineHeight: '0',
124
+ },
125
+ }, React.createElement(Glyph, { on: on }));
126
+ }
127
+
128
+ exports.name = 'plain-talk';
129
+ exports.inject = ['slots'];
130
+ exports.apply = function apply(ctx) {
131
+ ctx.slots.inject('conversation.input.left', function () {
132
+ return ctx.slots.register({
133
+ name: 'conversation.input.left',
134
+ id: 'plain-talk',
135
+ order: 40,
136
+ }, function (props) {
137
+ return React.createElement(PlainTalkButton, props);
138
+ });
139
+ });
140
+ };
141
+
142
+ return module.exports; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plain-talk",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Composer toggle that shapes replies: conclusion first, inline quotes, no cross-turn references",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -26,7 +26,7 @@
26
26
  "lib",
27
27
  "cordis.patch.yml",
28
28
  "locale/*.json",
29
- "icon.svg",
29
+ "icon.png",
30
30
  "README.md",
31
31
  "README.en.md",
32
32
  "CHANGELOG.md",
@@ -38,7 +38,7 @@
38
38
  "./rules": "./dsh/rules.js",
39
39
  "./check": "./dsh/check.js",
40
40
  "./locale/*.json": "./locale/*.json",
41
- "./icon": "./icon.svg",
41
+ "./icon": "./icon.png",
42
42
  "./package.json": "./package.json"
43
43
  },
44
44
  "engines": {
package/icon.svg DELETED
@@ -1,6 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48" height="48" role="img" aria-label="Plain talk">
2
- <path d="M8 12a5 5 0 0 1 5-5h22a5 5 0 0 1 5 5v17a5 5 0 0 1-5 5H22l-9 7v-7h0a5 5 0 0 1-5-5z" fill="#2f6feb" opacity="0.14"/>
3
- <path d="M8 12a5 5 0 0 1 5-5h22a5 5 0 0 1 5 5v17a5 5 0 0 1-5 5H22l-9 7v-7h0a5 5 0 0 1-5-5z" fill="none" stroke="#2f6feb" stroke-width="2.6" stroke-linejoin="round"/>
4
- <path d="M16 16h13M16 21.5h8" stroke="#2f6feb" stroke-width="2.8" stroke-linecap="round"/>
5
- <path d="M33 20l1.1 3.2L37.3 24.3 34.1 25.4 33 28.6 31.9 25.4 28.7 24.3 31.9 23.2z" fill="#2f6feb"/>
6
- </svg>