dsh-task-ledger 0.0.67 → 0.0.69
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/dist/client.js +46 -30
- package/dist/client.js.map +1 -1
- package/dist/host/services/home.service.d.ts +1 -1
- package/dist/host/services/home.service.js +11 -7
- package/dist/host/types.d.ts +6 -4
- package/package.json +1 -1
- package/skill/README.md +1 -1
- package/skill/SKILL.md +2 -2
- package/skill/package.json +1 -1
- package/skill/references/state-model.md +2 -2
|
@@ -2,7 +2,7 @@ import { type DegradedInfo } from '../errors.js';
|
|
|
2
2
|
import type { BoardSnapshot, LedgerWorkspace, TaskScope } from '../types.js';
|
|
3
3
|
/** 停滞阈值:进行中且 updated 至今满这么多天没更新(2026-10-19 拍板,显示级)。 */
|
|
4
4
|
export declare const STALE_DAYS = 3;
|
|
5
|
-
/**
|
|
5
|
+
/** 逾期阈值:进行中且 started 至今满这么多天还没做完——中途更新不影响(2026-10-19 拍板 7 → 14 天)。 */
|
|
6
6
|
export declare const OVERDUE_DAYS = 14;
|
|
7
7
|
/** 积压阈值:待认领且 created 至今满这么多天还没人接(2026-10-19 拍板)。 */
|
|
8
8
|
export declare const BACKLOG_DAYS = 30;
|
|
@@ -10,7 +10,7 @@ import { settleWorkspaces } from '../errors.js';
|
|
|
10
10
|
import { daysSince } from './dates.js';
|
|
11
11
|
/** 停滞阈值:进行中且 updated 至今满这么多天没更新(2026-10-19 拍板,显示级)。 */
|
|
12
12
|
export const STALE_DAYS = 3;
|
|
13
|
-
/**
|
|
13
|
+
/** 逾期阈值:进行中且 started 至今满这么多天还没做完——中途更新不影响(2026-10-19 拍板 7 → 14 天)。 */
|
|
14
14
|
export const OVERDUE_DAYS = 14;
|
|
15
15
|
/** 积压阈值:待认领且 created 至今满这么多天还没人接(2026-10-19 拍板)。 */
|
|
16
16
|
export const BACKLOG_DAYS = 30;
|
|
@@ -25,7 +25,7 @@ export function computeSnapshot(scopes, now) {
|
|
|
25
25
|
// blocked 只是旧数据(新任务不可能再有);读侧一律当进行中
|
|
26
26
|
const working = task.status === 'doing' || task.status === 'blocked';
|
|
27
27
|
const ageDays = working ? daysSince(task.started ?? task.created, now) : null;
|
|
28
|
-
//
|
|
28
|
+
// 停滞看「最后更新」,逾期看「接任务至今」,积压看「创建至今还没人认领」——三个不同的问题,互不覆盖
|
|
29
29
|
const idleDays = working ? daysSince(task.updated ?? task.started ?? task.created, now) : null;
|
|
30
30
|
const idleOpen = task.status === 'open' ? daysSince(task.created, now) : null;
|
|
31
31
|
return {
|
|
@@ -44,15 +44,19 @@ export function computeSnapshot(scopes, now) {
|
|
|
44
44
|
const identities = {};
|
|
45
45
|
for (const scope of scopes)
|
|
46
46
|
identities[scope.workspace.id] = scope.identity;
|
|
47
|
-
const
|
|
47
|
+
const mine = (task) => task.owner != null && task.owner === identities[task.workspace.id];
|
|
48
|
+
const backlogTasks = withMeta.filter((task) => task.backlog);
|
|
49
|
+
const overdueTasks = withMeta.filter((task) => task.overdue);
|
|
50
|
+
const staleTasks = withMeta.filter((task) => task.stale);
|
|
48
51
|
const stats = {
|
|
49
52
|
myActive,
|
|
50
|
-
myOverdue,
|
|
53
|
+
myOverdue: overdueTasks.filter(mine).length,
|
|
54
|
+
myStale: staleTasks.filter(mine).length,
|
|
51
55
|
open: openTasks.length,
|
|
52
56
|
doing: withMeta.filter((task) => task.status === 'doing' || task.status === 'blocked').length,
|
|
53
|
-
overdue:
|
|
54
|
-
stale:
|
|
55
|
-
backlog:
|
|
57
|
+
overdue: overdueTasks.length,
|
|
58
|
+
stale: staleTasks.length,
|
|
59
|
+
backlog: backlogTasks.length,
|
|
56
60
|
staleDays: STALE_DAYS,
|
|
57
61
|
overdueDays: OVERDUE_DAYS,
|
|
58
62
|
backlogDays: BACKLOG_DAYS,
|
package/dist/host/types.d.ts
CHANGED
|
@@ -106,19 +106,21 @@ export interface ClosedSummary {
|
|
|
106
106
|
export interface BoardStats {
|
|
107
107
|
/** 我的 doing(旧数据里的 blocked 也算进行中)。 */
|
|
108
108
|
readonly myActive: number;
|
|
109
|
-
/**
|
|
109
|
+
/** 我的逾期(接任务至今满 OVERDUE_DAYS 天未结案)。 */
|
|
110
110
|
readonly myOverdue: number;
|
|
111
|
+
/** 我的停滞(我的进行中里 updated 满 STALE_DAYS 天没更新的)。 */
|
|
112
|
+
readonly myStale: number;
|
|
111
113
|
/** 待认领(open)。 */
|
|
112
114
|
readonly open: number;
|
|
113
115
|
/** 全部 doing(旧数据里的 blocked 也算进行中)。 */
|
|
114
116
|
readonly doing: number;
|
|
115
|
-
/**
|
|
117
|
+
/** 全部逾期——按时间判定,不是状态。 */
|
|
116
118
|
readonly overdue: number;
|
|
117
119
|
/** 停滞 = 进行中且 updated 至今满 STALE_DAYS 天没更新。 */
|
|
118
120
|
readonly stale: number;
|
|
119
121
|
/** 积压 = 待认领且 created 至今满 BACKLOG_DAYS 天没人接。 */
|
|
120
122
|
readonly backlog: number;
|
|
121
|
-
/** 停滞 /
|
|
123
|
+
/** 停滞 / 逾期 / 积压阈值(天)——随响应下发,界面文案不硬编码(单一真源)。 */
|
|
122
124
|
readonly staleDays: number;
|
|
123
125
|
readonly overdueDays: number;
|
|
124
126
|
readonly backlogDays: number;
|
|
@@ -135,7 +137,7 @@ export interface BoardTask extends TaskRow {
|
|
|
135
137
|
readonly waitingDays: number | null;
|
|
136
138
|
/** 停滞标记:updated 至今满 STALE_DAYS 天没更新(与 ageDays 无关)。 */
|
|
137
139
|
readonly stale: boolean;
|
|
138
|
-
/**
|
|
140
|
+
/** 逾期标记:接任务至今满 OVERDUE_DAYS 天还没做完(不看中途更新)。 */
|
|
139
141
|
readonly overdue: boolean;
|
|
140
142
|
/** 积压标记:待认领且创建至今满 BACKLOG_DAYS 天没人接。 */
|
|
141
143
|
readonly backlog: boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-task-ledger",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.69",
|
|
4
4
|
"description": "Task ledger board for dsh (DeepSeek Harness): read-only board over task-ledger skill workspaces. The task-ledger skill is bundled — install the plugin, get the skill globally.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"deepseek",
|
package/skill/README.md
CHANGED
package/skill/SKILL.md
CHANGED
|
@@ -34,7 +34,7 @@ allowed-tools: Read,Write,Bash,Grep
|
|
|
34
34
|
| 「谁在做 X」「有哪些在办」 | `list`;在等认领的加 `--status open` |
|
|
35
35
|
| 「这个任务到哪一步了」「这轮做了什么」 | `show --id`(任务 JSON + worklog 全文) |
|
|
36
36
|
| 「某件老活什么时候做的」「谁做过哪些活」 | `history`(可按 `--owner` / `--since` 筛) |
|
|
37
|
-
| 「哪些任务停太久」 | `list --json`:`updated` 满 3 天=停滞、`started` 满 14
|
|
37
|
+
| 「哪些任务停太久」 | `list --json`:`updated` 满 3 天=停滞、`started` 满 14 天=逾期、`created` 满 30 天仍 `open`=积压(看板算,别改状态) |
|
|
38
38
|
| 「新建一个任务」 | `new`(`--self` = 建完即认领) |
|
|
39
39
|
| 「这活我领了」 | `claim`(只对 `open` 有效) |
|
|
40
40
|
| 「开始做 / 接着做 X」 | 还是 `open` 就先 `claim`;已是 `doing` 就直接改正文 + `log` |
|
|
@@ -61,7 +61,7 @@ python3 <本 SKILL.md 所在目录>/scripts/progress.py <子命令> --repo <当
|
|
|
61
61
|
|
|
62
62
|
## 铁律
|
|
63
63
|
|
|
64
|
-
- **状态只有 `open` / `doing`**;`done` 只能由 `close` 产生。**没有 `blocked`
|
|
64
|
+
- **状态只有 `open` / `doing`**;`done` 只能由 `close` 产生。**没有 `blocked` 状态**:逾期 = `started` 满 14 天、停滞 = `updated` 满 3 天、积压 = `created` 满 30 天且仍 `open`,都由看板按时间算,`progress.json` 里不存、不手改;卡在哪写进正文。
|
|
65
65
|
- **`log` 就是刷新 `updated` 的动作**:该记不记,任务会被看板标成停滞。
|
|
66
66
|
- **owner = 当前 `git config user.name`**,不能由外部传入;读不到就报错(先让用户配 git)。**只能动自己名下**的任务(`open` 的先 `claim`),不是你的直接拒绝 —— 不要绕过脚本改 JSON。
|
|
67
67
|
- **换人只能「释放 → 认领」**:skill 不提供交接,随便写的名字都是假的。
|
package/skill/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "task-ledger",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.5",
|
|
4
4
|
"description": "Task-ledger skill for coding agents: per-workspace progress tracking (ledger/progress.json, history, worklog) driven by a CLI script. Standalone install for CodeBuddy and other agents; also bundled inside the dsh-task-ledger DSH plugin.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"skill",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 状态与时间模型
|
|
2
2
|
|
|
3
|
-
> TL;DR:状态只有 `open` / `doing`;`done` 由 `close`
|
|
3
|
+
> TL;DR:状态只有 `open` / `doing`;`done` 由 `close` 产生。逾期 = `started` 满 14 天、停滞 = `updated` 满 3 天、积压 = `created` 满 30 天仍 `open`,看板算、不存字段。`updated` 由 `new/claim/set/log` 刷新。owner 只取当前 git 身份。
|
|
4
4
|
|
|
5
5
|
## 状态机
|
|
6
6
|
|
|
@@ -17,7 +17,7 @@ doing ──set --status open──> open # 释放认领,执行记录
|
|
|
17
17
|
| 标记 | 依据 | 阈值 |
|
|
18
18
|
|---|---|---|
|
|
19
19
|
| 积压 | `created`(建了)至今仍 `open`(没人认领) | 满 30 天 |
|
|
20
|
-
|
|
|
20
|
+
| 逾期 | `started`(接任务)至今,中途更新不影响 | 满 14 天 |
|
|
21
21
|
| 停滞 | `updated`(最后推进)至今 | 满 3 天 |
|
|
22
22
|
|
|
23
23
|
- 真源:`packages/plugin/src/host/services/home.service.ts` 的 `BACKLOG_DAYS = 30` / `OVERDUE_DAYS = 14` / `STALE_DAYS = 3`;看板随响应下发三个天数,界面文案不硬编码。
|