taskin 1.0.9 → 1.0.10
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/README.md +53 -0
- package/dist/index.js +29 -15
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -103,6 +103,59 @@ Taskin is built as a modular ecosystem. Besides the CLI, you can use individual
|
|
|
103
103
|
- `taskin pause <id>` - Pause work on a task
|
|
104
104
|
- `taskin finish <id>` - Complete a task
|
|
105
105
|
- `taskin lint` - Validate task files
|
|
106
|
+
- `taskin dashboard` - Start the web dashboard
|
|
107
|
+
- `taskin mcp-server` - Start MCP server for Claude Desktop integration (alias: `mcp`)
|
|
108
|
+
|
|
109
|
+
## 🤖 MCP Server (Model Context Protocol)
|
|
110
|
+
|
|
111
|
+
Taskin includes an MCP server that allows AI assistants like Claude Desktop to interact with your tasks:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
taskin mcp-server
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Integration with Claude Desktop
|
|
118
|
+
|
|
119
|
+
Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
{
|
|
123
|
+
"mcpServers": {
|
|
124
|
+
"taskin": {
|
|
125
|
+
"args": ["taskin@beta", "mcp-server"],
|
|
126
|
+
"command": "npx"
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Or if installed globally:
|
|
133
|
+
|
|
134
|
+
```json
|
|
135
|
+
{
|
|
136
|
+
"mcpServers": {
|
|
137
|
+
"taskin": {
|
|
138
|
+
"args": ["mcp-server"],
|
|
139
|
+
"command": "taskin"
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Available MCP Tools:**
|
|
146
|
+
|
|
147
|
+
- `start_task` - Start working on a task
|
|
148
|
+
- `finish_task` - Mark a task as finished
|
|
149
|
+
|
|
150
|
+
**Available MCP Prompts:**
|
|
151
|
+
|
|
152
|
+
- `start-task-workflow` - Guide for starting tasks
|
|
153
|
+
- `finish-task-workflow` - Guide for finishing tasks
|
|
154
|
+
- `task-summary` - Get task summary and insights
|
|
155
|
+
|
|
156
|
+
**Available MCP Resources:**
|
|
157
|
+
|
|
158
|
+
- `taskin://tasks` - Access all tasks
|
|
106
159
|
|
|
107
160
|
## 📦 Programmatic Usage
|
|
108
161
|
|
package/dist/index.js
CHANGED
|
@@ -38,12 +38,12 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
38
38
|
mod
|
|
39
39
|
));
|
|
40
40
|
|
|
41
|
-
// ../../node_modules/.pnpm/tsup@8.5.0_postcss@8.5.6_tsx@4.
|
|
41
|
+
// ../../node_modules/.pnpm/tsup@8.5.0_postcss@8.5.6_tsx@4.21.0_typescript@5.9.3/node_modules/tsup/assets/esm_shims.js
|
|
42
42
|
import path from "path";
|
|
43
43
|
import { fileURLToPath } from "url";
|
|
44
44
|
var getFilename, getDirname, __dirname;
|
|
45
45
|
var init_esm_shims = __esm({
|
|
46
|
-
"../../node_modules/.pnpm/tsup@8.5.0_postcss@8.5.6_tsx@4.
|
|
46
|
+
"../../node_modules/.pnpm/tsup@8.5.0_postcss@8.5.6_tsx@4.21.0_typescript@5.9.3/node_modules/tsup/assets/esm_shims.js"() {
|
|
47
47
|
"use strict";
|
|
48
48
|
getFilename = () => fileURLToPath(import.meta.url);
|
|
49
49
|
getDirname = () => path.dirname(getFilename());
|
|
@@ -7339,9 +7339,7 @@ var UserRegistry = class {
|
|
|
7339
7339
|
console.log(`[UserRegistry] Loaded ${this.users.size} users`);
|
|
7340
7340
|
} catch (error2) {
|
|
7341
7341
|
if (error2.code === "ENOENT") {
|
|
7342
|
-
console.warn(
|
|
7343
|
-
"[UserRegistry] users.json not found, starting with empty registry"
|
|
7344
|
-
);
|
|
7342
|
+
console.warn("[UserRegistry] users.json not found, starting with empty registry");
|
|
7345
7343
|
this.users.clear();
|
|
7346
7344
|
} else {
|
|
7347
7345
|
throw error2;
|
|
@@ -7360,10 +7358,12 @@ var UserRegistry = class {
|
|
|
7360
7358
|
*/
|
|
7361
7359
|
resolveUser(nameOrId) {
|
|
7362
7360
|
const byId = this.users.get(nameOrId);
|
|
7363
|
-
if (byId)
|
|
7361
|
+
if (byId)
|
|
7362
|
+
return byId;
|
|
7364
7363
|
const slug = nameOrId.toLowerCase().replace(/\s+/g, "-");
|
|
7365
7364
|
const bySlug = this.users.get(slug);
|
|
7366
|
-
if (bySlug)
|
|
7365
|
+
if (bySlug)
|
|
7366
|
+
return bySlug;
|
|
7367
7367
|
for (const user of this.users.values()) {
|
|
7368
7368
|
if (user.name.toLowerCase() === nameOrId.toLowerCase()) {
|
|
7369
7369
|
return user;
|
|
@@ -7403,11 +7403,7 @@ var UserRegistry = class {
|
|
|
7403
7403
|
const data = {
|
|
7404
7404
|
users: Object.fromEntries(this.users.entries())
|
|
7405
7405
|
};
|
|
7406
|
-
await fs2.writeFile(
|
|
7407
|
-
this.usersFilePath,
|
|
7408
|
-
JSON.stringify(data, null, 2),
|
|
7409
|
-
"utf-8"
|
|
7410
|
-
);
|
|
7406
|
+
await fs2.writeFile(this.usersFilePath, JSON.stringify(data, null, 2), "utf-8");
|
|
7411
7407
|
}
|
|
7412
7408
|
};
|
|
7413
7409
|
|
|
@@ -9027,13 +9023,13 @@ async function listTasks(filter, options) {
|
|
|
9027
9023
|
}
|
|
9028
9024
|
if (options.assignee) {
|
|
9029
9025
|
filteredTasks = filteredTasks.filter(
|
|
9030
|
-
(t) => t.
|
|
9026
|
+
(t) => t.assignee?.name.toLowerCase().includes(options.assignee.toLowerCase()) || t.assignee?.id.toLowerCase().includes(options.assignee.toLowerCase())
|
|
9031
9027
|
);
|
|
9032
9028
|
}
|
|
9033
9029
|
if (filter) {
|
|
9034
9030
|
const lowerFilter = filter.toLowerCase();
|
|
9035
9031
|
filteredTasks = filteredTasks.filter(
|
|
9036
|
-
(t) => t.id.includes(lowerFilter) || t.title.toLowerCase().includes(lowerFilter) || t.status.toLowerCase().includes(lowerFilter) || t.
|
|
9032
|
+
(t) => t.id.includes(lowerFilter) || t.title.toLowerCase().includes(lowerFilter) || t.status.toLowerCase().includes(lowerFilter) || t.assignee?.name.toLowerCase().includes(lowerFilter) || t.assignee?.id.toLowerCase().includes(lowerFilter)
|
|
9037
9033
|
);
|
|
9038
9034
|
}
|
|
9039
9035
|
if (filteredTasks.length === 0) {
|
|
@@ -9050,7 +9046,7 @@ async function listTasks(filter, options) {
|
|
|
9050
9046
|
const statusColor = getStatusColor(task.status);
|
|
9051
9047
|
const typeColor = getTypeColor(task.type);
|
|
9052
9048
|
console.log(
|
|
9053
|
-
`${colors2.info(task.id.padEnd(15))} ${statusColor(task.status.padEnd(15))} ${typeColor(task.type.padEnd(12))} ${colors2.secondary((task.
|
|
9049
|
+
`${colors2.info(task.id.padEnd(15))} ${statusColor(task.status.padEnd(15))} ${typeColor(task.type.padEnd(12))} ${colors2.secondary((task.assignee?.name || "unassigned").padEnd(15))} ${colors2.normal(task.title)}`
|
|
9054
9050
|
);
|
|
9055
9051
|
});
|
|
9056
9052
|
console.log();
|
|
@@ -11712,6 +11708,24 @@ function showCustomHelp() {
|
|
|
11712
11708
|
"taskin lint -p /path/to/tasks"
|
|
11713
11709
|
],
|
|
11714
11710
|
icon: "\u{1F50D}"
|
|
11711
|
+
},
|
|
11712
|
+
{
|
|
11713
|
+
name: colors2.highlight("taskin dashboard") + colors2.normal(" [options]"),
|
|
11714
|
+
alias: colors2.secondary("Options: --host, --port"),
|
|
11715
|
+
description: "Start the web dashboard",
|
|
11716
|
+
examples: [
|
|
11717
|
+
"taskin dashboard",
|
|
11718
|
+
"taskin dashboard --port 3000",
|
|
11719
|
+
"taskin dashboard --host 0.0.0.0"
|
|
11720
|
+
],
|
|
11721
|
+
icon: "\u{1F4CA}"
|
|
11722
|
+
},
|
|
11723
|
+
{
|
|
11724
|
+
name: colors2.highlight("taskin mcp-server"),
|
|
11725
|
+
alias: colors2.secondary("Alias: mcp"),
|
|
11726
|
+
description: "Start MCP server for Claude Desktop integration",
|
|
11727
|
+
examples: ["taskin mcp-server", "taskin mcp"],
|
|
11728
|
+
icon: "\u{1F916}"
|
|
11715
11729
|
}
|
|
11716
11730
|
];
|
|
11717
11731
|
commands.forEach((cmd, index) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "taskin",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.10",
|
|
4
4
|
"description": "Task management system integrated with Git workflows",
|
|
5
5
|
"motivation": "Provide a CLI tool for task management integrated with Git workflows",
|
|
6
6
|
"solve": "Simplifies task tracking and management directly from the command line",
|
|
@@ -87,10 +87,10 @@
|
|
|
87
87
|
"vitest": "^1.6.1",
|
|
88
88
|
"@opentask/taskin-fs-provider": "1.0.5",
|
|
89
89
|
"@opentask/taskin-task-manager": "1.0.5",
|
|
90
|
+
"@opentask/taskin-task-server-ws": "0.1.0",
|
|
90
91
|
"@opentask/taskin-task-server-mcp": "0.1.0",
|
|
91
92
|
"@opentask/taskin-types": "1.0.5",
|
|
92
|
-
"@opentask/taskin-utils": "1.0.5"
|
|
93
|
-
"@opentask/taskin-task-server-ws": "0.1.0"
|
|
93
|
+
"@opentask/taskin-utils": "1.0.5"
|
|
94
94
|
},
|
|
95
95
|
"scripts": {
|
|
96
96
|
"build": "pnpm run build:dashboard && tsup",
|