dsh-file-activity 0.5.13 → 0.5.15
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 +16 -0
- package/lib/client.js +99 -7
- package/lib/index.js +4 -3
- package/lib/parts/i18n.part.js +8 -2
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
本文件记录 dsh-file-activity 的所有版本变更。格式遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
|
|
4
4
|
|
|
5
|
+
|
|
6
|
+
## [0.5.15] - 2026-10-17
|
|
7
|
+
|
|
8
|
+
### 变更
|
|
9
|
+
|
|
10
|
+
- fix(i18n): 插件文案优先跟随宿主 html lang
|
|
11
|
+
- fix(compat): 适配 DSH 0.2.1 移除 webRuntime 服务
|
|
12
|
+
|
|
13
|
+
## [0.5.14] - 2026-10-17
|
|
14
|
+
|
|
15
|
+
### 变更
|
|
16
|
+
|
|
17
|
+
- feat(dsh-md-render): 卡片工具条收纳式改版 + 修竖向长图缩放偏位
|
|
18
|
+
- feat(md-render,my-memory)!: 合并渲染插件并新增全局提示词 (#463 #465)
|
|
19
|
+
- fix(compat): 插件适配 DSH 0.2.0-rc.2 宿主(peer 声明 + 取证通道 + fixture)
|
|
20
|
+
|
|
5
21
|
## [0.5.13] - 2026-09-25
|
|
6
22
|
|
|
7
23
|
### 变更
|
package/lib/client.js
CHANGED
|
@@ -55,9 +55,15 @@ window.__ModuleLoader__.load({
|
|
|
55
55
|
'use strict'
|
|
56
56
|
// ── i18n ──────────────────────────────────────────────────────────────
|
|
57
57
|
function isZh() {
|
|
58
|
+
// 宿主 locale(dsh-client-locale 同步到 <html lang>)优先;空则回退浏览器语言。
|
|
58
59
|
try {
|
|
59
|
-
const
|
|
60
|
-
return
|
|
60
|
+
const host = (document.documentElement.lang || '').toLowerCase()
|
|
61
|
+
if (host !== '') return host.startsWith('zh')
|
|
62
|
+
} catch {
|
|
63
|
+
/* 非浏览器环境(node 渲染)无 document */
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
return (navigator.language || 'en').toLowerCase().startsWith('zh')
|
|
61
67
|
} catch {
|
|
62
68
|
return false
|
|
63
69
|
}
|
|
@@ -662,7 +668,7 @@ const icon = {
|
|
|
662
668
|
size,
|
|
663
669
|
),
|
|
664
670
|
// 代码(issue #54 阶段 1 新增):尖括号 `</>`,预览/代码切换的代码视图
|
|
665
|
-
//
|
|
671
|
+
// 代码图标(预览 / 代码切换的代码视图),stroke=currentColor 风格与其余图标一致。
|
|
666
672
|
code: (size = 16) =>
|
|
667
673
|
iconSvg(
|
|
668
674
|
[
|
|
@@ -671,8 +677,8 @@ const icon = {
|
|
|
671
677
|
],
|
|
672
678
|
size,
|
|
673
679
|
),
|
|
674
|
-
// 下载(issue #85
|
|
675
|
-
//
|
|
680
|
+
// 下载(issue #85 新增):箭头入托盘,mermaid 卡片导出 PNG/SVG 用,
|
|
681
|
+
// stroke=currentColor 风格与其余图标一致。
|
|
676
682
|
download: (size = 16) =>
|
|
677
683
|
iconSvg(
|
|
678
684
|
[
|
|
@@ -682,8 +688,8 @@ const icon = {
|
|
|
682
688
|
],
|
|
683
689
|
size,
|
|
684
690
|
),
|
|
685
|
-
// 复制(issue #85
|
|
686
|
-
//
|
|
691
|
+
// 复制(issue #85 新增):双层矩形,mermaid 卡片复制源码用,
|
|
692
|
+
// stroke=currentColor 风格与其余图标一致。
|
|
687
693
|
copy: (size = 16) =>
|
|
688
694
|
iconSvg(
|
|
689
695
|
[
|
|
@@ -692,6 +698,92 @@ const icon = {
|
|
|
692
698
|
],
|
|
693
699
|
size,
|
|
694
700
|
),
|
|
701
|
+
// ── 控件图标化(issue #486):卡片工具条「文字收起、只留图标」需要每个按钮都有图标 ──
|
|
702
|
+
// 全屏浮窗(四角向外),mermaid 缩放条用。
|
|
703
|
+
maximize: (size = 16) =>
|
|
704
|
+
iconSvg(
|
|
705
|
+
[
|
|
706
|
+
createElement('path', { d: 'M8 3H5a2 2 0 0 0-2 2v3' }),
|
|
707
|
+
createElement('path', { d: 'M16 3h3a2 2 0 0 1 2 2v3' }),
|
|
708
|
+
createElement('path', { d: 'M21 16v3a2 2 0 0 1-2 2h-3' }),
|
|
709
|
+
createElement('path', { d: 'M3 16v3a2 2 0 0 0 2 2h3' }),
|
|
710
|
+
],
|
|
711
|
+
size,
|
|
712
|
+
),
|
|
713
|
+
// 适应容器(「完整显示整张图」):外框套内框,表达「内容装进可用宽度」。
|
|
714
|
+
fit: (size = 16) =>
|
|
715
|
+
iconSvg(
|
|
716
|
+
[
|
|
717
|
+
createElement('rect', { x: 3, y: 4, width: 18, height: 16, rx: 2 }),
|
|
718
|
+
createElement('rect', { x: 8, y: 8, width: 8, height: 8, rx: 1 }),
|
|
719
|
+
],
|
|
720
|
+
size,
|
|
721
|
+
),
|
|
722
|
+
// 适应宽度 / 铺满:两侧容器边界 + 水平双向箭头。
|
|
723
|
+
fill: (size = 16) =>
|
|
724
|
+
iconSvg(
|
|
725
|
+
[
|
|
726
|
+
createElement('path', { d: 'M3 5v14' }),
|
|
727
|
+
createElement('path', { d: 'M21 5v14' }),
|
|
728
|
+
createElement('path', { d: 'M7 12h10' }),
|
|
729
|
+
createElement('path', { d: 'm9 9-3 3 3 3' }),
|
|
730
|
+
createElement('path', { d: 'm15 9 3 3-3 3' }),
|
|
731
|
+
],
|
|
732
|
+
size,
|
|
733
|
+
),
|
|
734
|
+
// 缩小:与既有 plus 同粗细的单横线。
|
|
735
|
+
minus: (size = 16) => iconSvg([createElement('line', { x1: 5, y1: 12, x2: 19, y2: 12 })], size),
|
|
736
|
+
// 自动换行:折行箭头(lucide wrap-text 同形),代码块换行切换用。
|
|
737
|
+
wrap: (size = 16) =>
|
|
738
|
+
iconSvg(
|
|
739
|
+
[
|
|
740
|
+
createElement('line', { x1: 3, y1: 6, x2: 21, y2: 6 }),
|
|
741
|
+
createElement('path', { d: 'M3 12h15a3 3 0 1 1 0 6h-4' }),
|
|
742
|
+
createElement('polyline', { points: '16 16 14 18 16 20' }),
|
|
743
|
+
createElement('line', { x1: 3, y1: 18, x2: 10, y2: 18 }),
|
|
744
|
+
],
|
|
745
|
+
size,
|
|
746
|
+
),
|
|
747
|
+
// markdown 文本(框内 M↓):「渲染为 Markdown」用。
|
|
748
|
+
markdown: (size = 16) =>
|
|
749
|
+
iconSvg(
|
|
750
|
+
[
|
|
751
|
+
createElement('rect', { x: 3, y: 4, width: 18, height: 16, rx: 2 }),
|
|
752
|
+
createElement('path', { d: 'M7 15V9l3 3 3-3v6' }),
|
|
753
|
+
createElement('path', { d: 'M17 9v6' }),
|
|
754
|
+
createElement('path', { d: 'm15 13 2 2 2-2' }),
|
|
755
|
+
],
|
|
756
|
+
size,
|
|
757
|
+
),
|
|
758
|
+
// 更多(三点):卡片工具条的「更多」菜单触发器 —— 低频按钮收进菜单,不长期霸占头部。
|
|
759
|
+
more: (size = 16) =>
|
|
760
|
+
iconSvg(
|
|
761
|
+
[
|
|
762
|
+
createElement('circle', { cx: 5, cy: 12, r: 1.6, fill: 'currentColor', stroke: 'none' }),
|
|
763
|
+
createElement('circle', { cx: 12, cy: 12, r: 1.6, fill: 'currentColor', stroke: 'none' }),
|
|
764
|
+
createElement('circle', { cx: 19, cy: 12, r: 1.6, fill: 'currentColor', stroke: 'none' }),
|
|
765
|
+
],
|
|
766
|
+
size,
|
|
767
|
+
),
|
|
768
|
+
// 图表(柱状):mermaid 图表卡片标题与「渲染为图表」选项用。
|
|
769
|
+
chart: (size = 16) =>
|
|
770
|
+
iconSvg(
|
|
771
|
+
[
|
|
772
|
+
createElement('line', { x1: 6, y1: 20, x2: 6, y2: 10 }),
|
|
773
|
+
createElement('line', { x1: 12, y1: 20, x2: 12, y2: 4 }),
|
|
774
|
+
createElement('line', { x1: 18, y1: 20, x2: 18, y2: 14 }),
|
|
775
|
+
],
|
|
776
|
+
size,
|
|
777
|
+
),
|
|
778
|
+
// 预览(眼睛):视图切换的「预览」用 —— 比 file 更贴语义。
|
|
779
|
+
eye: (size = 16) =>
|
|
780
|
+
iconSvg(
|
|
781
|
+
[
|
|
782
|
+
createElement('path', { d: 'M2 12s3.6-7 10-7 10 7 10 7-3.6 7-10 7-10-7-10-7z' }),
|
|
783
|
+
createElement('circle', { cx: 12, cy: 12, r: 3 }),
|
|
784
|
+
],
|
|
785
|
+
size,
|
|
786
|
+
),
|
|
695
787
|
// 箭头向上(更新图标):向上的箭头,表示更新操作
|
|
696
788
|
arrowUp: (size = 16) =>
|
|
697
789
|
iconSvg(
|
package/lib/index.js
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* 旧实现每次防抖全量重写,写放大 3,665×)。入口三维上限(会话 / 每会话路径 /
|
|
18
18
|
* 全局路径)超限按 LRU 淘汰并告警 —— 内存与状态文件均有界。
|
|
19
19
|
*/
|
|
20
|
-
import {
|
|
20
|
+
import { createTrustFence } from 'dsh-shared';
|
|
21
21
|
import { createApiHandler } from './api-route.js';
|
|
22
22
|
import { createMediaHandler } from './media-route.js';
|
|
23
23
|
import { createFsObserver } from './observer.js';
|
|
@@ -25,7 +25,7 @@ import { createStore } from './store.js';
|
|
|
25
25
|
import { parseBashFileOps } from './bash-parse.js';
|
|
26
26
|
import { sessionCwdOf } from './cwd.js';
|
|
27
27
|
export const name = 'dsh-file-activity';
|
|
28
|
-
export const inject = ['webServer', 'sessions'
|
|
28
|
+
export const inject = ['webServer', 'sessions'];
|
|
29
29
|
/** 观察型监听:只读取 bash 命令隐含的文件操作并上报,不拦截(返回 next())。 */
|
|
30
30
|
function observeBashIntents(exec, ctx, store) {
|
|
31
31
|
const sessionId = bashSessionOf(exec);
|
|
@@ -70,7 +70,8 @@ export function apply(ctx) {
|
|
|
70
70
|
return next();
|
|
71
71
|
});
|
|
72
72
|
// ── routes ──────────────────────────────────────────────────────────────
|
|
73
|
-
|
|
73
|
+
// 信任源:webStartup.trustedHosts + webServer.host(DSH 0.2.1 移除了 webRuntime)
|
|
74
|
+
const fence = createTrustFence(ctx);
|
|
74
75
|
ctx.effect(() => ctx.webServer.register({
|
|
75
76
|
kind: 'prefix',
|
|
76
77
|
path: '/file-activity/api',
|
package/lib/parts/i18n.part.js
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
// ── i18n ──────────────────────────────────────────────────────────────
|
|
3
3
|
function isZh() {
|
|
4
|
+
// 宿主 locale(dsh-client-locale 同步到 <html lang>)优先;空则回退浏览器语言。
|
|
4
5
|
try {
|
|
5
|
-
const
|
|
6
|
-
return
|
|
6
|
+
const host = (document.documentElement.lang || '').toLowerCase()
|
|
7
|
+
if (host !== '') return host.startsWith('zh')
|
|
8
|
+
} catch {
|
|
9
|
+
/* 非浏览器环境(node 渲染)无 document */
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
return (navigator.language || 'en').toLowerCase().startsWith('zh')
|
|
7
13
|
} catch {
|
|
8
14
|
return false
|
|
9
15
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-file-activity",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.15",
|
|
4
4
|
"description": "DSH 侧边栏文件活动插件:按 LRU 记录文件读取/新增/修改事件(最近访问),按绝对路径树形统计(文件统计),点击文件浮窗预览(代码高亮/Markdown/图片/PDF)。DSH web plugin: file activity tracker — LRU recent-access list plus per-file read/create/modify counts in a folder tree, with floating preview.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
},
|
|
47
47
|
"peerDependencies": {
|
|
48
48
|
"cordis": "^4.0.0-rc.10",
|
|
49
|
-
"react": "^18.2.0 || ^19.
|
|
49
|
+
"react": "^18.2.0 || ^19.2.0"
|
|
50
50
|
},
|
|
51
51
|
"peerDependenciesMeta": {
|
|
52
52
|
"cordis": {
|