argustack 0.1.11 → 0.1.14
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 +2 -2
- package/dist/adapters/board/index.d.ts +6 -0
- package/dist/adapters/board/index.d.ts.map +1 -0
- package/dist/adapters/board/index.js +6 -0
- package/dist/adapters/board/index.js.map +1 -0
- package/dist/adapters/board/mapper.d.ts +14 -0
- package/dist/adapters/board/mapper.d.ts.map +1 -0
- package/dist/adapters/board/mapper.js +25 -0
- package/dist/adapters/board/mapper.js.map +1 -0
- package/dist/adapters/board/md-parser.d.ts +16 -0
- package/dist/adapters/board/md-parser.d.ts.map +1 -0
- package/dist/adapters/board/md-parser.js +44 -0
- package/dist/adapters/board/md-parser.js.map +1 -0
- package/dist/adapters/board/skill-discovery.d.ts +8 -0
- package/dist/adapters/board/skill-discovery.d.ts.map +1 -0
- package/dist/adapters/board/skill-discovery.js +60 -0
- package/dist/adapters/board/skill-discovery.js.map +1 -0
- package/dist/adapters/board/skill-runner.d.ts +10 -0
- package/dist/adapters/board/skill-runner.d.ts.map +1 -0
- package/dist/adapters/board/skill-runner.js +65 -0
- package/dist/adapters/board/skill-runner.js.map +1 -0
- package/dist/adapters/board/store.d.ts +21 -0
- package/dist/adapters/board/store.d.ts.map +1 -0
- package/dist/adapters/board/store.js +176 -0
- package/dist/adapters/board/store.js.map +1 -0
- package/dist/adapters/postgres/storage.d.ts +2 -1
- package/dist/adapters/postgres/storage.d.ts.map +1 -1
- package/dist/adapters/postgres/storage.js +55 -0
- package/dist/adapters/postgres/storage.js.map +1 -1
- package/dist/board/assets/index-Bnh8GW_4.css +1 -0
- package/dist/board/assets/index-CEXc5QXH.js +68 -0
- package/dist/board/favicon.png +0 -0
- package/dist/board/index.html +14 -0
- package/dist/cli/board-server.d.ts +2 -0
- package/dist/cli/board-server.d.ts.map +1 -0
- package/dist/cli/board-server.js +124 -0
- package/dist/cli/board-server.js.map +1 -0
- package/dist/cli/board.d.ts +3 -0
- package/dist/cli/board.d.ts.map +1 -0
- package/dist/cli/board.js +26 -0
- package/dist/cli/board.js.map +1 -0
- package/dist/cli/mcp-install.d.ts +9 -0
- package/dist/cli/mcp-install.d.ts.map +1 -1
- package/dist/cli/mcp-install.js +3 -3
- package/dist/cli/mcp-install.js.map +1 -1
- package/dist/core/board/board-column.value-object.d.ts +14 -0
- package/dist/core/board/board-column.value-object.d.ts.map +1 -0
- package/dist/core/board/board-column.value-object.js +36 -0
- package/dist/core/board/board-column.value-object.js.map +1 -0
- package/dist/core/board/board-task.entity.d.ts +20 -0
- package/dist/core/board/board-task.entity.d.ts.map +1 -0
- package/dist/core/board/board-task.entity.js +51 -0
- package/dist/core/board/board-task.entity.js.map +1 -0
- package/dist/core/board/index.d.ts +6 -0
- package/dist/core/board/index.d.ts.map +1 -0
- package/dist/core/board/index.js +6 -0
- package/dist/core/board/index.js.map +1 -0
- package/dist/core/board/pipeline.value-object.d.ts +22 -0
- package/dist/core/board/pipeline.value-object.d.ts.map +1 -0
- package/dist/core/board/pipeline.value-object.js +50 -0
- package/dist/core/board/pipeline.value-object.js.map +1 -0
- package/dist/core/board/skill-execution.entity.d.ts +18 -0
- package/dist/core/board/skill-execution.entity.d.ts.map +1 -0
- package/dist/core/board/skill-execution.entity.js +57 -0
- package/dist/core/board/skill-execution.entity.js.map +1 -0
- package/dist/core/board/task-title.value-object.d.ts +7 -0
- package/dist/core/board/task-title.value-object.d.ts.map +1 -0
- package/dist/core/board/task-title.value-object.js +20 -0
- package/dist/core/board/task-title.value-object.js.map +1 -0
- package/dist/core/ports/board-store.d.ts +15 -0
- package/dist/core/ports/board-store.d.ts.map +1 -0
- package/dist/core/ports/board-store.js +2 -0
- package/dist/core/ports/board-store.js.map +1 -0
- package/dist/core/ports/skill-runner.d.ts +6 -0
- package/dist/core/ports/skill-runner.d.ts.map +1 -0
- package/dist/core/ports/skill-runner.js +2 -0
- package/dist/core/ports/skill-runner.js.map +1 -0
- package/dist/core/ports/storage.d.ts +9 -1
- package/dist/core/ports/storage.d.ts.map +1 -1
- package/dist/core/types/board.d.ts +21 -0
- package/dist/core/types/board.d.ts.map +1 -0
- package/dist/core/types/board.js +2 -0
- package/dist/core/types/board.js.map +1 -0
- package/dist/core/types/index.d.ts +1 -1
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js.map +1 -1
- package/dist/core/types/issue.d.ts +5 -0
- package/dist/core/types/issue.d.ts.map +1 -1
- package/dist/mcp/tools/formatters.d.ts +16 -0
- package/dist/mcp/tools/formatters.d.ts.map +1 -0
- package/dist/mcp/tools/formatters.js +19 -0
- package/dist/mcp/tools/formatters.js.map +1 -0
- package/dist/mcp/tools/issue.d.ts.map +1 -1
- package/dist/mcp/tools/issue.js +22 -32
- package/dist/mcp/tools/issue.js.map +1 -1
- package/dist/mcp/tools/search.d.ts.map +1 -1
- package/dist/mcp/tools/search.js +17 -20
- package/dist/mcp/tools/search.js.map +1 -1
- package/dist/use-cases/move-task.d.ts +18 -0
- package/dist/use-cases/move-task.d.ts.map +1 -0
- package/dist/use-cases/move-task.js +45 -0
- package/dist/use-cases/move-task.js.map +1 -0
- package/dist/use-cases/sync-board.d.ts +13 -0
- package/dist/use-cases/sync-board.d.ts.map +1 -0
- package/dist/use-cases/sync-board.js +20 -0
- package/dist/use-cases/sync-board.js.map +1 -0
- package/package.json +27 -3
- package/templates/gitignore +1 -0
|
Binary file
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<link rel="icon" type="image/png" href="/favicon.png" />
|
|
7
|
+
<title>Argustack Board</title>
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-CEXc5QXH.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Bnh8GW_4.css">
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
<div id="root"></div>
|
|
13
|
+
</body>
|
|
14
|
+
</html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-server.d.ts","sourceRoot":"","sources":["../../src/cli/board-server.ts"],"names":[],"mappings":"AAoBA,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6FlF"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { createServer } from 'node:http';
|
|
2
|
+
import { join, resolve, dirname } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { SqlJsBoardStore } from '../adapters/board/store.js';
|
|
7
|
+
import { ClaudeSkillRunner } from '../adapters/board/skill-runner.js';
|
|
8
|
+
import { discoverSkills } from '../adapters/board/skill-discovery.js';
|
|
9
|
+
import { MoveTaskUseCase } from '../use-cases/move-task.js';
|
|
10
|
+
import { SyncBoardUseCase } from '../use-cases/sync-board.js';
|
|
11
|
+
export async function startBoardServer(wsRoot, port) {
|
|
12
|
+
const store = new SqlJsBoardStore(wsRoot);
|
|
13
|
+
await store.initialize();
|
|
14
|
+
const skillRunner = new ClaudeSkillRunner();
|
|
15
|
+
const moveTask = new MoveTaskUseCase(store, skillRunner);
|
|
16
|
+
const syncBoard = new SyncBoardUseCase(store);
|
|
17
|
+
const projectDir = resolve(wsRoot, '..');
|
|
18
|
+
const skills = discoverSkills(projectDir);
|
|
19
|
+
const skillNames = skills.map((s) => s.name);
|
|
20
|
+
const tasksDir = join(wsRoot, 'Docs', 'Tasks');
|
|
21
|
+
await syncBoard.execute(tasksDir, skillNames);
|
|
22
|
+
const claudeAvailable = await skillRunner.isAvailable();
|
|
23
|
+
const server = createServer((req, res) => {
|
|
24
|
+
void (async () => {
|
|
25
|
+
const url = new URL(req.url ?? '/', `http://localhost:${String(port)}`);
|
|
26
|
+
if (url.pathname === '/api/board' && req.method === 'GET') {
|
|
27
|
+
const boardData = await syncBoard.execute(tasksDir, skillNames);
|
|
28
|
+
const data = {
|
|
29
|
+
tasks: boardData.tasks,
|
|
30
|
+
pipeline: boardData.pipeline,
|
|
31
|
+
skills: skills.map((s) => ({ name: s.name, description: s.description, source: s.source })),
|
|
32
|
+
claudeAvailable,
|
|
33
|
+
};
|
|
34
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
35
|
+
res.end(JSON.stringify(data));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (url.pathname === '/api/tasks/move' && req.method === 'POST') {
|
|
39
|
+
const body = await readBody(req);
|
|
40
|
+
const { taskId, targetColumn } = JSON.parse(body);
|
|
41
|
+
res.writeHead(200, {
|
|
42
|
+
'Content-Type': 'text/event-stream',
|
|
43
|
+
'Cache-Control': 'no-cache',
|
|
44
|
+
Connection: 'keep-alive',
|
|
45
|
+
});
|
|
46
|
+
try {
|
|
47
|
+
const result = await moveTask.execute({ taskId, targetColumn }, (chunk) => {
|
|
48
|
+
res.write(`data: ${JSON.stringify({ type: 'output', chunk })}\n\n`);
|
|
49
|
+
});
|
|
50
|
+
res.write(`data: ${JSON.stringify({ type: 'done', task: result.task, skillTriggered: result.skillTriggered })}\n\n`);
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
54
|
+
res.write(`data: ${JSON.stringify({ type: 'error', message })}\n\n`);
|
|
55
|
+
}
|
|
56
|
+
res.end();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (url.pathname === '/api/pipeline' && req.method === 'PUT') {
|
|
60
|
+
const body = await readBody(req);
|
|
61
|
+
const config = JSON.parse(body);
|
|
62
|
+
await store.savePipeline(config);
|
|
63
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
64
|
+
res.end(JSON.stringify({ ok: true }));
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
serveSpa(req, res, url.pathname);
|
|
68
|
+
})();
|
|
69
|
+
});
|
|
70
|
+
server.listen(port, () => {
|
|
71
|
+
console.log('');
|
|
72
|
+
console.log(chalk.bold(' Argustack Board'));
|
|
73
|
+
console.log(` ${chalk.cyan(`http://localhost:${String(port)}`)}`);
|
|
74
|
+
console.log('');
|
|
75
|
+
console.log(` Workspace: ${wsRoot}`);
|
|
76
|
+
console.log(` Skills: ${String(skills.length)} discovered (${skills.map((s) => s.name).join(', ')})`);
|
|
77
|
+
console.log(` Claude CLI: ${claudeAvailable ? chalk.green('available') : chalk.yellow('not found — skill execution disabled')}`);
|
|
78
|
+
console.log('');
|
|
79
|
+
console.log(chalk.dim(' Press Ctrl+C to stop'));
|
|
80
|
+
console.log('');
|
|
81
|
+
});
|
|
82
|
+
const cleanup = async () => {
|
|
83
|
+
console.log(chalk.dim('\n Shutting down...'));
|
|
84
|
+
await store.close();
|
|
85
|
+
server.close();
|
|
86
|
+
process.exit(0);
|
|
87
|
+
};
|
|
88
|
+
process.on('SIGINT', () => { void cleanup(); });
|
|
89
|
+
process.on('SIGTERM', () => { void cleanup(); });
|
|
90
|
+
}
|
|
91
|
+
function readBody(req) {
|
|
92
|
+
return new Promise((done, fail) => {
|
|
93
|
+
const chunks = [];
|
|
94
|
+
req.setEncoding('utf-8');
|
|
95
|
+
req.on('data', (chunk) => chunks.push(chunk));
|
|
96
|
+
req.on('end', () => { done(chunks.join('')); });
|
|
97
|
+
req.on('error', fail);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
function serveSpa(_req, res, pathname) {
|
|
101
|
+
const currentFile = fileURLToPath(import.meta.url);
|
|
102
|
+
const boardDistDir = join(dirname(currentFile), '..', 'board');
|
|
103
|
+
let filePath = join(boardDistDir, pathname === '/' ? 'index.html' : pathname);
|
|
104
|
+
if (!existsSync(filePath)) {
|
|
105
|
+
filePath = join(boardDistDir, 'index.html');
|
|
106
|
+
}
|
|
107
|
+
if (!existsSync(filePath)) {
|
|
108
|
+
res.writeHead(404);
|
|
109
|
+
res.end('Board UI not built. Run: npm run build:board');
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const ext = filePath.split('.').pop() ?? '';
|
|
113
|
+
const mimeTypes = {
|
|
114
|
+
html: 'text/html',
|
|
115
|
+
js: 'application/javascript',
|
|
116
|
+
css: 'text/css',
|
|
117
|
+
svg: 'image/svg+xml',
|
|
118
|
+
png: 'image/png',
|
|
119
|
+
json: 'application/json',
|
|
120
|
+
};
|
|
121
|
+
res.writeHead(200, { 'Content-Type': mimeTypes[ext] ?? 'application/octet-stream' });
|
|
122
|
+
res.end(readFileSync(filePath));
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=board-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-server.js","sourceRoot":"","sources":["../../src/cli/board-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../../src/cli/board.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwB3D"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
export function registerBoardCommand(program) {
|
|
5
|
+
program
|
|
6
|
+
.command('board')
|
|
7
|
+
.description('Start local Kanban board UI')
|
|
8
|
+
.option('-p, --port <port>', 'Port number', '5002')
|
|
9
|
+
.action(async (opts) => {
|
|
10
|
+
const { findWorkspaceRoot } = await import('../workspace/resolver.js');
|
|
11
|
+
const wsRoot = findWorkspaceRoot();
|
|
12
|
+
if (!wsRoot) {
|
|
13
|
+
console.log(chalk.red('No workspace found. Run: argustack init'));
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
const tasksDir = join(wsRoot, 'Docs', 'Tasks');
|
|
17
|
+
if (!existsSync(tasksDir)) {
|
|
18
|
+
console.log(chalk.yellow(`No Docs/Tasks/ directory found in ${wsRoot}`));
|
|
19
|
+
console.log(chalk.dim('Board will start empty. Create task files to populate it.'));
|
|
20
|
+
}
|
|
21
|
+
const port = parseInt(opts.port, 10);
|
|
22
|
+
const { startBoardServer } = await import('./board-server.js');
|
|
23
|
+
await startBoardServer(wsRoot, port);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=board.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/cli/board.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,mBAAmB,EAAE,aAAa,EAAE,MAAM,CAAC;SAClD,MAAM,CAAC,KAAK,EAAE,IAAsB,EAAE,EAAE;QACvC,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QAEnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qCAAqC,MAAM,EAAE,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC,CAAC;QACtF,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC/D,MAAM,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import type { Command } from 'commander';
|
|
2
|
+
interface McpServerEntry {
|
|
3
|
+
readonly command: string;
|
|
4
|
+
readonly args: string[];
|
|
5
|
+
readonly env: Record<string, string>;
|
|
6
|
+
}
|
|
7
|
+
export declare function getClaudeCodeConfigPath(): string;
|
|
2
8
|
/**
|
|
3
9
|
* Resolve absolute path to `dist/mcp/server.js`.
|
|
4
10
|
*
|
|
@@ -6,5 +12,8 @@ import type { Command } from 'commander';
|
|
|
6
12
|
* Uses import.meta.url to find our own location, then walks to package root.
|
|
7
13
|
*/
|
|
8
14
|
export declare function resolveServerPath(): string;
|
|
15
|
+
export declare function installIntoConfig(configPath: string, entry: McpServerEntry): void;
|
|
16
|
+
export declare function buildMcpEntry(serverPath: string, workspacePath: string): McpServerEntry;
|
|
9
17
|
export declare function registerMcpCommands(mcpCmd: Command): void;
|
|
18
|
+
export {};
|
|
10
19
|
//# sourceMappingURL=mcp-install.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-install.d.ts","sourceRoot":"","sources":["../../src/cli/mcp-install.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-install.d.ts","sourceRoot":"","sources":["../../src/cli/mcp-install.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,UAAU,cAAc;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AASD,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAYD;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAY1C;AAwDD,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,cAAc,GACpB,IAAI,CAWN;AAmBD,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,cAAc,CAQhB;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA6GzD"}
|
package/dist/cli/mcp-install.js
CHANGED
|
@@ -4,7 +4,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
4
4
|
import { homedir } from 'node:os';
|
|
5
5
|
import chalk from 'chalk';
|
|
6
6
|
import { findWorkspaceRoot } from '../workspace/resolver.js';
|
|
7
|
-
function getClaudeCodeConfigPath() {
|
|
7
|
+
export function getClaudeCodeConfigPath() {
|
|
8
8
|
return join(homedir(), '.claude', 'settings.json');
|
|
9
9
|
}
|
|
10
10
|
function getClaudeDesktopConfigPath() {
|
|
@@ -70,7 +70,7 @@ function detectClaudeClients() {
|
|
|
70
70
|
});
|
|
71
71
|
return clients;
|
|
72
72
|
}
|
|
73
|
-
function installIntoConfig(configPath, entry) {
|
|
73
|
+
export function installIntoConfig(configPath, entry) {
|
|
74
74
|
const config = readJsonFile(configPath);
|
|
75
75
|
if (!config['mcpServers'] || typeof config['mcpServers'] !== 'object') {
|
|
76
76
|
config['mcpServers'] = {};
|
|
@@ -92,7 +92,7 @@ function uninstallFromConfig(configPath) {
|
|
|
92
92
|
writeJsonFile(configPath, config);
|
|
93
93
|
return true;
|
|
94
94
|
}
|
|
95
|
-
function buildMcpEntry(serverPath, workspacePath) {
|
|
95
|
+
export function buildMcpEntry(serverPath, workspacePath) {
|
|
96
96
|
return {
|
|
97
97
|
command: 'node',
|
|
98
98
|
args: [serverPath],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-install.js","sourceRoot":"","sources":["../../src/cli/mcp-install.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAe7D,
|
|
1
|
+
{"version":3,"file":"mcp-install.js","sourceRoot":"","sources":["../../src/cli/mcp-install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type ColumnType = 'system' | 'skill';
|
|
2
|
+
export declare class BoardColumn {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly type: ColumnType;
|
|
5
|
+
readonly displayName: string;
|
|
6
|
+
constructor(name: string, type: ColumnType);
|
|
7
|
+
private static toDisplayName;
|
|
8
|
+
isSystem(): boolean;
|
|
9
|
+
isSkill(): boolean;
|
|
10
|
+
skillName(): string | null;
|
|
11
|
+
equals(other: BoardColumn): boolean;
|
|
12
|
+
toString(): string;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=board-column.value-object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-column.value-object.d.ts","sourceRoot":"","sources":["../../../src/core/board/board-column.value-object.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5C,qBAAa,WAAW;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAEjB,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;IAU1C,OAAO,CAAC,MAAM,CAAC,aAAa;IAO5B,QAAQ,IAAI,OAAO;IAInB,OAAO,IAAI,OAAO;IAIlB,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO;IAInC,QAAQ,IAAI,MAAM;CAGnB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export class BoardColumn {
|
|
2
|
+
name;
|
|
3
|
+
type;
|
|
4
|
+
displayName;
|
|
5
|
+
constructor(name, type) {
|
|
6
|
+
const trimmed = name.trim();
|
|
7
|
+
if (!trimmed) {
|
|
8
|
+
throw new Error('Column name cannot be empty');
|
|
9
|
+
}
|
|
10
|
+
this.name = trimmed;
|
|
11
|
+
this.type = type;
|
|
12
|
+
this.displayName = BoardColumn.toDisplayName(trimmed);
|
|
13
|
+
}
|
|
14
|
+
static toDisplayName(name) {
|
|
15
|
+
return name
|
|
16
|
+
.split('-')
|
|
17
|
+
.map((w) => w.charAt(0).toUpperCase() + w.slice(1))
|
|
18
|
+
.join(' ');
|
|
19
|
+
}
|
|
20
|
+
isSystem() {
|
|
21
|
+
return this.type === 'system';
|
|
22
|
+
}
|
|
23
|
+
isSkill() {
|
|
24
|
+
return this.type === 'skill';
|
|
25
|
+
}
|
|
26
|
+
skillName() {
|
|
27
|
+
return this.type === 'skill' ? this.name : null;
|
|
28
|
+
}
|
|
29
|
+
equals(other) {
|
|
30
|
+
return this.name === other.name && this.type === other.type;
|
|
31
|
+
}
|
|
32
|
+
toString() {
|
|
33
|
+
return this.name;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=board-column.value-object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-column.value-object.js","sourceRoot":"","sources":["../../../src/core/board/board-column.value-object.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAW;IACb,IAAI,CAAS;IACb,IAAI,CAAa;IACjB,WAAW,CAAS;IAE7B,YAAY,IAAY,EAAE,IAAgB;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,IAAY;QACvC,OAAO,IAAI;aACR,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAClD,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;IAChC,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;IAC/B,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,KAAkB;QACvB,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC;IAC9D,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { TaskTitle } from './task-title.value-object.js';
|
|
2
|
+
import { BoardColumn } from './board-column.value-object.js';
|
|
3
|
+
import type { Pipeline } from './pipeline.value-object.js';
|
|
4
|
+
import type { BoardTaskData } from '../types/board.js';
|
|
5
|
+
export declare class BoardTaskEntity {
|
|
6
|
+
readonly id: string;
|
|
7
|
+
readonly title: TaskTitle;
|
|
8
|
+
readonly mdPath: string;
|
|
9
|
+
readonly column: string;
|
|
10
|
+
readonly jiraKey: string | null;
|
|
11
|
+
readonly assignee: string | null;
|
|
12
|
+
readonly createdAt: string;
|
|
13
|
+
readonly updatedAt: string;
|
|
14
|
+
private constructor();
|
|
15
|
+
static create(data: BoardTaskData): BoardTaskEntity;
|
|
16
|
+
moveTo(targetColumn: BoardColumn, pipeline: Pipeline): BoardTaskEntity;
|
|
17
|
+
get currentColumn(): string;
|
|
18
|
+
toData(): BoardTaskData;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=board-task.entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-task.entity.d.ts","sourceRoot":"","sources":["../../../src/core/board/board-task.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,qBAAa,eAAe;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,OAAO;IAWP,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,eAAe;IAInD,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,GAAG,eAAe;IAetE,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,MAAM,IAAI,aAAa;CAYxB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { TaskTitle } from './task-title.value-object.js';
|
|
2
|
+
import { BoardColumn } from './board-column.value-object.js';
|
|
3
|
+
export class BoardTaskEntity {
|
|
4
|
+
id;
|
|
5
|
+
title;
|
|
6
|
+
mdPath;
|
|
7
|
+
column;
|
|
8
|
+
jiraKey;
|
|
9
|
+
assignee;
|
|
10
|
+
createdAt;
|
|
11
|
+
updatedAt;
|
|
12
|
+
constructor(data) {
|
|
13
|
+
this.id = data.id;
|
|
14
|
+
this.title = new TaskTitle(data.title);
|
|
15
|
+
this.mdPath = data.mdPath;
|
|
16
|
+
this.column = data.column;
|
|
17
|
+
this.jiraKey = data.jiraKey ?? null;
|
|
18
|
+
this.assignee = data.assignee ?? null;
|
|
19
|
+
this.createdAt = data.createdAt;
|
|
20
|
+
this.updatedAt = data.updatedAt;
|
|
21
|
+
}
|
|
22
|
+
static create(data) {
|
|
23
|
+
return new BoardTaskEntity(data);
|
|
24
|
+
}
|
|
25
|
+
moveTo(targetColumn, pipeline) {
|
|
26
|
+
if (!pipeline.canMoveTo(new BoardColumn(this.column, 'skill'), targetColumn)) {
|
|
27
|
+
throw new Error(`Cannot move to column "${targetColumn.name}"`);
|
|
28
|
+
}
|
|
29
|
+
return new BoardTaskEntity({
|
|
30
|
+
...this.toData(),
|
|
31
|
+
column: targetColumn.name,
|
|
32
|
+
updatedAt: new Date().toISOString(),
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
get currentColumn() {
|
|
36
|
+
return this.column;
|
|
37
|
+
}
|
|
38
|
+
toData() {
|
|
39
|
+
return {
|
|
40
|
+
id: this.id,
|
|
41
|
+
title: this.title.toString(),
|
|
42
|
+
mdPath: this.mdPath,
|
|
43
|
+
column: this.column,
|
|
44
|
+
jiraKey: this.jiraKey,
|
|
45
|
+
assignee: this.assignee,
|
|
46
|
+
createdAt: this.createdAt,
|
|
47
|
+
updatedAt: this.updatedAt,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=board-task.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-task.entity.js","sourceRoot":"","sources":["../../../src/core/board/board-task.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAI7D,MAAM,OAAO,eAAe;IACjB,EAAE,CAAS;IACX,KAAK,CAAY;IACjB,MAAM,CAAS;IACf,MAAM,CAAS;IACf,OAAO,CAAgB;IACvB,QAAQ,CAAgB;IACxB,SAAS,CAAS;IAClB,SAAS,CAAS;IAE3B,YAAoB,IAAmB;QACrC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,IAAmB;QAC/B,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,YAAyB,EAAE,QAAkB;QAClD,IAAI,CAAC,QAAQ,CAAC,SAAS,CACrB,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,YAAY,CACb,EAAE,CAAC;YACF,MAAM,IAAI,KAAK,CAAC,0BAA0B,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,IAAI,eAAe,CAAC;YACzB,GAAG,IAAI,CAAC,MAAM,EAAE;YAChB,MAAM,EAAE,YAAY,CAAC,IAAI;YACzB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,MAAM;QACJ,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { BoardTaskEntity } from './board-task.entity.js';
|
|
2
|
+
export { SkillExecutionEntity } from './skill-execution.entity.js';
|
|
3
|
+
export { BoardColumn, type ColumnType } from './board-column.value-object.js';
|
|
4
|
+
export { Pipeline, type PipelineConfig, type PipelineColumnConfig } from './pipeline.value-object.js';
|
|
5
|
+
export { TaskTitle } from './task-title.value-object.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/board/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACtG,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { BoardTaskEntity } from './board-task.entity.js';
|
|
2
|
+
export { SkillExecutionEntity } from './skill-execution.entity.js';
|
|
3
|
+
export { BoardColumn } from './board-column.value-object.js';
|
|
4
|
+
export { Pipeline } from './pipeline.value-object.js';
|
|
5
|
+
export { TaskTitle } from './task-title.value-object.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/board/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAmB,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAkD,MAAM,4BAA4B,CAAC;AACtG,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BoardColumn, type ColumnType } from './board-column.value-object.js';
|
|
2
|
+
export interface PipelineColumnConfig {
|
|
3
|
+
name: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
type: ColumnType;
|
|
6
|
+
}
|
|
7
|
+
export interface PipelineConfig {
|
|
8
|
+
columns: PipelineColumnConfig[];
|
|
9
|
+
port: number;
|
|
10
|
+
}
|
|
11
|
+
export declare class Pipeline {
|
|
12
|
+
private readonly columns;
|
|
13
|
+
private constructor();
|
|
14
|
+
static fromConfig(config: PipelineConfig, availableSkills: string[]): Pipeline;
|
|
15
|
+
canMoveTo(_from: BoardColumn, to: BoardColumn): boolean;
|
|
16
|
+
getNextColumn(current: BoardColumn): BoardColumn | null;
|
|
17
|
+
getColumns(): readonly BoardColumn[];
|
|
18
|
+
findColumn(name: string): BoardColumn | null;
|
|
19
|
+
reorder(newOrder: string[]): Pipeline;
|
|
20
|
+
toConfig(port: number): PipelineConfig;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=pipeline.value-object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.value-object.d.ts","sourceRoot":"","sources":["../../../src/core/board/pipeline.value-object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE9E,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IAEjD,OAAO;IAIP,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,QAAQ;IAa9E,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,GAAG,OAAO;IAIvD,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI;IAQvD,UAAU,IAAI,SAAS,WAAW,EAAE;IAIpC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAI5C,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,QAAQ;IAWrC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc;CAMvC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { BoardColumn } from './board-column.value-object.js';
|
|
2
|
+
export class Pipeline {
|
|
3
|
+
columns;
|
|
4
|
+
constructor(columns) {
|
|
5
|
+
this.columns = Object.freeze(columns);
|
|
6
|
+
}
|
|
7
|
+
static fromConfig(config, availableSkills) {
|
|
8
|
+
const columns = config.columns.map((c) => new BoardColumn(c.name, c.type));
|
|
9
|
+
for (const skill of availableSkills) {
|
|
10
|
+
const exists = columns.some((c) => c.name === skill);
|
|
11
|
+
if (!exists) {
|
|
12
|
+
columns.splice(columns.length - 1, 0, new BoardColumn(skill, 'skill'));
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return new Pipeline(columns);
|
|
16
|
+
}
|
|
17
|
+
canMoveTo(_from, to) {
|
|
18
|
+
return this.columns.some((c) => c.equals(to));
|
|
19
|
+
}
|
|
20
|
+
getNextColumn(current) {
|
|
21
|
+
const idx = this.columns.findIndex((c) => c.equals(current));
|
|
22
|
+
if (idx === -1 || idx >= this.columns.length - 1) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
return this.columns[idx + 1] ?? null;
|
|
26
|
+
}
|
|
27
|
+
getColumns() {
|
|
28
|
+
return this.columns;
|
|
29
|
+
}
|
|
30
|
+
findColumn(name) {
|
|
31
|
+
return this.columns.find((c) => c.name === name) ?? null;
|
|
32
|
+
}
|
|
33
|
+
reorder(newOrder) {
|
|
34
|
+
const reordered = [];
|
|
35
|
+
for (const name of newOrder) {
|
|
36
|
+
const col = this.columns.find((c) => c.name === name);
|
|
37
|
+
if (col) {
|
|
38
|
+
reordered.push(col);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return new Pipeline(reordered);
|
|
42
|
+
}
|
|
43
|
+
toConfig(port) {
|
|
44
|
+
return {
|
|
45
|
+
columns: this.columns.map((c) => ({ name: c.name, displayName: c.displayName, type: c.type })),
|
|
46
|
+
port,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=pipeline.value-object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.value-object.js","sourceRoot":"","sources":["../../../src/core/board/pipeline.value-object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAmB,MAAM,gCAAgC,CAAC;AAa9E,MAAM,OAAO,QAAQ;IACF,OAAO,CAAyB;IAEjD,YAAoB,OAAsB;QACxC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,MAAsB,EAAE,eAAyB;QACjE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAE3E,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;YACrD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QAED,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,SAAS,CAAC,KAAkB,EAAE,EAAe;QAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,aAAa,CAAC,OAAoB;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7D,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;IACvC,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;IAC3D,CAAC;IAED,OAAO,CAAC,QAAkB;QACxB,MAAM,SAAS,GAAkB,EAAE,CAAC;QACpC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YACtD,IAAI,GAAG,EAAE,CAAC;gBACR,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9F,IAAI;SACL,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SkillExecutionData, SkillExecutionStatus } from '../types/board.js';
|
|
2
|
+
export declare class SkillExecutionEntity {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly taskId: string;
|
|
5
|
+
readonly skillName: string;
|
|
6
|
+
readonly status: SkillExecutionStatus;
|
|
7
|
+
readonly output: string;
|
|
8
|
+
readonly startedAt: string;
|
|
9
|
+
readonly finishedAt: string | null;
|
|
10
|
+
private constructor();
|
|
11
|
+
static create(data: SkillExecutionData): SkillExecutionEntity;
|
|
12
|
+
appendOutput(chunk: string): SkillExecutionEntity;
|
|
13
|
+
complete(): SkillExecutionEntity;
|
|
14
|
+
fail(error: string): SkillExecutionEntity;
|
|
15
|
+
isRunning(): boolean;
|
|
16
|
+
toData(): SkillExecutionData;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=skill-execution.entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-execution.entity.d.ts","sourceRoot":"","sources":["../../../src/core/board/skill-execution.entity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAElF,qBAAa,oBAAoB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnC,OAAO;IAUP,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,oBAAoB;IAI7D,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,oBAAoB;IAOjD,QAAQ,IAAI,oBAAoB;IAQhC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,oBAAoB;IASzC,SAAS,IAAI,OAAO;IAIpB,MAAM,IAAI,kBAAkB;CAW7B"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export class SkillExecutionEntity {
|
|
2
|
+
id;
|
|
3
|
+
taskId;
|
|
4
|
+
skillName;
|
|
5
|
+
status;
|
|
6
|
+
output;
|
|
7
|
+
startedAt;
|
|
8
|
+
finishedAt;
|
|
9
|
+
constructor(data) {
|
|
10
|
+
this.id = data.id;
|
|
11
|
+
this.taskId = data.taskId;
|
|
12
|
+
this.skillName = data.skillName;
|
|
13
|
+
this.status = data.status;
|
|
14
|
+
this.output = data.output;
|
|
15
|
+
this.startedAt = data.startedAt;
|
|
16
|
+
this.finishedAt = data.finishedAt ?? null;
|
|
17
|
+
}
|
|
18
|
+
static create(data) {
|
|
19
|
+
return new SkillExecutionEntity(data);
|
|
20
|
+
}
|
|
21
|
+
appendOutput(chunk) {
|
|
22
|
+
return new SkillExecutionEntity({
|
|
23
|
+
...this.toData(),
|
|
24
|
+
output: this.output + chunk,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
complete() {
|
|
28
|
+
return new SkillExecutionEntity({
|
|
29
|
+
...this.toData(),
|
|
30
|
+
status: 'done',
|
|
31
|
+
finishedAt: new Date().toISOString(),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
fail(error) {
|
|
35
|
+
return new SkillExecutionEntity({
|
|
36
|
+
...this.toData(),
|
|
37
|
+
status: 'error',
|
|
38
|
+
output: this.output + '\n' + error,
|
|
39
|
+
finishedAt: new Date().toISOString(),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
isRunning() {
|
|
43
|
+
return this.status === 'running';
|
|
44
|
+
}
|
|
45
|
+
toData() {
|
|
46
|
+
return {
|
|
47
|
+
id: this.id,
|
|
48
|
+
taskId: this.taskId,
|
|
49
|
+
skillName: this.skillName,
|
|
50
|
+
status: this.status,
|
|
51
|
+
output: this.output,
|
|
52
|
+
startedAt: this.startedAt,
|
|
53
|
+
finishedAt: this.finishedAt,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=skill-execution.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-execution.entity.js","sourceRoot":"","sources":["../../../src/core/board/skill-execution.entity.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,oBAAoB;IACtB,EAAE,CAAS;IACX,MAAM,CAAS;IACf,SAAS,CAAS;IAClB,MAAM,CAAuB;IAC7B,MAAM,CAAS;IACf,SAAS,CAAS;IAClB,UAAU,CAAgB;IAEnC,YAAoB,IAAwB;QAC1C,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,IAAwB;QACpC,OAAO,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,YAAY,CAAC,KAAa;QACxB,OAAO,IAAI,oBAAoB,CAAC;YAC9B,GAAG,IAAI,CAAC,MAAM,EAAE;YAChB,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,oBAAoB,CAAC;YAC9B,GAAG,IAAI,CAAC,MAAM,EAAE;YAChB,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACrC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,KAAa;QAChB,OAAO,IAAI,oBAAoB,CAAC;YAC9B,GAAG,IAAI,CAAC,MAAM,EAAE;YAChB,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,KAAK;YAClC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACrC,CAAC,CAAC;IACL,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC;IACnC,CAAC;IAED,MAAM;QACJ,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC;IACJ,CAAC;CACF"}
|