@suifei/dsh-ai-team 0.3.27 → 0.3.29
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 +11 -0
- package/client.js +23 -3
- package/index.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.3.29 — 2026-11-10
|
|
4
|
+
|
|
5
|
+
- 看板「已完成」默认展开,不再先折叠成「展开全部」;
|
|
6
|
+
- 看板各列按 Task number 倒序,最新任务优先显示;
|
|
7
|
+
- 收件箱决策支持逐条「采纳」与「全部采纳建议」,建议直接填入可编辑输入框。
|
|
8
|
+
|
|
9
|
+
## 0.3.28 — 2026-11-10
|
|
10
|
+
|
|
11
|
+
- 收件箱决策项增加逐条「采纳」与「全部采纳建议」;建议直接填入可编辑输入框,不再手抄;
|
|
12
|
+
- 提交仍要求所有问题有答案,采纳后可继续修改。
|
|
13
|
+
|
|
3
14
|
## 0.3.27 — 2026-11-10
|
|
4
15
|
|
|
5
16
|
- 主对话「任务」模式拆成标题 + 验收标准;不再把 Human 原话直接当 resultDefinition;
|
package/client.js
CHANGED
|
@@ -115,6 +115,9 @@ window.__ModuleLoader__.load({
|
|
|
115
115
|
decisionChoose: '请选择…',
|
|
116
116
|
decisionAnswer: '填写你的决定',
|
|
117
117
|
decisionRecommend: '推荐',
|
|
118
|
+
decisionAdopt: '采纳',
|
|
119
|
+
decisionAdoptAll: '全部采纳建议',
|
|
120
|
+
decisionAdoptHint: '建议可直接采纳,再按需修改',
|
|
118
121
|
decisionSubmit: '提交决策',
|
|
119
122
|
decisionSubmitted: '决策已提交给团队。',
|
|
120
123
|
inboxEmptyAction: '看任务看板',
|
|
@@ -427,6 +430,9 @@ window.__ModuleLoader__.load({
|
|
|
427
430
|
decisionChoose: 'Choose…',
|
|
428
431
|
decisionAnswer: 'Write your decision',
|
|
429
432
|
decisionRecommend: 'Recommended',
|
|
433
|
+
decisionAdopt: 'Adopt',
|
|
434
|
+
decisionAdoptAll: 'Adopt all suggestions',
|
|
435
|
+
decisionAdoptHint: 'Adopt a suggestion, then edit if needed',
|
|
430
436
|
decisionSubmit: 'Submit decision',
|
|
431
437
|
decisionSubmitted: 'Decision sent to the team.',
|
|
432
438
|
inboxEmptyAction: 'Open the board',
|
|
@@ -980,6 +986,10 @@ window.__ModuleLoader__.load({
|
|
|
980
986
|
.at-inboxoptions { display: block; color: var(--dsw-alias-label-tertiary); font-size: 11px; }
|
|
981
987
|
.at-inboxrecommend { display: block; color: var(--dsw-alias-state-business-primary); font-size: 11px; }
|
|
982
988
|
.at-decision { display: flex; flex-direction: column; gap: 8px; margin: 6px 0 4px; }
|
|
989
|
+
.at-decisionhead { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
|
|
990
|
+
.at-decisionhint { color: var(--dsw-alias-label-tertiary); font-size: 11px; }
|
|
991
|
+
.at-decisionrecommend { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 3px; color: var(--dsw-alias-state-business-primary); font-size: 11px; }
|
|
992
|
+
.at-adopt { flex: 0 0 auto; padding: 0; border: 0; background: transparent; color: var(--dsw-alias-state-business-primary); font: inherit; font-size: 11px; cursor: pointer; text-decoration: underline; }
|
|
983
993
|
.at-decisionselect, .at-decisioninput { width: 100%; margin-top: 4px; padding: 4px 6px; border: 1px solid var(--dsw-alias-border-l2); border-radius: var(--dsw-radius-sm); background: var(--dsw-alias-bg-base); color: var(--dsw-alias-label-primary); font: inherit; font-size: 12px; line-height: 18px; }
|
|
984
994
|
.at-decision .at-btn { align-self: flex-start; }
|
|
985
995
|
.at-inboxtitle { color: var(--dsw-alias-label-primary); font-size: 13px; line-height: 20px; }
|
|
@@ -1505,7 +1515,9 @@ window.__ModuleLoader__.load({
|
|
|
1505
1515
|
}
|
|
1506
1516
|
|
|
1507
1517
|
function Board({ t, tasks, selected, follows, doneOpen, onToggleDone, onOpen, onToggleFollow, filter, onClearFilter, q1Extra, onBackMain }) {
|
|
1508
|
-
const filtered = filter === 'all' ? tasks : tasks.filter((task) => matchesFilter(task, filter))
|
|
1518
|
+
const filtered = (filter === 'all' ? tasks : tasks.filter((task) => matchesFilter(task, filter)))
|
|
1519
|
+
.slice()
|
|
1520
|
+
.sort((left, right) => (right.number ?? 0) - (left.number ?? 0));
|
|
1509
1521
|
const filterName = filter === 'all' ? '' : t(filter === 'q1' ? 'q1Title' : filter === 'q2' ? 'q2Title' : filter === 'q3' ? 'q3Title' : 'q4Title');
|
|
1510
1522
|
const bar = filter === 'all' ? null : h('div', { className: 'at-boardbar', role: 'status' },
|
|
1511
1523
|
h('span', { className: 'at-filterchip' }, tf(t, 'filterLabel', { name: filterName }) + ' · ' + tf(t, 'itemCount', { n: filtered.length })),
|
|
@@ -1650,6 +1662,9 @@ window.__ModuleLoader__.load({
|
|
|
1650
1662
|
const [answers, setAnswers] = React.useState(() => questions.map(() => ''));
|
|
1651
1663
|
const [busy, setBusy] = React.useState(false);
|
|
1652
1664
|
const setAnswer = (index, value) => setAnswers((prev) => prev.map((entry, i) => i === index ? value : entry));
|
|
1665
|
+
const recommendations = questions.map((question) => typeof question.recommendation === 'string' ? question.recommendation.trim() : '');
|
|
1666
|
+
const hasRecommendations = recommendations.some((value) => value !== '');
|
|
1667
|
+
const adoptAll = () => setAnswers((prev) => prev.map((entry, index) => recommendations[index] || entry));
|
|
1653
1668
|
const complete = questions.every((question, index) => answers[index].trim() !== '');
|
|
1654
1669
|
const submit = async () => {
|
|
1655
1670
|
if (!complete || busy) return;
|
|
@@ -1661,6 +1676,9 @@ window.__ModuleLoader__.load({
|
|
|
1661
1676
|
}
|
|
1662
1677
|
};
|
|
1663
1678
|
return h('div', { className: 'at-decision' },
|
|
1679
|
+
hasRecommendations ? h('div', { className: 'at-decisionhead' },
|
|
1680
|
+
h('span', { className: 'at-decisionhint' }, t('decisionAdoptHint')),
|
|
1681
|
+
h('button', { className: 'at-btn at-btn-small', type: 'button', onClick: adoptAll }, t('decisionAdoptAll'))) : null,
|
|
1664
1682
|
h('ol', { className: 'at-inboxquestions' }, questions.map((question, index) => h('li', { key: question.id ?? index },
|
|
1665
1683
|
h('span', { className: 'at-inboxquestion' }, question.text),
|
|
1666
1684
|
Array.isArray(question.options) && question.options.length
|
|
@@ -1668,7 +1686,9 @@ window.__ModuleLoader__.load({
|
|
|
1668
1686
|
h('option', { value: '' }, t('decisionChoose')),
|
|
1669
1687
|
question.options.map((option) => h('option', { key: option, value: option }, option)))
|
|
1670
1688
|
: h('input', { className: 'at-decisioninput', value: answers[index], placeholder: question.recommendation ?? t('decisionAnswer'), onChange: (event) => setAnswer(index, event.target.value) }),
|
|
1671
|
-
question.recommendation ? h('
|
|
1689
|
+
question.recommendation ? h('div', { className: 'at-decisionrecommend' },
|
|
1690
|
+
h('span', null, t('decisionRecommend') + ':' + question.recommendation),
|
|
1691
|
+
h('button', { className: 'at-adopt', type: 'button', onClick: () => setAnswer(index, question.recommendation) }, t('decisionAdopt'))) : null))),
|
|
1672
1692
|
h('button', { className: 'at-btn at-btn-primary at-btn-small', type: 'button', disabled: !complete || busy, onClick: submit }, busy ? t('saving') : t('decisionSubmit')));
|
|
1673
1693
|
}
|
|
1674
1694
|
|
|
@@ -2162,7 +2182,7 @@ window.__ModuleLoader__.load({
|
|
|
2162
2182
|
const [rightNote, setRightNote] = React.useState('');
|
|
2163
2183
|
const [reply, setReply] = React.useState('');
|
|
2164
2184
|
const [follows, setFollows] = React.useState({});
|
|
2165
|
-
const [doneOpen, setDoneOpen] = React.useState(
|
|
2185
|
+
const [doneOpen, setDoneOpen] = React.useState(true);
|
|
2166
2186
|
const [boardFilter, setBoardFilter] = React.useState('all');
|
|
2167
2187
|
const [converting, setConverting] = React.useState(false);
|
|
2168
2188
|
const [cTitle, setCTitle] = React.useState('');
|
package/index.js
CHANGED
|
@@ -34,7 +34,7 @@ export const name = 'ai-team';
|
|
|
34
34
|
/** The workbench only makes sense where the Web carrier exists. */
|
|
35
35
|
export const inject = ['webServer', 'permissionPresets', 'sandboxPolicy'];
|
|
36
36
|
|
|
37
|
-
const VERSION = '0.3.
|
|
37
|
+
const VERSION = '0.3.29';
|
|
38
38
|
const PROJECT_ID = 'prj_main';
|
|
39
39
|
const HUMAN_ID = 'mem_human';
|
|
40
40
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@suifei/dsh-ai-team",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.29",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "文渊阁 (Wenyuan Pavilion) — AI Team mode for DeepSeek Harness: concurrent projects, owned tasks, threads, inbox and an append-only team ledger",
|
|
6
6
|
"license": "MIT",
|