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.
Files changed (99) hide show
  1. package/.editorconfig +9 -0
  2. package/.github/workflows/ci.yml +59 -0
  3. package/.github/workflows/release.yml +75 -0
  4. package/.prettierignore +6 -0
  5. package/.prettierrc.yaml +4 -0
  6. package/.vscode/extensions.json +3 -0
  7. package/.vscode/launch.json +17 -0
  8. package/.vscode/settings.json +21 -0
  9. package/.vscode/tasks.json +22 -0
  10. package/.vscodeignore +11 -0
  11. package/CHANGELOG.md +184 -0
  12. package/CLAUDE.md +58 -0
  13. package/CONTRIBUTING.md +114 -0
  14. package/LICENSE +22 -0
  15. package/README.md +482 -0
  16. package/SKILL.md +237 -0
  17. package/dist/cli.js +8716 -0
  18. package/dist/extension.js +8463 -0
  19. package/dist/mcp-server.js +1327 -0
  20. package/dist/standalone-webview/icons-Dx9MGYqN.js +180 -0
  21. package/dist/standalone-webview/icons-Dx9MGYqN.js.map +1 -0
  22. package/dist/standalone-webview/index.js +85 -0
  23. package/dist/standalone-webview/index.js.map +1 -0
  24. package/dist/standalone-webview/react-vendor-DkYdDBET.js +25 -0
  25. package/dist/standalone-webview/react-vendor-DkYdDBET.js.map +1 -0
  26. package/dist/standalone-webview/style.css +1 -0
  27. package/dist/standalone.js +7513 -0
  28. package/dist/webview/icons-Dx9MGYqN.js +180 -0
  29. package/dist/webview/icons-Dx9MGYqN.js.map +1 -0
  30. package/dist/webview/index.js +85 -0
  31. package/dist/webview/index.js.map +1 -0
  32. package/dist/webview/react-vendor-DkYdDBET.js +25 -0
  33. package/dist/webview/react-vendor-DkYdDBET.js.map +1 -0
  34. package/dist/webview/style.css +1 -0
  35. package/docs/images/board-overview.png +0 -0
  36. package/docs/images/editor-view.png +0 -0
  37. package/docs/plans/2026-02-20-kanban-json-config-design.md +74 -0
  38. package/docs/plans/2026-02-20-kanban-json-config.md +690 -0
  39. package/eslint.config.mjs +31 -0
  40. package/package.json +161 -0
  41. package/postcss.config.js +6 -0
  42. package/resources/icon-light.png +0 -0
  43. package/resources/icon-light.svg +105 -0
  44. package/resources/icon.png +0 -0
  45. package/resources/icon.svg +105 -0
  46. package/resources/kanban-dark.svg +21 -0
  47. package/resources/kanban-light.svg +21 -0
  48. package/resources/kanban.svg +21 -0
  49. package/src/cli/index.ts +846 -0
  50. package/src/extension/FeatureHeaderProvider.ts +370 -0
  51. package/src/extension/KanbanPanel.ts +973 -0
  52. package/src/extension/SidebarViewProvider.ts +507 -0
  53. package/src/extension/featureFileUtils.ts +82 -0
  54. package/src/extension/index.ts +234 -0
  55. package/src/mcp-server/index.ts +632 -0
  56. package/src/sdk/KanbanSDK.ts +349 -0
  57. package/src/sdk/__tests__/KanbanSDK.test.ts +468 -0
  58. package/src/sdk/__tests__/parser.test.ts +170 -0
  59. package/src/sdk/fileUtils.ts +76 -0
  60. package/src/sdk/index.ts +6 -0
  61. package/src/sdk/parser.ts +70 -0
  62. package/src/sdk/types.ts +15 -0
  63. package/src/shared/config.ts +113 -0
  64. package/src/shared/editorTypes.ts +14 -0
  65. package/src/shared/types.ts +120 -0
  66. package/src/standalone/__tests__/server.integration.test.ts +1916 -0
  67. package/src/standalone/__tests__/webhooks.test.ts +357 -0
  68. package/src/standalone/fileUtils.ts +70 -0
  69. package/src/standalone/index.ts +71 -0
  70. package/src/standalone/server.ts +1046 -0
  71. package/src/standalone/webhooks.ts +135 -0
  72. package/src/webview/App.tsx +469 -0
  73. package/src/webview/assets/main.css +329 -0
  74. package/src/webview/assets/standalone-theme.css +130 -0
  75. package/src/webview/components/ColumnDialog.tsx +119 -0
  76. package/src/webview/components/CreateFeatureDialog.tsx +524 -0
  77. package/src/webview/components/DatePicker.tsx +185 -0
  78. package/src/webview/components/FeatureCard.tsx +186 -0
  79. package/src/webview/components/FeatureEditor.tsx +623 -0
  80. package/src/webview/components/KanbanBoard.tsx +144 -0
  81. package/src/webview/components/KanbanColumn.tsx +159 -0
  82. package/src/webview/components/MarkdownEditor.tsx +291 -0
  83. package/src/webview/components/PrioritySelect.tsx +39 -0
  84. package/src/webview/components/QuickAddInput.tsx +72 -0
  85. package/src/webview/components/SettingsPanel.tsx +284 -0
  86. package/src/webview/components/Toolbar.tsx +175 -0
  87. package/src/webview/components/UndoToast.tsx +70 -0
  88. package/src/webview/index.html +12 -0
  89. package/src/webview/lib/utils.ts +6 -0
  90. package/src/webview/main.tsx +11 -0
  91. package/src/webview/standalone-main.tsx +13 -0
  92. package/src/webview/standalone-shim.ts +132 -0
  93. package/src/webview/standalone.html +12 -0
  94. package/src/webview/store/index.ts +241 -0
  95. package/tailwind.config.js +53 -0
  96. package/tsconfig.json +22 -0
  97. package/vite.config.ts +36 -0
  98. package/vite.standalone.config.ts +62 -0
  99. package/vitest.config.ts +15 -0
