@hivemindai/mcp-server 0.5.0 → 0.6.1

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 (125) hide show
  1. package/dist/__tests__/config.test.js +1 -1
  2. package/dist/__tests__/config.test.js.map +1 -1
  3. package/dist/__tests__/credentials.test.js +5 -5
  4. package/dist/__tests__/credentials.test.js.map +1 -1
  5. package/dist/__tests__/helpers/mock-server.d.ts +79 -0
  6. package/dist/__tests__/helpers/mock-server.d.ts.map +1 -0
  7. package/dist/__tests__/helpers/mock-server.js +107 -0
  8. package/dist/__tests__/helpers/mock-server.js.map +1 -0
  9. package/dist/__tests__/remember.test.d.ts +2 -0
  10. package/dist/__tests__/remember.test.d.ts.map +1 -0
  11. package/dist/__tests__/remember.test.js +152 -0
  12. package/dist/__tests__/remember.test.js.map +1 -0
  13. package/dist/__tests__/tools-approvals.test.d.ts +2 -0
  14. package/dist/__tests__/tools-approvals.test.d.ts.map +1 -0
  15. package/dist/__tests__/tools-approvals.test.js +219 -0
  16. package/dist/__tests__/tools-approvals.test.js.map +1 -0
  17. package/dist/__tests__/tools-context.test.d.ts +2 -0
  18. package/dist/__tests__/tools-context.test.d.ts.map +1 -0
  19. package/dist/__tests__/tools-context.test.js +107 -0
  20. package/dist/__tests__/tools-context.test.js.map +1 -0
  21. package/dist/__tests__/tools-handoffs.test.d.ts +2 -0
  22. package/dist/__tests__/tools-handoffs.test.d.ts.map +1 -0
  23. package/dist/__tests__/tools-handoffs.test.js +153 -0
  24. package/dist/__tests__/tools-handoffs.test.js.map +1 -0
  25. package/dist/__tests__/tools-knowledge.test.d.ts +2 -0
  26. package/dist/__tests__/tools-knowledge.test.d.ts.map +1 -0
  27. package/dist/__tests__/tools-knowledge.test.js +169 -0
  28. package/dist/__tests__/tools-knowledge.test.js.map +1 -0
  29. package/dist/__tests__/tools-plans.test.d.ts +2 -0
  30. package/dist/__tests__/tools-plans.test.d.ts.map +1 -0
  31. package/dist/__tests__/tools-plans.test.js +307 -0
  32. package/dist/__tests__/tools-plans.test.js.map +1 -0
  33. package/dist/__tests__/tools-schedules.test.d.ts +2 -0
  34. package/dist/__tests__/tools-schedules.test.d.ts.map +1 -0
  35. package/dist/__tests__/tools-schedules.test.js +153 -0
  36. package/dist/__tests__/tools-schedules.test.js.map +1 -0
  37. package/dist/__tests__/tools-skills.test.d.ts +2 -0
  38. package/dist/__tests__/tools-skills.test.d.ts.map +1 -0
  39. package/dist/__tests__/tools-skills.test.js +187 -0
  40. package/dist/__tests__/tools-skills.test.js.map +1 -0
  41. package/dist/__tests__/tools-tasks.test.d.ts +2 -0
  42. package/dist/__tests__/tools-tasks.test.d.ts.map +1 -0
  43. package/dist/__tests__/tools-tasks.test.js +83 -0
  44. package/dist/__tests__/tools-tasks.test.js.map +1 -0
  45. package/dist/__tests__/tools-triggers.test.d.ts +2 -0
  46. package/dist/__tests__/tools-triggers.test.d.ts.map +1 -0
  47. package/dist/__tests__/tools-triggers.test.js +119 -0
  48. package/dist/__tests__/tools-triggers.test.js.map +1 -0
  49. package/dist/__tests__/tools-workflows.test.d.ts +2 -0
  50. package/dist/__tests__/tools-workflows.test.d.ts.map +1 -0
  51. package/dist/__tests__/tools-workflows.test.js +203 -0
  52. package/dist/__tests__/tools-workflows.test.js.map +1 -0
  53. package/dist/__tests__/tools.test.js +2 -2
  54. package/dist/__tests__/tools.test.js.map +1 -1
  55. package/dist/cli/commands/context-inject.d.ts.map +1 -1
  56. package/dist/cli/commands/context-inject.js +21 -0
  57. package/dist/cli/commands/context-inject.js.map +1 -1
  58. package/dist/cli/commands/git-hook.d 2.ts +2 -0
  59. package/dist/cli/commands/guard.d.ts.map +1 -1
  60. package/dist/cli/commands/guard.js +20 -1
  61. package/dist/cli/commands/guard.js.map +1 -1
  62. package/dist/cli/commands/init.d.ts.map +1 -1
  63. package/dist/cli/commands/init.js +21 -10
  64. package/dist/cli/commands/init.js.map +1 -1
  65. package/dist/cli/commands/login.d 2.ts +2 -0
  66. package/dist/cli/commands/login.d.ts 2.map +1 -0
  67. package/dist/cli/commands/login.js +1 -1
  68. package/dist/cli/commands/login.js.map +1 -1
  69. package/dist/cli/commands/logout.js 2.map +1 -0
  70. package/dist/cli/commands/release.d 2.ts +2 -0
  71. package/dist/cli/commands/skill-inject.d.ts +2 -0
  72. package/dist/cli/commands/skill-inject.d.ts.map +1 -0
  73. package/dist/cli/commands/skill-inject.js +194 -0
  74. package/dist/cli/commands/skill-inject.js.map +1 -0
  75. package/dist/cli/commands/skill.d.ts +2 -0
  76. package/dist/cli/commands/skill.d.ts.map +1 -0
  77. package/dist/cli/commands/skill.js +185 -0
  78. package/dist/cli/commands/skill.js.map +1 -0
  79. package/dist/cli/credentials.js +1 -1
  80. package/dist/cli/credentials.js.map +1 -1
  81. package/dist/cli/index 2.d.ts +2 -0
  82. package/dist/cli/index 2.d.ts.map +1 -0
  83. package/dist/cli/index 2.js +63 -0
  84. package/dist/cli/index 2.js.map +1 -0
  85. package/dist/cli/index.js +5 -0
  86. package/dist/cli/index.js.map +1 -1
  87. package/dist/config.js +1 -1
  88. package/dist/config.js.map +1 -1
  89. package/dist/http-db.d.ts.map +1 -1
  90. package/dist/http-db.js +5 -1
  91. package/dist/http-db.js.map +1 -1
  92. package/dist/index.js +11 -1
  93. package/dist/index.js.map +1 -1
  94. package/dist/tools/handoffs.d.ts +5 -0
  95. package/dist/tools/handoffs.d.ts.map +1 -0
  96. package/dist/tools/handoffs.js +160 -0
  97. package/dist/tools/handoffs.js.map +1 -0
  98. package/dist/tools/knowledge.d.ts.map +1 -1
  99. package/dist/tools/knowledge.js +26 -3
  100. package/dist/tools/knowledge.js 2.map +1 -0
  101. package/dist/tools/knowledge.js.map +1 -1
  102. package/dist/tools/plans.d.ts +5 -0
  103. package/dist/tools/plans.d.ts.map +1 -0
  104. package/dist/tools/plans.js +359 -0
  105. package/dist/tools/plans.js.map +1 -0
  106. package/dist/tools/publish.d.ts.map +1 -1
  107. package/dist/tools/publish.js +11 -1
  108. package/dist/tools/publish.js.map +1 -1
  109. package/dist/tools/schedules.d.ts +5 -0
  110. package/dist/tools/schedules.d.ts.map +1 -0
  111. package/dist/tools/schedules.js +193 -0
  112. package/dist/tools/schedules.js.map +1 -0
  113. package/dist/tools/skills.d.ts +5 -0
  114. package/dist/tools/skills.d.ts.map +1 -0
  115. package/dist/tools/skills.js +273 -0
  116. package/dist/tools/skills.js.map +1 -0
  117. package/dist/tools/status.d.ts +3 -2
  118. package/dist/tools/status.d.ts.map +1 -1
  119. package/dist/tools/status.js +14 -5
  120. package/dist/tools/status.js.map +1 -1
  121. package/dist/tools/workflows.d.ts +5 -0
  122. package/dist/tools/workflows.d.ts.map +1 -0
  123. package/dist/tools/workflows.js +254 -0
  124. package/dist/tools/workflows.js.map +1 -0
  125. package/package.json +11 -11
