kanban-lite 1.0.4 → 1.0.5

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.
Files changed (29) hide show
  1. package/README.md +90 -103
  2. package/dist/cli.js +0 -0
  3. package/dist/extension.js +24 -19
  4. package/dist/mcp-server.js +0 -0
  5. package/dist/standalone-webview/{icons-Dx9MGYqN.js → icons-BRNYvs1k.js} +45 -35
  6. package/dist/standalone-webview/icons-BRNYvs1k.js.map +1 -0
  7. package/dist/standalone-webview/index.js +18 -18
  8. package/dist/standalone-webview/index.js.map +1 -1
  9. package/dist/{webview/react-vendor-DkYdDBET.js → standalone-webview/react-vendor-OgWxJ5nb.js} +2 -2
  10. package/dist/{webview/react-vendor-DkYdDBET.js.map → standalone-webview/react-vendor-OgWxJ5nb.js.map} +1 -1
  11. package/dist/standalone-webview/style.css +1 -1
  12. package/dist/standalone.js +75 -8
  13. package/dist/webview/{icons-Dx9MGYqN.js → icons-BRNYvs1k.js} +45 -35
  14. package/dist/webview/icons-BRNYvs1k.js.map +1 -0
  15. package/dist/webview/index.js +18 -18
  16. package/dist/webview/index.js.map +1 -1
  17. package/dist/{standalone-webview/react-vendor-DkYdDBET.js → webview/react-vendor-OgWxJ5nb.js} +2 -2
  18. package/dist/{standalone-webview/react-vendor-DkYdDBET.js.map → webview/react-vendor-OgWxJ5nb.js.map} +1 -1
  19. package/dist/webview/style.css +1 -1
  20. package/package.json +5 -4
  21. package/src/extension/KanbanPanel.ts +3 -0
  22. package/src/extension/SidebarViewProvider.ts +22 -20
  23. package/src/webview/App.tsx +1 -1
  24. package/src/webview/assets/standalone-theme.css +125 -16
  25. package/src/webview/components/KanbanColumn.tsx +2 -2
  26. package/src/webview/components/Toolbar.tsx +12 -2
  27. package/src/webview/standalone-shim.ts +5 -0
  28. package/dist/standalone-webview/icons-Dx9MGYqN.js.map +0 -1
  29. package/dist/webview/icons-Dx9MGYqN.js.map +0 -1
package/README.md CHANGED
@@ -1,9 +1,8 @@
1
1
  # Kanban Lite
2
2
 
3
- A VSCode/Cursor extension that brings a full-featured kanban board directly into your editor. Features are stored as human-readable markdown files, making them version-controllable and easy to edit outside the board.
3
+ A lightweight kanban board stored as plain markdown files. Manage your tasks via a **web UI**, **CLI**, **REST API**, or **MCP server** for AI agents. Everything is human-readable, version-controllable, and lives right in your project.
4
4
 
