kanban-lite 1.0.4
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/.editorconfig +9 -0
- package/.github/workflows/ci.yml +59 -0
- package/.github/workflows/release.yml +75 -0
- package/.prettierignore +6 -0
- package/.prettierrc.yaml +4 -0
- package/.vscode/extensions.json +3 -0
- package/.vscode/launch.json +17 -0
- package/.vscode/settings.json +21 -0
- package/.vscode/tasks.json +22 -0
- package/.vscodeignore +11 -0
- package/CHANGELOG.md +184 -0
- package/CLAUDE.md +58 -0
- package/CONTRIBUTING.md +114 -0
- package/LICENSE +22 -0
- package/README.md +482 -0
- package/SKILL.md +237 -0
- package/dist/cli.js +8716 -0
- package/dist/extension.js +8463 -0
- package/dist/mcp-server.js +1327 -0
- package/dist/standalone-webview/icons-Dx9MGYqN.js +180 -0
- package/dist/standalone-webview/icons-Dx9MGYqN.js.map +1 -0
- package/dist/standalone-webview/index.js +85 -0
- package/dist/standalone-webview/index.js.map +1 -0
- package/dist/standalone-webview/react-vendor-DkYdDBET.js +25 -0
- package/dist/standalone-webview/react-vendor-DkYdDBET.js.map +1 -0
- package/dist/standalone-webview/style.css +1 -0
- package/dist/standalone.js +7513 -0
- package/dist/webview/icons-Dx9MGYqN.js +180 -0
- package/dist/webview/icons-Dx9MGYqN.js.map +1 -0
- package/dist/webview/index.js +85 -0
- package/dist/webview/index.js.map +1 -0
- package/dist/webview/react-vendor-DkYdDBET.js +25 -0
- package/dist/webview/react-vendor-DkYdDBET.js.map +1 -0
- package/dist/webview/style.css +1 -0
- package/docs/images/board-overview.png +0 -0
- package/docs/images/editor-view.png +0 -0
- package/docs/plans/2026-02-20-kanban-json-config-design.md +74 -0
- package/docs/plans/2026-02-20-kanban-json-config.md +690 -0
- package/eslint.config.mjs +31 -0
- package/package.json +161 -0
- package/postcss.config.js +6 -0
- package/resources/icon-light.png +0 -0
- package/resources/icon-light.svg +105 -0
- package/resources/icon.png +0 -0
- package/resources/icon.svg +105 -0
- package/resources/kanban-dark.svg +21 -0
- package/resources/kanban-light.svg +21 -0
- package/resources/kanban.svg +21 -0
- package/src/cli/index.ts +846 -0
- package/src/extension/FeatureHeaderProvider.ts +370 -0
- package/src/extension/KanbanPanel.ts +973 -0
- package/src/extension/SidebarViewProvider.ts +507 -0
- package/src/extension/featureFileUtils.ts +82 -0
- package/src/extension/index.ts +234 -0
- package/src/mcp-server/index.ts +632 -0
- package/src/sdk/KanbanSDK.ts +349 -0
- package/src/sdk/__tests__/KanbanSDK.test.ts +468 -0
- package/src/sdk/__tests__/parser.test.ts +170 -0
- package/src/sdk/fileUtils.ts +76 -0
- package/src/sdk/index.ts +6 -0
- package/src/sdk/parser.ts +70 -0
- package/src/sdk/types.ts +15 -0
- package/src/shared/config.ts +113 -0
- package/src/shared/editorTypes.ts +14 -0
- package/src/shared/types.ts +120 -0
- package/src/standalone/__tests__/server.integration.test.ts +1916 -0
- package/src/standalone/__tests__/webhooks.test.ts +357 -0
- package/src/standalone/fileUtils.ts +70 -0
- package/src/standalone/index.ts +71 -0
- package/src/standalone/server.ts +1046 -0
- package/src/standalone/webhooks.ts +135 -0
- package/src/webview/App.tsx +469 -0
- package/src/webview/assets/main.css +329 -0
- package/src/webview/assets/standalone-theme.css +130 -0
- package/src/webview/components/ColumnDialog.tsx +119 -0
- package/src/webview/components/CreateFeatureDialog.tsx +524 -0
- package/src/webview/components/DatePicker.tsx +185 -0
- package/src/webview/components/FeatureCard.tsx +186 -0
- package/src/webview/components/FeatureEditor.tsx +623 -0
- package/src/webview/components/KanbanBoard.tsx +144 -0
- package/src/webview/components/KanbanColumn.tsx +159 -0
- package/src/webview/components/MarkdownEditor.tsx +291 -0
- package/src/webview/components/PrioritySelect.tsx +39 -0
- package/src/webview/components/QuickAddInput.tsx +72 -0
- package/src/webview/components/SettingsPanel.tsx +284 -0
- package/src/webview/components/Toolbar.tsx +175 -0
- package/src/webview/components/UndoToast.tsx +70 -0
- package/src/webview/index.html +12 -0
- package/src/webview/lib/utils.ts +6 -0
- package/src/webview/main.tsx +11 -0
- package/src/webview/standalone-main.tsx +13 -0
- package/src/webview/standalone-shim.ts +132 -0
- package/src/webview/standalone.html +12 -0
- package/src/webview/store/index.ts +241 -0
- package/tailwind.config.js +53 -0
- package/tsconfig.json +22 -0
- package/vite.config.ts +36 -0
- package/vite.standalone.config.ts +62 -0
- package/vitest.config.ts +15 -0
package/SKILL.md
ADDED
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# Kanban Markdown
|
|
2
|
+
|
|
3
|
+
Manage a project kanban board stored as markdown files. Cards have status, priority, assignee, due dates, labels, and attachments. Columns are customizable.
|
|
4
|
+
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
**MCP (recommended):** Add to your MCP config (e.g. `.claude/settings.json`):
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"mcpServers": {
|
|
12
|
+
"kanban": {
|
|
13
|
+
"command": "npx",
|
|
14
|
+
"args": ["kanban-lite", "kanban-mcp", "--dir", ".kanban"]
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**CLI:** `npm install -g kanban-lite` then use `kanban-lite` or the shorthand `kl`.
|
|
21
|
+
|
|
22
|
+
**API:** Start with `kl serve` (default: `http://localhost:3000/api`).
|
|
23
|
+
|
|
24
|
+
## Interface Priority
|
|
25
|
+
|
|
26
|
+
Use **MCP tools** when available (native LLM integration). Fall back to **CLI** when running shell commands. Use **REST API** for HTTP-based integrations.
|
|
27
|
+
|
|
28
|
+
## Quick Reference
|
|
29
|
+
|
|
30
|
+
| Operation | MCP Tool | CLI Command | API Endpoint |
|
|
31
|
+
|-----------|----------|-------------|--------------|
|
|
32
|
+
| List cards | `list_cards` | `kl list` | `GET /api/tasks` |
|
|
33
|
+
| Get card | `get_card` | `kl show <id>` | `GET /api/tasks/:id` |
|
|
34
|
+
| Create card | `create_card` | `kl add --title "..."` | `POST /api/tasks` |
|
|
35
|
+
| Update card | `update_card` | `kl edit <id>` | `PUT /api/tasks/:id` |
|
|
36
|
+
| Move card | `move_card` | `kl move <id> <status>` | `PATCH /api/tasks/:id/move` |
|
|
37
|
+
| Delete card | `delete_card` | `kl delete <id>` | `DELETE /api/tasks/:id` |
|
|
38
|
+
| List columns | `list_columns` | `kl columns` | `GET /api/columns` |
|
|
39
|
+
| Add column | `add_column` | `kl columns add` | `POST /api/columns` |
|
|
40
|
+
| Update column | `update_column` | `kl columns update <id>` | `PUT /api/columns/:id` |
|
|
41
|
+
| Remove column | `remove_column` | `kl columns remove <id>` | `DELETE /api/columns/:id` |
|
|
42
|
+
| List attachments | `list_attachments` | `kl attach <id>` | via card object |
|
|
43
|
+
| Add attachment | `add_attachment` | `kl attach add <id> <path>` | `POST /api/tasks/:id/attachments` |
|
|
44
|
+
| Remove attachment | `remove_attachment` | `kl attach remove <id> <name>` | `DELETE /api/tasks/:id/attachments/:name` |
|
|
45
|
+
| Get settings | `get_settings` | `kl settings` | `GET /api/settings` |
|
|
46
|
+
| Update settings | `update_settings` | `kl settings update` | `PUT /api/settings` |
|
|
47
|
+
| List webhooks | `list_webhooks` | `kl webhooks` | `GET /api/webhooks` |
|
|
48
|
+
| Add webhook | `add_webhook` | `kl webhooks add --url <url>` | `POST /api/webhooks` |
|
|
49
|
+
| Remove webhook | `remove_webhook` | `kl webhooks remove <id>` | `DELETE /api/webhooks/:id` |
|
|
50
|
+
| Workspace path | `get_workspace_info` | `kl pwd` | `GET /api/workspace` |
|
|
51
|
+
|
|
52
|
+
## Card Operations
|
|
53
|
+
|
|
54
|
+
### List and filter cards
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
MCP: list_cards(status="todo", priority="high")
|
|
58
|
+
CLI: kl list --status todo --priority high --json
|
|
59
|
+
API: GET /api/tasks?status=todo&priority=high
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Filters: `status`, `priority`, `assignee`, `label`. All optional.
|
|
63
|
+
|
|
64
|
+
### Get a card
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
MCP: get_card(cardId="implement-search")
|
|
68
|
+
CLI: kl show implement-search --json
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Supports **partial ID matching** - `"search"` will match `"implement-search-2026-02-21"` if unambiguous.
|
|
72
|
+
|
|
73
|
+
### Create a card
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
MCP: create_card(
|
|
77
|
+
title="Implement search",
|
|
78
|
+
body="Full-text search across all cards.",
|
|
79
|
+
status="todo",
|
|
80
|
+
priority="high",
|
|
81
|
+
assignee="alice",
|
|
82
|
+
labels=["frontend", "search"]
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
CLI: kl add --title "Implement search" --body "Full-text search." \
|
|
86
|
+
--status todo --priority high --assignee alice --label "frontend,search"
|
|
87
|
+
|
|
88
|
+
API: POST /api/tasks
|
|
89
|
+
{"content": "# Implement search\n\nFull-text search.", "status": "todo", "priority": "high"}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Note: MCP/CLI use `title` + `body`, API uses `content` (full markdown with `# Title` heading).
|
|
93
|
+
|
|
94
|
+
### Update a card
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
MCP: update_card(cardId="implement-search", priority="critical", assignee="bob")
|
|
98
|
+
CLI: kl edit implement-search --priority critical --assignee bob
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Only specified fields are changed. Timestamps update automatically.
|
|
102
|
+
|
|
103
|
+
### Move a card
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
MCP: move_card(cardId="implement-search", status="in-progress")
|
|
107
|
+
CLI: kl move implement-search in-progress
|
|
108
|
+
CLI: kl move implement-search in-progress --position 0 # move to top
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Moving to `done` auto-sets `completedAt`. Moving away from `done` clears it.
|
|
112
|
+
|
|
113
|
+
### Delete a card
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
MCP: delete_card(cardId="implement-search")
|
|
117
|
+
CLI: kl delete implement-search
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Column Operations
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
MCP: list_columns()
|
|
124
|
+
MCP: add_column(id="testing", name="Testing", color="#ff9900")
|
|
125
|
+
MCP: update_column(columnId="testing", name="QA", color="#22c55e")
|
|
126
|
+
MCP: remove_column(columnId="testing") # fails if cards exist in column
|
|
127
|
+
|
|
128
|
+
CLI: kl columns
|
|
129
|
+
CLI: kl columns add --id testing --name Testing --color "#ff9900"
|
|
130
|
+
CLI: kl columns update testing --name QA --color "#22c55e"
|
|
131
|
+
CLI: kl columns remove testing
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Settings
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
MCP: get_settings()
|
|
138
|
+
MCP: update_settings(compactMode=true, defaultPriority="high")
|
|
139
|
+
|
|
140
|
+
CLI: kl settings
|
|
141
|
+
CLI: kl settings update --compactMode true --defaultPriority high
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Available settings: `showPriorityBadges`, `showAssignee`, `showDueDate`, `showLabels`, `showFileName`, `compactMode`, `defaultPriority`, `defaultStatus`.
|
|
145
|
+
|
|
146
|
+
## Webhooks
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
MCP: list_webhooks()
|
|
150
|
+
MCP: add_webhook(url="https://example.com/hook", events=["task.created", "task.moved"])
|
|
151
|
+
MCP: remove_webhook(webhookId="wh_abc123")
|
|
152
|
+
|
|
153
|
+
CLI: kl webhooks
|
|
154
|
+
CLI: kl webhooks add --url https://example.com/hook --events task.created,task.moved --secret mykey
|
|
155
|
+
CLI: kl webhooks remove wh_abc123
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Events: `task.created`, `task.updated`, `task.moved`, `task.deleted`, `column.created`, `column.updated`, `column.deleted`. Use `["*"]` for all.
|
|
159
|
+
|
|
160
|
+
## Data Model
|
|
161
|
+
|
|
162
|
+
### Statuses
|
|
163
|
+
|
|
164
|
+
`backlog` | `todo` | `in-progress` | `review` | `done`
|
|
165
|
+
|
|
166
|
+
### Priorities
|
|
167
|
+
|
|
168
|
+
`critical` | `high` | `medium` | `low`
|
|
169
|
+
|
|
170
|
+
### Card fields
|
|
171
|
+
|
|
172
|
+
| Field | Type | Description |
|
|
173
|
+
|-------|------|-------------|
|
|
174
|
+
| `id` | string | Auto-generated from title + date (e.g. `implement-search-2026-02-21`) |
|
|
175
|
+
| `status` | string | Current column |
|
|
176
|
+
| `priority` | string | Priority level |
|
|
177
|
+
| `assignee` | string or null | Assigned person |
|
|
178
|
+
| `dueDate` | string or null | Due date (`YYYY-MM-DD`) |
|
|
179
|
+
| `created` | string | ISO timestamp, set on creation |
|
|
180
|
+
| `modified` | string | ISO timestamp, auto-updated |
|
|
181
|
+
| `completedAt` | string or null | ISO timestamp, auto-set when status becomes `done` |
|
|
182
|
+
| `labels` | string[] | Tags |
|
|
183
|
+
| `attachments` | string[] | Attached filenames |
|
|
184
|
+
| `order` | string | Fractional index for sorting within column |
|
|
185
|
+
| `content` | string | Markdown body (starts with `# Title`) |
|
|
186
|
+
|
|
187
|
+
### File storage
|
|
188
|
+
|
|
189
|
+
Cards are stored as markdown files with YAML frontmatter in `{featuresDir}/{status}/`:
|
|
190
|
+
|
|
191
|
+
```
|
|
192
|
+
.kanban/
|
|
193
|
+
backlog/
|
|
194
|
+
my-card-2026-02-21.md
|
|
195
|
+
todo/
|
|
196
|
+
in-progress/
|
|
197
|
+
review/
|
|
198
|
+
done/
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Config: `.kanban.json` at workspace root. Webhooks: `.kanban-webhooks.json` at workspace root.
|
|
202
|
+
|
|
203
|
+
## Common Workflows
|
|
204
|
+
|
|
205
|
+
### Start working on a task
|
|
206
|
+
|
|
207
|
+
```
|
|
208
|
+
list_cards(status="todo", priority="high") # find high-priority todo items
|
|
209
|
+
move_card(cardId="...", status="in-progress") # claim it
|
|
210
|
+
update_card(cardId="...", assignee="me") # assign yourself
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Triage backlog
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
list_cards(status="backlog") # see all backlog items
|
|
217
|
+
update_card(cardId="...", priority="critical") # re-prioritize
|
|
218
|
+
move_card(cardId="...", status="todo") # promote to todo
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Complete a task
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
move_card(cardId="...", status="done") # completedAt auto-set
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Review board state
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
list_columns() # see all columns
|
|
231
|
+
list_cards() # see all cards
|
|
232
|
+
get_settings() # see board config
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## CLI Output
|
|
236
|
+
|
|
237
|
+
Add `--json` to any CLI command for machine-readable JSON output. Add `--dir <path>` to specify a custom features directory (default: `.kanban`).
|