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.
- package/LICENSE +21 -0
- package/README.md +136 -0
- package/dist/cli/index.d.ts +11 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +70 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +5 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +206 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +299 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/card.d.ts +29 -0
- package/dist/core/card.d.ts.map +1 -0
- package/dist/core/card.js +188 -0
- package/dist/core/card.js.map +1 -0
- package/dist/core/conflict.d.ts +13 -0
- package/dist/core/conflict.d.ts.map +1 -0
- package/dist/core/conflict.js +85 -0
- package/dist/core/conflict.js.map +1 -0
- package/dist/core/kanban.d.ts +22 -0
- package/dist/core/kanban.d.ts.map +1 -0
- package/dist/core/kanban.js +53 -0
- package/dist/core/kanban.js.map +1 -0
- package/dist/core/session.d.ts +21 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +115 -0
- package/dist/core/session.js.map +1 -0
- package/dist/core/types.d.ts +50 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +6 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/skills/kanboard.d.ts +8 -0
- package/dist/skills/kanboard.d.ts.map +1 -0
- package/dist/skills/kanboard.js +118 -0
- package/dist/skills/kanboard.js.map +1 -0
- package/dist/skills/kanboardfull.d.ts +7 -0
- package/dist/skills/kanboardfull.d.ts.map +1 -0
- package/dist/skills/kanboardfull.js +137 -0
- package/dist/skills/kanboardfull.js.map +1 -0
- package/dist/skills/kanboardweb.d.ts +11 -0
- package/dist/skills/kanboardweb.d.ts.map +1 -0
- package/dist/skills/kanboardweb.js +489 -0
- package/dist/skills/kanboardweb.js.map +1 -0
- package/dist/skills/kancard.d.ts +10 -0
- package/dist/skills/kancard.d.ts.map +1 -0
- package/dist/skills/kancard.js +169 -0
- package/dist/skills/kancard.js.map +1 -0
- package/dist/skills/kancreate.d.ts +6 -0
- package/dist/skills/kancreate.d.ts.map +1 -0
- package/dist/skills/kancreate.js +60 -0
- package/dist/skills/kancreate.js.map +1 -0
- package/dist/skills/kandoctor.d.ts +17 -0
- package/dist/skills/kandoctor.d.ts.map +1 -0
- package/dist/skills/kandoctor.js +401 -0
- package/dist/skills/kandoctor.js.map +1 -0
- package/dist/skills/kanhelp.d.ts +7 -0
- package/dist/skills/kanhelp.d.ts.map +1 -0
- package/dist/skills/kanhelp.js +194 -0
- package/dist/skills/kanhelp.js.map +1 -0
- package/dist/skills/kanprune.d.ts +11 -0
- package/dist/skills/kanprune.d.ts.map +1 -0
- package/dist/skills/kanprune.js +131 -0
- package/dist/skills/kanprune.js.map +1 -0
- package/dist/skills/kansync.d.ts +7 -0
- package/dist/skills/kansync.d.ts.map +1 -0
- package/dist/skills/kansync.js +41 -0
- package/dist/skills/kansync.js.map +1 -0
- package/dist/skills/kanupdate.d.ts +6 -0
- package/dist/skills/kanupdate.d.ts.map +1 -0
- package/dist/skills/kanupdate.js +74 -0
- package/dist/skills/kanupdate.js.map +1 -0
- package/dist/skills/session-debug.d.ts +6 -0
- package/dist/skills/session-debug.d.ts.map +1 -0
- package/dist/skills/session-debug.js +124 -0
- package/dist/skills/session-debug.js.map +1 -0
- package/dist/templates/skill-templates/kanboard/SKILL.md +26 -0
- package/dist/templates/skill-templates/kanboardfull/SKILL.md +28 -0
- package/dist/templates/skill-templates/kanboardweb/SKILL.md +137 -0
- package/dist/templates/skill-templates/kancard/SKILL.md +70 -0
- package/dist/templates/skill-templates/kancreate/SKILL.md +45 -0
- package/dist/templates/skill-templates/kandoctor/SKILL.md +58 -0
- package/dist/templates/skill-templates/kanhelp/SKILL.md +34 -0
- package/dist/templates/skill-templates/kanprune/SKILL.md +102 -0
- package/dist/templates/skill-templates/kansync/SKILL.md +21 -0
- package/dist/templates/skill-templates/kanupdate/SKILL.md +44 -0
- package/dist/templates/skill-templates/session-debug/SKILL.md +25 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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.
|