@goodandready/dsh-kanban 0.2.42 โ 0.2.43
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/lib/client.js +50 -41
- package/package.json +3 -2
package/lib/client.js
CHANGED
|
@@ -526,7 +526,7 @@ window.__ModuleLoader__.load({
|
|
|
526
526
|
{
|
|
527
527
|
style: {
|
|
528
528
|
margin: '12px 0', padding: '14px', borderRadius: '8px',
|
|
529
|
-
background:
|
|
529
|
+
background: CLR_ERR_S2,
|
|
530
530
|
border: '1px solid var(--dsw-alias-state-error-secondary, #ffc1c0)',
|
|
531
531
|
},
|
|
532
532
|
},
|
|
@@ -1730,7 +1730,7 @@ window.__ModuleLoader__.load({
|
|
|
1730
1730
|
return h('div', {
|
|
1731
1731
|
className: 'dkb-section-card',
|
|
1732
1732
|
key: 'remote-test-card',
|
|
1733
|
-
style: { borderLeft: '3px solid var(--dsw-alias-state-business-primary, #0969da)', background:
|
|
1733
|
+
style: { borderLeft: '3px solid var(--dsw-alias-state-business-primary, #0969da)', background: CLR_BG_F6, padding: '12px 14px', marginBottom: '12px' },
|
|
1734
1734
|
},
|
|
1735
1735
|
h('div', {
|
|
1736
1736
|
style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: result ? '8px' : '0' },
|
|
@@ -1751,7 +1751,7 @@ window.__ModuleLoader__.load({
|
|
|
1751
1751
|
borderRadius: '4px',
|
|
1752
1752
|
background: (result.ssh?.ok || result.server?.ok)
|
|
1753
1753
|
? CLR_SUC_S
|
|
1754
|
-
:
|
|
1754
|
+
: CLR_ERR_S2,
|
|
1755
1755
|
color: (result.ssh?.ok || result.server?.ok)
|
|
1756
1756
|
? CLR_SUC_P
|
|
1757
1757
|
: CLR_ERR_P,
|
|
@@ -2032,7 +2032,7 @@ window.__ModuleLoader__.load({
|
|
|
2032
2032
|
key: 'cost-meter-notice',
|
|
2033
2033
|
style: {
|
|
2034
2034
|
borderLeft: '3px solid var(--dsw-alias-state-business-primary, #0969da)',
|
|
2035
|
-
background:
|
|
2035
|
+
background: CLR_BG_F6,
|
|
2036
2036
|
padding: '12px 14px',
|
|
2037
2037
|
marginBottom: '12px',
|
|
2038
2038
|
},
|
|
@@ -2123,9 +2123,9 @@ window.__ModuleLoader__.load({
|
|
|
2123
2123
|
? h('span', {
|
|
2124
2124
|
className: 'dkb-tag',
|
|
2125
2125
|
style: {
|
|
2126
|
-
background:
|
|
2126
|
+
background: CLR_ERR_S2,
|
|
2127
2127
|
color: CLR_ERR_P,
|
|
2128
|
-
borderColor:
|
|
2128
|
+
borderColor: CLR_ERR_S2,
|
|
2129
2129
|
fontWeight: 600,
|
|
2130
2130
|
},
|
|
2131
2131
|
title: 'Blocked by unfinished dependencies'
|
|
@@ -2143,19 +2143,19 @@ window.__ModuleLoader__.load({
|
|
|
2143
2143
|
: null,
|
|
2144
2144
|
task.cron ? h('span', { className: 'dkb-tag', title: task.cron }, 'โฐ cron') : null,
|
|
2145
2145
|
task.progressDump ? h('span', { className: 'dkb-tag', title: 'PROGRESSDUMP' }, '๐ dump') : null,
|
|
2146
|
-
task.rejectReason ? h('span', { className: 'dkb-tag', style: { background:
|
|
2146
|
+
task.rejectReason ? h('span', { className: 'dkb-tag', style: { background: CLR_ERR_S2, color: CLR_ERR_P, borderColor: CLR_ERR_S2 }, title: task.rejectReason }, 'โฉ ' + t('acceptance.rejectedBadge')) : null,
|
|
2147
2147
|
Array.isArray(task.checklist) && task.checklist.length > 0
|
|
2148
2148
|
? h('span', { className: 'dkb-tag', title: 'DoD Checklist' }, `โ ${task.checklist.filter((i) => i.completed).length}/${task.checklist.length}`)
|
|
2149
2149
|
: null,
|
|
2150
2150
|
task.report?.verification?.status === 'passed'
|
|
2151
2151
|
? h('span', { className: 'dkb-tag', style: { background: CLR_SUC_S, color: CLR_SUC_P, borderColor: 'var(--dsw-alias-state-success-secondary, #4ac26b)' }, title: task.report.verification.command || 'Tests passed' }, 'โ PASS')
|
|
2152
2152
|
: (task.report?.verification?.status === 'failed'
|
|
2153
|
-
? h('span', { className: 'dkb-tag', style: { background:
|
|
2153
|
+
? h('span', { className: 'dkb-tag', style: { background: CLR_ERR_S2, color: CLR_ERR_P, borderColor: CLR_ERR_S2 }, title: task.report.verification.command || 'Tests failed' }, 'โ FAIL')
|
|
2154
2154
|
: null),
|
|
2155
2155
|
task.costMetrics && task.costMetrics.totalTokens > 0
|
|
2156
2156
|
? h('span', {
|
|
2157
2157
|
className: 'dkb-tag',
|
|
2158
|
-
style: { background: CLR_BIZ_T, color: CLR_BIZ_P, borderColor:
|
|
2158
|
+
style: { background: CLR_BIZ_T, color: CLR_BIZ_P, borderColor: CLR_BUS_54 },
|
|
2159
2159
|
title: 'Tokens: ' + task.costMetrics.totalTokens.toLocaleString()
|
|
2160
2160
|
}, '๐ช ' + (task.costMetrics.totalTokens / 1000).toFixed(1) + 'k' + (task.costMetrics.costFormatted ? ' ยท ' + task.costMetrics.costFormatted : ''))
|
|
2161
2161
|
: null,
|
|
@@ -2729,7 +2729,7 @@ window.__ModuleLoader__.load({
|
|
|
2729
2729
|
style: {
|
|
2730
2730
|
background: CLR_BIZ_T,
|
|
2731
2731
|
color: CLR_BIZ_P,
|
|
2732
|
-
borderColor:
|
|
2732
|
+
borderColor: CLR_BUS_54,
|
|
2733
2733
|
fontWeight: '600',
|
|
2734
2734
|
fontSize: '11px',
|
|
2735
2735
|
},
|
|
@@ -3218,7 +3218,7 @@ window.__ModuleLoader__.load({
|
|
|
3218
3218
|
? h('div', {
|
|
3219
3219
|
style: {
|
|
3220
3220
|
margin: '6px 0', padding: '10px 12px',
|
|
3221
|
-
background:
|
|
3221
|
+
background: CLR_ERR_S2,
|
|
3222
3222
|
border: '1px solid var(--dsw-alias-state-error-primary, #cf222e)',
|
|
3223
3223
|
borderRadius: 8, fontSize: 12, display: 'flex', flexDirection: 'column', gap: 4,
|
|
3224
3224
|
},
|
|
@@ -3409,7 +3409,7 @@ window.__ModuleLoader__.load({
|
|
|
3409
3409
|
? h('div', {
|
|
3410
3410
|
style: {
|
|
3411
3411
|
margin: '8px 0', padding: '10px 12px',
|
|
3412
|
-
background:
|
|
3412
|
+
background: CLR_ERR_S2,
|
|
3413
3413
|
border: '1px solid var(--dsw-alias-state-error-primary, #cf222e)',
|
|
3414
3414
|
borderRadius: 8, fontSize: 12, display: 'flex', flexDirection: 'column', gap: 6,
|
|
3415
3415
|
},
|
|
@@ -3512,13 +3512,13 @@ window.__ModuleLoader__.load({
|
|
|
3512
3512
|
h('div', { className: 'dkb-group' }, t('task.progressDump')),
|
|
3513
3513
|
h('pre', {
|
|
3514
3514
|
style: {
|
|
3515
|
-
background:
|
|
3515
|
+
background: CLR_BG_F6, padding: 8, borderRadius: 6, fontSize: 12,
|
|
3516
3516
|
whiteSpace: 'pre-wrap', maxHeight: 150, overflowY: 'auto', margin: 0,
|
|
3517
3517
|
},
|
|
3518
3518
|
}, openTask.progressDump),
|
|
3519
3519
|
)
|
|
3520
3520
|
: null,
|
|
3521
|
-
h('div', { style: { margin: '6px 0', padding: 10, background:
|
|
3521
|
+
h('div', { style: { margin: '6px 0', padding: 10, background: CLR_BG_F6, border: BDR_L2, borderRadius: 6 } },
|
|
3522
3522
|
h('div', { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 6 } },
|
|
3523
3523
|
h('span', { className: 'dkb-group', style: { margin: 0 } },
|
|
3524
3524
|
'๐ ' + t('epic.subtasks') + (subtasks.length > 0 ? ` (${subtasks.filter(s => s.column === 'done').length}/${subtasks.length})` : '')
|
|
@@ -3729,23 +3729,23 @@ window.__ModuleLoader__.load({
|
|
|
3729
3729
|
),
|
|
3730
3730
|
h('span', {
|
|
3731
3731
|
className: 'dkb-tag',
|
|
3732
|
-
style: { background: CLR_BIZ_T, color: CLR_BIZ_P, borderColor:
|
|
3732
|
+
style: { background: CLR_BIZ_T, color: CLR_BIZ_P, borderColor: CLR_BUS_54 }
|
|
3733
3733
|
}, openTask.costMetrics.costFormatted || '$0.00'),
|
|
3734
3734
|
),
|
|
3735
3735
|
h('div', { style: { display: 'grid', gridTemplateColumns: 'repeat(4, 1fr)', gap: 8, fontSize: '11px', textAlign: 'center' } },
|
|
3736
|
-
h('div', { style: { background:
|
|
3736
|
+
h('div', { style: { background: CLR_BG_F6, padding: '6px', borderRadius: '4px' } },
|
|
3737
3737
|
h('div', { style: { opacity: 0.7 } }, t('telemetry.tokens')),
|
|
3738
3738
|
h('div', { style: { fontWeight: 600 } }, openTask.costMetrics.totalTokens.toLocaleString()),
|
|
3739
3739
|
),
|
|
3740
|
-
h('div', { style: { background:
|
|
3740
|
+
h('div', { style: { background: CLR_BG_F6, padding: '6px', borderRadius: '4px' } },
|
|
3741
3741
|
h('div', { style: { opacity: 0.7 } }, t('telemetry.input')),
|
|
3742
3742
|
h('div', { style: { fontWeight: 600 } }, (openTask.costMetrics.uncachedInputTokens || 0).toLocaleString()),
|
|
3743
3743
|
),
|
|
3744
|
-
h('div', { style: { background:
|
|
3744
|
+
h('div', { style: { background: CLR_BG_F6, padding: '6px', borderRadius: '4px' } },
|
|
3745
3745
|
h('div', { style: { opacity: 0.7 } }, t('telemetry.output')),
|
|
3746
3746
|
h('div', { style: { fontWeight: 600 } }, (openTask.costMetrics.outputTokens || 0).toLocaleString()),
|
|
3747
3747
|
),
|
|
3748
|
-
h('div', { style: { background:
|
|
3748
|
+
h('div', { style: { background: CLR_BG_F6, padding: '6px', borderRadius: '4px' } },
|
|
3749
3749
|
h('div', { style: { opacity: 0.7 } }, t('telemetry.cache')),
|
|
3750
3750
|
h('div', { style: { fontWeight: 600 } }, (openTask.costMetrics.cacheReadTokens || 0).toLocaleString()),
|
|
3751
3751
|
),
|
|
@@ -3791,7 +3791,7 @@ window.__ModuleLoader__.load({
|
|
|
3791
3791
|
className: 'dkb-warnBox',
|
|
3792
3792
|
style: {
|
|
3793
3793
|
margin: '4px 0', padding: 10,
|
|
3794
|
-
background:
|
|
3794
|
+
background: CLR_ERR_S2,
|
|
3795
3795
|
border: '1px solid var(--dsw-alias-state-error-secondary, #ffc1c0)',
|
|
3796
3796
|
borderRadius: 6,
|
|
3797
3797
|
},
|
|
@@ -3855,7 +3855,7 @@ window.__ModuleLoader__.load({
|
|
|
3855
3855
|
style: {
|
|
3856
3856
|
fontWeight: 'bold', fontSize: 10, padding: '1px 4px', borderRadius: 3,
|
|
3857
3857
|
background: f.status === 'added' ? CLR_SUC_S
|
|
3858
|
-
: (f.status === 'deleted' ?
|
|
3858
|
+
: (f.status === 'deleted' ? CLR_ERR_S2
|
|
3859
3859
|
: CLR_WRN_S),
|
|
3860
3860
|
color: f.status === 'added' ? CLR_SUC_P
|
|
3861
3861
|
: (f.status === 'deleted' ? CLR_ERR_P
|
|
@@ -3926,7 +3926,7 @@ window.__ModuleLoader__.load({
|
|
|
3926
3926
|
? h('button', {
|
|
3927
3927
|
type: 'button', className: 'dkb-save',
|
|
3928
3928
|
disabled: merging,
|
|
3929
|
-
style: { background: 'var(--dsw-alias-state-success-primary, #16a34a)', color:
|
|
3929
|
+
style: { background: 'var(--dsw-alias-state-success-primary, #16a34a)', color: CLR_LBL_INV },
|
|
3930
3930
|
onClick: async () => {
|
|
3931
3931
|
try {
|
|
3932
3932
|
setMerging(true)
|
|
@@ -3956,7 +3956,7 @@ window.__ModuleLoader__.load({
|
|
|
3956
3956
|
? h('button', {
|
|
3957
3957
|
type: 'button', className: 'dkb-save',
|
|
3958
3958
|
disabled: prCreating,
|
|
3959
|
-
style: { background: CLR_BIZ_P, color:
|
|
3959
|
+
style: { background: CLR_BIZ_P, color: CLR_LBL_INV },
|
|
3960
3960
|
onClick: async () => {
|
|
3961
3961
|
setPrCreating(true)
|
|
3962
3962
|
try {
|
|
@@ -3974,7 +3974,7 @@ window.__ModuleLoader__.load({
|
|
|
3974
3974
|
createdPr
|
|
3975
3975
|
? h('a', {
|
|
3976
3976
|
className: 'dkb-save',
|
|
3977
|
-
style: { background: 'var(--dsw-alias-state-success-primary, #16a34a)', color:
|
|
3977
|
+
style: { background: 'var(--dsw-alias-state-success-primary, #16a34a)', color: CLR_LBL_INV, textDecoration: 'none', display: 'inline-flex', alignItems: 'center' },
|
|
3978
3978
|
href: createdPr.html_url,
|
|
3979
3979
|
target: '_blank', rel: 'noopener noreferrer',
|
|
3980
3980
|
}, 'โ ' + t('pr.view') + ` #${createdPr.number}`)
|
|
@@ -4032,7 +4032,7 @@ window.__ModuleLoader__.load({
|
|
|
4032
4032
|
key: idx,
|
|
4033
4033
|
style: {
|
|
4034
4034
|
display: 'flex', flexDirection: 'column', gap: 2, padding: '4px 8px',
|
|
4035
|
-
background: item.completed ?
|
|
4035
|
+
background: item.completed ? CLR_BG_F6 : CLR_BG_L3,
|
|
4036
4036
|
borderRadius: 6, border: BDR_L2,
|
|
4037
4037
|
},
|
|
4038
4038
|
},
|
|
@@ -4119,7 +4119,7 @@ window.__ModuleLoader__.load({
|
|
|
4119
4119
|
? h('div', {
|
|
4120
4120
|
style: {
|
|
4121
4121
|
margin: '6px 0', padding: 10,
|
|
4122
|
-
background:
|
|
4122
|
+
background: CLR_BG_F6,
|
|
4123
4123
|
border: BDR_L2,
|
|
4124
4124
|
borderRadius: 6,
|
|
4125
4125
|
},
|
|
@@ -4179,7 +4179,7 @@ window.__ModuleLoader__.load({
|
|
|
4179
4179
|
className: 'dkb-tag',
|
|
4180
4180
|
style: {
|
|
4181
4181
|
fontWeight: 600,
|
|
4182
|
-
background: c.role === 'agent' ?
|
|
4182
|
+
background: c.role === 'agent' ? CLR_BG_F6 : CLR_BG_L2,
|
|
4183
4183
|
},
|
|
4184
4184
|
}, c.role === 'agent' ? t('comments.authorAgent') : (c.author || t('comments.authorUser'))),
|
|
4185
4185
|
h('span', { style: { color: 'var(--dsw-alias-label-tertiary)', fontSize: 11 } },
|
|
@@ -4975,6 +4975,10 @@ window.__ModuleLoader__.load({
|
|
|
4975
4975
|
)
|
|
4976
4976
|
}
|
|
4977
4977
|
|
|
4978
|
+
const CLR_ERR_S2 = 'var(--dsw-alias-state-error-secondary, #ffc1c0)'
|
|
4979
|
+
const CLR_BG_F6 = 'var(--dsw-alias-bg-layer-1, #f6f8fa)'
|
|
4980
|
+
const CLR_BUS_54 = 'var(--dsw-alias-state-business-tertiary, #54aeff)'
|
|
4981
|
+
const CLR_LBL_INV = 'var(--dsw-alias-label-primary-inverted, #fff)'
|
|
4978
4982
|
const CLR_ERR_P = 'var(--dsw-alias-state-error-primary, #cf222e)'
|
|
4979
4983
|
const CLR_ERR_S = 'var(--dsw-alias-state-error-secondary, #ffebe9)'
|
|
4980
4984
|
const CLR_BIZ_P = 'var(--dsw-alias-state-business-primary, #0969da)'
|
|
@@ -5026,6 +5030,8 @@ window.__ModuleLoader__.load({
|
|
|
5026
5030
|
}
|
|
5027
5031
|
}
|
|
5028
5032
|
|
|
5033
|
+
let layoutService = null
|
|
5034
|
+
const selectPanel = (id) => { layoutService?.selectPanel?.(id) }
|
|
5029
5035
|
function createFallbackNavEntry(ctx, toggle, label) {
|
|
5030
5036
|
const sE = document.querySelector('nav[class*="panelList"] > [class*="panelEntry"], [class*="panelEntry"]')
|
|
5031
5037
|
const sR = sE?.querySelector('button[class*="panelRow"], button')
|
|
@@ -5053,7 +5059,7 @@ window.__ModuleLoader__.load({
|
|
|
5053
5059
|
btn.addEventListener('click', (e) => {
|
|
5054
5060
|
e.preventDefault()
|
|
5055
5061
|
e.stopPropagation()
|
|
5056
|
-
|
|
5062
|
+
selectPanel(toggle.isOpen() ? null : 'kanban')
|
|
5057
5063
|
toggle.toggle()
|
|
5058
5064
|
})
|
|
5059
5065
|
return item
|
|
@@ -5129,7 +5135,7 @@ window.__ModuleLoader__.load({
|
|
|
5129
5135
|
col.appendChild(container)
|
|
5130
5136
|
root = ReactDOM.createRoot(container)
|
|
5131
5137
|
root.render(h(BoardScreen, { ctx, toggle, onClose: () => {
|
|
5132
|
-
|
|
5138
|
+
selectPanel(null)
|
|
5133
5139
|
toggle.set(false)
|
|
5134
5140
|
} }))
|
|
5135
5141
|
}
|
|
@@ -5256,24 +5262,27 @@ window.__ModuleLoader__.load({
|
|
|
5256
5262
|
ctx.slots.register({
|
|
5257
5263
|
name: 'main', key: 'kanban', locale: NS,
|
|
5258
5264
|
inject: () => ({ ctx, toggle, onClose: () => {
|
|
5259
|
-
|
|
5265
|
+
selectPanel(null)
|
|
5260
5266
|
toggle.set(false)
|
|
5261
5267
|
} }),
|
|
5262
5268
|
}, BoardScreen)
|
|
5263
5269
|
})
|
|
5264
5270
|
const toggle = createToggle()
|
|
5265
|
-
|
|
5266
|
-
const
|
|
5267
|
-
|
|
5268
|
-
|
|
5269
|
-
|
|
5270
|
-
|
|
5271
|
-
|
|
5272
|
-
|
|
5273
|
-
|
|
5274
|
-
|
|
5275
|
-
|
|
5271
|
+
const bindLayout = () => {
|
|
5272
|
+
const p = layoutService?.panelInfo
|
|
5273
|
+
if (!p?.subscribe) return
|
|
5274
|
+
const sync = () => {
|
|
5275
|
+
const a = (p.getSnapshot ? p.getSnapshot() : p)?.activePanelId
|
|
5276
|
+
if (a === 'kanban' && !toggle.isOpen()) toggle.set(true)
|
|
5277
|
+
else if (a !== 'kanban' && a !== undefined && toggle.isOpen()) toggle.set(false)
|
|
5278
|
+
}
|
|
5279
|
+
sync()
|
|
5280
|
+
if (typeof ctx?.effect === 'function') ctx.effect(() => p.subscribe(sync), 'dsh-kanban: layout')
|
|
5281
|
+
else p.subscribe(sync)
|
|
5276
5282
|
}
|
|
5283
|
+
if (typeof ctx?.inject === 'function') {
|
|
5284
|
+
try { ctx.inject(['layout'], (sc) => { layoutService = sc?.layout || null; bindLayout() }) } catch (_) { /* bestEffort: optional layout */ }
|
|
5285
|
+
} else if (ctx?.layout) { layoutService = ctx.layout; bindLayout() }
|
|
5277
5286
|
ctx.effect(() => {
|
|
5278
5287
|
const off = [mountSidebarEntry(ctx, toggle, fallbackT('section.label')), mountBoard(ctx, toggle)]
|
|
5279
5288
|
return () => { for (const fn of off) fn() }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goodandready/dsh-kanban",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.43",
|
|
4
4
|
"description": "Visual Kanban board for DeepSeek Harness: Gitea and GitHub-backed tasks, workflow columns, and a dedicated agent session per task.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -50,7 +50,8 @@
|
|
|
50
50
|
"inject": [
|
|
51
51
|
"@deepseek-ai/dsh-client-locale",
|
|
52
52
|
"@deepseek-ai/dsh-client-ui-settings",
|
|
53
|
-
"@deepseek-ai/dsh-client-ui-slots"
|
|
53
|
+
"@deepseek-ai/dsh-client-ui-slots",
|
|
54
|
+
"@deepseek-ai/dsh-client-ui-layout"
|
|
54
55
|
]
|
|
55
56
|
}
|
|
56
57
|
},
|