dsh-global-todo 0.4.3 → 0.4.4
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 +10 -0
- package/docs/DESIGN.md +9 -0
- package/docs/ROADMAP.md +3 -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 +15 -2
- package/lib/index.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.4] — 2026-10-19
|
|
11
|
+
|
|
12
|
+
Opening a todo on a wide screen used to push the list down and leave half the window unused.
|
|
13
|
+
|
|
14
|
+
- **The open row's detail is now a card beside the list**, above a 1100px viewport: it sits at
|
|
15
|
+
the panel's right edge, the list keeps its own column, and the card scrolls on its own. Narrow
|
|
16
|
+
windows keep the familiar inline expansion. The change is CSS-only over the existing markup —
|
|
17
|
+
`.gt-root[data-wide-detail]` plus one media query — so there is still exactly one detail
|
|
18
|
+
implementation; a second wide-screen render path would drift from the inline one at the first
|
|
19
|
+
field change.
|
|
10
20
|
## [0.4.3] — 2026-10-19
|
|
11
21
|
|
|
12
22
|
The list is meant to live in a synced folder; a change from another machine should not be
|
package/docs/DESIGN.md
CHANGED
|
@@ -57,6 +57,15 @@ $DSH_HOME/global-todo/todos.json ← { version: 1, todos: [ … ] }
|
|
|
57
57
|
version, and a future migration step would run before the first write, keeping the old
|
|
58
58
|
file as a backup.
|
|
59
59
|
|
|
60
|
+
## On a wide window, the detail stands beside the list
|
|
61
|
+
|
|
62
|
+
Expanding a row inline is right on a narrow window and wrong on a wide one: the list jumps, the
|
|
63
|
+
row you were reading slides away, and the rest of the screen sits empty. Above 1100px the open
|
|
64
|
+
row's detail is lifted out of the flow into a card at the panel's right edge, and the list gets
|
|
65
|
+
right padding equal to that card. This is a CSS-only override over unchanged markup
|
|
66
|
+
(`.gt-root[data-wide-detail]` plus one media query) precisely so there is still exactly one
|
|
67
|
+
detail implementation — a second render path for wide screens would drift from the inline one at
|
|
68
|
+
the first field change.
|
|
60
69
|
## A shared file changes without asking
|
|
61
70
|
|
|
62
71
|
The list is deliberately portable — a notes repo, a synced folder, a NAS — so another machine
|
package/docs/ROADMAP.md
CHANGED
|
@@ -110,6 +110,9 @@ in `skipped[]`, and archived/cancelled rows deliberately do not block a new one.
|
|
|
110
110
|
counts a disagreement once (`externalChanges`, `lastExternalAt` in `lib/store.js`; surfaced by
|
|
111
111
|
`/health.store`). The panel shows a one-line notice instead of letting a synced folder change the
|
|
112
112
|
list silently.
|
|
113
|
+
**Side detail on wide windows** — above 1100px the open row's detail becomes a card at the
|
|
114
|
+
panel's right edge instead of pushing the list down (CSS-only over the same markup; one detail
|
|
115
|
+
implementation), while narrow windows keep the inline expansion.
|
|
113
116
|
### Partly landed
|
|
114
117
|
|
|
115
118
|
- **Batch and multi-select** — the selection mode, its per-row markers and the batch
|
|
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 = 'ui27'
|
|
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
|
|
|
@@ -1008,6 +1008,19 @@ button.gt-chip[data-on="1"] { color: var(--dsw-alias-label-primary); border-colo
|
|
|
1008
1008
|
.gt-menu button[data-danger="1"] { color: var(--dsw-alias-state-error-primary); }
|
|
1009
1009
|
.gt-detail { display: flex; flex-direction: column; gap: 10px; border-top: 1px solid var(--dsw-alias-border-l1);
|
|
1010
1010
|
padding-top: 10px; margin-top: 2px; }
|
|
1011
|
+
/* Wide screens: the open row's detail becomes a card on the right instead of pushing the list
|
|
1012
|
+
down. Deliberately CSS-only over unchanged markup: one detail implementation, and it only
|
|
1013
|
+
applies where there is room for a second column. */
|
|
1014
|
+
@media (min-width: 1100px) {
|
|
1015
|
+
.gt-root[data-wide-detail="1"] .gt-inner { padding-right: 408px; }
|
|
1016
|
+
.gt-root[data-wide-detail="1"] .gt-item[data-open="1"] .gt-detail {
|
|
1017
|
+
/* Follow the panel's own right edge (it is centred and capped at 980px) instead of the
|
|
1018
|
+
viewport's, so the card stays attached to the list on ultra-wide screens. */
|
|
1019
|
+
position: fixed; top: 96px; right: max(24px, calc(50vw - 466px)); width: 360px; max-height: calc(100vh - 140px);
|
|
1020
|
+
overflow: auto; padding: 16px; margin: 0; border: 1px solid var(--dsw-alias-border-l2);
|
|
1021
|
+
border-radius: 12px; background: var(--dsw-alias-bg-overlay); z-index: 30;
|
|
1022
|
+
}
|
|
1023
|
+
}
|
|
1011
1024
|
.gt-section { display: flex; flex-direction: column; gap: 5px; }
|
|
1012
1025
|
.gt-completion { white-space: pre-wrap; word-break: break-word; line-height: 1.5; }
|
|
1013
1026
|
.gt-section-title { color: var(--dsw-alias-label-secondary); font-size: 11.5px; text-transform: uppercase;
|
|
@@ -2760,7 +2773,7 @@ button.gt-chip[data-on="1"] { color: var(--dsw-alias-label-primary); border-colo
|
|
|
2760
2773
|
|
|
2761
2774
|
return h(
|
|
2762
2775
|
'div',
|
|
2763
|
-
{ className: 'gt-root' },
|
|
2776
|
+
{ className: 'gt-root', 'data-wide-detail': expandedId === '' ? '0' : '1' },
|
|
2764
2777
|
h(
|
|
2765
2778
|
'div',
|
|
2766
2779
|
{ className: 'gt-inner' },
|
package/lib/index.js
CHANGED
|
@@ -35,7 +35,7 @@ import { createStore, resolveStorePath } from './store.js'
|
|
|
35
35
|
import { createTools } from './tools.js'
|
|
36
36
|
|
|
37
37
|
/** Must equal `package.json`'s version; `npm run check` enforces that. */
|
|
38
|
-
export const VERSION = '0.4.
|
|
38
|
+
export const VERSION = '0.4.4'
|
|
39
39
|
|
|
40
40
|
/** Plugin id. Also the Loader row id in `cordis.patch.yml`. */
|
|
41
41
|
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.4.
|
|
3
|
+
"version": "0.4.4",
|
|
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",
|