vibe-squire 2.3.2 → 3.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 (117) hide show
  1. package/README.md +8 -8
  2. package/dist/generated/prisma/internal/class.js +1 -1
  3. package/dist/generated/prisma/internal/class.js.map +1 -1
  4. package/dist/integrations/vibe-kanban/vibe-kanban-destination.module.js +10 -15
  5. package/dist/integrations/vibe-kanban/vibe-kanban-destination.module.js.map +1 -1
  6. package/dist/integrations/vibe-kanban/vk-board-adapter.service.d.ts +2 -2
  7. package/dist/integrations/vibe-kanban/vk-board-adapter.service.js +2 -2
  8. package/dist/integrations/vibe-kanban/vk-board-adapter.service.js.map +1 -1
  9. package/dist/integrations/vibe-kanban/{vk-mcp-integration.listener.d.ts → vk-board-integration.listener.d.ts} +3 -5
  10. package/dist/integrations/vibe-kanban/{vk-mcp-integration.listener.js → vk-board-integration.listener.js} +17 -22
  11. package/dist/integrations/vibe-kanban/vk-board-integration.listener.js.map +1 -0
  12. package/dist/integrations/vibe-kanban/vk-status.service.js +6 -6
  13. package/dist/integrations/vibe-kanban/vk-status.service.js.map +1 -1
  14. package/dist/integrations/vibe-kanban/vk-ui.controller.d.ts +2 -2
  15. package/dist/integrations/vibe-kanban/vk-ui.controller.js +2 -2
  16. package/dist/integrations/vibe-kanban/vk-ui.controller.js.map +1 -1
  17. package/dist/main.js +1 -1
  18. package/dist/main.js.map +1 -1
  19. package/dist/ports/destination-status.port.d.ts +1 -1
  20. package/dist/ports/injection-tokens.d.ts +0 -1
  21. package/dist/ports/injection-tokens.js +1 -2
  22. package/dist/ports/injection-tokens.js.map +1 -1
  23. package/dist/reinit/reinit.controller.js +1 -1
  24. package/dist/reinit/reinit.controller.js.map +1 -1
  25. package/dist/settings/core-settings.schema.js +1 -1
  26. package/dist/settings/core-settings.schema.js.map +1 -1
  27. package/dist/setup/setup-evaluation.service.d.ts +1 -1
  28. package/dist/setup/setup-evaluation.service.js +2 -2
  29. package/dist/setup/setup-evaluation.service.js.map +1 -1
  30. package/dist/status/dto/status-snapshot.dto.d.ts +1 -1
  31. package/dist/status/dto/status-snapshot.dto.js +4 -4
  32. package/dist/status/dto/status-snapshot.dto.js.map +1 -1
  33. package/dist/status/status-snapshot.schema.d.ts +1 -1
  34. package/dist/status/status-snapshot.schema.js +1 -1
  35. package/dist/status/status-snapshot.schema.js.map +1 -1
  36. package/dist/sync/poll-cycle/run-poll-prerequisites.d.ts +1 -1
  37. package/dist/sync/poll-cycle/run-poll-prerequisites.js +3 -3
  38. package/dist/sync/poll-cycle/run-poll-prerequisites.js.map +1 -1
  39. package/dist/sync/poll-cycle/vk-board-network-error-heuristic.d.ts +1 -0
  40. package/dist/sync/poll-cycle/vk-board-network-error-heuristic.js +16 -0
  41. package/dist/sync/poll-cycle/vk-board-network-error-heuristic.js.map +1 -0
  42. package/dist/sync/run-poll-cycle.service.js +4 -4
  43. package/dist/sync/run-poll-cycle.service.js.map +1 -1
  44. package/dist/sync/sync.controller.js +1 -1
  45. package/dist/sync/sync.controller.js.map +1 -1
  46. package/dist/tsconfig.build.tsbuildinfo +1 -1
  47. package/dist/ui/public/operator-dashboard.js +3 -3
  48. package/dist/ui/public/operator-mappings.js +1 -1
  49. package/dist/ui/ui-vibe-kanban-presenter.d.ts +3 -3
  50. package/dist/ui/ui-vibe-kanban-presenter.js +8 -8
  51. package/dist/ui/ui-vibe-kanban-presenter.js.map +1 -1
  52. package/dist/ui/ui.controller.js +1 -1
  53. package/dist/ui/ui.controller.js.map +1 -1
  54. package/dist/ui/views/dashboard.hbs +1 -1
  55. package/dist/ui/views/mappings.hbs +1 -1
  56. package/dist/ui/views/vibe-kanban.hbs +2 -2
  57. package/dist/vibe-kanban/read-vk-main-port.d.ts +1 -0
  58. package/dist/vibe-kanban/read-vk-main-port.js +32 -0
  59. package/dist/vibe-kanban/read-vk-main-port.js.map +1 -0
  60. package/dist/vibe-kanban/resolve-vk-backend-base-url.d.ts +1 -0
  61. package/dist/vibe-kanban/resolve-vk-backend-base-url.js +46 -0
  62. package/dist/vibe-kanban/resolve-vk-backend-base-url.js.map +1 -0
  63. package/dist/vibe-kanban/rest/vibe-kanban-api.client.d.ts +62 -0
  64. package/dist/vibe-kanban/rest/vibe-kanban-api.client.js +364 -0
  65. package/dist/vibe-kanban/rest/vibe-kanban-api.client.js.map +1 -0
  66. package/dist/vibe-kanban/rest/vk-api-envelope.schema.d.ts +7 -0
  67. package/dist/vibe-kanban/rest/vk-api-envelope.schema.js +10 -0
  68. package/dist/vibe-kanban/rest/vk-api-envelope.schema.js.map +1 -0
  69. package/dist/vibe-kanban/rest/vk-remote-api.schema.d.ts +91 -0
  70. package/dist/vibe-kanban/rest/vk-remote-api.schema.js +64 -0
  71. package/dist/vibe-kanban/rest/vk-remote-api.schema.js.map +1 -0
  72. package/dist/vibe-kanban/{vibe-kanban-mcp.service.d.ts → vibe-kanban-board.service.d.ts} +5 -9
  73. package/dist/vibe-kanban/vibe-kanban-board.service.js +134 -0
  74. package/dist/vibe-kanban/vibe-kanban-board.service.js.map +1 -0
  75. package/dist/vibe-kanban/vibe-kanban-context.controller.d.ts +2 -2
  76. package/dist/vibe-kanban/vibe-kanban-context.controller.js +12 -10
  77. package/dist/vibe-kanban/vibe-kanban-context.controller.js.map +1 -1
  78. package/dist/vibe-kanban/{vibe-kanban-mcp-configured.guard.d.ts → vibe-kanban-destination-configured.guard.d.ts} +1 -1
  79. package/dist/vibe-kanban/{vibe-kanban-mcp-configured.guard.js → vibe-kanban-destination-configured.guard.js} +9 -9
  80. package/dist/vibe-kanban/vibe-kanban-destination-configured.guard.js.map +1 -0
  81. package/dist/vibe-kanban/vibe-kanban-destination.d.ts +4 -0
  82. package/dist/vibe-kanban/vibe-kanban-destination.js +13 -0
  83. package/dist/vibe-kanban/vibe-kanban-destination.js.map +1 -0
  84. package/dist/vibe-kanban/{mcp-result/vk-mcp-tool-result.d.ts → vk-board-payload-normalize.d.ts} +1 -4
  85. package/dist/vibe-kanban/{mcp-result/vk-mcp-tool-result.js → vk-board-payload-normalize.js} +1 -48
  86. package/dist/vibe-kanban/{mcp-result/vk-mcp-tool-result.js.map → vk-board-payload-normalize.js.map} +1 -1
  87. package/dist/vibe-kanban/{mcp-result/vk-mcp-list-get-issue-response.schema.d.ts → vk-list-get-issue-response.schema.d.ts} +10 -10
  88. package/dist/vibe-kanban/{mcp-result/vk-mcp-list-get-issue-response.schema.js → vk-list-get-issue-response.schema.js} +14 -14
  89. package/dist/vibe-kanban/vk-list-get-issue-response.schema.js.map +1 -0
  90. package/dist/vibe-kanban/vk-port-file.schema.d.ts +6 -0
  91. package/dist/vibe-kanban/vk-port-file.schema.js +9 -0
  92. package/dist/vibe-kanban/vk-port-file.schema.js.map +1 -0
  93. package/package.json +3 -3
  94. package/prisma/schema.prisma +1 -1
  95. package/dist/integrations/vibe-kanban/vk-mcp-integration.listener.js.map +0 -1
  96. package/dist/ports/vk-mcp-stdio-session.port.d.ts +0 -5
  97. package/dist/ports/vk-mcp-stdio-session.port.js +0 -3
  98. package/dist/ports/vk-mcp-stdio-session.port.js.map +0 -1
  99. package/dist/sync/poll-cycle/mcp-network-error-heuristic.d.ts +0 -1
  100. package/dist/sync/poll-cycle/mcp-network-error-heuristic.js +0 -13
  101. package/dist/sync/poll-cycle/mcp-network-error-heuristic.js.map +0 -1
  102. package/dist/vibe-kanban/mcp-result/mcp-tool-result-text.d.ts +0 -3
  103. package/dist/vibe-kanban/mcp-result/mcp-tool-result-text.js +0 -26
  104. package/dist/vibe-kanban/mcp-result/mcp-tool-result-text.js.map +0 -1
  105. package/dist/vibe-kanban/mcp-result/vk-mcp-list-get-issue-response.schema.js.map +0 -1
  106. package/dist/vibe-kanban/transport/mcp-transport-config.d.ts +0 -5
  107. package/dist/vibe-kanban/transport/mcp-transport-config.js +0 -16
  108. package/dist/vibe-kanban/transport/mcp-transport-config.js.map +0 -1
  109. package/dist/vibe-kanban/transport/vk-mcp-stdio-session.service.d.ts +0 -20
  110. package/dist/vibe-kanban/transport/vk-mcp-stdio-session.service.js +0 -124
  111. package/dist/vibe-kanban/transport/vk-mcp-stdio-session.service.js.map +0 -1
  112. package/dist/vibe-kanban/transport/vk-stdio-command.schema.d.ts +0 -9
  113. package/dist/vibe-kanban/transport/vk-stdio-command.schema.js +0 -37
  114. package/dist/vibe-kanban/transport/vk-stdio-command.schema.js.map +0 -1
  115. package/dist/vibe-kanban/vibe-kanban-mcp-configured.guard.js.map +0 -1
  116. package/dist/vibe-kanban/vibe-kanban-mcp.service.js +0 -225
  117. package/dist/vibe-kanban/vibe-kanban-mcp.service.js.map +0 -1
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.looksLikeMcpOrNetworkError = looksLikeMcpOrNetworkError;
4
- function looksLikeMcpOrNetworkError(msg) {
5
- const m = msg.toLowerCase();
6
- return (m.includes('mcp') ||
7
- m.includes('fetch') ||
8
- m.includes('econnrefused') ||
9
- m.includes('socket') ||
10
- m.includes('network') ||
11
- m.includes('streamablehttp'));
12
- }
13
- //# sourceMappingURL=mcp-network-error-heuristic.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-network-error-heuristic.js","sourceRoot":"","sources":["../../../src/sync/poll-cycle/mcp-network-error-heuristic.ts"],"names":[],"mappings":";;AACA,gEAUC;AAVD,SAAgB,0BAA0B,CAAC,GAAW;IACpD,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC5B,OAAO,CACL,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACjB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QACnB,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC1B,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACpB,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QACrB,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAC7B,CAAC;AACJ,CAAC"}
@@ -1,3 +0,0 @@
1
- export declare function mcpResultTextParts(result: unknown): string[];
2
- export declare function summarizeMcpToolErrorText(result: unknown): string;
3
- export declare function isGetIssueNotFoundMcpResult(result: unknown): boolean;
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mcpResultTextParts = mcpResultTextParts;
4
- exports.summarizeMcpToolErrorText = summarizeMcpToolErrorText;
5
- exports.isGetIssueNotFoundMcpResult = isGetIssueNotFoundMcpResult;
6
- function mcpResultTextParts(result) {
7
- const r = result;
8
- return (r.content
9
- ?.filter((c) => c.type === 'text' && typeof c.text === 'string')
10
- .map((c) => c.text.trim())
11
- .filter(Boolean) ?? []);
12
- }
13
- function summarizeMcpToolErrorText(result) {
14
- const parts = mcpResultTextParts(result);
15
- const s = parts.join(' | ').slice(0, 800);
16
- return s.length > 0 ? s : 'isError=true (no text in content)';
17
- }
18
- function isGetIssueNotFoundMcpResult(result) {
19
- const r = result;
20
- if (r.isError !== true) {
21
- return false;
22
- }
23
- const summary = summarizeMcpToolErrorText(result);
24
- return /\b404\b|not\s+found|issue\s+not\s+found|unknown\s+issue/i.test(summary);
25
- }
26
- //# sourceMappingURL=mcp-tool-result-text.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-tool-result-text.js","sourceRoot":"","sources":["../../../src/vibe-kanban/mcp-result/mcp-tool-result-text.ts"],"names":[],"mappings":";;AACA,gDAaC;AAKD,8DAIC;AAMD,kEASC;AArCD,SAAgB,kBAAkB,CAAC,MAAe;IAChD,MAAM,CAAC,GAAG,MAET,CAAC;IACF,OAAO,CACL,CAAC,CAAC,OAAO;QACP,EAAE,MAAM,CACN,CAAC,CAAC,EAAuC,EAAE,CACzC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAClD;SACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SACzB,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CACzB,CAAC;AACJ,CAAC;AAKD,SAAgB,yBAAyB,CAAC,MAAe;IACvD,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1C,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAmC,CAAC;AAChE,CAAC;AAMD,SAAgB,2BAA2B,CAAC,MAAe;IACzD,MAAM,CAAC,GAAG,MAA+B,CAAC;IAC1C,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,OAAO,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClD,OAAO,0DAA0D,CAAC,IAAI,CACpE,OAAO,CACR,CAAC;AACJ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"vk-mcp-list-get-issue-response.schema.js","sourceRoot":"","sources":["../../../src/vibe-kanban/mcp-result/vk-mcp-list-get-issue-response.schema.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import type { SupportedDestinationType } from '../../config/integration-types';
2
- export { parseVkStdioCommand, VK_MCP_STDIO_SPAWN, } from './vk-stdio-command.schema';
3
- export declare const VK_MCP_NOT_CONFIGURED_MESSAGE = "Vibe Kanban MCP routes require VIBE_SQUIRE_DESTINATION_TYPE=vibe_kanban";
4
- export declare function isVibeKanbanDestination(destinationType: SupportedDestinationType): boolean;
5
- export declare function isVibeKanbanMcpConfigured(destinationType: SupportedDestinationType): boolean;
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VK_MCP_NOT_CONFIGURED_MESSAGE = exports.VK_MCP_STDIO_SPAWN = exports.parseVkStdioCommand = void 0;
4
- exports.isVibeKanbanDestination = isVibeKanbanDestination;
5
- exports.isVibeKanbanMcpConfigured = isVibeKanbanMcpConfigured;
6
- var vk_stdio_command_schema_1 = require("./vk-stdio-command.schema");
7
- Object.defineProperty(exports, "parseVkStdioCommand", { enumerable: true, get: function () { return vk_stdio_command_schema_1.parseVkStdioCommand; } });
8
- Object.defineProperty(exports, "VK_MCP_STDIO_SPAWN", { enumerable: true, get: function () { return vk_stdio_command_schema_1.VK_MCP_STDIO_SPAWN; } });
9
- exports.VK_MCP_NOT_CONFIGURED_MESSAGE = 'Vibe Kanban MCP routes require VIBE_SQUIRE_DESTINATION_TYPE=vibe_kanban';
10
- function isVibeKanbanDestination(destinationType) {
11
- return destinationType === 'vibe_kanban';
12
- }
13
- function isVibeKanbanMcpConfigured(destinationType) {
14
- return isVibeKanbanDestination(destinationType);
15
- }
16
- //# sourceMappingURL=mcp-transport-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-transport-config.js","sourceRoot":"","sources":["../../../src/vibe-kanban/transport/mcp-transport-config.ts"],"names":[],"mappings":";;;AAWA,0DAIC;AAKD,8DAIC;AAtBD,qEAGmC;AAFjC,8HAAA,mBAAmB,OAAA;AACnB,6HAAA,kBAAkB,OAAA;AAIP,QAAA,6BAA6B,GACxC,yEAAyE,CAAC;AAE5E,SAAgB,uBAAuB,CACrC,eAAyC;IAEzC,OAAO,eAAe,KAAK,aAAa,CAAC;AAC3C,CAAC;AAKD,SAAgB,yBAAyB,CACvC,eAAyC;IAEzC,OAAO,uBAAuB,CAAC,eAAe,CAAC,CAAC;AAClD,CAAC"}
@@ -1,20 +0,0 @@
1
- import { OnModuleDestroy } from '@nestjs/common';
2
- import { Client } from '@modelcontextprotocol/sdk/client/index.js';
3
- import { type AppEnv } from '../../config/app-env.token';
4
- import type { VkMcpStdioSessionPort } from '../../ports/vk-mcp-stdio-session.port';
5
- export declare class VkMcpStdioSessionService implements OnModuleDestroy, VkMcpStdioSessionPort {
6
- private readonly appEnv;
7
- private readonly logger;
8
- private client;
9
- private transport;
10
- private activeConfigKey;
11
- private stderrTail?;
12
- private chain;
13
- constructor(appEnv: AppEnv);
14
- private buildConfigKey;
15
- shutdown(): Promise<void>;
16
- onModuleDestroy(): Promise<void>;
17
- private teardown;
18
- private ensureConnected;
19
- runWithClient<T>(fn: (client: Client) => Promise<T>): Promise<T>;
20
- }
@@ -1,124 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- var VkMcpStdioSessionService_1;
15
- Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.VkMcpStdioSessionService = void 0;
17
- const common_1 = require("@nestjs/common");
18
- const index_js_1 = require("@modelcontextprotocol/sdk/client/index.js");
19
- const stdio_js_1 = require("@modelcontextprotocol/sdk/client/stdio.js");
20
- const app_env_token_1 = require("../../config/app-env.token");
21
- const mcp_transport_config_1 = require("./mcp-transport-config");
22
- let VkMcpStdioSessionService = VkMcpStdioSessionService_1 = class VkMcpStdioSessionService {
23
- appEnv;
24
- logger = new common_1.Logger(VkMcpStdioSessionService_1.name);
25
- client = null;
26
- transport = null;
27
- activeConfigKey = null;
28
- stderrTail;
29
- chain = Promise.resolve();
30
- constructor(appEnv) {
31
- this.appEnv = appEnv;
32
- }
33
- buildConfigKey() {
34
- return this.appEnv.destinationType;
35
- }
36
- async shutdown() {
37
- await this.teardown();
38
- }
39
- async onModuleDestroy() {
40
- await this.teardown();
41
- }
42
- async teardown() {
43
- if (this.stderrTail && this.transport?.stderr) {
44
- const s = this.transport.stderr;
45
- try {
46
- s.removeListener('data', this.stderrTail);
47
- }
48
- catch {
49
- }
50
- this.stderrTail = undefined;
51
- }
52
- if (this.client) {
53
- try {
54
- await this.client.close();
55
- }
56
- catch (e) {
57
- this.logger.debug(`MCP client close: ${e instanceof Error ? e.message : String(e)}`);
58
- }
59
- }
60
- this.client = null;
61
- this.transport = null;
62
- this.activeConfigKey = null;
63
- }
64
- async ensureConnected() {
65
- if (!(0, mcp_transport_config_1.isVibeKanbanDestination)(this.appEnv.destinationType)) {
66
- throw new Error('Vibe Kanban MCP (stdio): VIBE_SQUIRE_DESTINATION_TYPE is not vibe_kanban');
67
- }
68
- const key = this.buildConfigKey();
69
- if (this.client && this.transport && key === this.activeConfigKey) {
70
- return;
71
- }
72
- await this.teardown();
73
- const parsed = mcp_transport_config_1.VK_MCP_STDIO_SPAWN;
74
- const transport = new stdio_js_1.StdioClientTransport({
75
- command: parsed.command,
76
- args: parsed.args,
77
- stderr: 'pipe',
78
- });
79
- const stderr = transport.stderr;
80
- if (stderr) {
81
- this.stderrTail = (chunk) => {
82
- const line = (typeof chunk === 'string' ? chunk : chunk.toString('utf8')).trimEnd();
83
- if (!line) {
84
- return;
85
- }
86
- if (stderrLineLooksLikeHardFailure(line)) {
87
- this.logger.warn(`[vk-mcp stderr] ${line}`);
88
- }
89
- else {
90
- this.logger.debug(`[vk-mcp stderr] ${line}`);
91
- }
92
- };
93
- stderr.on('data', this.stderrTail);
94
- }
95
- const client = new index_js_1.Client({ name: 'vibe-squire', version: '0.0.1' });
96
- await client.connect(transport);
97
- this.transport = transport;
98
- this.client = client;
99
- this.activeConfigKey = key;
100
- this.logger.log(`Vibe Kanban MCP stdio started: ${parsed.command} ${parsed.args.join(' ')}`);
101
- }
102
- async runWithClient(fn) {
103
- const op = this.chain.then(async () => {
104
- await this.ensureConnected();
105
- return fn(this.client);
106
- });
107
- this.chain = op.then(() => undefined, () => undefined);
108
- return op;
109
- }
110
- };
111
- exports.VkMcpStdioSessionService = VkMcpStdioSessionService;
112
- exports.VkMcpStdioSessionService = VkMcpStdioSessionService = VkMcpStdioSessionService_1 = __decorate([
113
- (0, common_1.Injectable)(),
114
- __param(0, (0, common_1.Inject)(app_env_token_1.APP_ENV)),
115
- __metadata("design:paramtypes", [Object])
116
- ], VkMcpStdioSessionService);
117
- function stderrLineLooksLikeHardFailure(line) {
118
- const t = line.trimStart();
119
- return (/\b(ERROR|FATAL)\b/.test(line) ||
120
- /\bpanic(?:ked)?\b/i.test(line) ||
121
- /thread '[^']+' panicked/i.test(line) ||
122
- /^error[\s:]/i.test(t));
123
- }
124
- //# sourceMappingURL=vk-mcp-stdio-session.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vk-mcp-stdio-session.service.js","sourceRoot":"","sources":["../../../src/vibe-kanban/transport/vk-mcp-stdio-session.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA6E;AAC7E,wEAAmE;AACnE,wEAAiF;AACjF,8DAAkE;AAClE,iEAGgC;AAQzB,IAAM,wBAAwB,gCAA9B,MAAM,wBAAwB;IAYW;IAT7B,MAAM,GAAG,IAAI,eAAM,CAAC,0BAAwB,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,GAAkB,IAAI,CAAC;IAC7B,SAAS,GAAgC,IAAI,CAAC;IAC9C,eAAe,GAAkB,IAAI,CAAC;IACtC,UAAU,CAAoC;IAG9C,KAAK,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEpD,YAA8C,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAExD,cAAc;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;IACrC,CAAC;IAKD,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAKxB,CAAC;YACF,IAAI,CAAC;gBACH,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5C,CAAC;YAAC,MAAM,CAAC;YAET,CAAC;YACD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC9B,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC5B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,qBAAqB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAClE,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,IAAI,CAAC,IAAA,8CAAuB,EAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CACb,0EAA0E,CAC3E,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,IAAI,GAAG,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;YAClE,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEtB,MAAM,MAAM,GAAG,yCAAkB,CAAC;QAElC,MAAM,SAAS,GAAG,IAAI,+BAAoB,CAAC;YACzC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAChC,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,UAAU,GAAG,CAAC,KAAsB,EAAE,EAAE;gBAC3C,MAAM,IAAI,GAAG,CACX,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAC3D,CAAC,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO;gBACT,CAAC;gBAGD,IAAI,8BAA8B,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;gBAC9C,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC,CAAC;YACF,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,iBAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACrE,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEhC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,kCAAkC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAC5E,CAAC;IACJ,CAAC;IAKD,KAAK,CAAC,aAAa,CAAI,EAAkC;QACvD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACpC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAC7B,OAAO,EAAE,CAAC,IAAI,CAAC,MAAO,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAClB,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;CACF,CAAA;AA5HY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;IAaE,WAAA,IAAA,eAAM,EAAC,uBAAO,CAAC,CAAA;;GAZjB,wBAAwB,CA4HpC;AAED,SAAS,8BAA8B,CAAC,IAAY;IAClD,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAC3B,OAAO,CACL,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;QACrC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CACvB,CAAC;AACJ,CAAC"}
@@ -1,9 +0,0 @@
1
- export declare const VK_MCP_STDIO_COMMAND_JSON: "[\"npx\",\"-y\",\"vibe-kanban@latest\",\"--mcp\"]";
2
- export declare function parseVkStdioCommand(json: string): {
3
- command: string;
4
- args: string[];
5
- } | null;
6
- export declare const VK_MCP_STDIO_SPAWN: {
7
- command: string;
8
- args: string[];
9
- };
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VK_MCP_STDIO_SPAWN = exports.VK_MCP_STDIO_COMMAND_JSON = void 0;
4
- exports.parseVkStdioCommand = parseVkStdioCommand;
5
- const zod_1 = require("zod");
6
- const parsedJsonSchema = zod_1.z.array(zod_1.z.unknown()).min(1);
7
- exports.VK_MCP_STDIO_COMMAND_JSON = '["npx","-y","vibe-kanban@latest","--mcp"]';
8
- function parseVkStdioCommand(json) {
9
- const t = json.trim();
10
- if (!t) {
11
- return null;
12
- }
13
- let parsed;
14
- try {
15
- parsed = JSON.parse(t);
16
- }
17
- catch {
18
- return null;
19
- }
20
- const arr = parsedJsonSchema.safeParse(parsed);
21
- if (!arr.success) {
22
- return null;
23
- }
24
- const parts = arr.data
25
- .map((x) => String(x).trim())
26
- .filter((s) => s.length > 0);
27
- if (parts.length < 1) {
28
- return null;
29
- }
30
- return { command: parts[0], args: parts.slice(1) };
31
- }
32
- const _vkSpawn = parseVkStdioCommand(exports.VK_MCP_STDIO_COMMAND_JSON);
33
- if (!_vkSpawn) {
34
- throw new Error('VK_MCP_STDIO_COMMAND_JSON must parse to [command, ...args]');
35
- }
36
- exports.VK_MCP_STDIO_SPAWN = _vkSpawn;
37
- //# sourceMappingURL=vk-stdio-command.schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vk-stdio-command.schema.js","sourceRoot":"","sources":["../../../src/vibe-kanban/transport/vk-stdio-command.schema.ts"],"names":[],"mappings":";;;AAcA,kDAwBC;AAtCD,6BAAwB;AAExB,MAAM,gBAAgB,GAAG,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAMxC,QAAA,yBAAyB,GACpC,2CAAoD,CAAC;AAKvD,SAAgB,mBAAmB,CACjC,IAAY;IAEZ,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAY,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI;SACnB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,iCAAyB,CAAC,CAAC;AAChE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACd,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;AAChF,CAAC;AAGY,QAAA,kBAAkB,GAAG,QAAQ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"vibe-kanban-mcp-configured.guard.js","sourceRoot":"","sources":["../../src/vibe-kanban/vibe-kanban-mcp-configured.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAKwB;AACxB,2DAA+D;AAC/D,2EAG0C;AAMnC,IAAM,4BAA4B,GAAlC,MAAM,4BAA4B;IACO;IAA9C,YAA8C,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAEhE,WAAW;QACT,IAAI,CAAC,IAAA,gDAAyB,EAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,4BAAmB,CAAC,oDAA6B,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AATY,oEAA4B;uCAA5B,4BAA4B;IADxC,IAAA,mBAAU,GAAE;IAEE,WAAA,IAAA,eAAM,EAAC,uBAAO,CAAC,CAAA;;GADjB,4BAA4B,CASxC"}
@@ -1,225 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- var VibeKanbanMcpService_1;
15
- Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.VibeKanbanMcpService = void 0;
17
- const common_1 = require("@nestjs/common");
18
- const app_env_token_1 = require("../config/app-env.token");
19
- const settings_service_1 = require("../settings/settings.service");
20
- const mcp_transport_config_1 = require("./transport/mcp-transport-config");
21
- const injection_tokens_1 = require("../ports/injection-tokens");
22
- const mcp_tool_result_text_1 = require("./mcp-result/mcp-tool-result-text");
23
- const vk_contract_1 = require("./vk-contract");
24
- const vk_board_cap_1 = require("./vk-board-cap");
25
- const vk_mcp_list_get_issue_response_schema_1 = require("./mcp-result/vk-mcp-list-get-issue-response.schema");
26
- const vk_mcp_tool_result_1 = require("./mcp-result/vk-mcp-tool-result");
27
- let VibeKanbanMcpService = class VibeKanbanMcpService {
28
- static { VibeKanbanMcpService_1 = this; }
29
- settings;
30
- appEnv;
31
- stdioSession;
32
- logger = new common_1.Logger(VibeKanbanMcpService_1.name);
33
- constructor(settings, appEnv, stdioSession) {
34
- this.settings = settings;
35
- this.appEnv = appEnv;
36
- this.stdioSession = stdioSession;
37
- }
38
- assertToolCallOk(toolName, result) {
39
- const r = result;
40
- if (r.isError !== true) {
41
- return;
42
- }
43
- const summary = (0, mcp_tool_result_text_1.summarizeMcpToolErrorText)(result);
44
- this.logger.debug(`Vibe Kanban MCP tool "${toolName}" returned isError: ${summary}`);
45
- throw new Error(`${toolName}: ${summary}`);
46
- }
47
- async callToolOk(client, name, args) {
48
- const result = await client.callTool({ name, arguments: args });
49
- this.assertToolCallOk(name, result);
50
- return result;
51
- }
52
- async withClient(fn) {
53
- if (!(0, mcp_transport_config_1.isVibeKanbanDestination)(this.appEnv.destinationType)) {
54
- throw new Error('Vibe Kanban MCP: VIBE_SQUIRE_DESTINATION_TYPE must be vibe_kanban for this adapter');
55
- }
56
- return this.stdioSession.runWithClient(fn);
57
- }
58
- async probe() {
59
- await this.listOrganizations();
60
- }
61
- async listOrganizations() {
62
- return this.withClient(async (client) => {
63
- const result = await this.callToolOk(client, 'list_organizations', {});
64
- const parsed = (0, vk_mcp_tool_result_1.parseToolJson)(result);
65
- return (0, vk_mcp_tool_result_1.extractArrayFromMcpPayload)(parsed)
66
- .map(vk_mcp_tool_result_1.normalizeOrg)
67
- .filter((x) => x != null);
68
- });
69
- }
70
- async listProjects(organizationId) {
71
- return this.withClient(async (client) => {
72
- const result = await this.callToolOk(client, 'list_projects', {
73
- organization_id: organizationId,
74
- });
75
- const parsed = (0, vk_mcp_tool_result_1.parseToolJson)(result);
76
- return (0, vk_mcp_tool_result_1.extractArrayFromMcpPayload)(parsed)
77
- .map(vk_mcp_tool_result_1.normalizeProject)
78
- .filter((x) => x != null);
79
- });
80
- }
81
- async listRepos() {
82
- return this.withClient(async (client) => {
83
- const result = await this.callToolOk(client, 'list_repos', {});
84
- const parsed = (0, vk_mcp_tool_result_1.parseToolJson)(result);
85
- return (0, vk_mcp_tool_result_1.extractArrayFromMcpPayload)(parsed)
86
- .map(vk_mcp_tool_result_1.normalizeRepo)
87
- .filter((x) => x != null);
88
- });
89
- }
90
- async listIssues(projectId, opts) {
91
- return this.withClient(async (client) => {
92
- const args = { project_id: projectId };
93
- if (opts?.search) {
94
- args.search = opts.search;
95
- }
96
- if (opts?.limit != null) {
97
- args.limit = opts.limit;
98
- }
99
- if (opts?.offset != null) {
100
- args.offset = opts.offset;
101
- }
102
- const result = await this.callToolOk(client, 'list_issues', args);
103
- const parsed = (0, vk_mcp_tool_result_1.parseToolJson)(result);
104
- const structured = (0, vk_mcp_list_get_issue_response_schema_1.safeParseVkMcpListIssuesResponse)(parsed);
105
- if (structured) {
106
- return structured.issues
107
- .map((row) => (0, vk_mcp_tool_result_1.normalizeIssue)(row))
108
- .filter((x) => x != null);
109
- }
110
- return (0, vk_mcp_tool_result_1.extractArrayFromMcpPayload)(parsed)
111
- .map(vk_mcp_tool_result_1.normalizeIssue)
112
- .filter((x) => x != null);
113
- });
114
- }
115
- static VK_BOARD_PAGE_SIZE = 100;
116
- static VK_BOARD_MAX_PAGES = 20;
117
- async countActiveVibeSquireIssues(projectId) {
118
- const kanbanDone = this.settings.getEffective('kanban_done_status').trim() || 'Done';
119
- let total = 0;
120
- for (let page = 0; page < VibeKanbanMcpService_1.VK_BOARD_MAX_PAGES; page++) {
121
- const offset = page * VibeKanbanMcpService_1.VK_BOARD_PAGE_SIZE;
122
- const rows = await this.listIssues(projectId, {
123
- search: vk_contract_1.VIBE_SQUIRE_TITLE_MARKER,
124
- limit: VibeKanbanMcpService_1.VK_BOARD_PAGE_SIZE,
125
- offset,
126
- });
127
- for (const row of rows) {
128
- if ((0, vk_board_cap_1.vkListRowCountsTowardBoardCap)(row, kanbanDone)) {
129
- total += 1;
130
- }
131
- }
132
- if (rows.length < VibeKanbanMcpService_1.VK_BOARD_PAGE_SIZE) {
133
- break;
134
- }
135
- }
136
- return total;
137
- }
138
- async getIssue(issueId) {
139
- return this.withClient(async (client) => {
140
- const result = await client.callTool({
141
- name: 'get_issue',
142
- arguments: { issue_id: issueId },
143
- });
144
- if ((0, mcp_tool_result_text_1.isGetIssueNotFoundMcpResult)(result)) {
145
- return null;
146
- }
147
- this.assertToolCallOk('get_issue', result);
148
- const parsed = (0, vk_mcp_tool_result_1.parseToolJson)(result);
149
- const wrapped = (0, vk_mcp_list_get_issue_response_schema_1.safeParseVkMcpGetIssueResponse)(parsed);
150
- if (wrapped) {
151
- return (0, vk_mcp_tool_result_1.normalizeIssue)(wrapped.issue);
152
- }
153
- return (0, vk_mcp_tool_result_1.normalizeIssue)(parsed);
154
- });
155
- }
156
- async createIssue(params) {
157
- return this.withClient(async (client) => {
158
- const result = await this.callToolOk(client, 'create_issue', {
159
- title: params.title,
160
- project_id: params.projectId,
161
- description: params.description,
162
- });
163
- const parsed = (0, vk_mcp_tool_result_1.parseToolJson)(result);
164
- const id = (0, vk_mcp_tool_result_1.pickCreatedIssueId)(parsed);
165
- if (!id) {
166
- throw new Error('create_issue: could not parse issue id from response');
167
- }
168
- return id;
169
- });
170
- }
171
- async updateIssue(issueId, fields) {
172
- await this.withClient(async (client) => {
173
- const args = { issue_id: issueId };
174
- if (fields.status != null) {
175
- args.status = fields.status;
176
- }
177
- await this.callToolOk(client, 'update_issue', args);
178
- });
179
- }
180
- async startWorkspace(params) {
181
- return this.withClient(async (client) => {
182
- const args = {
183
- name: params.name,
184
- executor: params.executor,
185
- repositories: params.repositories.map((r) => ({
186
- repo_id: r.repoId,
187
- branch: r.branch,
188
- })),
189
- };
190
- if (params.issueId) {
191
- args.issue_id = params.issueId;
192
- }
193
- if (params.prompt) {
194
- args.prompt = params.prompt;
195
- }
196
- if (params.variant) {
197
- args.variant = params.variant;
198
- }
199
- const result = await this.callToolOk(client, 'start_workspace', args);
200
- const parsed = (0, vk_mcp_tool_result_1.parseToolJson)(result);
201
- const id = (0, vk_mcp_tool_result_1.pickWorkspaceId)(parsed);
202
- if (!id) {
203
- throw new Error('start_workspace: could not parse workspace id from response');
204
- }
205
- return id;
206
- });
207
- }
208
- async deleteWorkspace(workspaceId, opts) {
209
- await this.withClient(async (client) => {
210
- const args = { workspace_id: workspaceId };
211
- if (opts?.deleteBranches) {
212
- args.delete_branches = true;
213
- }
214
- await this.callToolOk(client, 'delete_workspace', args);
215
- });
216
- }
217
- };
218
- exports.VibeKanbanMcpService = VibeKanbanMcpService;
219
- exports.VibeKanbanMcpService = VibeKanbanMcpService = VibeKanbanMcpService_1 = __decorate([
220
- (0, common_1.Injectable)(),
221
- __param(1, (0, common_1.Inject)(app_env_token_1.APP_ENV)),
222
- __param(2, (0, common_1.Inject)(injection_tokens_1.VK_MCP_STDIO_SESSION_PORT)),
223
- __metadata("design:paramtypes", [settings_service_1.SettingsService, Object, Object])
224
- ], VibeKanbanMcpService);
225
- //# sourceMappingURL=vibe-kanban-mcp.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vibe-kanban-mcp.service.js","sourceRoot":"","sources":["../../src/vibe-kanban/vibe-kanban-mcp.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA4D;AAE5D,2DAA+D;AAC/D,mEAA+D;AAO/D,2EAA2E;AAC3E,gEAAsE;AAEtE,4EAG2C;AAC3C,+CAAyD;AACzD,iDAA+D;AAC/D,8GAG4D;AAC5D,wEASyC;AAUlC,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;;IAIZ;IACiB;IAEjB;IANF,MAAM,GAAG,IAAI,eAAM,CAAC,sBAAoB,CAAC,IAAI,CAAC,CAAC;IAEhE,YACmB,QAAyB,EACR,MAAc,EAE/B,YAAmC;QAHnC,aAAQ,GAAR,QAAQ,CAAiB;QACR,WAAM,GAAN,MAAM,CAAQ;QAE/B,iBAAY,GAAZ,YAAY,CAAuB;IACnD,CAAC;IAKI,gBAAgB,CAAC,QAAgB,EAAE,MAAe;QACxD,MAAM,CAAC,GAAG,MAA+B,CAAC;QAC1C,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,IAAA,gDAAyB,EAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,yBAAyB,QAAQ,uBAAuB,OAAO,EAAE,CAClE,CAAC;QACF,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;IAEO,KAAK,CAAC,UAAU,CACtB,MAAc,EACd,IAAY,EACZ,IAA6B;QAE7B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpC,OAAO,MAAM,CAAC;IAChB,CAAC;IAGD,KAAK,CAAC,UAAU,CAAI,EAAkC;QACpD,IAAI,CAAC,IAAA,8CAAuB,EAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC;IAGD,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAC;YACvE,MAAM,MAAM,GAAG,IAAA,kCAAa,EAAC,MAAM,CAAC,CAAC;YACrC,OAAO,IAAA,+CAA0B,EAAC,MAAM,CAAC;iBACtC,GAAG,CAAC,iCAAY,CAAC;iBACjB,MAAM,CAAC,CAAC,CAAC,EAAiB,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,cAAsB;QACvC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE;gBAC5D,eAAe,EAAE,cAAc;aAChC,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,kCAAa,EAAC,MAAM,CAAC,CAAC;YACrC,OAAO,IAAA,+CAA0B,EAAC,MAAM,CAAC;iBACtC,GAAG,CAAC,qCAAgB,CAAC;iBACrB,MAAM,CAAC,CAAC,CAAC,EAAqB,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS;QACb,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,IAAA,kCAAa,EAAC,MAAM,CAAC,CAAC;YACrC,OAAO,IAAA,+CAA0B,EAAC,MAAM,CAAC;iBACtC,GAAG,CAAC,kCAAa,CAAC;iBAClB,MAAM,CAAC,CAAC,CAAC,EAAkB,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CACd,SAAiB,EACjB,IAA2D;QAE3D,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACtC,MAAM,IAAI,GAA4B,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;YAChE,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC5B,CAAC;YACD,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;gBACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAC1B,CAAC;YACD,IAAI,IAAI,EAAE,MAAM,IAAI,IAAI,EAAE,CAAC;gBACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC5B,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,IAAA,kCAAa,EAAC,MAAM,CAAC,CAAC;YACrC,MAAM,UAAU,GAAG,IAAA,wEAAgC,EAAC,MAAM,CAAC,CAAC;YAC5D,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,UAAU,CAAC,MAAM;qBACrB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,mCAAc,EAAC,GAAG,CAAC,CAAC;qBACjC,MAAM,CAAC,CAAC,CAAC,EAAmB,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;YAC/C,CAAC;YACD,OAAO,IAAA,+CAA0B,EAAC,MAAM,CAAC;iBACtC,GAAG,CAAC,mCAAc,CAAC;iBACnB,MAAM,CAAC,CAAC,CAAC,EAAmB,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAU,kBAAkB,GAAG,GAAG,CAAC;IACzC,MAAM,CAAU,kBAAkB,GAAG,EAAE,CAAC;IAMhD,KAAK,CAAC,2BAA2B,CAAC,SAAiB;QACjD,MAAM,UAAU,GACd,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC;QACpE,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,sBAAoB,CAAC,kBAAkB,EAAE,IAAI,EAAE,EAAE,CAAC;YAC1E,MAAM,MAAM,GAAG,IAAI,GAAG,sBAAoB,CAAC,kBAAkB,CAAC;YAC9D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;gBAC5C,MAAM,EAAE,sCAAwB;gBAChC,KAAK,EAAE,sBAAoB,CAAC,kBAAkB;gBAC9C,MAAM;aACP,CAAC,CAAC;YACH,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,IAAI,IAAA,4CAA6B,EAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;oBACnD,KAAK,IAAI,CAAC,CAAC;gBACb,CAAC;YACH,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,GAAG,sBAAoB,CAAC,kBAAkB,EAAE,CAAC;gBAC1D,MAAM;YACR,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;gBACnC,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE;aACjC,CAAC,CAAC;YACH,IAAI,IAAA,kDAA2B,EAAC,MAAM,CAAC,EAAE,CAAC;gBACxC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAA,kCAAa,EAAC,MAAM,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,IAAA,sEAA8B,EAAC,MAAM,CAAC,CAAC;YACvD,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,IAAA,mCAAc,EAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACvC,CAAC;YACD,OAAO,IAAA,mCAAc,EAAC,MAAM,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAIjB;QACC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE;gBAC3D,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,UAAU,EAAE,MAAM,CAAC,SAAS;gBAC5B,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,kCAAa,EAAC,MAAM,CAAC,CAAC;YACrC,MAAM,EAAE,GAAG,IAAA,uCAAkB,EAAC,MAAM,CAAC,CAAC;YACtC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAC1E,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CACf,OAAe,EACf,MAA2B;QAE3B,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,IAAI,GAA4B,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;YAC5D,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;gBAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC9B,CAAC;YACD,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAOpB;QACC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACtC,MAAM,IAAI,GAA4B;gBACpC,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5C,OAAO,EAAE,CAAC,CAAC,MAAM;oBACjB,MAAM,EAAE,CAAC,CAAC,MAAM;iBACjB,CAAC,CAAC;aACJ,CAAC;YACF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;YACjC,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC9B,CAAC;YACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAChC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;YACtE,MAAM,MAAM,GAAG,IAAA,kCAAa,EAAC,MAAM,CAAC,CAAC;YACrC,MAAM,EAAE,GAAG,IAAA,oCAAe,EAAC,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,WAAmB,EACnB,IAAmC;QAEnC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,IAAI,GAA4B,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;YACpE,IAAI,IAAI,EAAE,cAAc,EAAE,CAAC;gBACzB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC9B,CAAC;YACD,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC;;AAlPU,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;IAMR,WAAA,IAAA,eAAM,EAAC,uBAAO,CAAC,CAAA;IACf,WAAA,IAAA,eAAM,EAAC,4CAAyB,CAAC,CAAA;qCAFP,kCAAe;GAJjC,oBAAoB,CAmPhC"}