dsh-task-ledger 0.1.13 → 0.2.0

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/README.md CHANGED
@@ -79,7 +79,7 @@ The skill only loads when a request matches an explicit task intent, and "should
79
79
  ```markdown
80
80
  - **Every piece of task progress, work item and work log (create / advance / query / close) goes through the `task-ledger` skill**; answer progress and history questions from it, never from conversation memory or a hand-rolled list.
81
81
  - **Creation anchor**: hand something to `task-ledger` only when the user explicitly asks for a new task ("open a task", "log this first", "create a task"). Questions, queries, discussion and small incidental edits do not count — ask when unsure, and never create a task without an explicit instruction.
82
- - **Ask in passing**: when the user is pushing forward work that spans turns (this turn ends with actions still on your plate) and has never mentioned tracking it, ask once after answering: "你现在这个任务是需要帮你建一个台账吗?(如果无需,忽略这句话,也不用去回复。)" Once asked in a session, do not ask again; no reply means ignore it.
82
+ - **Ask in passing**: when the user is pushing forward work that spans turns (this turn ends with actions still on your plate) and has never mentioned tracking it, ask once after answering: "Want me to open a ledger for this task? (Ignore this if not needed — no reply necessary.)" Once asked in a session, do not ask again; no reply means ignore it.
83
83
  ```
84
84
 
85
85
  Without it the skill still works — it just acts only when you mention the task yourself.
