@michengai/dsh-archive-manager 0.1.40 → 0.1.41
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 +5 -0
- package/CHANGELOG.zh-CN.md +5 -0
- package/README.md +17 -2
- package/README.zh-CN.md +17 -2
- package/lib/client.js +50 -9
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
Published release notes are retained below; new versions are added without removing earlier entries.
|
|
6
6
|
|
|
7
|
+
## 0.1.41 - 2026-09-14
|
|
8
|
+
|
|
9
|
+
- Improve the archived-session bulk action bar with grouped selection details and actions, fixing wrapped button labels in narrow content areas.
|
|
10
|
+
- Simplify the bar when nothing is selected and show cross-filter selection counts and scope separately so hidden selections remain clear.
|
|
11
|
+
|
|
7
12
|
## 0.1.40 - 2026-09-13
|
|
8
13
|
|
|
9
14
|
- Open archived sessions in the native DSH conversation view and continue chatting while keeping them archived, or restore and open them.
|
package/CHANGELOG.zh-CN.md
CHANGED
package/README.md
CHANGED
|
@@ -139,9 +139,24 @@ Restart DSH Web and hard-refresh your browser afterward. Edit [src](src), not th
|
|
|
139
139
|
|
|
140
140
|
</details>
|
|
141
141
|
|
|
142
|
-
##
|
|
142
|
+
## DSH product ecosystem
|
|
143
|
+
|
|
144
|
+
For a desktop workbench, download [DSH Codex Desktop](https://github.com/MichengAI/dsh-codex-desktop/releases). Existing [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) installations can add plugins as needed by following each project's README. Below are 11 first-party plugins; consult the corresponding desktop release notes and bundled catalog for what that version includes.
|
|
145
|
+
|
|
146
|
+
| Plugin | What you can do |
|
|
147
|
+
| --- | --- |
|
|
148
|
+
| [Codex UI](https://github.com/MichengAI/dsh-codex-ui) | Organize projects and conversations, search tasks, and navigate chat turns |
|
|
149
|
+
| [Agency Agents](https://github.com/MichengAI/dsh-agency-agents) | Choose and summon specialists for your task |
|
|
150
|
+
| [Skills Manager](https://github.com/MichengAI/dsh-skills-manager) | Find, enable, create, and import local skills |
|
|
151
|
+
| [Archive Manager](https://github.com/MichengAI/dsh-archive-manager) | Search, restore, or clean up archived conversations |
|
|
152
|
+
| [IM Connect](https://github.com/MichengAI/dsh-im-connect) | Send tasks and receive replies through messaging platforms |
|
|
153
|
+
| [Automation](https://github.com/MichengAI/dsh-automation) | Schedule tasks and review each run |
|
|
154
|
+
| [BTW](https://github.com/MichengAI/dsh-btw) | Ask side questions without interrupting the main task |
|
|
155
|
+
| [Simplify](https://github.com/MichengAI/dsh-simplify) | Use `/simplify` to improve code within your Git changes |
|
|
156
|
+
| [PUA](https://github.com/MichengAI/dsh-pua) | Guide the Agent to try new approaches after failures, investigate causes, and verify results before completion |
|
|
157
|
+
| [Code Review](https://github.com/MichengAI/dsh-code-review) | Use `/review` to request an independent Agent code review and receive the report in the current conversation |
|
|
158
|
+
| [Codex Pet](https://github.com/MichengAI/dsh-codex-pet) | View conversation notifications and respond to tool approvals and questions through a desktop pet |
|
|
143
159
|
|
|
144
|
-
[DSH Codex UI](https://github.com/MichengAI/dsh-codex-ui) provides project and conversation management. For a desktop workbench, see [DSH Codex Desktop](https://github.com/MichengAI/dsh-codex-desktop).
|
|
145
160
|
|
|
146
161
|
## License
|
|
147
162
|
|
package/README.zh-CN.md
CHANGED
|
@@ -139,9 +139,24 @@ dsh plugin --profile web add .
|
|
|
139
139
|
|
|
140
140
|
</details>
|
|
141
141
|
|
|
142
|
-
##
|
|
142
|
+
## DSH 产品生态
|
|
143
|
+
|
|
144
|
+
想使用桌面工作台,可下载 [DSH Codex Desktop](https://github.com/MichengAI/dsh-codex-desktop/releases);已有 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 环境,可按各项目 README 按需安装。以下列出 11 个自研插件;桌面端实际随附范围以对应版本的发行说明和内置清单为准。
|
|
145
|
+
|
|
146
|
+
| 插件 | 你可以用它做什么 |
|
|
147
|
+
| --- | --- |
|
|
148
|
+
| [Codex UI](https://github.com/MichengAI/dsh-codex-ui) | 整理项目与会话、搜索任务、跳转对话轮次 |
|
|
149
|
+
| [Agency Agents](https://github.com/MichengAI/dsh-agency-agents) | 按任务选择并召唤专业角色 |
|
|
150
|
+
| [Skills Manager](https://github.com/MichengAI/dsh-skills-manager) | 统一查找、启停、创建和导入本机技能 |
|
|
151
|
+
| [Archive Manager](https://github.com/MichengAI/dsh-archive-manager) | 搜索、恢复或清理已归档会话 |
|
|
152
|
+
| [IM Connect](https://github.com/MichengAI/dsh-im-connect) | 从消息平台下任务、收回复 |
|
|
153
|
+
| [Automation](https://github.com/MichengAI/dsh-automation) | 按计划执行任务,查看每次运行的结果 |
|
|
154
|
+
| [BTW](https://github.com/MichengAI/dsh-btw) | 在当前上下文中临时旁问,不打断主任务 |
|
|
155
|
+
| [Simplify](https://github.com/MichengAI/dsh-simplify) | 用 `/simplify` 整理 Git 改动范围内的代码 |
|
|
156
|
+
| [PUA](https://github.com/MichengAI/dsh-pua) | 引导 Agent 在失败时换方法、查原因,并在完成前验证结果 |
|
|
157
|
+
| [Code Review](https://github.com/MichengAI/dsh-code-review) | 用 `/review` 发起独立 Agent 代码审查,在当前会话接收报告 |
|
|
158
|
+
| [Codex Pet](https://github.com/MichengAI/dsh-codex-pet) | 通过桌面宠物查看会话提醒、处理工具审批和问题回答 |
|
|
143
159
|
|
|
144
|
-
[DSH Codex UI](https://github.com/MichengAI/dsh-codex-ui) 提供项目与会话管理界面;想使用桌面工作台,可查看 [DSH Codex Desktop](https://github.com/MichengAI/dsh-codex-desktop)。
|
|
145
160
|
|
|
146
161
|
## 许可证
|
|
147
162
|
|
package/lib/client.js
CHANGED
|
@@ -906,12 +906,18 @@
|
|
|
906
906
|
className: "dsham_settingsSearch",
|
|
907
907
|
children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutline16, {}), (0, react_jsx_runtime.jsx)("input", { type: "search", value: query, onChange: (event) => setQuery(event.target.value), placeholder: t("archives.searchPlaceholder"), "aria-label": t("archives.searchPlaceholder") })]
|
|
908
908
|
}), (0, react_jsx_runtime.jsx)(ArchiveProjectSelect, { id: "dsham-sort-filter", value: sortBy, options: [{ value: "updated", label: t("archives.sortUpdated") }, { value: "created", label: t("archives.sortCreated") }, { value: "alphabetical", label: t("archives.sortAlphabetical") }], onChange: setSortBy, "aria-label": t("archives.sortBy") }), (0, react_jsx_runtime.jsx)(ArchiveProjectSelect, { id: "dsham-project-filter", value: project, options: [{ value: "all", label: t("archives.allProjects") }, ...sortedGroups.map((group) => ({ value: group.key, label: group.title }))], onChange: setProject, "aria-label": t("archives.projectFilter") })]
|
|
909
|
-
}), groups.length > 0 && (0, react_jsx_runtime.
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
909
|
+
}), groups.length > 0 && (0, react_jsx_runtime.jsx)(ArchiveSelectionToolbar, {
|
|
910
|
+
selectedCount: selectedSessionIds.length,
|
|
911
|
+
hiddenCount: selectedSessionIds.length - selectedVisibleCount,
|
|
912
|
+
allVisibleSelected,
|
|
913
|
+
selectedVisibleCount,
|
|
914
|
+
visibleCount: visibleSessionIds.length,
|
|
915
|
+
busy,
|
|
916
|
+
t,
|
|
917
|
+
onToggle: toggleVisibleSelection,
|
|
918
|
+
onClear: () => setSelectedSessionIds([]),
|
|
919
|
+
onRestore: onSelectedUnarchive,
|
|
920
|
+
onDelete: () => setDeleteTarget({ kind: "batch", target: { scope: "sessions", sessionIds: selectedSessionIds }, count: selectedSessionIds.length })
|
|
915
921
|
}), groups.length === 0 ? (0, react_jsx_runtime.jsx)("div", { className: "dsham_settingsEmpty", children: t("archives.empty") }) : filteredGroups.length === 0 ? (0, react_jsx_runtime.jsx)("div", { className: "dsham_settingsEmpty", children: t("archives.emptyFiltered") }) : filteredGroups.map((group) => {
|
|
916
922
|
const target = archivedBatchTargetForGroup(group.key);
|
|
917
923
|
const count = deriveArchivedBatchIds(workspaceState.archivedSessionIds, workspaceState.items, target).length;
|
|
@@ -3169,7 +3175,7 @@
|
|
|
3169
3175
|
const ARCHIVE_SETTINGS_EXTERNAL_LINK_CSS = ".dsham_settingsTitleRow{display:flex;align-items:center;gap:8px 12px;min-width:0;flex-wrap:wrap}.dsham_settingsLinks{display:flex;align-items:center;gap:4px;flex-wrap:wrap}.dsham_settingsExternalLink{display:inline-flex;align-items:center;gap:5px;min-height:28px;padding:0 8px;color:var(--dsw-alias-label-secondary);background:transparent;border:1px solid var(--dsw-alias-border-l2);border-radius:7px;font-size:12px;font-weight:500;line-height:18px;text-decoration:none;white-space:nowrap}.dsham_settingsExternalLink:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}.dsham_settingsExternalLink:focus-visible{outline:2px solid var(--dsw-alias-state-success-primary);outline-offset:2px}.dsham_settingsExternalLink svg{flex:none}@media(max-width:720px){.dsham_settingsTitleRow{flex-wrap:wrap}}";
|
|
3170
3176
|
const ARCHIVE_SETTINGS_DELETE_CONFIRM_CSS = ".dsham_settingsDeleteConfirm{color:var(--dsw-alias-state-error-primary)!important;background:transparent!important;border-color:var(--dsw-alias-state-error-primary)!important}.dsham_settingsDeleteConfirm:hover:not(:disabled){background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 20%,transparent)!important}.dsham_settingsDeleteConfirm:focus-visible{outline:2px solid var(--dsw-alias-state-error-secondary);outline-offset:2px}.dsham_settingsDeleteConfirm:disabled{cursor:not-allowed;opacity:.5}";
|
|
3171
3177
|
const ARCHIVE_WORKSPACE_CONFIRM_CSS = ".dsham_archiveWorkspaceConfirm{color:var(--dsw-alias-state-error-primary)!important;background:transparent!important;border-color:var(--dsw-alias-state-error-primary)!important}.dsham_archiveWorkspaceConfirm:hover:not(:disabled){background:color-mix(in srgb,var(--dsw-alias-state-error-primary) 20%,transparent)!important}.dsham_archiveWorkspaceConfirm:focus-visible{outline:2px solid var(--dsw-alias-state-error-secondary);outline-offset:2px}.dsham_archiveWorkspaceConfirm:disabled{cursor:not-allowed;opacity:.5}";
|
|
3172
|
-
const ARCHIVE_SETTINGS_SELECTION_CSS = ".dsham_settingsSelection{
|
|
3178
|
+
const ARCHIVE_SETTINGS_SELECTION_CSS = ".dsham_settingsSelection{margin:-8px 0 16px;padding:4px 0 12px;border-bottom:1px solid var(--dsw-alias-border-l2)}.dsham_settingsSelectionMain{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px;min-height:36px}.dsham_settingsSelectionSummary{display:flex;flex-wrap:wrap;align-items:center;gap:12px;min-width:0;max-width:100%}.dsham_settingsSelectionToggle{display:inline-flex;flex:none;white-space:nowrap;align-items:center;gap:12px;color:var(--dsw-alias-label-primary);font-size:13px;line-height:20px;cursor:pointer}.dsham_settingsCheckbox{flex:none;width:16px;height:16px;margin:0;accent-color:var(--dsw-alias-state-business-primary,#3b82f6)}.dsham_settingsSelectionClear{flex:none;min-height:28px;padding:0 0 0 12px;border:0;border-left:1px solid var(--dsw-alias-border-l2);background:transparent;color:var(--dsw-alias-state-business-primary,#3b82f6);font:inherit;font-size:13px;white-space:nowrap;cursor:pointer}.dsham_settingsSelectionClear:hover:not(:disabled){text-decoration:underline}.dsham_settingsSelectionActions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:10px;max-width:100%;margin-left:auto}.dsham_settingsSelectionAction{flex:none;white-space:nowrap;min-height:32px;padding:0 14px;color:var(--dsw-alias-label-primary);background:transparent;border:1px solid var(--dsw-alias-border-l2);border-radius:7px;cursor:pointer;font:inherit;font-size:13px;font-weight:500}.dsham_settingsSelectionAction:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.dsham_settingsSelectionDelete{color:var(--dsw-alias-state-error-primary);border-color:var(--dsw-alias-state-error-primary)}.dsham_settingsSelectionScope{margin:8px 0 0;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:20px;overflow-wrap:anywhere}.dsham_settingsSelectionAction:disabled,.dsham_settingsSelectionClear:disabled{cursor:not-allowed;opacity:.5}.dsham_settingsSelectionAction:focus-visible,.dsham_settingsSelectionClear:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#3b82f6);outline-offset:3px}";
|
|
3173
3179
|
const ARCHIVE_SETTINGS_LAYOUT_OVERRIDE = ".dsham_settings{margin:0 auto!important}@media(max-width:720px){.dsham_settings{margin:0 auto!important}}";
|
|
3174
3180
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify("dsh-archive-manager/ArchiveSettings.layout.css") + "]") === null) {
|
|
3175
3181
|
const tag = document.createElement("style");
|
|
@@ -3309,6 +3315,32 @@
|
|
|
3309
3315
|
}) : null]
|
|
3310
3316
|
});
|
|
3311
3317
|
}
|
|
3318
|
+
function ArchiveSelectionToolbar({ selectedCount, hiddenCount, allVisibleSelected, selectedVisibleCount, visibleCount, busy, t, onToggle, onClear, onRestore, onDelete }) {
|
|
3319
|
+
const hasSelection = selectedCount > 0;
|
|
3320
|
+
return (0, react_jsx_runtime.jsxs)("div", {
|
|
3321
|
+
className: "dsham_settingsSelection",
|
|
3322
|
+
children: [(0, react_jsx_runtime.jsxs)("div", {
|
|
3323
|
+
className: "dsham_settingsSelectionMain",
|
|
3324
|
+
children: [(0, react_jsx_runtime.jsxs)("div", {
|
|
3325
|
+
className: "dsham_settingsSelectionSummary",
|
|
3326
|
+
children: [(0, react_jsx_runtime.jsxs)("label", {
|
|
3327
|
+
className: "dsham_settingsSelectionToggle",
|
|
3328
|
+
title: t("archives.selectAllFiltered"),
|
|
3329
|
+
children: [(0, react_jsx_runtime.jsx)(ArchiveSelectionCheckbox, {
|
|
3330
|
+
checked: allVisibleSelected,
|
|
3331
|
+
indeterminate: selectedVisibleCount > 0 && !allVisibleSelected,
|
|
3332
|
+
disabled: busy || visibleCount === 0,
|
|
3333
|
+
label: t("archives.selectAllFiltered"),
|
|
3334
|
+
onChange: (event) => onToggle(event.target.checked)
|
|
3335
|
+
}), (0, react_jsx_runtime.jsx)("span", { "aria-live": "polite", children: hasSelection ? t("archives.selectedCount", { n: selectedCount }) : t("archives.selectAllFiltered") })]
|
|
3336
|
+
}), hasSelection && (0, react_jsx_runtime.jsx)("button", { type: "button", className: "dsham_settingsSelectionClear", disabled: busy, "aria-label": t("archives.clearSelection"), onClick: onClear, children: t("archives.clearSelectionShort") })]
|
|
3337
|
+
}), hasSelection && (0, react_jsx_runtime.jsxs)("div", {
|
|
3338
|
+
className: "dsham_settingsSelectionActions",
|
|
3339
|
+
children: [(0, react_jsx_runtime.jsx)("button", { type: "button", className: "dsham_settingsSelectionAction", disabled: busy, "aria-label": t("archives.restoreSelected"), onClick: onRestore, children: t("archives.restoreSelectionShort") }), (0, react_jsx_runtime.jsx)("button", { type: "button", className: "dsham_settingsSelectionAction dsham_settingsSelectionDelete", disabled: busy, "aria-label": t("archives.deleteSelected"), onClick: onDelete, children: t("archives.deleteSelectionShort") })]
|
|
3340
|
+
})]
|
|
3341
|
+
}), hiddenCount > 0 && (0, react_jsx_runtime.jsx)("p", { className: "dsham_settingsSelectionScope", role: "status", children: t("archives.selectionHiddenHint", { hidden: hiddenCount }) })]
|
|
3342
|
+
});
|
|
3343
|
+
}
|
|
3312
3344
|
function ArchiveSelectionCheckbox({ checked, indeterminate = false, disabled = false, label, onChange }) {
|
|
3313
3345
|
const inputRef = (0, react.useRef)(null);
|
|
3314
3346
|
(0, react.useEffect)(() => {
|
|
@@ -3452,7 +3484,11 @@
|
|
|
3452
3484
|
"archives.navigationUnavailable": "\u5F53\u524D\u5BBF\u4E3B\u65E0\u6CD5\u4FDD\u6301\u5F52\u6863\u5BF9\u8BDD\uFF0C\u8BF7\u4F7F\u7528\u201C\u6062\u590D\u5E76\u6253\u5F00\u201D\u3002",
|
|
3453
3485
|
"archives.sessionNotRetained": "\u5BBF\u4E3B\u672A\u4FDD\u7559\u76EE\u6807\u4F1A\u8BDD\uFF0C\u8BF7\u91CD\u65B0\u6253\u5F00\u6216\u6062\u590D\u540E\u518D\u8BD5\u3002",
|
|
3454
3486
|
"archives.restoreOpen": "\u6062\u590D\u5E76\u6253\u5F00",
|
|
3455
|
-
"archives.
|
|
3487
|
+
"archives.selectedCount": "\u5DF2\u9009 {n} \u6761",
|
|
3488
|
+
"archives.selectionHiddenHint": "\u542B\u5F53\u524D\u672A\u663E\u793A\u7684 {hidden} \u6761\uFF0C\u4E5F\u5C06\u53C2\u4E0E\u64CD\u4F5C",
|
|
3489
|
+
"archives.clearSelectionShort": "\u6E05\u7A7A",
|
|
3490
|
+
"archives.restoreSelectionShort": "\u6062\u590D",
|
|
3491
|
+
"archives.deleteSelectionShort": "\u5220\u9664",
|
|
3456
3492
|
"archives.clearSelection": "\u6E05\u7A7A\u9009\u62E9",
|
|
3457
3493
|
"group.ungrouped": "\u672A\u5206\u7EC4",
|
|
3458
3494
|
"session.new": "\u65B0\u4F1A\u8BDD",
|
|
@@ -3583,7 +3619,11 @@
|
|
|
3583
3619
|
"archives.navigationUnavailable": "This host cannot keep the conversation archived while opening it. Use \u201CRestore and open\u201D instead.",
|
|
3584
3620
|
"archives.sessionNotRetained": "The host did not keep the requested conversation open. Try again, or restore it before opening.",
|
|
3585
3621
|
"archives.restoreOpen": "Restore and open",
|
|
3586
|
-
"archives.
|
|
3622
|
+
"archives.selectedCount": "{n} selected",
|
|
3623
|
+
"archives.selectionHiddenHint": "Includes {hidden} hidden by the current filter; actions apply to them too.",
|
|
3624
|
+
"archives.clearSelectionShort": "Clear",
|
|
3625
|
+
"archives.restoreSelectionShort": "Restore",
|
|
3626
|
+
"archives.deleteSelectionShort": "Delete",
|
|
3587
3627
|
"archives.clearSelection": "Clear selection",
|
|
3588
3628
|
"group.ungrouped": "Ungrouped",
|
|
3589
3629
|
"session.new": "New Session",
|
|
@@ -3915,6 +3955,7 @@
|
|
|
3915
3955
|
}, ArchivedSessionsSection));
|
|
3916
3956
|
}
|
|
3917
3957
|
exports.__test = {
|
|
3958
|
+
ArchiveSelectionToolbar,
|
|
3918
3959
|
ArchivedSessionsSection,
|
|
3919
3960
|
zh,
|
|
3920
3961
|
displayTitle,
|