package/.editorconfig ADDED
@@ -0,0 +1,9 @@
1
+ root = true
2
+
3
+ [*]
4
+ charset = utf-8
5
+ indent_style = space
6
+ indent_size = 2
7
+ end_of_line = lf
8
+ insert_final_newline = true
9
+ trim_trailing_whitespace = true
@@ -0,0 +1,59 @@
1
+ # name: CI
2
+
3
+ # on:
4
+ # push:
5
+ # branches: [main]
6
+ # pull_request:
7
+ # branches: [main]
8
+
9
+ # jobs:
10
+ # build:
11
+ # runs-on: ubuntu-latest
12
+
13
+ # steps:
14
+ # - name: Checkout
15
+ # uses: actions/checkout@v4
16
+
17
+ # - name: Setup Node.js
18
+ # uses: actions/setup-node@v4
19
+ # with:
20
+ # node-version: 20
21
+
22
+ # - name: Setup pnpm
23
+ # uses: pnpm/action-setup@v4
24
+ # with:
25
+ # version: 9
26
+
27
+ # - name: Get pnpm store directory
28
+ # shell: bash
29
+ # run: |
30
+ # echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
31
+
32
+ # - name: Setup pnpm cache
33
+ # uses: actions/cache@v4
34
+ # with:
35
+ # path: ${{ env.STORE_PATH }}
36
+ # key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
37
+ # restore-keys: |
38
+ # ${{ runner.os }}-pnpm-store-
39
+
40
+ # - name: Install dependencies
41
+ # run: pnpm install
42
+
43
+ # - name: Type check
44
+ # run: pnpm typecheck
45
+
46
+ # - name: Lint
47
+ # run: pnpm lint
48
+
49
+ # - name: Build
50
+ # run: pnpm build
51
+
52
+ # - name: Package extension
53
+ # run: pnpm vsce package --no-dependencies
54
+
55
+ # - name: Upload VSIX artifact
56
+ # uses: actions/upload-artifact@v4
57
+ # with:
58
+ # name: kanban-lite-${{ github.sha }}
59
+ # path: "*.vsix"
@@ -0,0 +1,75 @@
1
+ # name: Release
2
+
3
+ # on:
4
+ # push:
5
+ # tags:
6
+ # - "v*"
7
+
8
+ # permissions:
9
+ # contents: write
10
+
11
+ # jobs:
12
+ # release:
13
+ # runs-on: ubuntu-latest
14
+
15
+ # steps:
16
+ # - name: Checkout
17
+ # uses: actions/checkout@v4
18
+
19
+ # - name: Setup Node.js
20
+ # uses: actions/setup-node@v4
21
+ # with:
22
+ # node-version: 20
23
+
24
+ # - name: Setup pnpm
25
+ # uses: pnpm/action-setup@v4
26
+ # with:
27
+ # version: 9
28
+
29
+ # - name: Get pnpm store directory
30
+ # shell: bash
31
+ # run: |
32
+ # echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
33
+
34
+ # - name: Setup pnpm cache
35
+ # uses: actions/cache@v4
36
+ # with:
37
+ # path: ${{ env.STORE_PATH }}
38
+ # key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
39
+ # restore-keys: |
40
+ # ${{ runner.os }}-pnpm-store-
41
+
42
+ # - name: Install dependencies
43
+ # run: pnpm install
44
+
45
+ # - name: Type check
46
+ # run: pnpm typecheck
47
+
48
+ # - name: Lint
49
+ # run: pnpm lint
50
+
51
+ # - name: Build
52
+ # run: pnpm build
53
+
54
+ # - name: Get version from tag
55
+ # id: version
56
+ # run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
57
+
58
+ # - name: Package extension
59
+ # run: mkdir -p releases && pnpm vsce package --no-dependencies -o releases/kanban-lite-${{ steps.version.outputs.VERSION }}.vsix
60
+
61
+ # - name: Create GitHub Release
62
+ # uses: softprops/action-gh-release@v2
63
+ # with:
64
+ # files: "releases/*.vsix"
65
+ # generate_release_notes: true
66
+
67
+ # - name: Publish to VS Code Marketplace
68
+ # run: pnpm vsce publish --no-dependencies
69
+ # env:
70
+ # VSCE_PAT: ${{ secrets.VSCE_PAT }}
71
+
72
+ # - name: Publish to Open VSX
73
+ # run: pnpm ovsx publish releases/*.vsix
74
+ # env:
75
+ # OVSX_PAT: ${{ secrets.OVSX_PAT }}
@@ -0,0 +1,6 @@
1
+ out
2
+ dist
3
+ pnpm-lock.yaml
4
+ LICENSE.md
5
+ tsconfig.json
6
+ tsconfig.*.json
@@ -0,0 +1,4 @@
1
+ singleQuote: true
2
+ semi: false
3
+ printWidth: 100
4
+ trailingComma: none
@@ -0,0 +1,3 @@
1
+ {
2
+ "recommendations": ["dbaeumer.vscode-eslint"]
3
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "version": "0.2.0",
3
+ "configurations": [
4
+ {
5
+ "name": "Run Extension",
6
+ "type": "extensionHost",
7
+ "request": "launch",
8
+ "args": [
9
+ "--extensionDevelopmentPath=${workspaceFolder}"
10
+ ],
11
+ "outFiles": [
12
+ "${workspaceFolder}/dist/**/*.js"
13
+ ],
14
+ "preLaunchTask": "npm: build"
15
+ }
16
+ ]
17
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "[typescript]": {
3
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
4
+ },
5
+ "[javascript]": {
6
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
7
+ },
8
+ "[json]": {
9
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
10
+ },
11
+ "kanban-lite.showPriorityBadges": true,
12
+ "kanban-lite.showAssignee": true,
13
+ "kanban-lite.showDueDate": true,
14
+ "kanban-lite.showLabels": true,
15
+ "kanban-lite.showBuildWithAI": false,
16
+ "kanban-lite.showFileName": false,
17
+ "kanban-lite.compactMode": false,
18
+ "kanban-lite.markdownEditorMode": false,
19
+ "kanban-lite.defaultPriority": "medium",
20
+ "kanban-lite.defaultStatus": "backlog"
21
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "version": "2.0.0",
3
+ "tasks": [
4
+ {
5
+ "type": "npm",
6
+ "script": "build",
7
+ "problemMatcher": [],
8
+ "label": "npm: build",
9
+ "group": {
10
+ "kind": "build",
11
+ "isDefault": true
12
+ }
13
+ },
14
+ {
15
+ "type": "npm",
16
+ "script": "watch",
17
+ "problemMatcher": [],
18
+ "label": "npm: watch",
19
+ "isBackground": true
20
+ }
21
+ ]
22
+ }
package/.vscodeignore ADDED
@@ -0,0 +1,11 @@
1
+ .vscode/**
2
+ .git/**
3
+ node_modules/**
4
+ src/**
5
+ *.map
6
+ .gitignore
7
+ pnpm-lock.yaml
8
+ tsconfig.json
9
+ vite.config.ts
10
+ eslint.config.mjs
11
+ README.md
package/CHANGELOG.md ADDED
@@ -0,0 +1,184 @@
1
+ # Changelog
2
+
3
+ All notable changes to the Kanban Lite extension will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [1.7.0] - 2026-02-20
9
+
10
+ ### Added
11
+ - Settings button in the toolbar to quickly open extension settings
12
+ - Markdown editor mode for opening features in the native VS Code editor
13
+ - Kanban skill installation instructions to README
14
+
15
+ ### Changed
16
+ - Replaced PNG icons with SVG versions for better quality and smaller file size
17
+
18
+ ## [1.6.4] - 2026-02-20
19
+
20
+ ### Changed
21
+ - Added new SVG icon and updated PNG icon
22
+
23
+ ## [1.6.3] - 2026-02-19
24
+
25
+ ### Added
26
+ - Allow saving features without a title (falls back to description)
27
+
28
+ ### Fixed
29
+ - Activity bar incorrectly opening on ALT key press
30
+
31
+ ## [1.6.2] - 2026-02-19
32
+
33
+ ### Fixed
34
+ - Removed incorrect `fontSize` configuration from KanbanPanel
35
+
36
+ ## [1.6.1] - 2026-02-19
37
+
38
+ ### Fixed
39
+ - Focus must leave the webview before `focusMenuBar` works (VS Code limitation)
40
+
41
+ ## [1.6.0] - 2026-02-14
42
+
43
+ ### Added
44
+ - Undo delete functionality with a stack-based history
45
+ - Rich text editor in the CreateFeatureDialog
46
+
47
+ ## [1.5.0] - 2026-02-14
48
+
49
+ ### Added
50
+ - Keyboard shortcut for saving and closing the CreateFeatureDialog
51
+
52
+ ## [1.4.0] - 2026-02-14
53
+
54
+ ### Added
55
+ - File name display on cards with a toggle setting
56
+
57
+ ## [1.3.0] - 2026-02-13
58
+
59
+ ### Added
60
+ - Automatic cleanup of empty old status folders during board updates
61
+ - CONTRIBUTING.md guide for new contributors
62
+
63
+ ## [1.2.0] - 2026-02-13
64
+
65
+ ### Added
66
+ - `completedAt` frontmatter field that records when a feature was marked as done, displayed as relative time on cards (e.g. "completed 2 days ago")
67
+
68
+ ### Changed
69
+ - Simplified status subfolders to use only a `done` folder instead of per-status folders
70
+
71
+ ### Dependencies
72
+ - Bumped `qs` from 6.14.1 to 6.14.2
73
+
74
+ ## [1.1.0] - 2026-02-13
75
+
76
+ ### Added
77
+ - Open file button in editor to quickly jump to the underlying markdown file ([#19](https://github.com/LachyFS/kanban-lite/issues/19))
78
+ - External change detection in editor — reloads content when the file is modified outside the extension ([#19](https://github.com/LachyFS/kanban-lite/issues/19))
79
+
80
+ ### Fixed
81
+ - CRLF line endings no longer break markdown frontmatter parsing ([#20](https://github.com/LachyFS/kanban-lite/issues/20))
82
+ - Order collisions when deleting features in KanbanPanel ([0f11a00](https://github.com/LachyFS/kanban-lite/commit/0f11a00))
83
+
84
+ ### Changed
85
+ - Removed delete button from feature cards for a cleaner card layout ([086e738](https://github.com/LachyFS/kanban-lite/commit/086e738))
86
+
87
+ ### Thanks
88
+ - [@hodanli](https://github.com/hodanli) for requesting the open file button and external change detection ([#19](https://github.com/LachyFS/kanban-lite/issues/19)), and reporting the CRLF line ending bug ([#20](https://github.com/LachyFS/kanban-lite/issues/20))
89
+
90
+ ## [1.0.0] - 2026-02-12
91
+
92
+ ### Added
93
+ - Sidebar view for Kanban board in the activity bar ([#9](https://github.com/LachyFS/kanban-lite/issues/9))
94
+ - Drag-and-drop card reordering within columns ([#16](https://github.com/LachyFS/kanban-lite/issues/16))
95
+ - Label management with suggestions in CreateFeatureDialog and FeatureEditor ([#4](https://github.com/LachyFS/kanban-lite/issues/4))
96
+ - `showLabels` setting to toggle label visibility on cards and in editors
97
+ - Assignee input with suggestions in feature creation and editing
98
+ - Due date and label fields in feature creation dialog
99
+ - "Build with AI" feature toggle (`showBuildWithAI` setting) that respects `disableAIFeatures` ([#5](https://github.com/LachyFS/kanban-lite/issues/5))
100
+ - Status subfolders support with automatic migration of existing feature files ([#3](https://github.com/LachyFS/kanban-lite/issues/3))
101
+ - Auto-save functionality in FeatureEditor
102
+
103
+ ### Fixed
104
+ - Broken label selector in edit view
105
+ - `n` hotkey no longer triggers when modifier keys are held ([#7](https://github.com/LachyFS/kanban-lite/issues/7))
106
+ - Alt key no longer blocked from opening the menu bar ([#8](https://github.com/LachyFS/kanban-lite/issues/8))
107
+ - Missing activation event for sidebar webview ([#14](https://github.com/LachyFS/kanban-lite/issues/14))
108
+ - Date selection no longer rendered off-screen ([#10](https://github.com/LachyFS/kanban-lite/issues/10))
109
+ - Input handling now correctly ignores contentEditable elements
110
+ - Due date hidden on cards with "done" status ([#17](https://github.com/LachyFS/kanban-lite/issues/17))
111
+
112
+ ### Changed
113
+ - Removed QuickAdd functionality in favor of the full CreateFeatureDialog
114
+ - Consistent card height across all columns
115
+ - Replaced `Buffer` with `TextEncoder` for file writing (browser compatibility)
116
+ - Replaced Node `fs` module with `vscode.workspace.fs` for file operations (virtual filesystem support)
117
+
118
+ ### Thanks
119
+ - [@ungive](https://github.com/ungive) for requesting the sidebar view ([#9](https://github.com/LachyFS/kanban-lite/issues/9)) and card reordering ([#16](https://github.com/LachyFS/kanban-lite/issues/16)), and reporting numerous bugs around hotkeys ([#7](https://github.com/LachyFS/kanban-lite/issues/7)), activation ([#14](https://github.com/LachyFS/kanban-lite/issues/14)), date rendering ([#10](https://github.com/LachyFS/kanban-lite/issues/10), [#17](https://github.com/LachyFS/kanban-lite/issues/17)), and the menu bar ([#8](https://github.com/LachyFS/kanban-lite/issues/8))
120
+ - [@hodanli](https://github.com/hodanli) for requesting label management from the UI ([#4](https://github.com/LachyFS/kanban-lite/issues/4)) and status subfolders for done items ([#3](https://github.com/LachyFS/kanban-lite/issues/3))
121
+
122
+ ## [0.1.6] - 2026-02-09
123
+
124
+ ### Added
125
+ - Live settings updates: webview now instantly reflects VS Code setting changes without reopening
126
+ - Configuration change listener for KanbanPanel (columns, display settings, defaults)
127
+ - Configuration change listener for FeatureHeaderProvider (features directory re-evaluation)
128
+
129
+ ### Fixed
130
+ - File watcher now properly disposes when features directory setting changes
131
+
132
+ ## [0.1.5] - 2026-02-09
133
+
134
+ ### Fixed
135
+ - VS Code configuration settings (columns, priority badges, assignee, due date, compact mode, default priority/status) now correctly propagate to the webview ([#2](https://github.com/LachyFS/kanban-lite/issues/2))
136
+ - Quick add input uses configured default priority instead of hardcoded value
137
+ - Create feature dialog uses configured default priority and status
138
+
139
+ ### Changed
140
+ - Removed obsolete macOS entitlements and icon files from the build directory
141
+
142
+ ### Thanks
143
+ - [@hodanli](https://github.com/hodanli) for reporting the priority badges settings bug ([#2](https://github.com/LachyFS/kanban-lite/issues/2))
144
+
145
+ ## [0.1.4] - 2026-01-29
146
+
147
+ ### Added
148
+ - Pressing `enter` in the title input field moves cursor to the description textarea, `shift-enter` creates a new line
149
+
150
+ ### Fixed
151
+ - Prevent opening new feature panel when editing an existing feature with `n` hotkey
152
+ - Use `resourceLangId` instead of hardcoded path for kanban-lite command ([#1](https://github.com/LachyFS/kanban-lite/issues/1))
153
+ - Remove hardcoded devtool resource path for `editor/title/run` menu item ([#1](https://github.com/LachyFS/kanban-lite/issues/1))
154
+ - Removed redundant tile heading in edit view UI, (title is already visible in markdown editor)
155
+
156
+ ### Thanks
157
+ - [@SuperbDotHub](https://github.com/SuperbDotHub) for reporting the features directory path bug ([#1](https://github.com/LachyFS/kanban-lite/issues/1))
158
+
159
+ ## [0.1.1] - 2026-01-28
160
+
161
+ ### Added
162
+ - AI agent integration for starting feature creation with Claude, Codex, or OpenCode
163
+ - Keyboard shortcuts for AI actions
164
+ - Configurable kanban columns with custom colors
165
+ - Priority badges, assignee, and due date display options
166
+ - Compact mode setting for feature cards
167
+ - Marketplace publishing support (VS Code + Open VSX)
168
+
169
+ ### Changed
170
+ - Updated repository URLs to reflect new ownership
171
+ - Replaced SVG icons with PNG formats for better compatibility
172
+ - Enhanced README with installation instructions and images
173
+
174
+ ## [0.1.0] - 2026-01-27
175
+
176
+ ### Added
177
+ - Initial release
178
+ - Kanban board view for managing features as markdown files
179
+ - Drag-and-drop between columns (Backlog, To Do, In Progress, Review, Done)
180
+ - Feature cards with frontmatter metadata (status, priority, assignee, due date)
181
+ - Create, edit, and delete features from the board
182
+ - Configurable features directory
183
+ - Rich markdown editor with Tiptap
184
+ - VS Code webview integration
package/CLAUDE.md ADDED
@@ -0,0 +1,58 @@
1
+ # Kanban Markdown - Development Guide
2
+
3
+ A VSCode extension + standalone server + CLI + MCP server for managing kanban boards stored as markdown files.
4
+
5
+ ## Architecture
6
+
7
+ ```
8
+ src/
9
+ sdk/ # Core SDK (no external dependencies) - KanbanSDK class
10
+ shared/ # Shared types (Feature, KanbanColumn, CardDisplaySettings) and config module
11
+ cli/ # CLI tool (built on SDK)
12
+ mcp-server/ # MCP server (built on SDK + config + webhooks)
13
+ extension/ # VSCode extension
14
+ standalone/ # HTTP server with REST API + WebSocket + file watcher
15
+ webview/ # React frontend (shared by extension + standalone)
16
+ ```
17
+
18
+ ## Key Files
19
+
20
+ - `src/sdk/KanbanSDK.ts` - Core card/column CRUD operations
21
+ - `src/sdk/parser.ts` - Markdown frontmatter parsing and serialization
22
+ - `src/shared/types.ts` - All TypeScript types and enums
23
+ - `src/shared/config.ts` - `.kanban.json` config read/write, settings conversion
24
+ - `src/standalone/server.ts` - HTTP server with all REST API routes + WebSocket
25
+ - `src/standalone/webhooks.ts` - Webhook CRUD and delivery
26
+ - `src/cli/index.ts` - All CLI commands
27
+ - `src/mcp-server/index.ts` - All MCP tool definitions
28
+
29
+ ## Build
30
+
31
+ ```bash
32
+ npm run build # Build everything
33
+ npm run build:cli # CLI only
34
+ npm run build:mcp # MCP server only
35
+ npm run build:standalone-server # HTTP server only
36
+ npx tsc --noEmit # Type-check
37
+ npm test # Run tests (vitest)
38
+ ```
39
+
40
+ ## Feature Parity
41
+
42
+ All three interfaces (API, CLI, MCP) support the same operations: cards CRUD, columns CRUD, settings get/update, webhooks CRUD, workspace info. When adding new functionality, add it to all three.
43
+
44
+ ## Data Storage
45
+
46
+ - Cards: `.kanban/{status}/card-name-YYYY-MM-DD.md` (markdown with YAML frontmatter)
47
+ - Config: `.kanban.json` (columns, display settings)
48
+ - Webhooks: `.kanban-webhooks.json`
49
+ - SDK board config: `.kanban/board.json` (used by SDK for column management)
50
+
51
+ ## Conventions
52
+
53
+ - Card IDs are auto-generated from title + date
54
+ - Partial ID matching is supported across all interfaces
55
+ - Fractional indexing (base-62) for card ordering within columns
56
+ - `completedAt` is auto-managed when status changes to/from `done`
57
+ - `modified` timestamp is auto-updated on any change
58
+ - The standalone server uses synchronous `fs` operations; the SDK uses async `fs/promises`
@@ -0,0 +1,114 @@
1
+ # Contributing to Kanban Lite
2
+
3
+ Thanks for your interest in contributing to Kanban Lite! This guide will help you get started.
4
+
5
+ ## Getting Started
6
+
7
+ ### Prerequisites
8
+
9
+ - [Node.js](https://nodejs.org/) (v18+)
10
+ - [VS Code](https://code.visualstudio.com/) (v1.85.0+)
11
+ - npm
12
+
13
+ ### Setup
14
+
15
+ 1. Fork and clone the repository:
16
+
17
+ ```sh
18
+ git clone https://github.com/<your-username>/kanban-lite.git
19
+ cd kanban-lite
20
+ ```
21
+
22
+ 2. Install dependencies:
23
+
24
+ ```sh
25
+ npm install
26
+ ```
27
+
28
+ 3. Start the development watcher:
29
+
30
+ ```sh
31
+ npm run dev
32
+ ```
33
+
34
+ 4. Press `F5` in VS Code to launch the Extension Development Host.
35
+
36
+ ## Project Structure
37
+
38
+ ```
39
+ src/
40
+ ├── extension/ # VS Code extension backend (Node.js)
41
+ │ ├── index.ts # Extension entry point
42
+ │ └── ...
43
+ ├── shared/ # Types shared between extension and webview
44
+ │ └── types.ts
45
+ └── webview/ # React frontend (Vite + Tailwind)
46
+ ├── App.tsx
47
+ ├── components/
48
+ ├── store/
49
+ └── ...
50
+ ```
51
+
52
+ - **Extension** is bundled with esbuild (`npm run build:extension`)
53
+ - **Webview** is bundled with Vite (`npm run build:webview`)
54
+
55
+ ## Development
56
+
57
+ ### Available Scripts
58
+
59
+ | Command | Description |
60
+ |---|---|
61
+ | `npm run dev` | Watch mode for both extension and webview |
62
+ | `npm run build` | Production build |
63
+ | `npm run lint` | Run ESLint |
64
+ | `npm run typecheck` | Run TypeScript type checking |
65
+ | `npm run package` | Package the extension as a `.vsix` |
66
+
67
+ ### Code Style
68
+
69
+ - **Prettier** is configured — single quotes, no semicolons, 100 char line width
70
+ - **2-space indentation**, UTF-8, LF line endings
71
+ - Run `npm run lint` before submitting a PR
72
+
73
+ ## Submitting Changes
74
+
75
+ 1. Create a branch from `main`:
76
+
77
+ ```sh
78
+ git checkout -b my-feature
79
+ ```
80
+
81
+ 2. Make your changes and verify they work:
82
+
83
+ ```sh
84
+ npm run lint
85
+ npm run typecheck
86
+ npm run build
87
+ ```
88
+
89
+ 3. Commit your changes with a clear message:
90
+
91
+ ```
92
+ feat: add drag-and-drop reordering within columns
93
+ fix: prevent duplicate feature IDs on rapid creation
94
+ ```
95
+
96
+ We loosely follow [Conventional Commits](https://www.conventionalcommits.org/) (`feat:`, `fix:`, `chore:`, `docs:`, etc.).
97
+
98
+ 4. Push your branch and open a pull request against `main`.
99
+
100
+ ## Reporting Bugs
101
+
102
+ Open an issue at [GitHub Issues](https://github.com/LachyFS/kanban-lite/issues) with:
103
+
104
+ - Steps to reproduce
105
+ - Expected vs actual behavior
106
+ - VS Code version and OS
107
+
108
+ ## Feature Requests
109
+
110
+ Feature requests are welcome! Please open an issue describing the use case and proposed behavior.
111
+
112
+ ## License
113
+
114
+ By contributing, you agree that your contributions will be licensed under the [MIT License](LICENSE).
package/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 LachyFS
4
+ Copyright (c) 2026 LachyFS
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.