dsh-lamplit 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/README.md +10 -3
- package/client.js +89 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
**One quiet shelf for WeChat Reading, Fanqie Novel and your own books — inside [DeepSeek Harness](https://github.com/deepseek-ai).**
|
|
6
6
|
|
|
7
|
-
](https://www.npmjs.com/package/dsh-lamplit)
|
|
8
|
+
[](https://github.com/lysforge/lamplit/actions/workflows/test.yml)
|
|
9
|
+
[](LICENSE)
|
|
9
10
|

|
|
10
11
|
|
|
11
12
|
灯下是 DeepSeek Harness 的一个读书插件:一个书架、一个沉浸式阅读器,把你散在三个地方的阅读收进同一盏灯下。
|
|
@@ -61,12 +62,18 @@ Harness 里已经有聊天、有终端、有文件系统。读书这事缺的从
|
|
|
61
62
|
插件(Plugins)→ 安装 → 输入 dsh-lamplit
|
|
62
63
|
```
|
|
63
64
|
|
|
64
|
-
|
|
65
|
+
或者命令行(npm 上是 `dsh-lamplit@0.1.1`,带 SLSA provenance):
|
|
65
66
|
|
|
66
67
|
```bash
|
|
67
68
|
dsh plugin --profile desktop add dsh-lamplit
|
|
68
69
|
```
|
|
69
70
|
|
|
71
|
+
**装不上 npm 时用 Release 附件**
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
dsh plugin --profile <profile> add https://github.com/lysforge/lamplit/releases/download/v0.1.1/dsh-lamplit-0.1.1.tgz
|
|
75
|
+
```
|
|
76
|
+
|
|
70
77
|
**从源码装**
|
|
71
78
|
|
|
72
79
|
```bash
|
package/client.js
CHANGED
|
@@ -1214,6 +1214,95 @@ window.__ModuleLoader__.load({
|
|
|
1214
1214
|
);
|
|
1215
1215
|
}
|
|
1216
1216
|
|
|
1217
|
+
const IconBack = (p) => svg(p || {}, h('path', { key: 'a', d: 'M14.5 5.5 8 12l6.5 6.5' }));
|
|
1218
|
+
const IconClose = (p) => svg(p || {}, h('path', { key: 'a', d: 'M6.5 6.5l11 11M17.5 6.5l-11 11' }));
|
|
1219
|
+
const IconCheck = (p) => svg(p || {}, h('path', { key: 'a', d: 'M5 12.5l4.5 4.5L19 7' }));
|
|
1220
|
+
const IconAlert = (p) =>
|
|
1221
|
+
svg(p || {}, h('circle', { key: 'c', cx: 12, cy: 12, r: 8.5 }), h('path', { key: 'a', d: 'M12 8v5M12 16.2v.1' }));
|
|
1222
|
+
const IconUpload = (p) => svg(p || {}, h('path', { key: 'a', d: 'M12 16V4.5M8 8.5 12 4.5l4 4M5 15.5v3h14v-3' }));
|
|
1223
|
+
const IconNote = (p) =>
|
|
1224
|
+
svg(
|
|
1225
|
+
p || {},
|
|
1226
|
+
h('path', { key: 'a', d: 'M6 3.8h8.4L19 8.4v11.8H6z' }),
|
|
1227
|
+
h('path', { key: 'b', d: 'M14 3.8v4.8h4.8M9 12.5h6M9 16h4' }),
|
|
1228
|
+
);
|
|
1229
|
+
const IconChart = (p) =>
|
|
1230
|
+
svg(
|
|
1231
|
+
p || {},
|
|
1232
|
+
h('path', { key: 'a', d: 'M4 19.5h16' }),
|
|
1233
|
+
h('path', { key: 'b', d: 'M7.5 19.5v-6M12 19.5V7.5M16.5 19.5v-9' }),
|
|
1234
|
+
);
|
|
1235
|
+
const IconGrid = (p) =>
|
|
1236
|
+
svg(
|
|
1237
|
+
p || {},
|
|
1238
|
+
h('rect', { key: 'a', x: 4, y: 4, width: 6.4, height: 6.4, rx: 1.4 }),
|
|
1239
|
+
h('rect', { key: 'b', x: 13.6, y: 4, width: 6.4, height: 6.4, rx: 1.4 }),
|
|
1240
|
+
h('rect', { key: 'c', x: 4, y: 13.6, width: 6.4, height: 6.4, rx: 1.4 }),
|
|
1241
|
+
h('rect', { key: 'd', x: 13.6, y: 13.6, width: 6.4, height: 6.4, rx: 1.4 }),
|
|
1242
|
+
);
|
|
1243
|
+
const IconRows = (p) =>
|
|
1244
|
+
svg(p || {}, h('path', { key: 'a', d: 'M4 7h16M4 12h16M4 17h10' }));
|
|
1245
|
+
const IconChevron = (p) => svg(p || {}, h('path', { key: 'a', d: 'M6.5 9.5 12 15l5.5-5.5' }));
|
|
1246
|
+
const IconSearch = (p) =>
|
|
1247
|
+
svg(p || {}, h('circle', { key: 'a', cx: 11, cy: 11, r: 6 }), h('path', { key: 'b', d: 'M15.6 15.6 20 20' }));
|
|
1248
|
+
const IconMore = (p) =>
|
|
1249
|
+
h(
|
|
1250
|
+
'svg',
|
|
1251
|
+
{
|
|
1252
|
+
viewBox: '0 0 24 24',
|
|
1253
|
+
width: (p && p.size) || 16,
|
|
1254
|
+
height: (p && p.size) || 16,
|
|
1255
|
+
fill: 'currentColor',
|
|
1256
|
+
'aria-hidden': true,
|
|
1257
|
+
focusable: false,
|
|
1258
|
+
style: { display: 'block', flex: 'none' },
|
|
1259
|
+
},
|
|
1260
|
+
h('circle', { key: 'a', cx: 6, cy: 12, r: 1.5 }),
|
|
1261
|
+
h('circle', { key: 'b', cx: 12, cy: 12, r: 1.5 }),
|
|
1262
|
+
h('circle', { key: 'c', cx: 18, cy: 12, r: 1.5 }),
|
|
1263
|
+
);
|
|
1264
|
+
const IconTrash = (p) =>
|
|
1265
|
+
svg(
|
|
1266
|
+
p || {},
|
|
1267
|
+
h('path', { key: 'a', d: 'M5 7h14M9.5 7V4.8h5V7M7 7l.9 12.2h8.2L17 7' }),
|
|
1268
|
+
h('path', { key: 'b', d: 'M10.5 10.4v5.6M13.5 10.4v5.6' }),
|
|
1269
|
+
);
|
|
1270
|
+
const IconSync = (p) =>
|
|
1271
|
+
svg(
|
|
1272
|
+
p || {},
|
|
1273
|
+
h('path', { key: 'a', d: 'M19 12a7 7 0 0 1-11.6 5.2M5 12a7 7 0 0 1 11.6-5.2' }),
|
|
1274
|
+
h('path', { key: 'b', d: 'M16.4 3.4v3.6H20M7.6 20.6V17H4' }),
|
|
1275
|
+
);
|
|
1276
|
+
const IconBook = (p) =>
|
|
1277
|
+
svg(
|
|
1278
|
+
p || {},
|
|
1279
|
+
h('path', { key: 'a', d: 'M5 5.5h9.5A2.5 2.5 0 0 1 17 8v11H7.5A2.5 2.5 0 0 1 5 16.5z' }),
|
|
1280
|
+
h('path', { key: 'b', d: 'M8.5 9h5M8.5 12h3.5' }),
|
|
1281
|
+
);
|
|
1282
|
+
const IconType = (p) =>
|
|
1283
|
+
svg(
|
|
1284
|
+
p || {},
|
|
1285
|
+
h('path', { key: 'a', d: 'M5.5 18 11 6.5 16.5 18' }),
|
|
1286
|
+
h('path', { key: 'b', d: 'M7.6 14.2h6.8' }),
|
|
1287
|
+
h('path', { key: 'c', d: 'M19 8.5v9' }),
|
|
1288
|
+
);
|
|
1289
|
+
const IconToc = (p) =>
|
|
1290
|
+
svg(
|
|
1291
|
+
p || {},
|
|
1292
|
+
h('path', { key: 'a', d: 'M4.5 6.5h.1M4.5 12h.1M4.5 17.5h.1' }),
|
|
1293
|
+
h('path', { key: 'b', d: 'M8 6.5h11.5M8 12h11.5M8 17.5h8' }),
|
|
1294
|
+
);
|
|
1295
|
+
const IconSliders = (p) =>
|
|
1296
|
+
svg(
|
|
1297
|
+
p || {},
|
|
1298
|
+
h('path', { key: 'a', d: 'M4 7h16M4 12h16M4 17h16' }),
|
|
1299
|
+
h('circle', { key: 'b', cx: 9, cy: 7, r: 1.7 }),
|
|
1300
|
+
h('circle', { key: 'c', cx: 15, cy: 12, r: 1.7 }),
|
|
1301
|
+
h('circle', { key: 'd', cx: 8, cy: 17, r: 1.7 }),
|
|
1302
|
+
);
|
|
1303
|
+
const IconFolder = (p) =>
|
|
1304
|
+
svg(p || {}, h('path', { key: 'a', d: 'M4 7.5A1.5 1.5 0 0 1 5.5 6H9l2 2.4h7.5A1.5 1.5 0 0 1 20 9.9v7.6A1.5 1.5 0 0 1 18.5 19h-13A1.5 1.5 0 0 1 4 17.5z' }));
|
|
1305
|
+
|
|
1217
1306
|
/** 侧栏图标:一盏灯压在摊开的书上。 */
|
|
1218
1307
|
function PanelIcon(props) {
|
|
1219
1308
|
const size = (props && props.size) || 24;
|