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
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Kanprune skill - Permanently delete all cards in deleted status
4
+ * ⚠️ DESTRUCTIVE OPERATION - Requires explicit confirmation
5
+ */
6
+ /**
7
+ * Permanently delete all cards in deleted status
8
+ */
9
+ declare function pruneDeletedCards(force?: boolean): Promise<void>;
10
+ export { pruneDeletedCards };
11
+ //# sourceMappingURL=kanprune.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kanprune.d.ts","sourceRoot":"","sources":["../../src/skills/kanprune.ts"],"names":[],"mappings":";AACA;;;GAGG;AAqCH;;GAEG;AACH,iBAAe,iBAAiB,CAAC,KAAK,GAAE,OAAe,iBA8FtD;AASD,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,131 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Kanprune skill - Permanently delete all cards in deleted status
5
+ * ⚠️ DESTRUCTIVE OPERATION - Requires explicit confirmation
6
+ */
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.pruneDeletedCards = pruneDeletedCards;
12
+ const fs_1 = __importDefault(require("fs"));
13
+ const path_1 = __importDefault(require("path"));
14
+ const readline_1 = __importDefault(require("readline"));
15
+ const card_1 = require("../core/card");
16
+ // ANSI styling
17
+ const colors = {
18
+ yellow: (text) => `\x1b[33m${text}\x1b[0m`,
19
+ blue: (text) => `\x1b[34m${text}\x1b[0m`,
20
+ green: (text) => `\x1b[32m${text}\x1b[0m`,
21
+ gray: (text) => `\x1b[90m${text}\x1b[0m`,
22
+ cyan: (text) => `\x1b[36m${text}\x1b[0m`,
23
+ red: (text) => `\x1b[31m${text}\x1b[0m`,
24
+ bold: (text) => `\x1b[1m${text}\x1b[0m`,
25
+ dim: (text) => `\x1b[2m${text}\x1b[0m`
26
+ };
27
+ /**
28
+ * Ask for user confirmation
29
+ */
30
+ function askConfirmation(question) {
31
+ const rl = readline_1.default.createInterface({
32
+ input: process.stdin,
33
+ output: process.stdout
34
+ });
35
+ return new Promise((resolve) => {
36
+ rl.question(question, (answer) => {
37
+ rl.close();
38
+ const normalized = answer.trim().toLowerCase();
39
+ resolve(normalized === 'yes' || normalized === 'y');
40
+ });
41
+ });
42
+ }
43
+ /**
44
+ * Permanently delete all cards in deleted status
45
+ */
46
+ async function pruneDeletedCards(force = false) {
47
+ try {
48
+ // Get all deleted cards
49
+ const deletedCards = (0, card_1.getCardsByStatus)('deleted');
50
+ if (deletedCards.length === 0) {
51
+ console.log(colors.green('✅ No deleted cards to prune'));
52
+ console.log(colors.dim(' All clean!'));
53
+ return;
54
+ }
55
+ // Display warning header
56
+ console.log(colors.bold(colors.red('\n⚠️ DESTRUCTIVE OPERATION WARNING ⚠️')));
57
+ console.log(colors.dim('═'.repeat(50)));
58
+ console.log('');
59
+ // List all cards that will be deleted
60
+ console.log(colors.bold('The following cards will be PERMANENTLY DELETED:\n'));
61
+ deletedCards.forEach((item, idx) => {
62
+ const { card, path: cardPath } = item;
63
+ console.log(colors.yellow(`${idx + 1}. ${card.subject}`));
64
+ console.log(colors.dim(` Session: ${card.session.slice(0, 8)}...`));
65
+ console.log(colors.dim(` Created: ${new Date(card.created).toLocaleDateString()}`));
66
+ console.log(colors.dim(` Path: ${cardPath}`));
67
+ console.log('');
68
+ });
69
+ console.log(colors.bold(colors.red(`Total: ${deletedCards.length} card${deletedCards.length !== 1 ? 's' : ''} will be permanently deleted`)));
70
+ console.log(colors.dim('This action CANNOT be undone!\n'));
71
+ // Ask for confirmation (unless --force flag is used)
72
+ if (!force) {
73
+ const confirmed = await askConfirmation(colors.bold('Type "yes" to confirm deletion (or anything else to cancel): '));
74
+ if (!confirmed) {
75
+ console.log(colors.yellow('\n❌ Pruning cancelled'));
76
+ console.log(colors.dim(' No files were deleted'));
77
+ process.exit(0);
78
+ }
79
+ }
80
+ else {
81
+ console.log(colors.yellow('⚡ --force flag detected, skipping confirmation\n'));
82
+ }
83
+ // Perform deletion
84
+ console.log(colors.bold('\n🗑️ Deleting cards...\n'));
85
+ let deleted = 0;
86
+ const errors = [];
87
+ for (const { card, path: cardPath } of deletedCards) {
88
+ try {
89
+ // Delete the card file
90
+ fs_1.default.unlinkSync(cardPath);
91
+ console.log(colors.green(`✅ Deleted: ${card.subject}`));
92
+ deleted++;
93
+ // Clean up empty directories
94
+ const sessionDir = path_1.default.dirname(cardPath);
95
+ const sessionFiles = fs_1.default.readdirSync(sessionDir);
96
+ if (sessionFiles.length === 0) {
97
+ fs_1.default.rmdirSync(sessionDir);
98
+ console.log(colors.dim(` Removed empty session directory`));
99
+ }
100
+ }
101
+ catch (error) {
102
+ const message = error instanceof Error ? error.message : String(error);
103
+ errors.push(`${card.subject}: ${message}`);
104
+ console.log(colors.red(`❌ Failed: ${card.subject}`));
105
+ console.log(colors.dim(` Error: ${message}`));
106
+ }
107
+ }
108
+ // Summary
109
+ console.log('');
110
+ console.log(colors.dim('═'.repeat(50)));
111
+ console.log(colors.bold(colors.cyan('\n📊 Pruning Summary:\n')));
112
+ console.log(colors.green(`✅ Successfully deleted: ${deleted} card${deleted !== 1 ? 's' : ''}`));
113
+ if (errors.length > 0) {
114
+ console.log(colors.red(`❌ Failed: ${errors.length} card${errors.length !== 1 ? 's' : ''}`));
115
+ console.log('');
116
+ errors.forEach(err => console.log(colors.dim(` - ${err}`)));
117
+ }
118
+ console.log('');
119
+ }
120
+ catch (error) {
121
+ const message = error instanceof Error ? error.message : String(error);
122
+ console.error(colors.red('Error during pruning:'), message);
123
+ process.exit(1);
124
+ }
125
+ }
126
+ // Parse arguments
127
+ const args = process.argv.slice(2);
128
+ const forceFlag = args.includes('--force');
129
+ // Run pruning
130
+ pruneDeletedCards(forceFlag);
131
+ //# sourceMappingURL=kanprune.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kanprune.js","sourceRoot":"","sources":["../../src/skills/kanprune.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Kansync skill - Manually sync task state with Kanban board
4
+ */
5
+ declare function syncCommand(): void;
6
+ export { syncCommand };
7
+ //# sourceMappingURL=kansync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kansync.d.ts","sourceRoot":"","sources":["../../src/skills/kansync.ts"],"names":[],"mappings":";AACA;;GAEG;AAKH,iBAAS,WAAW,SA8BnB;AAOD,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Kansync skill - Manually sync task state with Kanban board
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.syncCommand = syncCommand;
8
+ const kanban_1 = require("../core/kanban");
9
+ const session_1 = require("../core/session");
10
+ function syncCommand() {
11
+ try {
12
+ console.log('\n🔄 Syncing Kanban board...\n');
13
+ // Get session info
14
+ const sessionInfo = (0, session_1.getSessionInfo)();
15
+ if (sessionInfo) {
16
+ console.log(`Current session: ${sessionInfo.currentSession.slice(0, 8)}`);
17
+ if (sessionInfo.lastSession) {
18
+ console.log(`Last session: ${sessionInfo.lastSession.slice(0, 8)}`);
19
+ }
20
+ console.log(`Last updated: ${new Date(sessionInfo.updatedAt).toLocaleString()}\n`);
21
+ }
22
+ // Sync the board
23
+ const result = (0, kanban_1.syncKanban)();
24
+ if (result.errors.length > 0) {
25
+ console.log('⚠️ Sync completed with errors:\n');
26
+ result.errors.forEach(error => console.log(` - ${error}`));
27
+ console.log('');
28
+ }
29
+ console.log(`✅ Sync complete! ${result.synced} cards found.\n`);
30
+ }
31
+ catch (error) {
32
+ const message = error instanceof Error ? error.message : String(error);
33
+ console.error('Error syncing Kanban board:', message);
34
+ process.exit(1);
35
+ }
36
+ }
37
+ // Run if executed directly
38
+ if (require.main === module) {
39
+ syncCommand();
40
+ }
41
+ //# sourceMappingURL=kansync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kansync.js","sourceRoot":"","sources":["../../src/skills/kansync.ts"],"names":[],"mappings":";;AACA;;GAEG;;AA0CM,kCAAW;AAxCpB,2CAA4C;AAC5C,6CAAiD;AAEjD,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAE9C,mBAAmB;QACnB,MAAM,WAAW,GAAG,IAAA,wBAAc,GAAE,CAAC;QACrC,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1E,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,iBAAiB,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACtE,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACrF,CAAC;QAED,iBAAiB;QACjB,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;QAE5B,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,MAAM,iBAAiB,CAAC,CAAC;IAElE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,2BAA2B;AAC3B,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,WAAW,EAAE,CAAC;AAChB,CAAC"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Kanupdate skill - Update Kanban card status linked to Claude task
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=kanupdate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kanupdate.d.ts","sourceRoot":"","sources":["../../src/skills/kanupdate.ts"],"names":[],"mappings":";AACA;;GAEG"}
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Kanupdate skill - Update Kanban card status linked to Claude task
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const card_1 = require("../core/card");
8
+ const session_1 = require("../core/session");
9
+ function parseArgs() {
10
+ const args = process.argv.slice(2);
11
+ const parsed = {};
12
+ for (let i = 0; i < args.length; i++) {
13
+ if (args[i].startsWith('--')) {
14
+ const key = args[i].slice(2);
15
+ const value = args[i + 1];
16
+ parsed[key] = value;
17
+ i++;
18
+ }
19
+ else {
20
+ // Support positional arguments: kanupdate 3 in_progress
21
+ if (!parsed['task-id']) {
22
+ parsed['task-id'] = args[i];
23
+ }
24
+ else if (!parsed['status']) {
25
+ parsed['status'] = args[i];
26
+ }
27
+ }
28
+ }
29
+ return parsed;
30
+ }
31
+ function isValidStatus(status) {
32
+ return ['pending', 'in_progress', 'completed', 'parkinglot', 'deleted'].includes(status);
33
+ }
34
+ try {
35
+ const args = parseArgs();
36
+ // Validate required parameters
37
+ if (!args['task-id'] || !args['status']) {
38
+ console.error('❌ Error: task-id and status are required');
39
+ console.error('Usage: kanupdate --task-id "3" --status "in_progress"');
40
+ console.error(' or: kanupdate 3 in_progress');
41
+ process.exit(1);
42
+ }
43
+ const taskId = args['task-id'];
44
+ const statusArg = args['status'];
45
+ // Validate status
46
+ if (!isValidStatus(statusArg)) {
47
+ console.error(`❌ Error: Invalid status "${statusArg}"`);
48
+ console.error('Valid statuses: pending, in_progress, completed, parkinglot, deleted');
49
+ process.exit(1);
50
+ }
51
+ const newStatus = statusArg;
52
+ const sessionId = (0, session_1.getSessionId)();
53
+ const fullTaskId = `${sessionId}-${taskId}`;
54
+ // Find the card
55
+ const cardPath = (0, card_1.findCardByTaskId)(fullTaskId);
56
+ if (!cardPath) {
57
+ console.error(`❌ Error: Card not found for task ID ${fullTaskId}`);
58
+ console.error(`Searched session: ${sessionId}, task: ${taskId}`);
59
+ process.exit(1);
60
+ }
61
+ // Move the card to new status
62
+ const newPath = (0, card_1.moveCard)(cardPath, newStatus);
63
+ console.log(`✅ Updated Kanban card`);
64
+ console.log(` Task ID: ${fullTaskId}`);
65
+ console.log(` New status: ${newStatus}`);
66
+ console.log(` Old path: ${cardPath}`);
67
+ console.log(` New path: ${newPath}`);
68
+ }
69
+ catch (error) {
70
+ const message = error instanceof Error ? error.message : String(error);
71
+ console.error('❌ Error updating Kanban card:', message);
72
+ process.exit(1);
73
+ }
74
+ //# sourceMappingURL=kanupdate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kanupdate.js","sourceRoot":"","sources":["../../src/skills/kanupdate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Session Debug skill - Diagnostic tool for session information
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=session-debug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-debug.d.ts","sourceRoot":"","sources":["../../src/skills/session-debug.ts"],"names":[],"mappings":";AACA;;GAEG"}
@@ -0,0 +1,124 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Session Debug skill - Diagnostic tool for session information
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const child_process_1 = require("child_process");
11
+ const fs_1 = __importDefault(require("fs"));
12
+ const path_1 = __importDefault(require("path"));
13
+ console.log('\n🔍 SESSION DEBUG INFORMATION\n');
14
+ console.log('═'.repeat(80));
15
+ // 1. Environment Variables
16
+ console.log('\n📦 ENVIRONMENT VARIABLES\n');
17
+ console.log('CLAUDE_SESSION_ID:', process.env.CLAUDE_SESSION_ID || '(not set)');
18
+ const claudeVars = Object.keys(process.env).filter(k => k.startsWith('CLAUDE_'));
19
+ if (claudeVars.length > 0) {
20
+ console.log('\nAll CLAUDE_* variables:');
21
+ claudeVars.forEach(key => {
22
+ console.log(` ${key}: ${process.env[key]}`);
23
+ });
24
+ }
25
+ else {
26
+ console.log('\nNo CLAUDE_* environment variables found');
27
+ }
28
+ // 2. Process Information
29
+ console.log('\n⚙️ PROCESS INFORMATION\n');
30
+ console.log('Process ID (PID):', process.pid);
31
+ console.log('Parent PID:', process.ppid);
32
+ console.log('Current working directory:', process.cwd());
33
+ console.log('Node version:', process.version);
34
+ console.log('Platform:', process.platform);
35
+ try {
36
+ const parentInfo = (0, child_process_1.execSync)(`ps -p ${process.ppid} -o comm=`, { encoding: 'utf-8' }).trim();
37
+ console.log('Parent process:', parentInfo);
38
+ }
39
+ catch (error) {
40
+ console.log('Parent process: (unable to determine)');
41
+ }
42
+ // 3. Git Information
43
+ console.log('\n🔀 GIT INFORMATION\n');
44
+ try {
45
+ const gitBranch = (0, child_process_1.execSync)('git rev-parse --abbrev-ref HEAD', { encoding: 'utf-8' }).trim();
46
+ console.log('Current git branch:', gitBranch);
47
+ const gitRoot = (0, child_process_1.execSync)('git rev-parse --show-toplevel', { encoding: 'utf-8' }).trim();
48
+ console.log('Git root:', gitRoot);
49
+ const shortHash = (0, child_process_1.execSync)('git rev-parse --short HEAD', { encoding: 'utf-8' }).trim();
50
+ console.log('Current commit (short):', shortHash);
51
+ }
52
+ catch (error) {
53
+ console.log('Not in a git repository or git not available');
54
+ }
55
+ // 4. Claude Code Configuration Files
56
+ console.log('\n📁 CLAUDE CODE FILES\n');
57
+ const claudePaths = [
58
+ '.claude/session',
59
+ '.claude/current-session',
60
+ '.claude/session-id',
61
+ '.claude/config.json',
62
+ path_1.default.join(process.env.HOME || '~', '.claude/session'),
63
+ path_1.default.join(process.env.HOME || '~', '.claude/config.json'),
64
+ ];
65
+ claudePaths.forEach(p => {
66
+ const fullPath = p.startsWith('.claude') ? path_1.default.join(process.cwd(), p) : p;
67
+ if (fs_1.default.existsSync(fullPath)) {
68
+ console.log(`✓ Found: ${p}`);
69
+ try {
70
+ const stat = fs_1.default.statSync(fullPath);
71
+ if (stat.isFile() && stat.size < 1024) {
72
+ const content = fs_1.default.readFileSync(fullPath, 'utf-8');
73
+ console.log(` Content preview: ${content.substring(0, 100)}${content.length > 100 ? '...' : ''}`);
74
+ }
75
+ }
76
+ catch (err) {
77
+ console.log(` (unable to read)`);
78
+ }
79
+ }
80
+ else {
81
+ console.log(`✗ Not found: ${p}`);
82
+ }
83
+ });
84
+ // 5. Suggested Session ID Sources
85
+ console.log('\n💡 SUGGESTED SESSION ID SOURCES\n');
86
+ // Try different methods to get a session ID
87
+ const suggestions = [];
88
+ // Method 1: Environment variable
89
+ if (process.env.CLAUDE_SESSION_ID) {
90
+ suggestions.push({
91
+ method: 'Environment Variable',
92
+ source: 'process.env.CLAUDE_SESSION_ID',
93
+ value: process.env.CLAUDE_SESSION_ID
94
+ });
95
+ }
96
+ // Method 2: Git branch
97
+ try {
98
+ const branch = (0, child_process_1.execSync)('git rev-parse --abbrev-ref HEAD', { encoding: 'utf-8' }).trim();
99
+ if (branch && branch !== 'main' && branch !== 'master') {
100
+ suggestions.push({
101
+ method: 'Git Branch',
102
+ source: 'git rev-parse --abbrev-ref HEAD',
103
+ value: branch
104
+ });
105
+ }
106
+ }
107
+ catch (err) {
108
+ // Ignore
109
+ }
110
+ // Method 3: Process ID based
111
+ suggestions.push({
112
+ method: 'Process-based (fallback)',
113
+ source: 'timestamp + random',
114
+ value: `session-${Date.now()}-${Math.random().toString(36).substring(7)}`
115
+ });
116
+ console.log('Available session ID options (in priority order):');
117
+ suggestions.forEach((s, i) => {
118
+ console.log(`\n${i + 1}. ${s.method}`);
119
+ console.log(` Source: ${s.source}`);
120
+ console.log(` Value: ${s.value}`);
121
+ });
122
+ console.log('\n═'.repeat(80));
123
+ console.log('\n✅ Debug complete\n');
124
+ //# sourceMappingURL=session-debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-debug.js","sourceRoot":"","sources":["../../src/skills/session-debug.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ ---
2
+ name: kanboard
3
+ description: Display text-based Kanban board in console
4
+ ---
5
+
6
+ # Kanboard Skill
7
+
8
+ Displays all tasks organized by status in a text-based Kanban board.
9
+
10
+ When invoked, this skill executes:
11
+ `node .kanhelper/dist/skills/kanboard.js`
12
+
13
+ ## Usage
14
+
15
+ Simply type `/kanboard` in Claude Code to view your current Kanban board.
16
+
17
+ ## Board Structure
18
+
19
+ - **TODO**: Pending tasks
20
+ - **IN PROGRESS**: Active work
21
+ - **DONE**: Completed tasks
22
+ - **PARKING LOT**: Deferred/blocked tasks
23
+
24
+ Each card shows:
25
+ - Task title
26
+ - Session ID (first 8 characters)
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: kanboardfull
3
+ description: Display full Kanban board with all columns
4
+ ---
5
+
6
+ # Kanboardfull Skill
7
+
8
+ Displays the complete Kanban board structure showing ALL columns, even empty ones.
9
+
10
+ ## Command
11
+
12
+ `node .kanhelper/dist/skills/kanboardfull.js`
13
+
14
+ ## Usage
15
+
16
+ Type `/kanboardfull` to view the complete board with all status columns visible.
17
+
18
+ ## Difference from /kanboard
19
+
20
+ - **`/kanboard`**: Compact view - only shows columns that have cards
21
+ - **`/kanboardfull`**: Full view - shows all 5 columns (PENDING, IN PROGRESS, COMPLETED, PARKING LOT, DELETED)
22
+
23
+ ## When to Use
24
+
25
+ Use `/kanboardfull` when you want to:
26
+ - See the complete board structure
27
+ - Understand all available status columns
28
+ - Get a full overview even with few cards
@@ -0,0 +1,137 @@
1
+ ---
2
+ name: kanboardweb
3
+ description: Generate and open HTML view of Kanban board
4
+ ---
5
+
6
+ # Kanboardweb Skill
7
+
8
+ Generates a beautiful standalone HTML view of your Kanban board and opens it in your default browser.
9
+
10
+ ## Command
11
+
12
+ `node .kanhelper/dist/skills/kanboardweb.js`
13
+
14
+ ## Usage
15
+
16
+ ```bash
17
+ /kanboardweb
18
+ ```
19
+
20
+ Generates `.kanhelper/kanban-board.html` and opens it automatically in your browser.
21
+
22
+ ## Features
23
+
24
+ ### ✨ **Standalone & Portable**
25
+ - Single HTML file with embedded CSS/JS
26
+ - No server required
27
+ - Works offline
28
+ - Can be shared or saved anywhere
29
+
30
+ ### 🎨 **Beautiful Design**
31
+ - Card-based layout (Trello-style)
32
+ - Color-coded columns
33
+ - Status icons (⏳ ▶ ✓ ◼ ✗)
34
+ - Responsive (mobile & desktop)
35
+ - Modern gradient background
36
+
37
+ ### 📊 **Complete Overview**
38
+ - All 5 columns displayed
39
+ - Card counts per column
40
+ - Total card summary
41
+ - Session IDs (truncated)
42
+ - Task IDs (if linked)
43
+
44
+ ### 🖱️ **Interactive**
45
+ - Click cards for visual feedback
46
+ - Hover effects
47
+ - Smooth animations
48
+ - Professional UI/UX
49
+
50
+ ## Cross-Platform Support
51
+
52
+ Works on all platforms:
53
+ - **macOS**: Opens with `open` command
54
+ - **Windows**: Opens with `start` command
55
+ - **Linux**: Opens with `xdg-open` command
56
+
57
+ ## Output Location
58
+
59
+ HTML file is saved to:
60
+ ```
61
+ .kanhelper/kanban-board.html
62
+ ```
63
+
64
+ ## When to Use
65
+
66
+ Use `/kanboardweb` when you want to:
67
+ - **Share** your board with team members (send HTML file)
68
+ - **Present** board status in meetings
69
+ - **Archive** board state at a point in time
70
+ - **View** board in a more visual format
71
+ - **Print** or export board as PDF (from browser)
72
+
73
+ ## Workflow
74
+
75
+ 1. Make changes to cards using `/kancreate`, `/kanupdate`, etc.
76
+ 2. Run `/kanboardweb` to generate updated HTML
77
+ 3. Browser opens automatically showing current state
78
+ 4. Refresh by running `/kanboardweb` again
79
+
80
+ ## Distribution
81
+
82
+ This skill works in **any project** with the kanban system installed:
83
+ - Next.js projects ✅
84
+ - React projects ✅
85
+ - Node.js projects ✅
86
+ - Any JavaScript/TypeScript project ✅
87
+
88
+ ## Example Output
89
+
90
+ The generated HTML includes:
91
+ - **Header**: Board title with emoji, statistics bar
92
+ - **Columns**: 5 columns (PENDING, IN PROGRESS, COMPLETED, PARKING LOT, DELETED)
93
+ - **Cards**: Card title, session ID (truncated), task ID
94
+ - **Footer**: Generation timestamp, refresh instructions
95
+
96
+ ## Tips
97
+
98
+ ### Sharing with Team
99
+ ```bash
100
+ # Generate board
101
+ /kanboardweb
102
+
103
+ # Share the file
104
+ cp .kanhelper/kanban-board.html ~/Desktop/team-board.html
105
+ # Send team-board.html via email/Slack
106
+ ```
107
+
108
+ ### Archiving Board State
109
+ ```bash
110
+ # Generate board
111
+ /kanboardweb
112
+
113
+ # Archive with date
114
+ cp .kanhelper/kanban-board.html archives/board-$(date +%Y-%m-%d).html
115
+ ```
116
+
117
+ ### Printing
118
+ 1. Run `/kanboardweb`
119
+ 2. In browser: File → Print
120
+ 3. Choose "Save as PDF" or print directly
121
+
122
+ ## Technical Details
123
+
124
+ - **File Size**: ~15-20 KB (depending on card count)
125
+ - **Dependencies**: None (standalone HTML)
126
+ - **Styling**: Embedded CSS (no external stylesheets)
127
+ - **JavaScript**: Minimal embedded JS for interactions
128
+ - **Browser Support**: All modern browsers
129
+
130
+ ## Limitations
131
+
132
+ - **Static snapshot**: Does not auto-refresh (run command again to update)
133
+ - **No drag-drop**: Cards cannot be moved between columns
134
+ - **Read-only**: Cannot edit cards from web view
135
+ - **No server**: Cannot be shared via URL (share file instead)
136
+
137
+ For real-time features, consider running a server-based solution.