claude-kan 1.0.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.
Files changed (94) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +136 -0
  3. package/dist/cli/index.d.ts +11 -0
  4. package/dist/cli/index.d.ts.map +1 -0
  5. package/dist/cli/index.js +70 -0
  6. package/dist/cli/index.js.map +1 -0
  7. package/dist/cli/init.d.ts +5 -0
  8. package/dist/cli/init.d.ts.map +1 -0
  9. package/dist/cli/init.js +206 -0
  10. package/dist/cli/init.js.map +1 -0
  11. package/dist/cli.d.ts +6 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +299 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/core/card.d.ts +29 -0
  16. package/dist/core/card.d.ts.map +1 -0
  17. package/dist/core/card.js +188 -0
  18. package/dist/core/card.js.map +1 -0
  19. package/dist/core/conflict.d.ts +13 -0
  20. package/dist/core/conflict.d.ts.map +1 -0
  21. package/dist/core/conflict.js +85 -0
  22. package/dist/core/conflict.js.map +1 -0
  23. package/dist/core/kanban.d.ts +22 -0
  24. package/dist/core/kanban.d.ts.map +1 -0
  25. package/dist/core/kanban.js +53 -0
  26. package/dist/core/kanban.js.map +1 -0
  27. package/dist/core/session.d.ts +21 -0
  28. package/dist/core/session.d.ts.map +1 -0
  29. package/dist/core/session.js +115 -0
  30. package/dist/core/session.js.map +1 -0
  31. package/dist/core/types.d.ts +50 -0
  32. package/dist/core/types.d.ts.map +1 -0
  33. package/dist/core/types.js +6 -0
  34. package/dist/core/types.js.map +1 -0
  35. package/dist/index.d.ts +16 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +32 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/skills/kanboard.d.ts +8 -0
  40. package/dist/skills/kanboard.d.ts.map +1 -0
  41. package/dist/skills/kanboard.js +118 -0
  42. package/dist/skills/kanboard.js.map +1 -0
  43. package/dist/skills/kanboardfull.d.ts +7 -0
  44. package/dist/skills/kanboardfull.d.ts.map +1 -0
  45. package/dist/skills/kanboardfull.js +137 -0
  46. package/dist/skills/kanboardfull.js.map +1 -0
  47. package/dist/skills/kanboardweb.d.ts +11 -0
  48. package/dist/skills/kanboardweb.d.ts.map +1 -0
  49. package/dist/skills/kanboardweb.js +489 -0
  50. package/dist/skills/kanboardweb.js.map +1 -0
  51. package/dist/skills/kancard.d.ts +10 -0
  52. package/dist/skills/kancard.d.ts.map +1 -0
  53. package/dist/skills/kancard.js +169 -0
  54. package/dist/skills/kancard.js.map +1 -0
  55. package/dist/skills/kancreate.d.ts +6 -0
  56. package/dist/skills/kancreate.d.ts.map +1 -0
  57. package/dist/skills/kancreate.js +60 -0
  58. package/dist/skills/kancreate.js.map +1 -0
  59. package/dist/skills/kandoctor.d.ts +17 -0
  60. package/dist/skills/kandoctor.d.ts.map +1 -0
  61. package/dist/skills/kandoctor.js +401 -0
  62. package/dist/skills/kandoctor.js.map +1 -0
  63. package/dist/skills/kanhelp.d.ts +7 -0
  64. package/dist/skills/kanhelp.d.ts.map +1 -0
  65. package/dist/skills/kanhelp.js +194 -0
  66. package/dist/skills/kanhelp.js.map +1 -0
  67. package/dist/skills/kanprune.d.ts +11 -0
  68. package/dist/skills/kanprune.d.ts.map +1 -0
  69. package/dist/skills/kanprune.js +131 -0
  70. package/dist/skills/kanprune.js.map +1 -0
  71. package/dist/skills/kansync.d.ts +7 -0
  72. package/dist/skills/kansync.d.ts.map +1 -0
  73. package/dist/skills/kansync.js +41 -0
  74. package/dist/skills/kansync.js.map +1 -0
  75. package/dist/skills/kanupdate.d.ts +6 -0
  76. package/dist/skills/kanupdate.d.ts.map +1 -0
  77. package/dist/skills/kanupdate.js +74 -0
  78. package/dist/skills/kanupdate.js.map +1 -0
  79. package/dist/skills/session-debug.d.ts +6 -0
  80. package/dist/skills/session-debug.d.ts.map +1 -0
  81. package/dist/skills/session-debug.js +124 -0
  82. package/dist/skills/session-debug.js.map +1 -0
  83. package/dist/templates/skill-templates/kanboard/SKILL.md +26 -0
  84. package/dist/templates/skill-templates/kanboardfull/SKILL.md +28 -0
  85. package/dist/templates/skill-templates/kanboardweb/SKILL.md +137 -0
  86. package/dist/templates/skill-templates/kancard/SKILL.md +70 -0
  87. package/dist/templates/skill-templates/kancreate/SKILL.md +45 -0
  88. package/dist/templates/skill-templates/kandoctor/SKILL.md +58 -0
  89. package/dist/templates/skill-templates/kanhelp/SKILL.md +34 -0
  90. package/dist/templates/skill-templates/kanprune/SKILL.md +102 -0
  91. package/dist/templates/skill-templates/kansync/SKILL.md +21 -0
  92. package/dist/templates/skill-templates/kanupdate/SKILL.md +44 -0
  93. package/dist/templates/skill-templates/session-debug/SKILL.md +25 -0
  94. package/package.json +50 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 claude-kan Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,136 @@