package/dist/client.js CHANGED
@@ -55930,6 +55930,20 @@ window.__ModuleLoader__.load({
55930
55930
  settingsFlow3Todo: "在办:执行中的任务与待认领项",
55931
55931
  settingsFlow3History: "历史:本项目已结案的任务数量",
55932
55932
  settingsFlow3Stats: "设置:多 Agent 安装、台账目录管理",
55933
+ settingsAgentsTitle: "在其他 Agent 中使用",
55934
+ settingsAgentsHint: "如您有多个 Agent 工具,可以在各自的 Agent 中安装这个 Skill 记录台账,再由此看板统一查看管理。",
55935
+ settingsAgentsLead: "同一份 skill 装在其他 Agent 上,记录的仍是这个项目的台账,看板一并汇总。",
55936
+ settingsAgentsStep1: "安装 Skill",
55937
+ settingsAgentsStep1Note: "命令会自动识别本机已装的 Agent(Claude Code、Codex、CodeBuddy 等),写进各自的技能目录。",
55938
+ settingsAgentsPromptLabel: "也可以把这句话发给任意 Agent,让它自己装:",
55939
+ settingsAgentsPrompt: "帮我安装 task-ledger 这个 skill(npm 包名 task-ledger,GitHub 包名 cq-guojia/dsh-task-ledger)。",
55940
+ settingsAgentsStep2: "注入规则文件(可选)",
55941
+ settingsAgentsStep2Note: "把下面这段加进项目根目录的 AGENTS.md,让 Agent 按台账口径跟进任务:",
55942
+ settingsAgentsStep3: "加进看板",
55943
+ settingsAgentsStep3Note: "在上面的「台账目录」点「添加目录」,选中项目根目录,看板就会汇总它。",
55944
+ settingsAgentsSupport: "Claude Code、Cursor、Codex、CodeBuddy、Trae,以及任何加载 SKILL.md 的 Agent 工具。",
55945
+ settingsAgentsCopied: "已复制",
55946
+ settingsCopy: "复制",
55933
55947
  settingsColDir: "台账名",
55934
55948
  settingsColPath: "路径",
55935
55949
  settingsColActions: "操作",
@@ -56249,6 +56263,20 @@ window.__ModuleLoader__.load({
56249
56263
  settingsFlow3Todo: "In flight: running tasks and unclaimed items",
56250
56264
  settingsFlow3History: "History: closed task count for this project",
56251
56265
  settingsFlow3Stats: "Settings: multi-agent install, ledger folder management",
56266
+ settingsAgentsTitle: "Use from other agents",
56267
+ settingsAgentsHint: "If you use several agent tools, install this Skill in each of them to keep the ledger, then review and manage everything on this board.",
56268
+ settingsAgentsLead: "The same skill installed in another agent still writes to this project's ledger, and the board sums it up.",
56269
+ settingsAgentsStep1: "Install the skill",
56270
+ settingsAgentsStep1Note: "The command detects the agents installed on this machine (Claude Code, Codex, CodeBuddy, …) and writes into each skills directory.",
56271
+ settingsAgentsPromptLabel: "Or send this line to any agent and let it install:",
56272
+ settingsAgentsPrompt: "Install the task-ledger skill (npm package task-ledger, GitHub repo cq-guojia/dsh-task-ledger).",
56273
+ settingsAgentsStep2: "Inject the rules (optional)",
56274
+ settingsAgentsStep2Note: "Add this to AGENTS.md in the project root so the agent follows the ledger convention:",
56275
+ settingsAgentsStep3: "Add it to the board",
56276
+ settingsAgentsStep3Note: "Under \"Ledger folders\" above, click \"Add folder\" and pick the project root; the board will include it.",
56277
+ settingsAgentsSupport: "Claude Code, Cursor, Codex, CodeBuddy, Trae, and any agent tool that loads SKILL.md.",
56278
+ settingsAgentsCopied: "Copied",
56279
+ settingsCopy: "Copy",
56252
56280
  settingsColDir: "Ledger name",
56253
56281
  settingsColPath: "Path",
56254
56282
  settingsColActions: "Actions",
@@ -64137,6 +64165,38 @@ body[data-ds-dark-theme]{
64137
64165
  /* 可编辑文案框:高度由核心 CodeEditor 的 height 给,这里只补间距与保存中的锁定态 */
64138
64166
  .dtl-set__rules-editor{margin-bottom:var(--dtl-space-2);}
64139
64167
  .dtl-set__rules-editor--busy{opacity:.65;pointer-events:none;}
64168
+ /* 「在其他 Agent 中使用」(2026-11-11):三步,步与步之间一条横线。
64169
+ 命令单行省略(全文靠 Tip 气泡),复制钮紧贴右缘。 */
64170
+ .dtl-set__agents-lead{margin:0 0 var(--dtl-space-3);font-size:var(--dtl-font-md);
64171
+ line-height:var(--dtl-line-md);color:var(--dtl-fg-2);}
64172
+ .dtl-set__step + .dtl-set__step{margin-top:var(--dtl-space-4);padding-top:var(--dtl-space-4);
64173
+ border-top:1px solid var(--dtl-border);}
64174
+ .dtl-set__stephead{display:flex;align-items:center;gap:var(--dtl-space-2);
64175
+ margin-bottom:var(--dtl-space-2);}
64176
+ .dtl-set__stepno{display:inline-flex;align-items:center;justify-content:center;
64177
+ width:20px;height:20px;flex:none;border-radius:50%;
64178
+ background:var(--dtl-business-soft);color:var(--dtl-business);
64179
+ font-size:var(--dtl-font-xs);font-weight:600;}
64180
+ .dtl-set__steptitle{font-size:var(--dtl-font-md);font-weight:600;color:var(--dtl-fg);}
64181
+ .dtl-set__cmd{display:flex;align-items:center;gap:var(--dtl-space-2);
64182
+ padding:var(--dtl-space-2) var(--dtl-space-3);border:1px solid var(--dtl-border);
64183
+ border-radius:var(--dtl-radius-sm);background:var(--dtl-table-head-bg);}
64184
+ .dtl-set__cmdtext{flex:1 1 auto;min-width:0;font-family:var(--dtl-font-mono);
64185
+ font-size:var(--dtl-font-sm);color:var(--dtl-fg);white-space:nowrap;
64186
+ overflow:hidden;text-overflow:ellipsis;}
64187
+ .dtl-set__agents-note{margin:var(--dtl-space-2) 0 0;font-size:var(--dtl-font-sm);
64188
+ line-height:var(--dtl-line-sm);color:var(--dtl-fg-3);}
64189
+ /* 复制钮钉在框的**右上角**(用户 2026-11-11):距上、右同为 space-2。
64190
+ 正文右侧留出按钮位与间隙;单行时正文行高 = 按钮高 ⇒ 上 8 下 8,视觉上仍是垂直居中。 */
64191
+ .dtl-set__prompt{position:relative;margin-top:var(--dtl-space-2);
64192
+ padding:var(--dtl-space-2) calc(var(--dtl-space-2) * 2 + 24px) var(--dtl-space-2) var(--dtl-space-3);
64193
+ border:1px dashed var(--dtl-border-strong);border-radius:var(--dtl-radius-sm);}
64194
+ .dtl-set__promptact{position:absolute;top:var(--dtl-space-2);right:var(--dtl-space-2);}
64195
+ .dtl-set__promptbody{display:block;min-height:24px;font-size:var(--dtl-font-sm);
64196
+ line-height:24px;color:var(--dtl-fg-2);white-space:pre-wrap;word-break:break-word;}
64197
+ .dtl-set__agents-support{margin:var(--dtl-space-4) 0 0;padding-top:var(--dtl-space-3);
64198
+ border-top:1px solid var(--dtl-border-faint);font-size:var(--dtl-font-sm);
64199
+ line-height:var(--dtl-line-sm);color:var(--dtl-fg-3);}
64140
64200
 
64141
64201
  /* hero:左栏**定宽 320px**(用户 2026-11-01:别跟着窗口伸缩),右栏吃掉剩下的宽度。
64142
64202
  两侧**等高**(用户 2026-11-01:右边流程要跟左边身份卡一样高):
@@ -67447,6 +67507,9 @@ body[data-ds-dark-theme]{
67447
67507
  }));
67448
67508
  /** 本轮的写动作一律空着(界面先定,方法下一轮接)。 */
67449
67509
  const notYet = () => {};
67510
+ /** skills CLI 只认 git / 下载 URL(实测 `add task-ledger` 会当 git 仓库克隆并失败),
67511
+ * 所以走仓库坐标;CLI 自己会挑出 monorepo 里的这个 skill(实测只列一个)。 */
67512
+ const SKILL_ADD = "npx skills add cq-guojia/dsh-task-ledger -g";
67450
67513
  /** 名册 → 表格行(用户 2026-11-02):多个工作区都有的身份合并成一行、工作区列写「通用用户」,
67451
67514
  * 只在一个工作区出现的按各自工作区名;通用的排前面。 */
67452
67515
  function rosterRows(roster, sharedTitle) {
@@ -67716,14 +67779,14 @@ body[data-ds-dark-theme]{
67716
67779
  cancelText: t("settingsCancel")
67717
67780
  })) claim(row.uuid, row.workspaceId, row.name);
67718
67781
  };
67719
- const copyPath = (path) => {
67782
+ const copyText = (value, done) => {
67720
67783
  const clip = navigator.clipboard;
67721
67784
  if (clip === void 0) return;
67722
- clip.writeText(path).then(() => {
67723
- setCopied(path);
67724
- notify(t("settingsPathCopied"), { variant: "success" });
67785
+ clip.writeText(value).then(() => {
67786
+ setCopied(value);
67787
+ notify(done, { variant: "success" });
67725
67788
  window.setTimeout(() => {
67726
- setCopied((current) => current === path ? null : current);
67789
+ setCopied((current) => current === value ? null : current);
67727
67790
  }, 1500);
67728
67791
  }, notYet);
67729
67792
  };
@@ -68044,7 +68107,7 @@ body[data-ds-dark-theme]{
68044
68107
  size: "sm",
68045
68108
  className: "dtl-dir__copy",
68046
68109
  onClick: () => {
68047
- copyPath(dir.path);
68110
+ copyText(dir.path, t("settingsPathCopied"));
68048
68111
  }
68049
68112
  })
68050
68113
  })),
@@ -68117,6 +68180,31 @@ body[data-ds-dark-theme]{
68117
68180
  ],
68118
68181
  rows: dirRows
68119
68182
  });
