惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
M
MIT News - Artificial intelligence
D
Docker
S
SegmentFault 最新的问题
B
Blog
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
腾讯CDC
阮一峰的网络日志
阮一峰的网络日志
U
Unit 42
C
Check Point Blog
GbyAI
GbyAI
美团技术团队
Recent Announcements
Recent Announcements
F
Fortinet All Blogs
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4
fix(workboard): hide archived cards in CLI list by defaul...
ZengWen-DT · 2026-06-24 · via Recent Commits to openclaw:main
Original file line numberDiff line numberDiff line change

@@ -22,7 +22,7 @@ openclaw gateway restart

2222

## Usage

2323
2424

```bash

25-

openclaw workboard list [--board <id>] [--status <status>] [--json]

25+

openclaw workboard list [--board <id>] [--status <status>] [--include-archived] [--json]

2626

openclaw workboard create <title...> [--notes <text>] [--status <status>] [--priority <priority>] [--agent <id>] [--board <id>] [--labels <items>] [--json]

2727

openclaw workboard show <id> [--json]

2828

openclaw workboard dispatch [--url <url>] [--token <token>] [--timeout <ms>] [--json]

@@ -50,11 +50,16 @@ Columns are id prefix, status, priority, board id, optional agent id, and title.

5050
5151

Flags:

5252
53-

| Flag | Purpose |

54-

| ------------------- | ---------------------------------------- |

55-

| `--board <id>` | Limit results to one board namespace |

56-

| `--status <status>` | Limit results to one Workboard status |

57-

| `--json` | Print the full card list as machine JSON |

53+

| Flag | Purpose |

54+

| -------------------- | --------------------------------------------- |

55+

| `--board <id>` | Limit results to one board namespace |

56+

| `--status <status>` | Limit results to one Workboard status |

57+

| `--include-archived` | Include archived cards in compact text output |

58+

| `--json` | Print the full card list as machine JSON |

59+
60+

Compact text output hides archived cards by default so the CLI matches the

61+

`/workboard list` command. Pass `--include-archived` to show them. JSON output

62+

keeps the full card list, including archived cards, for existing automation.

5863
5964

## `create`

6065
Original file line numberDiff line numberDiff line change

@@ -106,6 +106,40 @@ describe("registerWorkboardCli", () => {

106106

expect(showOutput).toContain("[redacted]");

107107

});

108108
109+

it("hides archived cards from text output by default and reveals them with --include-archived", async () => {

110+

const store = new WorkboardStore(createMemoryStore());

111+

await store.create({ title: "Active card" });

112+

const archived = await store.create({ title: "Archived card" });

113+

await store.archive(archived.id, true);

114+

const program = createProgram(store);

115+
116+

const defaultOutput = await captureStdout(async () => {

117+

await program.parseAsync(["workboard", "list"], { from: "user" });

118+

});

119+

const includeOutput = await captureStdout(async () => {

120+

await program.parseAsync(["workboard", "list", "--include-archived"], { from: "user" });

121+

});

122+
123+

expect(defaultOutput).toContain("Active card");

124+

expect(defaultOutput).not.toContain("Archived card");

125+

expect(includeOutput).toContain("Active card");

126+

expect(includeOutput).toContain("Archived card");

127+

});

128+
129+

it("preserves archived cards in JSON list output by default", async () => {

130+

const store = new WorkboardStore(createMemoryStore());

131+

const archived = await store.create({ title: "Archived card" });

132+

await store.archive(archived.id, true);

133+

const program = createProgram(store);

134+
135+

const output = await captureStdout(async () => {

136+

await program.parseAsync(["workboard", "list", "--json"], { from: "user" });

137+

});

138+
139+

expect(output).toContain(archived.id);

140+

expect(output).toContain("archivedAt");

141+

});

142+
109143

it("does not fall back to local dispatch for explicit gateway targets", async () => {

110144

const store = new WorkboardStore(createMemoryStore());

111145

const card = await store.create({ title: "Remote target", status: "ready" });

Original file line numberDiff line numberDiff line change

@@ -130,14 +130,28 @@ export function registerWorkboardCli(params: { program: Command; store: Workboar

130130

.description("List Workboard cards")

131131

.option("--board <id>", "Board id")

132132

.option("--status <status>", "Filter by status")

133+

.option("--include-archived", "Include archived cards (default false)")

133134

.option("--json", "Print JSON", false)

134-

.action(async (options: JsonOptions & { board?: string; status?: string }) => {

135-

let cards = await params.store.list({ boardId: options.board });

136-

if (options.status) {

137-

cards = cards.filter((card) => card.status === options.status);

138-

}

139-

writeCards(cards, options);

140-

});

135+

.action(

136+

async (

137+

options: JsonOptions & {

138+

board?: string;

139+

status?: string;

140+

includeArchived?: boolean;

141+

},

142+

) => {

143+

// Text output hides archived cards like /workboard list, while --json

144+

// keeps the shipped full-card contract for existing scripts.

145+

let cards = await params.store.list({ boardId: options.board });

146+

if (!options.json && options.includeArchived !== true) {

147+

cards = cards.filter((card) => !card.metadata?.archivedAt);

148+

}

149+

if (options.status) {

150+

cards = cards.filter((card) => card.status === options.status);

151+

}

152+

writeCards(cards, options);

153+

},

154+

);

141155
142156

workboard

143157

.command("create")