5
- [![VS Marketplace](https://img.shields.io/visual-studio-marketplace/v/borgius.kanban-lite?label=VS%20Marketplace&logo=visualstudiocode)](https://marketplace.visualstudio.com/items?itemName=borgius.kanban-lite)
6
- [![Open VSX](https://img.shields.io/open-vsx/v/borgius/kanban-lite?label=Open%20VSX&logo=vscodium)](https://open-vsx.org/extension/borgius/kanban-lite)
5
+ [![npm](https://img.shields.io/npm/v/kanban-lite)](https://www.npmjs.com/package/kanban-lite)
7
6
  ![License](https://img.shields.io/badge/license-MIT-green)
8
7
 
9
8
  ![Kanban Board Overview](https://raw.githubusercontent.com/borgius/kanban-lite/main/docs/images/board-overview.png)
@@ -18,32 +17,46 @@ npx skills add https://github.com/borgius/kanban-lite
18
17
 
19
18
  See [SKILL.md](SKILL.md) for the full skill reference covering MCP tools, CLI, and REST API.
20
19
 
20
+ ## Quick Start
21
+
22
+ ```bash
23
+ # Install globally
24
+ npm install -g kanban-lite
25
+
26
+ # Initialize a board in your project
27
+ kl init
28
+
29
+ # Start the web UI
30
+ kl serve
31
+
32
+ # Or create your first card from the terminal
33
+ kl add --title "My first task" --priority high
34
+ ```
35
+
21
36
  ## Features
22
37
 
23
- ### Kanban Board
38
+ ### Web UI
24
39
 
25
- - **5-column workflow**: Backlog, To Do, In Progress, Review, Done
26
- - **Sidebar view**: Access the board from the activity bar without opening a panel
40
+ - **5-column workflow**: Backlog, To Do, In Progress, Review, Done (fully customizable)
27
41
  - **Drag-and-drop**: Move cards between columns and reorder within columns
28
42
  - **Split-view editor**: Board on left, inline markdown editor on right
29
43
  - **Layout toggle**: Switch between horizontal and vertical board layouts
44
+ - **Real-time updates**: WebSocket-powered live sync across clients
45
+ - **Light & dark mode** support
30
46
  - **Keyboard shortcuts**:
31
47
  - `N` - Create new feature
32
48
  - `Esc` - Close dialogs
33
49
  - `Cmd/Ctrl + Enter` - Submit create dialog
34
- - `Enter` in title - Move to description field
35
- - `Shift + Enter` in title - Add new line
36
-
37
50
 
38
51
  ### Feature Cards
39
52
 
40
53
  ![Editor View](https://raw.githubusercontent.com/borgius/kanban-lite/main/docs/images/editor-view.png)
41
54
 
42
-
43
55
  - **Priority levels**: Critical, High, Medium, Low (color-coded badges)
44
56
  - **Assignees**: Assign team members to features
45
57
  - **Due dates**: Smart formatting (Overdue, Today, Tomorrow, "5d", etc.)
46
- - **Labels**: Tag features with multiple labels (shows up to 3 with "+X more")
58
+ - **Labels**: Tag features with multiple labels
59
+ - **Attachments**: Attach files to cards
47
60
  - **Auto-generated IDs**: Based on title and timestamp (e.g., `implement-dark-mode-2026-01-29`)
48
61
  - **Timestamps**: Created and modified dates tracked automatically
49
62
 
@@ -53,90 +66,21 @@ See [SKILL.md](SKILL.md) for the full skill reference covering MCP tools, CLI, a
53
66
  - **Assignee filter**: Filter by team member or show unassigned items
54
67
  - **Label filter**: Filter by specific labels
55
68
  - **Due date filters**: Overdue, due today, due this week, or no due date
56
- - **Clear filters button**: Reset all filters at once
57
69
 
58
70
  ### File Organization
59
- - **Status subfolders**: Features are automatically organized into subfolders by status (with migration of existing files)
60
-
61
- ### Editor Integration
62
- - Rich text editing with Tiptap markdown editor
63
- - Inline frontmatter editing (dropdowns for status/priority, inputs for assignee/due date/labels)
64
- - Auto-save functionality
65
- - Live settings updates without reopening the board
66
- - Auto-refresh when files change externally
67
- - Theme integration with VSCode/Cursor (light & dark mode)
68
-
69
- ### AI Agent Integration
70
- - **Claude Code**: Default, Plan, Auto-edit, and Full Auto modes
71
- - **Codex**: Suggest, Auto-edit, and Full Auto modes
72
- - **OpenCode**: Agent integration support
73
- - AI receives feature context (title, priority, labels, description) for informed assistance
71
+ - **Plain markdown**: Cards are standard markdown files with YAML frontmatter
72
+ - **Status subfolders**: Automatically organized into subfolders by status
73
+ - **Git-friendly**: Everything is version-controllable
74
74
 
75
75
  ## Installation
76
76
 
77
- ### VS Code Marketplace
78
- Install from the [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=borgius.kanban-lite) or search for "Kanban Lite" in the Extensions view.
79
-
80
- ### Open VSX (VSCodium, Cursor, etc.)
81
- Install from [Open VSX](https://open-vsx.org/extension/borgius/kanban-lite) or search for "Kanban Lite" in the Extensions view.
82
-
83
- ### From VSIX (Manual)
84
- 1. Download the `.vsix` file from the releases
85
- 2. In VSCode: Extensions > `...` > Install from VSIX
86
- 3. Select the downloaded file
87
-
88
- ## Usage
89
-
90
- 1. Open the command palette (`Cmd+Shift+P` / `Ctrl+Shift+P`)
91
- 2. Run **"Open Kanban Board"**
92
- 3. Start creating and managing features
93
-
94
- Features are stored as markdown files in `.kanban/` within your workspace, organized into status subfolders:
95
-
96
- ```markdown
97
- ---
98
- id: "implement-dark-mode-toggle-2026-01-25"
99
- status: "todo"
100
- priority: "high"
101
- assignee: "john"
102
- dueDate: "2026-01-25"
103
- created: "2026-01-25T10:30:00.000Z"
104
- modified: "2026-01-25T14:20:00.000Z"
105
- labels: ["feature", "ui"]
106
- order: 0
107
- ---
108
-
109
- # Implement dark mode toggle
110
-
111
- Add a toggle in settings to switch between light and dark themes...
112
- ```
113
-
114
- ## Configuration
115
-
116
- Board configuration is stored in `.kanban.json` at your workspace root. This file is shared across all interfaces (VSCode extension, standalone server, CLI).
117
-
118
- ```json
119
- {
120
- "columns": [
121
- { "id": "backlog", "name": "Backlog", "color": "#6b7280" },
122
- { "id": "todo", "name": "To Do", "color": "#3b82f6" },
123
- { "id": "in-progress", "name": "In Progress", "color": "#f59e0b" },
124
- { "id": "review", "name": "Review", "color": "#8b5cf6" },
125
- { "id": "done", "name": "Done", "color": "#22c55e" }
126
- ],
127
- "showPriorityBadges": true,
128
- "showAssignee": true,
129
- "showDueDate": true,
130
- "showLabels": true,
131
- "compactMode": false
132
- }
77
+ ```bash
78
+ npm install -g kanban-lite
133
79
  ```
134
80
 
135
- Columns are fully customizable — add, remove, rename, or recolor them from the board UI, CLI, or REST API.
136
-
137
81
  ## CLI
138
82
 
139
- Manage your kanban board from the terminal. After installing with `npm install -g kanban-lite`, use `kanban-lite` or the shorthand `kl`:
83
+ Manage your kanban board from the terminal using `kanban-lite` or the shorthand `kl`:
140
84
 
141
85
  ```bash
142
86
  # List all cards
@@ -185,7 +129,7 @@ kl settings update --compactMode true # Update a setting
185
129
  # Workspace
186
130
  kl pwd # Print workspace root path
187
131
 
188
- # Start standalone web server
132
+ # Start web server
189
133
  kl serve # Start on port 3000
190
134
  kl serve --port 8080 --no-browser # Custom port, no auto-open
191
135
 
@@ -197,7 +141,7 @@ Use `--json` for machine-readable output. Use `--dir <path>` to specify a custom
197
141
 
198
142
  ## Standalone Server
199
143
 
200
- Run the kanban board as a standalone web application with a full REST API, outside of VSCode:
144
+ Run the kanban board as a web application with a full REST API:
201
145
 
202
146
  ```bash
203
147
  # Using the CLI
@@ -211,7 +155,7 @@ kanban-md --port 8080 --dir .kanban --no-browser
211
155
  ```
212
156
 
213
157
  The server provides:
214
- - **Web UI** at `http://localhost:3000` — the same React board as the VSCode extension
158
+ - **Web UI** at `http://localhost:3000` — a full React-based kanban board
215
159
  - **REST API** at `http://localhost:3000/api` — full programmatic access
216
160
  - **WebSocket** — real-time updates for connected clients
217
161
 
@@ -415,6 +359,57 @@ await sdk.updateColumn('testing', { name: 'QA' })
415
359
  await sdk.removeColumn('testing')
416
360
  ```
417
361
 
362
+ ## Data Storage
363
+
364
+ Cards are stored as markdown files with YAML frontmatter in `.kanban/` within your project:
365
+
366
+ ```markdown
367
+ ---
368
+ id: "implement-dark-mode-toggle-2026-01-25"
369
+ status: "todo"
370
+ priority: "high"
371
+ assignee: "john"
372
+ dueDate: "2026-01-25"
373
+ created: "2026-01-25T10:30:00.000Z"
374
+ modified: "2026-01-25T14:20:00.000Z"
375
+ labels: ["feature", "ui"]
376
+ order: 0
377
+ ---
378
+
379
+ # Implement dark mode toggle
380
+
381
+ Add a toggle in settings to switch between light and dark themes...
382
+ ```
383
+
384
+ ## Configuration
385
+
386
+ Board configuration is stored in `.kanban.json` at your project root:
387
+
388
+ ```json
389
+ {
390
+ "columns": [
391
+ { "id": "backlog", "name": "Backlog", "color": "#6b7280" },
392
+ { "id": "todo", "name": "To Do", "color": "#3b82f6" },
393
+ { "id": "in-progress", "name": "In Progress", "color": "#f59e0b" },
394
+ { "id": "review", "name": "Review", "color": "#8b5cf6" },
395
+ { "id": "done", "name": "Done", "color": "#22c55e" }
396
+ ],
397
+ "showPriorityBadges": true,
398
+ "showAssignee": true,
399
+ "showDueDate": true,
400
+ "showLabels": true,
401
+ "compactMode": false
402
+ }
403
+ ```
404
+
405
+ Columns are fully customizable — add, remove, rename, or recolor them from the web UI, CLI, or REST API.
406
+
407
+ ## AI Agent Integration
408
+ - **Claude Code**: Default, Plan, Auto-edit, and Full Auto modes
409
+ - **Codex**: Suggest, Auto-edit, and Full Auto modes
410
+ - **OpenCode**: Agent integration support
411
+ - AI receives feature context (title, priority, labels, description) for informed assistance
412
+
418
413
  ## Development
419
414
 
420
415
  ### Prerequisites
@@ -430,13 +425,13 @@ pnpm install
430
425
  # Start development (watch mode)
431
426
  pnpm dev
432
427
 
433
- # Build for production (extension + CLI + MCP server)
428
+ # Build for production
434
429
  pnpm build
435
430
 
436
431
  # Build individually
437
- pnpm build:extension
438
432
  pnpm build:cli
439
433
  pnpm build:mcp
434
+ pnpm build:standalone-server
440
435
 
441
436
  # Run tests
442
437
  pnpm test
@@ -448,28 +443,20 @@ pnpm typecheck
448
443
  pnpm lint
449
444
  ```
450
445
 
451
- ### Debugging
452
-
453
- 1. Press `F5` in VSCode to launch the Extension Development Host
454
- 2. Open the command palette and run "Open Kanban Board"
455
- 3. Make changes and reload the window (`Cmd+R`) to see updates
456
-
457
446
  ### Tech Stack
458
447
 
459
- **Extension**: TypeScript, VSCode API, esbuild
460
- **Webview**: React 18, Vite, Tailwind CSS, Zustand, Tiptap
448
+ **Web UI**: React 18, Vite, Tailwind CSS, Zustand, Tiptap
461
449
  **SDK/CLI/MCP**: TypeScript, Node.js, @modelcontextprotocol/sdk
462
450
 
463
451
  ### Architecture
464
452
 
465
453
  ```
466
454
  src/
467
- sdk/ # Standalone SDK (no VSCode dependency)
455
+ sdk/ # Core SDK (no external dependencies)
468
456
  cli/ # CLI tool (built on SDK)
469
457
  mcp-server/ # MCP server (built on SDK)
470
- extension/ # VSCode extension (uses SDK for parsing)
471
- standalone/ # Standalone web server (uses SDK for parsing)
472
- webview/ # React frontend (shared by extension + standalone)
458
+ standalone/ # Standalone web server (uses SDK)
459
+ webview/ # React frontend
473
460
  shared/ # Shared types
474
461
  ```
475
462
 
package/dist/cli.js CHANGED
File without changes
package/dist/extension.js CHANGED
@@ -7116,6 +7116,9 @@ var KanbanPanel = class _KanbanPanel {
7116
7116
  case "removeColumn":
7117
7117
  await this._removeColumn(message.columnId);
7118
7118
  break;
7119
+ case "toggleTheme":
7120
+ await vscode2.commands.executeCommand("workbench.action.toggleLightDarkThemes");
7121
+ break;
7119
7122
  }
7120
7123
  },
7121
7124
  null,
@@ -8163,12 +8166,7 @@ var SidebarViewProvider = class {
8163
8166
 
8164
8167
  <div class="separator"></div>
8165
8168
 
8166
- <div class="section" id="inProgressSection" style="display:none;">
8167
- <div class="section-header">
8168
- <span>In Progress</span>
8169
- </div>
8170
- <ul class="feature-list" id="inProgressList"></ul>
8171
- </div>
8169
+ <div id="columnSections"></div>
8172
8170
 
8173
8171
  <script nonce="${nonce}">
8174
8172
  (function() {
@@ -8214,30 +8212,37 @@ var SidebarViewProvider = class {
8214
8212
  statRows.appendChild(row);
8215
8213
  }
8216
8214
 
8217
- // In-progress features
8218
- const inProgressCol = columns.find(c => c.id === 'in-progress');
8219
- const inProgressColor = inProgressCol ? inProgressCol.color : '#f59e0b';
8220
- const inProgress = features.filter(f => f.status === 'in-progress');
8221
- const section = document.getElementById('inProgressSection');
8222
- const list = document.getElementById('inProgressList');
8215
+ // Column sections with their features
8216
+ const sectionsContainer = document.getElementById('columnSections');
8217
+ sectionsContainer.innerHTML = '';
8218
+ for (const col of columns) {
8219
+ const colFeatures = features.filter(f => f.status === col.id);
8220
+ if (colFeatures.length === 0) continue;
8221
+
8222
+ const section = document.createElement('div');
8223
+ section.className = 'section';
8223
8224
 
8224
- if (inProgress.length > 0) {
8225
- section.style.display = '';
8226
- list.innerHTML = '';
8227
- for (const f of inProgress) {
8225
+ const header = document.createElement('div');
8226
+ header.className = 'section-header';
8227
+ header.innerHTML = '<span>' + escapeHtml(col.name) + '</span>';
8228
+ section.appendChild(header);
8229
+
8230
+ const list = document.createElement('ul');
8231
+ list.className = 'feature-list';
8232
+ for (const f of colFeatures) {
8228
8233
  const li = document.createElement('li');
8229
8234
  li.className = 'feature-item';
8230
8235
  li.title = f.title;
8231
8236
  li.innerHTML =
8232
- '<span class="feature-dot" style="background:' + inProgressColor + '"></span>' +
8237
+ '<span class="feature-dot" style="background:' + col.color + '"></span>' +
8233
8238
  '<span class="feature-title">' + escapeHtml(f.title) + '</span>';
8234
8239
  li.addEventListener('click', () => {
8235
8240
  vscode.postMessage({ type: 'openFeature', featureId: f.id });
8236
8241
  });
8237
8242
  list.appendChild(li);
8238
8243
  }
8239
- } else {
8240
- section.style.display = 'none';
8244
+ section.appendChild(list);
8245
+ sectionsContainer.appendChild(section);
8241
8246
  }
8242
8247
  }
8243
8248
 
File without changes