68183
+ const copyButton = (value) => (0, react$1.createElement)(Tip, {
68184
+ label: t("settingsCopy"),
68185
+ children: (0, react$1.createElement)(IconButton, {
68186
+ icon: copied === value ? (0, react$1.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineRegular, { size: 14 }) : (0, react$1.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconCopyOutlineRegular, { size: 14 }),
68187
+ label: t("settingsCopy"),
68188
+ size: "sm",
68189
+ onClick: () => {
68190
+ copyText(value, t("settingsAgentsCopied"));
68191
+ }
68192
+ })
68193
+ });
68194
+ /** 一块可复制的正文(提示词 / 规则片段共用):复制钮钉在框的右上角(CSS 绝对定位,
68195
+ * 距上、右同距);单行内容靠正文的 min-height 让它看起来仍是垂直居中。 */
68196
+ const copyBlock = (text) => (0, react$1.createElement)("div", { className: "dtl-set__prompt" }, (0, react$1.createElement)("span", { className: "dtl-set__promptbody" }, text), (0, react$1.createElement)("div", { className: "dtl-set__promptact" }, copyButton(text)));
68197
+ const step = (no, title, body) => (0, react$1.createElement)("div", { className: "dtl-set__step" }, (0, react$1.createElement)("div", { className: "dtl-set__stephead" }, (0, react$1.createElement)("span", { className: "dtl-set__stepno" }, no), (0, react$1.createElement)("span", { className: "dtl-set__steptitle" }, title)), body);
68198
+ const note = (text) => (0, react$1.createElement)("p", { className: "dtl-set__agents-note" }, text);
68199
+ const prompt = t("settingsAgentsPrompt");
68200
+ const agentsBlock = (0, react$1.createElement)(Surface, { padding: "lg" }, (0, react$1.createElement)(SectionHead, {
68201
+ icon: (0, react$1.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconDownloadOutlineRegular, { size: 16 }),
68202
+ title: (0, react$1.createElement)("span", { className: "dtl-set__rules-title" }, t("settingsAgentsTitle"), (0, react$1.createElement)(FieldHint, {
68203
+ text: t("settingsAgentsHint"),
68204
+ side: "top",
68205
+ maxWidth: 420
68206
+ }))
68207
+ }), (0, react$1.createElement)("div", { className: "dtl-set__body" }, (0, react$1.createElement)("p", { className: "dtl-set__agents-lead" }, t("settingsAgentsLead")), step("1", t("settingsAgentsStep1"), (0, react$1.createElement)(react$1.Fragment, null, (0, react$1.createElement)("div", { className: "dtl-set__cmd" }, (0, react$1.createElement)("code", { className: "dtl-set__cmdtext" }, SKILL_ADD), copyButton(SKILL_ADD)), note(t("settingsAgentsStep1Note")), note(t("settingsAgentsPromptLabel")), copyBlock(prompt))), step("2", t("settingsAgentsStep2"), (0, react$1.createElement)(react$1.Fragment, null, note(t("settingsAgentsStep2Note")), copyBlock(rulesDefaultText === "" ? rulesText : rulesDefaultText))), step("3", t("settingsAgentsStep3"), note(t("settingsAgentsStep3Note"))), (0, react$1.createElement)("p", { className: "dtl-set__agents-support" }, t("settingsAgentsSupport"))));
68120
68208
  const userModal = userOpen ? (0, react$1.createElement)(Modal, {
68121
68209
  title: t("settingsUserModalTitle"),
68122
68210
  width: "576px",
@@ -68321,7 +68409,7 @@ body[data-ds-dark-theme]{
68321
68409
  onClick: () => {
68322
68410
  writeRules({ action: "reset" });
68323
68411
  }
68324
- }, t("settingsRulesReset"))), rulesError !== null ? (0, react$1.createElement)("p", null, t("settingsRulesFailed", { message: rulesError })) : null)), userModal, forgetDialog);
68412
+ }, t("settingsRulesReset"))), rulesError !== null ? (0, react$1.createElement)("p", null, t("settingsRulesFailed", { message: rulesError })) : null)), agentsBlock, userModal, forgetDialog);
68325
68413
  }
68326
68414
  //#endregion
68327
68415
  //#region src/client/board-home.ts
@@ -68817,7 +68905,7 @@ body[data-ds-dark-theme]{
68817
68905
  variant: "outline",
68818
68906
  size: "md",
68819
68907
  onClick: onBack
68820
- }, `← ${t("backToConversation")}`), (0, react$1.createElement)("div", { style: titleStyle }, t("panelTitle"), (0, react$1.createElement)("span", { style: buildTagStyle }, `v0.1.13 261111-113734-119`))), (0, react$1.createElement)("div", { style: {
68908
+ }, `← ${t("backToConversation")}`), (0, react$1.createElement)("div", { style: titleStyle }, t("panelTitle"), (0, react$1.createElement)("span", { style: buildTagStyle }, `v0.2.0 261111-125914-503`))), (0, react$1.createElement)("div", { style: {
68821
68909
  display: "flex",
68822
68910
  alignItems: "center",
68823
68911
  gap: "var(--dtl-space-3)"