1
+ # claude-kan
2
+
3
+ > Persistent file-based Kanban system for Claude Code with 10+ skills for seamless task management
4
+
5
+ [![npm version](https://img.shields.io/npm/v/claude-kan.svg)](https://www.npmjs.com/package/claude-kan)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+
8
+ ---
9
+
10
+ ## 📋 Purpose
11
+
12
+ **claude-kan** is a standalone, file-based Kanban system designed specifically for Claude Code users who want persistent task management across coding sessions.
13
+
14
+ ### Why This Exists
15
+
16
+ When working with Claude Code, tasks and context disappear between sessions. claude-kan solves this by:
17
+
18
+ 1. **Persistent Storage** - Tasks stored as markdown files in `docs/tasks/` organized by status and session
19
+ 2. **Session Tracking** - Auto-detects Claude Code session IDs to organize work chronologically
20
+ 3. **Zero Configuration** - Works out of the box with any project (Next.js, React, Node.js, etc.)
21
+ 4. **Rich Tooling** - 10+ skills for creating, updating, viewing, and managing tasks
22
+ 5. **Visual Options** - Terminal board, full board, and HTML web view
23
+ 6. **Git-Friendly** - Markdown files integrate naturally with version control
24
+
25
+ ### Core Features
26
+
27
+ - ✅ **10+ Skills**: `/kanboard`, `/kancreate`, `/kanupdate`, `/kancard`, `/kanprune`, `/kanboardweb`, etc.
28
+ - ✅ **File-Based**: No database required - just markdown files
29
+ - ✅ **Session-Aware**: Automatically tracks Claude Code sessions
30
+ - ✅ **Multiple Views**: Terminal (compact/full) and HTML web views
31
+ - ✅ **Cross-Project**: Install in any JavaScript/TypeScript project
32
+ - ✅ **Offline-First**: Works without internet connection
33
+ - ✅ **Git Integration**: Track task history with your code changes
34
+
35
+ ---
36
+
37
+ ## 🚀 Quick Start (For Users)
38
+
39
+ ### Installation
40
+
41
+ ```bash
42
+ # Install in your project
43
+ npx claude-kan init
44
+ ```
45
+
46
+ This creates:
47
+ - `.claude/skills/` - Skill definitions for Claude Code
48
+ - `.kanhelper/` - Compiled system code
49
+ - `docs/tasks/` - Task storage with folders for each status
50
+
51
+ ### Natural Language Workflow (Recommended)
52
+
53
+ Use natural prompts with Claude, and Claude can run the right kanban skill for you:
54
+
55
+ - "Create a card for implementing OAuth login" → `/kancreate "Implement OAuth login" Add OAuth flow support`
56
+ - "Move task 3 to in progress" → `/kanupdate 3 in_progress`
57
+ - "Show me the board" → `/kanboard`
58
+ - "Show all columns" → `/kanboardfull`
59
+ - "Open the web board" → `/kanboardweb`
60
+ - "Show card 3" → `/kancard 3`
61
+
62
+ ### Quick Command Reference
63
+
64
+ **Creating & Managing Cards**
65
+ - `/kancreate "subject" description` - Create new task + card
66
+ - `/kanupdate {taskId} {status}` - Update card status
67
+ - `/kancard {query}` - View individual card details
68
+
69
+ **Viewing Your Board**
70
+ - `/kanboard` - Compact board view (active columns)
71
+ - `/kanboardfull` - Full board view (all columns)
72
+ - `/kanboardweb` - HTML board that opens in browser
73
+
74
+ **Maintenance**
75
+ - `/kansync` - Manually sync task state
76
+ - `/kandoctor` - Run system health check
77
+ - `/kanprune` - Delete all cards in `deleted` status
78
+
79
+ **Status Options**
80
+ - `pending` - Tasks waiting to start
81
+ - `in_progress` - Active work
82
+ - `completed` - Finished tasks
83
+ - `parkinglot` - Deferred or blocked
84
+ - `deleted` - Deleted tasks
85
+
86
+ Cards are stored as git-committable markdown files in `docs/tasks/{status}/{session-id}/`.
87
+
88
+ ---
89
+
90
+ ## 🖼️ Screenshot
91
+
92
+ ![K_BOARD web view](docs/assets/k-board.png)
93
+
94
+ ---
95
+
96
+ ## ⚠️ Limitations
97
+
98
+ - `Task*` hooks in Claude Code currently do not auto-sync with cards, so some updates are manual.
99
+ - `/kanboardweb` generates static HTML and requires regeneration for fresh data.
100
+ - Session detection can fall back to `unknown` if Claude's session metadata cannot be detected.
101
+ - Designed for individual workflow; it is not a multi-user collaborative board.
102
+
103
+ ---
104
+
105
+ ## 📚 Documentation
106
+
107
+ - Install with `npx claude-kan init`.
108
+ - Run `/kanhelp` to see all available skills.
109
+ - Run `/kandoctor` to validate your setup.
110
+ - Task files live in `docs/tasks/` in your project.
111
+
112
+ ---
113
+
114
+ ## 📄 License
115
+
116
+ MIT License - See [LICENSE](LICENSE) file for details.
117
+
118
+ ---
119
+
120
+ ## 🔗 Links
121
+
122
+ - **npm Package**: https://www.npmjs.com/package/claude-kan
123
+ - **GitHub Repository**: https://github.com/sudiptosen/claude-kan
124
+ - **Issue Tracker**: https://github.com/sudiptosen/claude-kan/issues
125
+ - **Claude Code**: https://claude.ai/code
126
+
127
+ ---
128
+
129
+ ## 💬 Support
130
+
131
+ - **Issues**: [GitHub Issues](https://github.com/sudiptosen/claude-kan/issues)
132
+ - **Discussions**: [GitHub Discussions](https://github.com/sudiptosen/claude-kan/discussions)
133
+
134
+ ---
135
+
136
+ **Built with ❤️ for Claude Code users who want persistent task management**
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * claude-kan CLI entry point
4
+ *
5
+ * Usage:
6
+ * npx claude-kan init # Install in current project
7
+ * npx claude-kan --help # Show help
8
+ * npx claude-kan --version # Show version
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG"}
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * claude-kan CLI entry point
5
+ *
6
+ * Usage:
7
+ * npx claude-kan init # Install in current project
8
+ * npx claude-kan --help # Show help
9
+ * npx claude-kan --version # Show version
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const init_1 = require("./init");
13
+ async function main() {
14
+ const args = process.argv.slice(2);
15
+ const command = args[0];
16
+ if (!command || command === '--help' || command === '-h') {
17
+ showHelp();
18
+ process.exit(0);
19
+ }
20
+ if (command === '--version' || command === '-v') {
21
+ showVersion();
22
+ process.exit(0);
23
+ }
24
+ if (command === 'init') {
25
+ const options = {
26
+ skipGitignore: args.includes('--skip-gitignore')
27
+ };
28
+ try {
29
+ await (0, init_1.install)(options);
30
+ process.exit(0);
31
+ }
32
+ catch (error) {
33
+ const message = error instanceof Error ? error.message : String(error);
34
+ console.error('❌ Installation failed:', message);
35
+ process.exit(1);
36
+ }
37
+ }
38
+ else {
39
+ console.error(`Unknown command: ${command}`);
40
+ showHelp();
41
+ process.exit(1);
42
+ }
43
+ }
44
+ function showHelp() {
45
+ console.log(`
46
+ claude-kan - Persistent Kanban system for Claude Code
47
+
48
+ Usage:
49
+ npx claude-kan init Install Kanban system in current project
50
+ npx claude-kan init --skip-gitignore Skip .gitignore updates
51
+ npx claude-kan --help Show this help message
52
+ npx claude-kan --version Show version
53
+
54
+ After installation, use these skills in Claude Code:
55
+ /kanboard View Kanban board
56
+ /kancreate Create new card
57
+ /kanupdate Update card status
58
+ /kancard View card details
59
+ /kanhelp Show all commands
60
+ /kandoctor Run health check
61
+
62
+ Documentation: https://github.com/yourusername/claude-kan
63
+ `);
64
+ }
65
+ function showVersion() {
66
+ const packageJson = require('../../package.json');
67
+ console.log(`claude-kan v${packageJson.version}`);
68
+ }
69
+ main();
70
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AACA;;;;;;;GAOG;;AAEH,iCAAiC;AAEjC,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAExB,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACzD,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAChD,WAAW,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG;YACd,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;SACjD,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,IAAA,cAAO,EAAC,OAAO,CAAC,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;QAC7C,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;GAkBX,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW;IAClB,MAAM,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,eAAe,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface InstallOptions {
2
+ skipGitignore?: boolean;
3
+ }
4
+ export declare function install(options?: InstallOptions): Promise<void>;
5
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAsB,OAAO,CAAC,OAAO,GAAE,cAAmB,iBAiCzD"}
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.install = install;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const child_process_1 = require("child_process");
10
+ async function install(options = {}) {
11
+ const targetDir = process.cwd();
12
+ console.log('\n📦 Installing claude-kan...\n');
13
+ try {
14
+ // 1. Create directory structure
15
+ createDirectories(targetDir);
16
+ // 2. Copy skill templates
17
+ copySkillTemplates(targetDir);
18
+ // 3. Copy compiled code
19
+ copyCompiledCode(targetDir);
20
+ // 4. Create initial task files
21
+ createTaskFiles(targetDir);
22
+ // 5. Update .gitignore
23
+ if (!options.skipGitignore) {
24
+ updateGitignore(targetDir);
25
+ }
26
+ // 6. Run health check
27
+ const healthPassed = runHealthCheck(targetDir);
28
+ // 7. Show success message
29
+ displaySuccessMessage(healthPassed);
30
+ }
31
+ catch (error) {
32
+ const message = error instanceof Error ? error.message : String(error);
33
+ throw new Error(`Installation failed: ${message}`);
34
+ }
35
+ }
36
+ function createDirectories(targetDir) {
37
+ console.log('📁 Creating directories...');
38
+ const dirs = [
39
+ '.claude/skills',
40
+ '.kanhelper/dist',
41
+ 'docs/tasks/pending',
42
+ 'docs/tasks/in_progress',
43
+ 'docs/tasks/completed',
44
+ 'docs/tasks/parkinglot',
45
+ 'docs/tasks/deleted'
46
+ ];
47
+ for (const dir of dirs) {
48
+ const fullPath = path_1.default.join(targetDir, dir);
49
+ if (!fs_1.default.existsSync(fullPath)) {
50
+ fs_1.default.mkdirSync(fullPath, { recursive: true });
51
+ console.log(` ✓ ${dir}`);
52
+ }
53
+ else {
54
+ console.log(` - ${dir} (already exists)`);
55
+ }
56
+ }
57
+ }
58
+ function copySkillTemplates(targetDir) {
59
+ console.log('\n📝 Installing skills...');
60
+ // Get the path to skill templates in the installed package
61
+ const packageRoot = path_1.default.resolve(__dirname, '../..');
62
+ const templatesDir = path_1.default.join(packageRoot, 'dist', 'templates', 'skill-templates');
63
+ if (!fs_1.default.existsSync(templatesDir)) {
64
+ throw new Error(`Skill templates not found at: ${templatesDir}`);
65
+ }
66
+ const skills = fs_1.default.readdirSync(templatesDir);
67
+ for (const skill of skills) {
68
+ const srcPath = path_1.default.join(templatesDir, skill);
69
+ const destPath = path_1.default.join(targetDir, '.claude', 'skills', skill);
70
+ if (fs_1.default.statSync(srcPath).isDirectory()) {
71
+ copyRecursive(srcPath, destPath);
72
+ console.log(` ✓ ${skill}`);
73
+ }
74
+ }
75
+ }
76
+ function copyCompiledCode(targetDir) {
77
+ console.log('\n⚙️ Installing Kanban system...');
78
+ // Copy dist folder
79
+ const packageRoot = path_1.default.resolve(__dirname, '../..');
80
+ const distSrc = path_1.default.join(packageRoot, 'dist');
81
+ const distDest = path_1.default.join(targetDir, '.kanhelper', 'dist');
82
+ if (fs_1.default.existsSync(distDest)) {
83
+ fs_1.default.rmSync(distDest, { recursive: true });
84
+ }
85
+ copyRecursive(distSrc, distDest);
86
+ console.log(' ✓ Compiled code');
87
+ // Copy package.json
88
+ const pkgSrc = path_1.default.join(packageRoot, 'package.json');
89
+ const pkgDest = path_1.default.join(targetDir, '.kanhelper', 'package.json');
90
+ fs_1.default.copyFileSync(pkgSrc, pkgDest);
91
+ console.log(' ✓ package.json');
92
+ }
93
+ function createTaskFiles(targetDir) {
94
+ console.log('\n📋 Creating task files...');
95
+ const todoPath = path_1.default.join(targetDir, 'docs', 'tasks', 'todo.md');
96
+ if (!fs_1.default.existsSync(todoPath)) {
97
+ const todoContent = `# Task Tracker
98
+
99
+ ## Current Tasks
100
+
101
+ *Use /kancreate to add tasks*
102
+
103
+ ## Completed
104
+
105
+ *Completed tasks move to docs/tasks/completed/*
106
+ `;
107
+ fs_1.default.writeFileSync(todoPath, todoContent);
108
+ console.log(' ✓ todo.md');
109
+ }
110
+ else {
111
+ console.log(' - todo.md (already exists)');
112
+ }
113
+ const lessonsPath = path_1.default.join(targetDir, 'docs', 'tasks', 'lessons.md');
114
+ if (!fs_1.default.existsSync(lessonsPath)) {
115
+ const lessonsContent = `# Lessons Learned
116
+
117
+ ## Session Notes
118
+
119
+ *Document key learnings and decisions here*
120
+ `;
121
+ fs_1.default.writeFileSync(lessonsPath, lessonsContent);
122
+ console.log(' ✓ lessons.md');
123
+ }
124
+ else {
125
+ console.log(' - lessons.md (already exists)');
126
+ }
127
+ }
128
+ function updateGitignore(targetDir) {
129
+ console.log('\n🔧 Updating .gitignore...');
130
+ const gitignorePath = path_1.default.join(targetDir, '.gitignore');
131
+ let gitignoreContent = '';
132
+ if (fs_1.default.existsSync(gitignorePath)) {
133
+ gitignoreContent = fs_1.default.readFileSync(gitignorePath, 'utf-8');
134
+ }
135
+ const kanbanEntries = [
136
+ '# Claude Kanban',
137
+ '.kanhelper/node_modules/',
138
+ '.kanhelper/dist/',
139
+ 'docs/tasks/kb.html'
140
+ ];
141
+ const hasKanbanEntries = kanbanEntries.some(entry => gitignoreContent.includes(entry));
142
+ if (!hasKanbanEntries) {
143
+ const newContent = gitignoreContent.trim() + '\n\n' + kanbanEntries.join('\n') + '\n';
144
+ fs_1.default.writeFileSync(gitignorePath, newContent);
145
+ console.log(' ✓ Added Kanban entries');
146
+ }
147
+ else {
148
+ console.log(' - Kanban entries already present');
149
+ }
150
+ }
151
+ function runHealthCheck(targetDir) {
152
+ console.log('\n🏥 Running health check...\n');
153
+ try {
154
+ const healthScript = path_1.default.join(targetDir, '.kanhelper', 'dist', 'skills', 'kandoctor.js');
155
+ if (!fs_1.default.existsSync(healthScript)) {
156
+ console.log(' ⚠️ Health check script not found');
157
+ return false;
158
+ }
159
+ (0, child_process_1.execSync)(`node "${healthScript}"`, {
160
+ cwd: targetDir,
161
+ stdio: 'inherit'
162
+ });
163
+ return true;
164
+ }
165
+ catch (error) {
166
+ console.log(' ⚠️ Health check failed');
167
+ return false;
168
+ }
169
+ }
170
+ function displaySuccessMessage(healthPassed) {
171
+ console.log('\n' + '='.repeat(60));
172
+ console.log('✅ Installation complete!');
173
+ console.log('='.repeat(60));
174
+ if (healthPassed) {
175
+ console.log('\n✨ All systems operational!');
176
+ }
177
+ else {
178
+ console.log('\n⚠️ Some checks failed. Review output above.');
179
+ }
180
+ console.log('\n📚 Next steps:');
181
+ console.log(' 1. Type /kanhelp in Claude Code to see all commands');
182
+ console.log(' 2. Type /kanboard to view your Kanban board');
183
+ console.log(' 3. Type /kancreate to create your first task');
184
+ console.log('\n💡 Tip: Use /kandoctor anytime to check system health\n');
185
+ }
186
+ function copyRecursive(src, dest) {
187
+ if (!fs_1.default.existsSync(src)) {
188
+ throw new Error(`Source path does not exist: ${src}`);
189
+ }
190
+ const stat = fs_1.default.statSync(src);
191
+ if (stat.isDirectory()) {
192
+ if (!fs_1.default.existsSync(dest)) {
193
+ fs_1.default.mkdirSync(dest, { recursive: true });
194
+ }
195
+ const files = fs_1.default.readdirSync(src);
196
+ for (const file of files) {
197
+ const srcPath = path_1.default.join(src, file);
198
+ const destPath = path_1.default.join(dest, file);
199
+ copyRecursive(srcPath, destPath);
200
+ }
201
+ }
202
+ else {
203
+ fs_1.default.copyFileSync(src, dest);
204
+ }
205
+ }
206
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI tool for Claude Kanban initialization and management
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;GAEG"}