@@ -0,0 +1,153 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import { mockConfig, createMockServer, createMockClient } from "./helpers/mock-server.js";
3
+ import { registerScheduleTool } from "../tools/schedules.js";
4
+ let server;
5
+ let client;
6
+ beforeEach(() => {
7
+ vi.clearAllMocks();
8
+ server = createMockServer();
9
+ client = createMockClient();
10
+ });
11
+ describe("registerScheduleTool", () => {
12
+ it("returns cloud-only message when no client", async () => {
13
+ registerScheduleTool(server, mockConfig);
14
+ const handler = server.getHandler("hivemind_schedule");
15
+ const result = await handler({ action: "list" });
16
+ expect(result.content[0].text).toContain("only available in cloud mode");
17
+ });
18
+ it("list: calls client.listSchedules", async () => {
19
+ client.listSchedules.mockResolvedValueOnce({
20
+ schedules: [
21
+ {
22
+ scheduleId: "sch_1",
23
+ name: "nightly",
24
+ cronExpression: "0 2 * * *",
25
+ action: { type: "run_workflow", workflowId: "wf_1" },
26
+ active: true,
27
+ runCount: 0,
28
+ created_at: "2024-01-01T00:00:00Z",
29
+ },
30
+ ],
31
+ total: 1,
32
+ });
33
+ registerScheduleTool(server, mockConfig, client);
34
+ const handler = server.getHandler("hivemind_schedule");
35
+ const result = await handler({ action: "list" });
36
+ expect(client.listSchedules).toHaveBeenCalled();
37
+ expect(result.content[0].text).toContain("Schedules");
38
+ });
39
+ it("list: empty", async () => {
40
+ client.listSchedules.mockResolvedValueOnce({ schedules: [], total: 0 });
41
+ registerScheduleTool(server, mockConfig, client);
42
+ const handler = server.getHandler("hivemind_schedule");
43
+ const result = await handler({ action: "list" });
44
+ expect(result.content[0].text).toContain("No schedules found");
45
+ });
46
+ it("create: workflow schedule", async () => {
47
+ client.createSchedule.mockResolvedValueOnce({ scheduleId: "sch_new" });
48
+ registerScheduleTool(server, mockConfig, client);
49
+ const handler = server.getHandler("hivemind_schedule");
50
+ const result = await handler({
51
+ action: "create",
52
+ name: "nightly",
53
+ cron_expression: "0 2 * * *",
54
+ action_type: "run_workflow",
55
+ workflow_id: "wf_1",
56
+ });
57
+ expect(client.createSchedule).toHaveBeenCalled();
58
+ expect(result.content[0].text).toContain("Schedule created");
59
+ expect(result.content[0].text).toContain("sch_new");
60
+ });
61
+ it("create: event schedule", async () => {
62
+ client.createSchedule.mockResolvedValueOnce({ scheduleId: "sch_evt" });
63
+ registerScheduleTool(server, mockConfig, client);
64
+ const handler = server.getHandler("hivemind_schedule");
65
+ await handler({
66
+ action: "create",
67
+ name: "daily-ping",
68
+ cron_expression: "0 9 * * 1-5",
69
+ action_type: "emit_event",
70
+ emit_channel: "general",
71
+ emit_event_type: "schedule.ping",
72
+ });
73
+ expect(client.createSchedule).toHaveBeenCalledWith({
74
+ name: "daily-ping",
75
+ description: undefined,
76
+ cron_expression: "0 9 * * 1-5",
77
+ action: {
78
+ type: "emit_event",
79
+ emitChannel: "general",
80
+ emitEventType: "schedule.ping",
81
+ },
82
+ });
83
+ });
84
+ it("create: passes description", async () => {
85
+ client.createSchedule.mockResolvedValueOnce({ scheduleId: "sch_desc" });
86
+ registerScheduleTool(server, mockConfig, client);
87
+ const handler = server.getHandler("hivemind_schedule");
88
+ await handler({
89
+ action: "create",
90
+ name: "nightly",
91
+ cron_expression: "0 2 * * *",
92
+ action_type: "run_workflow",
93
+ workflow_id: "wf_1",
94
+ description: "Run nightly build",
95
+ });
96
+ expect(client.createSchedule).toHaveBeenCalledWith(expect.objectContaining({ description: "Run nightly build" }));
97
+ });
98
+ it("update: calls client.updateSchedule", async () => {
99
+ client.updateSchedule.mockResolvedValueOnce({ updated: true });
100
+ registerScheduleTool(server, mockConfig, client);
101
+ const handler = server.getHandler("hivemind_schedule");
102
+ const result = await handler({
103
+ action: "update",
104
+ schedule_id: "sch_1",
105
+ name: "updated-name",
106
+ });
107
+ expect(client.updateSchedule).toHaveBeenCalledWith("sch_1", expect.objectContaining({ name: "updated-name" }));
108
+ expect(result.content[0].text).toContain("updated");
109
+ });
110
+ it("update: not found", async () => {
111
+ client.updateSchedule.mockResolvedValueOnce({ updated: false });
112
+ registerScheduleTool(server, mockConfig, client);
113
+ const handler = server.getHandler("hivemind_schedule");
114
+ const result = await handler({
115
+ action: "update",
116
+ schedule_id: "sch_1",
117
+ name: "updated-name",
118
+ });
119
+ expect(result.content[0].text).toContain("not found");
120
+ });
121
+ it("delete: calls client.deleteSchedule", async () => {
122
+ client.deleteSchedule.mockResolvedValueOnce({ deleted: true });
123
+ registerScheduleTool(server, mockConfig, client);
124
+ const handler = server.getHandler("hivemind_schedule");
125
+ const result = await handler({ action: "delete", schedule_id: "sch_1" });
126
+ expect(client.deleteSchedule).toHaveBeenCalledWith("sch_1");
127
+ expect(result.content[0].text).toContain("deleted");
128
+ });
129
+ it("delete: not found", async () => {
130
+ client.deleteSchedule.mockResolvedValueOnce({ deleted: false });
131
+ registerScheduleTool(server, mockConfig, client);
132
+ const handler = server.getHandler("hivemind_schedule");
133
+ const result = await handler({ action: "delete", schedule_id: "sch_1" });
134
+ expect(result.content[0].text).toContain("not found");
135
+ });
136
+ it("toggle: activates schedule", async () => {
137
+ client.updateSchedule.mockResolvedValueOnce({ updated: true });
138
+ registerScheduleTool(server, mockConfig, client);
139
+ const handler = server.getHandler("hivemind_schedule");
140
+ const result = await handler({ action: "toggle", schedule_id: "sch_1", active: true });
141
+ expect(client.updateSchedule).toHaveBeenCalledWith("sch_1", { active: true });
142
+ expect(result.content[0].text).toContain("active");
143
+ });
144
+ it("toggle: pauses schedule", async () => {
145
+ client.updateSchedule.mockResolvedValueOnce({ updated: true });
146
+ registerScheduleTool(server, mockConfig, client);
147
+ const handler = server.getHandler("hivemind_schedule");
148
+ const result = await handler({ action: "toggle", schedule_id: "sch_1", active: false });
149
+ expect(client.updateSchedule).toHaveBeenCalledWith("sch_1", { active: false });
150
+ expect(result.content[0].text).toContain("paused");
151
+ });
152
+ });
153
+ //# sourceMappingURL=tools-schedules.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-schedules.test.js","sourceRoot":"","sources":["../../src/__tests__/tools-schedules.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tools-skills.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-skills.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tools-skills.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,187 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import { mockConfig, createMockServer, createMockClient } from "./helpers/mock-server.js";
3
+ import { registerSkillTool } from "../tools/skills.js";
4
+ let server;
5
+ let client;
6
+ beforeEach(() => {
7
+ vi.clearAllMocks();
8
+ server = createMockServer();
9
+ client = createMockClient();
10
+ });
11
+ describe("registerSkillTool", () => {
12
+ it("returns cloud-only message when no client", async () => {
13
+ registerSkillTool(server, mockConfig, undefined);
14
+ const handler = server.getHandler("hivemind_skill");
15
+ const result = await handler({ action: "search", query: "test" });
16
+ expect(result.content[0].text).toContain("only available in cloud mode");
17
+ });
18
+ // --- search ---
19
+ it("search: calls client.searchSkills", async () => {
20
+ client.searchSkills.mockResolvedValueOnce({
21
+ skills: [
22
+ {
23
+ id: "s1",
24
+ name: "code-review",
25
+ description: "Review code",
26
+ instructions: "Check for bugs",
27
+ tags: ["review"],
28
+ score: 0.9,
29
+ created_at: "2024-01-01T00:00:00Z",
30
+ },
31
+ ],
32
+ total: 1,
33
+ });
34
+ registerSkillTool(server, mockConfig, client);
35
+ const handler = server.getHandler("hivemind_skill");
36
+ const result = await handler({ action: "search", query: "review" });
37
+ expect(result.content[0].text).toContain("Skill Search Results");
38
+ expect(result.content[0].text).toContain("code-review");
39
+ });
40
+ it("search: empty results", async () => {
41
+ client.searchSkills.mockResolvedValueOnce({ skills: [], total: 0 });
42
+ registerSkillTool(server, mockConfig, client);
43
+ const handler = server.getHandler("hivemind_skill");
44
+ const result = await handler({ action: "search", query: "nonexistent" });
45
+ expect(result.content[0].text).toContain("No matching skills");
46
+ });
47
+ // --- get ---
48
+ it("get: calls client.getSkill", async () => {
49
+ client.getSkill.mockResolvedValueOnce({
50
+ skill: {
51
+ id: "s1",
52
+ name: "code-review",
53
+ description: "Review code",
54
+ instructions: "Check for bugs",
55
+ tags: ["review"],
56
+ triggers: {},
57
+ created_at: "2024-01-01T00:00:00Z",
58
+ updated_at: "2024-01-01T00:00:00Z",
59
+ },
60
+ });
61
+ registerSkillTool(server, mockConfig, client);
62
+ const handler = server.getHandler("hivemind_skill");
63
+ const result = await handler({ action: "get", skill_id: "s1" });
64
+ expect(result.content[0].text).toContain("code-review");
65
+ });
66
+ it("get: not found", async () => {
67
+ client.getSkill.mockRejectedValueOnce(new Error("Not found"));
68
+ registerSkillTool(server, mockConfig, client);
69
+ const handler = server.getHandler("hivemind_skill");
70
+ const result = await handler({ action: "get", skill_id: "s_missing" });
71
+ expect(result.content[0].text).toContain("not found");
72
+ });
73
+ // --- add ---
74
+ it("add: calls client.addSkill", async () => {
75
+ client.addSkill.mockResolvedValueOnce({
76
+ id: "s_new",
77
+ created_at: "2024-01-01T00:00:00Z",
78
+ });
79
+ registerSkillTool(server, mockConfig, client);
80
+ const handler = server.getHandler("hivemind_skill");
81
+ const result = await handler({
82
+ action: "add",
83
+ name: "deploy",
84
+ description: "Deploy app",
85
+ instructions: "Run deploy script",
86
+ });
87
+ expect(result.content[0].text).toContain("Skill created");
88
+ expect(result.content[0].text).toContain("s_new");
89
+ });
90
+ it("add: includes tags and triggers", async () => {
91
+ client.addSkill.mockResolvedValueOnce({
92
+ id: "s_new",
93
+ created_at: "2024-01-01T00:00:00Z",
94
+ });
95
+ registerSkillTool(server, mockConfig, client);
96
+ const handler = server.getHandler("hivemind_skill");
97
+ await handler({
98
+ action: "add",
99
+ name: "deploy",
100
+ description: "Deploy app",
101
+ instructions: "Run deploy script",
102
+ tags: ["ops"],
103
+ trigger_files: ["*.yaml"],
104
+ trigger_tools: ["Bash"],
105
+ trigger_keywords: ["deploy"],
106
+ });
107
+ expect(client.addSkill).toHaveBeenCalledWith({
108
+ name: "deploy",
109
+ description: "Deploy app",
110
+ instructions: "Run deploy script",
111
+ tags: ["ops"],
112
+ triggers: {
113
+ file_patterns: ["*.yaml"],
114
+ tools: ["Bash"],
115
+ keywords: ["deploy"],
116
+ },
117
+ });
118
+ });
119
+ // --- update ---
120
+ it("update: calls client.updateSkill", async () => {
121
+ client.updateSkill.mockResolvedValueOnce({ id: "s1", updated: true });
122
+ registerSkillTool(server, mockConfig, client);
123
+ const handler = server.getHandler("hivemind_skill");
124
+ const result = await handler({ action: "update", skill_id: "s1", name: "new-name" });
125
+ expect(result.content[0].text).toContain("updated");
126
+ });
127
+ it("update: not found", async () => {
128
+ client.updateSkill.mockResolvedValueOnce({ updated: false });
129
+ registerSkillTool(server, mockConfig, client);
130
+ const handler = server.getHandler("hivemind_skill");
131
+ const result = await handler({ action: "update", skill_id: "s_missing", name: "x" });
132
+ expect(result.content[0].text).toContain("not found");
133
+ });
134
+ // --- delete ---
135
+ it("delete: calls client.deleteSkill", async () => {
136
+ client.deleteSkill.mockResolvedValueOnce({ deleted: true });
137
+ registerSkillTool(server, mockConfig, client);
138
+ const handler = server.getHandler("hivemind_skill");
139
+ const result = await handler({ action: "delete", skill_id: "s1" });
140
+ expect(result.content[0].text).toContain("deleted");
141
+ });
142
+ it("delete: not found", async () => {
143
+ client.deleteSkill.mockResolvedValueOnce({ deleted: false });
144
+ registerSkillTool(server, mockConfig, client);
145
+ const handler = server.getHandler("hivemind_skill");
146
+ const result = await handler({ action: "delete", skill_id: "s_missing" });
147
+ expect(result.content[0].text).toContain("not found");
148
+ });
149
+ // --- list ---
150
+ it("list: calls client.listSkills", async () => {
151
+ client.listSkills.mockResolvedValueOnce({
152
+ skills: [
153
+ {
154
+ id: "s1",
155
+ name: "code-review",
156
+ description: "Review",
157
+ tags: [],
158
+ created_at: "2024-01-01T00:00:00Z",
159
+ },
160
+ ],
161
+ total: 1,
162
+ has_more: false,
163
+ });
164
+ registerSkillTool(server, mockConfig, client);
165
+ const handler = server.getHandler("hivemind_skill");
166
+ const result = await handler({ action: "list" });
167
+ expect(result.content[0].text).toContain("Skills");
168
+ });
169
+ it("list: empty", async () => {
170
+ client.listSkills.mockResolvedValueOnce({ skills: [], total: 0, has_more: false });
171
+ registerSkillTool(server, mockConfig, client);
172
+ const handler = server.getHandler("hivemind_skill");
173
+ const result = await handler({ action: "list" });
174
+ expect(result.content[0].text).toContain("No skills found");
175
+ });
176
+ // --- match ---
177
+ it("match: calls client.matchSkills", async () => {
178
+ client.matchSkills.mockResolvedValueOnce({
179
+ skills: [{ name: "code-review", instructions: "Check for bugs" }],
180
+ });
181
+ registerSkillTool(server, mockConfig, client);
182
+ const handler = server.getHandler("hivemind_skill");
183
+ const result = await handler({ action: "match", tool_name: "edit", file_path: "src/app.ts" });
184
+ expect(result.content[0].text).toContain("Matched Skills");
185
+ });
186
+ });
187
+ //# sourceMappingURL=tools-skills.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-skills.test.js","sourceRoot":"","sources":["../../src/__tests__/tools-skills.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAoC,MAAM,0BAA0B,CAAC;AAC5H,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,IAAI,MAAkB,CAAC;AACvB,IAAI,MAAkB,CAAC;AAEvB,UAAU,CAAC,GAAG,EAAE;IACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACnB,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAC5B,MAAM,GAAG,gBAAgB,EAAE,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,iBAAiB,CAAC,MAAa,EAAE,UAAU,EAAE,SAAgB,CAAC,CAAC;QAE/D,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAElE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,iBAAiB;IAEjB,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,CAAC,YAAY,CAAC,qBAAqB,CAAC;YACxC,MAAM,EAAE;gBACN;oBACE,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE,aAAa;oBAC1B,YAAY,EAAE,gBAAgB;oBAC9B,IAAI,EAAE,CAAC,QAAQ,CAAC;oBAChB,KAAK,EAAE,GAAG;oBACV,UAAU,EAAE,sBAAsB;iBACnC;aACF;YACD,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;QACH,iBAAiB,CAAC,MAAa,EAAE,UAAU,EAAE,MAAa,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEpE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACjE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,CAAC,YAAY,CAAC,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACpE,iBAAiB,CAAC,MAAa,EAAE,UAAU,EAAE,MAAa,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;QAEzE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,cAAc;IAEd,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACpC,KAAK,EAAE;gBACL,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,aAAa;gBAC1B,YAAY,EAAE,gBAAgB;gBAC9B,IAAI,EAAE,CAAC,QAAQ,CAAC;gBAChB,QAAQ,EAAE,EAAE;gBACZ,UAAU,EAAE,sBAAsB;gBAClC,UAAU,EAAE,sBAAsB;aACnC;SACF,CAAC,CAAC;QACH,iBAAiB,CAAC,MAAa,EAAE,UAAU,EAAE,MAAa,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QAC9D,iBAAiB,CAAC,MAAa,EAAE,UAAU,EAAE,MAAa,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;QAEvE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,cAAc;IAEd,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACpC,EAAE,EAAE,OAAO;YACX,UAAU,EAAE,sBAAsB;SACnC,CAAC,CAAC;QACH,iBAAiB,CAAC,MAAa,EAAE,UAAU,EAAE,MAAa,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,YAAY;YACzB,YAAY,EAAE,mBAAmB;SAClC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACpC,EAAE,EAAE,OAAO;YACX,UAAU,EAAE,sBAAsB;SACnC,CAAC,CAAC;QACH,iBAAiB,CAAC,MAAa,EAAE,UAAU,EAAE,MAAa,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAE,CAAC;QACrD,MAAM,OAAO,CAAC;YACZ,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,YAAY;YACzB,YAAY,EAAE,mBAAmB;YACjC,IAAI,EAAE,CAAC,KAAK,CAAC;YACb,aAAa,EAAE,CAAC,QAAQ,CAAC;YACzB,aAAa,EAAE,CAAC,MAAM,CAAC;YACvB,gBAAgB,EAAE,CAAC,QAAQ,CAAC;SAC7B,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC;YAC3C,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,YAAY;YACzB,YAAY,EAAE,mBAAmB;YACjC,IAAI,EAAE,CAAC,KAAK,CAAC;YACb,QAAQ,EAAE;gBACR,aAAa,EAAE,CAAC,QAAQ,CAAC;gBACzB,KAAK,EAAE,CAAC,MAAM,CAAC;gBACf,QAAQ,EAAE,CAAC,QAAQ,CAAC;aACrB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,iBAAiB;IAEjB,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,iBAAiB,CAAC,MAAa,EAAE,UAAU,EAAE,MAAa,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAErF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACjC,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7D,iBAAiB,CAAC,MAAa,EAAE,UAAU,EAAE,MAAa,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QAErF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,iBAAiB;IAEjB,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,iBAAiB,CAAC,MAAa,EAAE,UAAU,EAAE,MAAa,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAEnE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACjC,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7D,iBAAiB,CAAC,MAAa,EAAE,UAAU,EAAE,MAAa,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;QAE1E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,eAAe;IAEf,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC;YACtC,MAAM,EAAE;gBACN;oBACE,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE,QAAQ;oBACrB,IAAI,EAAE,EAAE;oBACR,UAAU,EAAE,sBAAsB;iBACnC;aACF;YACD,KAAK,EAAE,CAAC;YACR,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,iBAAiB,CAAC,MAAa,EAAE,UAAU,EAAE,MAAa,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAEjD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QAC3B,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACnF,iBAAiB,CAAC,MAAa,EAAE,UAAU,EAAE,MAAa,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAEjD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,gBAAgB;IAEhB,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC;YACvC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC;SAClE,CAAC,CAAC;QACH,iBAAiB,CAAC,MAAa,EAAE,UAAU,EAAE,MAAa,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;QAE9F,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tools-tasks.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-tasks.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tools-tasks.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,83 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import { mockConfig, createMockServer, createMockClient } from "./helpers/mock-server.js";
3
+ import { registerTasksTool } from "../tools/tasks.js";
4
+ let server;
5
+ let client;
6
+ beforeEach(() => {
7
+ vi.clearAllMocks();
8
+ server = createMockServer();
9
+ client = createMockClient();
10
+ });
11
+ describe("registerTasksTool", () => {
12
+ it("returns cloud-only message when no client", async () => {
13
+ registerTasksTool(server, {}, mockConfig);
14
+ const handler = server.getHandler("hivemind_tasks");
15
+ const result = await handler({});
16
+ expect(result.content[0].text).toContain("only available in cloud mode");
17
+ });
18
+ it("calls client.tasks with params", async () => {
19
+ client.tasks.mockResolvedValueOnce({ tasks: [], total: 0 });
20
+ registerTasksTool(server, {}, mockConfig, client);
21
+ const handler = server.getHandler("hivemind_tasks");
22
+ await handler({ status: "active" });
23
+ expect(client.tasks).toHaveBeenCalledWith(expect.objectContaining({ status: "active" }));
24
+ });
25
+ it("formats active tasks", async () => {
26
+ client.tasks.mockResolvedValueOnce({
27
+ tasks: [
28
+ {
29
+ id: "t1",
30
+ description: "Build API",
31
+ channel: "backend",
32
+ status: "active",
33
+ created_at: "2024-06-15T12:00:00Z",
34
+ resolved_at: null,
35
+ created_by: { agent: "a1", tool: "t1" },
36
+ resolved_by: null,
37
+ },
38
+ ],
39
+ total: 1,
40
+ });
41
+ registerTasksTool(server, {}, mockConfig, client);
42
+ const handler = server.getHandler("hivemind_tasks");
43
+ const result = await handler({});
44
+ expect(result.content[0].text).toContain("[ACTIVE]");
45
+ expect(result.content[0].text).toContain("Build API");
46
+ });
47
+ it("shows empty message when no tasks", async () => {
48
+ client.tasks.mockResolvedValueOnce({ tasks: [], total: 0 });
49
+ registerTasksTool(server, {}, mockConfig, client);
50
+ const handler = server.getHandler("hivemind_tasks");
51
+ const result = await handler({});
52
+ expect(result.content[0].text).toContain("No tasks found.");
53
+ });
54
+ it("shows filtered empty message", async () => {
55
+ client.tasks.mockResolvedValueOnce({ tasks: [], total: 0 });
56
+ registerTasksTool(server, {}, mockConfig, client);
57
+ const handler = server.getHandler("hivemind_tasks");
58
+ const result = await handler({ status: "blocked" });
59
+ expect(result.content[0].text).toContain("No blocked tasks found.");
60
+ });
61
+ it("formats completed tasks with resolved time", async () => {
62
+ client.tasks.mockResolvedValueOnce({
63
+ tasks: [
64
+ {
65
+ id: "t2",
66
+ description: "Fix auth bug",
67
+ channel: "backend",
68
+ status: "completed",
69
+ created_at: "2024-06-15T12:00:00Z",
70
+ resolved_at: "2024-06-15T14:00:00Z",
71
+ created_by: { agent: "a1", tool: "t1" },
72
+ resolved_by: { agent: "a2", tool: "t2" },
73
+ },
74
+ ],
75
+ total: 1,
76
+ });
77
+ registerTasksTool(server, {}, mockConfig, client);
78
+ const handler = server.getHandler("hivemind_tasks");
79
+ const result = await handler({});
80
+ expect(result.content[0].text).toContain("[DONE]");
81
+ });
82
+ });
83
+ //# sourceMappingURL=tools-tasks.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-tasks.test.js","sourceRoot":"","sources":["../../src/__tests__/tools-tasks.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tools-triggers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-triggers.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tools-triggers.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,119 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import { mockConfig, createMockServer, createMockClient } from "./helpers/mock-server.js";
3
+ import { registerTriggerTool } from "../tools/triggers.js";
4
+ let server;
5
+ let client;
6
+ beforeEach(() => {
7
+ vi.clearAllMocks();
8
+ server = createMockServer();
9
+ client = createMockClient();
10
+ });
11
+ describe("registerTriggerTool", () => {
12
+ it("returns cloud-only message when no client", async () => {
13
+ registerTriggerTool(server, mockConfig);
14
+ const handler = server.getHandler("hivemind_trigger");
15
+ const result = await handler({ action: "list" });
16
+ expect(result.content[0].text).toContain("only available in cloud mode");
17
+ });
18
+ it("list: calls client.listTriggers", async () => {
19
+ client.listTriggers.mockResolvedValueOnce({ triggers: [], total: 0 });
20
+ registerTriggerTool(server, mockConfig, client);
21
+ const handler = server.getHandler("hivemind_trigger");
22
+ const result = await handler({ action: "list" });
23
+ expect(client.listTriggers).toHaveBeenCalled();
24
+ expect(result.content[0].text).toContain("No triggers");
25
+ });
26
+ it("list: formats triggers", async () => {
27
+ client.listTriggers.mockResolvedValueOnce({
28
+ triggers: [
29
+ {
30
+ id: "trg_1",
31
+ name: "my-trigger",
32
+ active: true,
33
+ match_channel: "general",
34
+ match_event_type: "task.*",
35
+ action: {
36
+ type: "emit",
37
+ emit_channel: "alerts",
38
+ emit_event_type: "alert.fire",
39
+ },
40
+ created_at: "2024-01-01T00:00:00Z",
41
+ last_fired_at: null,
42
+ },
43
+ ],
44
+ total: 1,
45
+ });
46
+ registerTriggerTool(server, mockConfig, client);
47
+ const handler = server.getHandler("hivemind_trigger");
48
+ const result = await handler({ action: "list" });
49
+ expect(result.content[0].text).toContain("my-trigger");
50
+ });
51
+ it("create: calls client.createTrigger", async () => {
52
+ client.createTrigger.mockResolvedValueOnce({ triggerId: "trg_new" });
53
+ registerTriggerTool(server, mockConfig, client);
54
+ const handler = server.getHandler("hivemind_trigger");
55
+ const result = await handler({
56
+ action: "create",
57
+ name: "test",
58
+ action_type: "emit",
59
+ emit_channel: "general",
60
+ emit_event_type: "alert.fire",
61
+ });
62
+ expect(client.createTrigger).toHaveBeenCalled();
63
+ expect(result.content[0].text).toContain("Trigger created: trg_new");
64
+ });
65
+ it("create: includes webhook secret", async () => {
66
+ client.createTrigger.mockResolvedValueOnce({
67
+ triggerId: "trg_new",
68
+ webhook_secret: "whsec_abc",
69
+ });
70
+ registerTriggerTool(server, mockConfig, client);
71
+ const handler = server.getHandler("hivemind_trigger");
72
+ const result = await handler({
73
+ action: "create",
74
+ name: "test",
75
+ action_type: "webhook",
76
+ webhook_url: "https://example.com/hook",
77
+ });
78
+ expect(result.content[0].text).toContain("whsec_abc");
79
+ });
80
+ it("delete: calls client.deleteTrigger", async () => {
81
+ client.deleteTrigger.mockResolvedValueOnce({ deleted: true });
82
+ registerTriggerTool(server, mockConfig, client);
83
+ const handler = server.getHandler("hivemind_trigger");
84
+ const result = await handler({ action: "delete", trigger_id: "trg_1" });
85
+ expect(client.deleteTrigger).toHaveBeenCalledWith("trg_1");
86
+ expect(result.content[0].text).toContain("deleted");
87
+ });
88
+ it("delete: handles not found", async () => {
89
+ client.deleteTrigger.mockResolvedValueOnce({ deleted: false });
90
+ registerTriggerTool(server, mockConfig, client);
91
+ const handler = server.getHandler("hivemind_trigger");
92
+ const result = await handler({ action: "delete", trigger_id: "trg_1" });
93
+ expect(result.content[0].text).toContain("not found");
94
+ });
95
+ it("toggle: enables trigger", async () => {
96
+ client.updateTrigger.mockResolvedValueOnce({ updated: true });
97
+ registerTriggerTool(server, mockConfig, client);
98
+ const handler = server.getHandler("hivemind_trigger");
99
+ const result = await handler({ action: "toggle", trigger_id: "trg_1", active: true });
100
+ expect(client.updateTrigger).toHaveBeenCalledWith("trg_1", { active: true });
101
+ expect(result.content[0].text).toContain("active");
102
+ });
103
+ it("toggle: pauses trigger", async () => {
104
+ client.updateTrigger.mockResolvedValueOnce({ updated: true });
105
+ registerTriggerTool(server, mockConfig, client);
106
+ const handler = server.getHandler("hivemind_trigger");
107
+ const result = await handler({ action: "toggle", trigger_id: "trg_1", active: false });
108
+ expect(client.updateTrigger).toHaveBeenCalledWith("trg_1", { active: false });
109
+ expect(result.content[0].text).toContain("paused");
110
+ });
111
+ it("toggle: handles not found", async () => {
112
+ client.updateTrigger.mockResolvedValueOnce({ updated: false });
113
+ registerTriggerTool(server, mockConfig, client);
114
+ const handler = server.getHandler("hivemind_trigger");
115
+ const result = await handler({ action: "toggle", trigger_id: "trg_1", active: true });
116
+ expect(result.content[0].text).toContain("not found");
117
+ });
118
+ });
119
+ //# sourceMappingURL=tools-triggers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-triggers.test.js","sourceRoot":"","sources":["../../src/__tests__/tools-triggers.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tools-workflows.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-workflows.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tools-workflows.test.ts"],"names":[],"mappings":""}