dsh-global-todo 0.6.1 → 0.6.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 +12 -0
- package/docs/screenshots/panel-detail.png +0 -0
- package/docs/screenshots/panel-select.png +0 -0
- package/docs/screenshots/panel.png +0 -0
- package/lib/client.js +28 -4
- package/lib/index.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [0.6.2] — 2026-10-20
|
|
2
|
+
|
|
3
|
+
The narrow-width details the spec called for after the two-column work.
|
|
4
|
+
|
|
5
|
+
- **Grouping becomes a dropdown when the column is narrow.** The three segmented buttons collapse
|
|
6
|
+
into one `select` (Conversation / Time / Level) below 960px, so the toolbar stops taking a row
|
|
7
|
+
for grouping at the width where rows are already tight.
|
|
8
|
+
- **The inbox explains itself.** Opening the inbox view now leads with one line: items were written
|
|
9
|
+
by external sources or the agent and only join the list after confirmation.
|
|
10
|
+
- **Toasts are anchored to the panel.** `position: absolute` on the panel root instead of `fixed`
|
|
11
|
+
against the viewport, so a notice appears above the list rather than at the bottom of the window.
|
|
12
|
+
|
|
1
13
|
## [0.6.1] — 2026-10-20
|
|
2
14
|
|
|
3
15
|
The follow-up pass from the design spec: the breakpoint now follows the panel, not the window,
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/lib/client.js
CHANGED
|
@@ -50,7 +50,7 @@ window.__ModuleLoader__.load({
|
|
|
50
50
|
* different mechanisms (restart vs. hot reload), so "which one am I looking
|
|
51
51
|
* at" needs an answer that the bundle itself carries.
|
|
52
52
|
*/
|
|
53
|
-
const UI_REV = '
|
|
53
|
+
const UI_REV = 'ui38'
|
|
54
54
|
/** Last language resolved for the shell; module-level so a fetch failure can be worded too. */
|
|
55
55
|
let activeLang = 'zh'
|
|
56
56
|
|
|
@@ -106,6 +106,7 @@ window.__ModuleLoader__.load({
|
|
|
106
106
|
'settings.cancel': '取消',
|
|
107
107
|
'settings.saved': '设置已保存',
|
|
108
108
|
'settings.about': '关于',
|
|
109
|
+
'inbox.explain': '以下由外部写入或 Agent 提交,确认后才进入清单。',
|
|
109
110
|
'notice.exported': '已导出 {n} 条待办',
|
|
110
111
|
'notice.imported': '已导入 {n} 条(合并,现有共 {total} 条)',
|
|
111
112
|
'import.badJson': '这个文件不是合法的 JSON',
|
|
@@ -347,6 +348,7 @@ window.__ModuleLoader__.load({
|
|
|
347
348
|
'settings.cancel': 'Cancel',
|
|
348
349
|
'settings.saved': 'Settings saved',
|
|
349
350
|
'settings.about': 'About',
|
|
351
|
+
'inbox.explain': 'Written by external sources or the agent. Confirm it before it joins the list.',
|
|
350
352
|
'notice.exported': 'Exported {n} todos',
|
|
351
353
|
'notice.imported': 'Imported {n} (merged; {total} in the list now)',
|
|
352
354
|
'import.badJson': 'That file is not valid JSON',
|
|
@@ -908,7 +910,7 @@ window.__ModuleLoader__.load({
|
|
|
908
910
|
// ------------------------------------------------------------------ 样式
|
|
909
911
|
|
|
910
912
|
const CSS = `
|
|
911
|
-
.gt-root { display: flex; flex-direction: column; height: 100%; min-height: 0; min-width: 0;
|
|
913
|
+
.gt-root { position: relative; display: flex; flex-direction: column; height: 100%; min-height: 0; min-width: 0;
|
|
912
914
|
color: var(--dsw-alias-label-primary); font-size: 13px; line-height: 1.5; }
|
|
913
915
|
.gt-inner { display: flex; flex-direction: column; gap: 14px; width: 100%; max-width: 1040px; min-width: 0;
|
|
914
916
|
box-sizing: border-box; margin: 0 auto; padding: 20px 24px 32px; flex: 1; }
|
|
@@ -1091,6 +1093,13 @@ button.gt-chip[data-on="1"] { color: var(--dsw-alias-label-primary); border-colo
|
|
|
1091
1093
|
.gt-settings { display: flex; flex-direction: column; gap: 12px; padding: 16px; width: 340px;
|
|
1092
1094
|
box-sizing: border-box; border: 1px solid var(--dsw-alias-border-l2); border-radius: 12px;
|
|
1093
1095
|
background: var(--dsw-alias-bg-overlay); font-size: 13px; line-height: 20px; }
|
|
1096
|
+
.gt-group-select { display: none; min-height: 28px; max-width: 150px; padding: 0 8px; font: inherit;
|
|
1097
|
+
font-size: 12.5px; color: var(--dsw-alias-label-primary); background: var(--dsw-alias-bg-layer-1);
|
|
1098
|
+
border: 1px solid var(--dsw-alias-border-l1); border-radius: 8px; }
|
|
1099
|
+
.gt-root[data-wide="0"] .gt-group-tabs { display: none; }
|
|
1100
|
+
.gt-root[data-wide="0"] .gt-group-select { display: inline-flex; align-items: center; }
|
|
1101
|
+
.gt-inbox-note { padding: 0 2px 2px; color: var(--dsw-alias-label-secondary); font-size: 13px;
|
|
1102
|
+
line-height: 20px; }
|
|
1094
1103
|
.gt-settings-path { font-size: 11.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
1095
1104
|
.gt-settings .gt-input { flex: 0 0 auto; width: 100%; min-height: 32px; }
|
|
1096
1105
|
.gt-settings .gt-check-line .gt-input { width: 64px; }
|
|
@@ -1187,7 +1196,7 @@ button.gt-chip[data-on="1"] { color: var(--dsw-alias-label-primary); border-colo
|
|
|
1187
1196
|
.gt-empty-title { font-size: 14px; color: var(--dsw-alias-label-primary); }
|
|
1188
1197
|
.gt-foot { color: var(--dsw-alias-label-secondary); font-size: 11px; display: flex; gap: 10px; flex-wrap: wrap;
|
|
1189
1198
|
align-items: center; }
|
|
1190
|
-
.gt-toast { position:
|
|
1199
|
+
.gt-toast { position: absolute; left: 50%; bottom: 16px; transform: translateX(-50%); z-index: 50;
|
|
1191
1200
|
display: flex; align-items: center; gap: 12px; background: var(--dsw-alias-bg-overlay);
|
|
1192
1201
|
border: 1px solid var(--dsw-alias-border-l2); border-radius: 10px; padding: 9px 13px;
|
|
1193
1202
|
color: var(--dsw-alias-label-primary); }
|
|
@@ -3477,7 +3486,7 @@ button.gt-chip[data-on="1"] { color: var(--dsw-alias-label-primary); border-colo
|
|
|
3477
3486
|
h('div', { className: 'gt-spacer' }),
|
|
3478
3487
|
h(
|
|
3479
3488
|
'span',
|
|
3480
|
-
{ className: 'gt-tabs', role: 'group', 'aria-label': t('group.by'), title: t('group.by') },
|
|
3489
|
+
{ className: 'gt-tabs gt-group-tabs', role: 'group', 'aria-label': t('group.by'), title: t('group.by') },
|
|
3481
3490
|
GROUP_MODES.map((mode) =>
|
|
3482
3491
|
h(
|
|
3483
3492
|
'button',
|
|
@@ -3495,6 +3504,20 @@ button.gt-chip[data-on="1"] { color: var(--dsw-alias-label-primary); border-colo
|
|
|
3495
3504
|
),
|
|
3496
3505
|
),
|
|
3497
3506
|
),
|
|
3507
|
+
h(
|
|
3508
|
+
'select',
|
|
3509
|
+
{
|
|
3510
|
+
className: 'gt-group-select',
|
|
3511
|
+
value: groupMode,
|
|
3512
|
+
'aria-label': t('group.by'),
|
|
3513
|
+
title: t('group.by'),
|
|
3514
|
+
onChange: (event) => {
|
|
3515
|
+
setGroupMode(event.target.value)
|
|
3516
|
+
storeStoredGroupMode(event.target.value)
|
|
3517
|
+
},
|
|
3518
|
+
},
|
|
3519
|
+
GROUP_MODES.map((mode) => h('option', { key: mode, value: mode }, t(`group.${mode}`))),
|
|
3520
|
+
),
|
|
3498
3521
|
),
|
|
3499
3522
|
h('div', { className: 'gt-spacer' }),
|
|
3500
3523
|
h(
|
|
@@ -3910,6 +3933,7 @@ button.gt-chip[data-on="1"] { color: var(--dsw-alias-label-primary); border-colo
|
|
|
3910
3933
|
: h(
|
|
3911
3934
|
'div',
|
|
3912
3935
|
{ className: 'gt-groups', role: 'list' },
|
|
3936
|
+
filter === 'inbox' ? h('div', { className: 'gt-inbox-note', role: 'note' }, t('inbox.explain')) : null,
|
|
3913
3937
|
groups.map((group) => {
|
|
3914
3938
|
const isCollapsed = collapsed[group.key] ?? group.collapsed === true
|
|
3915
3939
|
const exemptGroup = typeof group.dir === 'string' && group.dir !== '' && exemptWorkspaces.includes(group.dir)
|
package/lib/index.js
CHANGED
|
@@ -36,7 +36,7 @@ import { createStore, resolveStorePath } from './store.js'
|
|
|
36
36
|
import { createTools } from './tools.js'
|
|
37
37
|
|
|
38
38
|
/** Must equal `package.json`'s version; `npm run check` enforces that. */
|
|
39
|
-
export const VERSION = '0.6.
|
|
39
|
+
export const VERSION = '0.6.2'
|
|
40
40
|
|
|
41
41
|
/** Plugin id. Also the Loader row id in `cordis.patch.yml`. */
|
|
42
42
|
export const name = 'dsh-global-todo'
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-global-todo",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.2",
|
|
4
4
|
"icon": "./docs/icon.svg",
|
|
5
5
|
"description": "Global, cross-session todos for DeepSeek Harness: one list owned by the human and the agent together, with creation time, attached documents and links, and one-click hand-off to an agent session. 全局待办:跨会话一份清单,记录加入时间,可挂文档与地址,可一键交给 Agent 继续干。",
|
|
6
6
|
"type": "module",
|