@herdctl/core 4.0.0 → 4.1.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 (106) hide show
  1. package/dist/config/index.d.ts +1 -1
  2. package/dist/config/index.d.ts.map +1 -1
  3. package/dist/config/index.js +3 -1
  4. package/dist/config/index.js.map +1 -1
  5. package/dist/config/schema.d.ts +571 -0
  6. package/dist/config/schema.d.ts.map +1 -1
  7. package/dist/config/schema.js +67 -1
  8. package/dist/config/schema.js.map +1 -1
  9. package/dist/fleet-manager/__tests__/slack-manager.test.d.ts +11 -0
  10. package/dist/fleet-manager/__tests__/slack-manager.test.d.ts.map +1 -0
  11. package/dist/fleet-manager/__tests__/slack-manager.test.js +1022 -0
  12. package/dist/fleet-manager/__tests__/slack-manager.test.js.map +1 -0
  13. package/dist/fleet-manager/context.d.ts +4 -0
  14. package/dist/fleet-manager/context.d.ts.map +1 -1
  15. package/dist/fleet-manager/event-types.d.ts +113 -0
  16. package/dist/fleet-manager/event-types.d.ts.map +1 -1
  17. package/dist/fleet-manager/fleet-manager.d.ts +3 -0
  18. package/dist/fleet-manager/fleet-manager.d.ts.map +1 -1
  19. package/dist/fleet-manager/fleet-manager.js +10 -0
  20. package/dist/fleet-manager/fleet-manager.js.map +1 -1
  21. package/dist/fleet-manager/job-control.d.ts.map +1 -1
  22. package/dist/fleet-manager/job-control.js +5 -2
  23. package/dist/fleet-manager/job-control.js.map +1 -1
  24. package/dist/fleet-manager/slack-manager.d.ts +158 -0
  25. package/dist/fleet-manager/slack-manager.d.ts.map +1 -0
  26. package/dist/fleet-manager/slack-manager.js +570 -0
  27. package/dist/fleet-manager/slack-manager.js.map +1 -0
  28. package/dist/fleet-manager/status-queries.d.ts +2 -1
  29. package/dist/fleet-manager/status-queries.d.ts.map +1 -1
  30. package/dist/fleet-manager/status-queries.js +42 -3
  31. package/dist/fleet-manager/status-queries.js.map +1 -1
  32. package/dist/fleet-manager/types.d.ts +43 -3
  33. package/dist/fleet-manager/types.d.ts.map +1 -1
  34. package/dist/hooks/__tests__/slack-runner.test.d.ts +5 -0
  35. package/dist/hooks/__tests__/slack-runner.test.d.ts.map +1 -0
  36. package/dist/hooks/__tests__/slack-runner.test.js +307 -0
  37. package/dist/hooks/__tests__/slack-runner.test.js.map +1 -0
  38. package/dist/hooks/hook-executor.d.ts +1 -0
  39. package/dist/hooks/hook-executor.d.ts.map +1 -1
  40. package/dist/hooks/hook-executor.js +8 -0
  41. package/dist/hooks/hook-executor.js.map +1 -1
  42. package/dist/hooks/index.d.ts +2 -1
  43. package/dist/hooks/index.d.ts.map +1 -1
  44. package/dist/hooks/index.js +2 -0
  45. package/dist/hooks/index.js.map +1 -1
  46. package/dist/hooks/runners/slack.d.ts +62 -0
  47. package/dist/hooks/runners/slack.d.ts.map +1 -0
  48. package/dist/hooks/runners/slack.js +329 -0
  49. package/dist/hooks/runners/slack.js.map +1 -0
  50. package/dist/hooks/types.d.ts +4 -4
  51. package/dist/hooks/types.d.ts.map +1 -1
  52. package/dist/runner/__tests__/file-sender-mcp.test.d.ts +2 -0
  53. package/dist/runner/__tests__/file-sender-mcp.test.d.ts.map +1 -0
  54. package/dist/runner/__tests__/file-sender-mcp.test.js +177 -0
  55. package/dist/runner/__tests__/file-sender-mcp.test.js.map +1 -0
  56. package/dist/runner/__tests__/job-executor.test.js +12 -12
  57. package/dist/runner/__tests__/job-executor.test.js.map +1 -1
  58. package/dist/runner/file-sender-mcp.d.ts +69 -0
  59. package/dist/runner/file-sender-mcp.d.ts.map +1 -0
  60. package/dist/runner/file-sender-mcp.js +145 -0
  61. package/dist/runner/file-sender-mcp.js.map +1 -0
  62. package/dist/runner/index.d.ts +1 -0
  63. package/dist/runner/index.d.ts.map +1 -1
  64. package/dist/runner/index.js +2 -0
  65. package/dist/runner/index.js.map +1 -1
  66. package/dist/runner/job-executor.d.ts.map +1 -1
  67. package/dist/runner/job-executor.js +35 -5
  68. package/dist/runner/job-executor.js.map +1 -1
  69. package/dist/runner/runtime/__tests__/docker-security.test.js +12 -12
  70. package/dist/runner/runtime/__tests__/docker-security.test.js.map +1 -1
  71. package/dist/runner/runtime/__tests__/mcp-http-bridge.test.d.ts +2 -0
  72. package/dist/runner/runtime/__tests__/mcp-http-bridge.test.d.ts.map +1 -0
  73. package/dist/runner/runtime/__tests__/mcp-http-bridge.test.js +191 -0
  74. package/dist/runner/runtime/__tests__/mcp-http-bridge.test.js.map +1 -0
  75. package/dist/runner/runtime/container-manager.d.ts +5 -1
  76. package/dist/runner/runtime/container-manager.d.ts.map +1 -1
  77. package/dist/runner/runtime/container-manager.js +115 -5
  78. package/dist/runner/runtime/container-manager.js.map +1 -1
  79. package/dist/runner/runtime/container-runner.d.ts +2 -0
  80. package/dist/runner/runtime/container-runner.d.ts.map +1 -1
  81. package/dist/runner/runtime/container-runner.js +121 -74
  82. package/dist/runner/runtime/container-runner.js.map +1 -1
  83. package/dist/runner/runtime/index.d.ts +1 -0
  84. package/dist/runner/runtime/index.d.ts.map +1 -1
  85. package/dist/runner/runtime/index.js +2 -0
  86. package/dist/runner/runtime/index.js.map +1 -1
  87. package/dist/runner/runtime/interface.d.ts +2 -0
  88. package/dist/runner/runtime/interface.d.ts.map +1 -1
  89. package/dist/runner/runtime/mcp-http-bridge.d.ts +39 -0
  90. package/dist/runner/runtime/mcp-http-bridge.d.ts.map +1 -0
  91. package/dist/runner/runtime/mcp-http-bridge.js +205 -0
  92. package/dist/runner/runtime/mcp-http-bridge.js.map +1 -0
  93. package/dist/runner/runtime/sdk-runtime.d.ts.map +1 -1
  94. package/dist/runner/runtime/sdk-runtime.js +74 -1
  95. package/dist/runner/runtime/sdk-runtime.js.map +1 -1
  96. package/dist/runner/types.d.ts +44 -0
  97. package/dist/runner/types.d.ts.map +1 -1
  98. package/dist/state/index.d.ts +1 -1
  99. package/dist/state/index.d.ts.map +1 -1
  100. package/dist/state/index.js +1 -1
  101. package/dist/state/index.js.map +1 -1
  102. package/dist/state/session-validation.d.ts +8 -0
  103. package/dist/state/session-validation.d.ts.map +1 -1
  104. package/dist/state/session-validation.js +36 -0
  105. package/dist/state/session-validation.js.map +1 -1
  106. package/package.json +1 -9
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Slack Manager Module
3
+ *
4
+ * Manages a single Slack connector shared across agents that have `chat.slack` configured.
5
+ * This module is responsible for:
6
+ * - Creating ONE SlackConnector instance for the workspace
7
+ * - Building channel→agent routing from agent configs
8
+ * - Managing connector lifecycle (start/stop)
9
+ *
10
+ * Key difference from Discord:
11
+ * - DiscordManager has Map<string, IDiscordConnector> (N connectors, one per agent)
12
+ * - SlackManager has one connector + Map<string, string> (channel→agent routing)
13
+ *
14
+ * Note: This module dynamically imports @herdctl/slack at runtime to avoid
15
+ * a hard dependency. The @herdctl/core package can be used without Slack support.
16
+ *
17
+ * @module slack-manager
18
+ */
19
+ import type { FleetManagerContext } from "./context.js";
20
+ /**
21
+ * Slack connection status (mirrors @herdctl/slack types)
22
+ */
23
+ export type SlackConnectionStatus = "disconnected" | "connecting" | "connected" | "reconnecting" | "disconnecting" | "error";
24
+ /**
25
+ * Slack connector state (mirrors @herdctl/slack types)
26
+ */
27
+ export interface SlackConnectorState {
28
+ status: SlackConnectionStatus;
29
+ connectedAt: string | null;
30
+ disconnectedAt: string | null;
31
+ reconnectAttempts: number;
32
+ lastError: string | null;
33
+ botUser: {
34
+ id: string;
35
+ username: string;
36
+ } | null;
37
+ messageStats: {
38
+ received: number;
39
+ sent: number;
40
+ ignored: number;
41
+ };
42
+ }
43
+ /**
44
+ * Message event payload from SlackConnector
45
+ */
46
+ export interface SlackMessageEvent {
47
+ agentName: string;
48
+ prompt: string;
49
+ metadata: {
50
+ channelId: string;
51
+ messageTs: string;
52
+ userId: string;
53
+ wasMentioned: boolean;
54
+ };
55
+ reply: (content: string) => Promise<void>;
56
+ startProcessingIndicator: () => () => void;
57
+ }
58
+ /**
59
+ * Error event payload from SlackConnector
60
+ *
61
+ * Note: No agentName — the connector is shared across agents.
62
+ */
63
+ export interface SlackErrorEvent {
64
+ error: Error;
65
+ }
66
+ /**
67
+ * Minimal interface for a Slack connector
68
+ */
69
+ interface ISlackConnector {
70
+ connect(): Promise<void>;
71
+ disconnect(): Promise<void>;
72
+ isConnected(): boolean;
73
+ getState(): SlackConnectorState;
74
+ uploadFile(params: {
75
+ channelId: string;
76
+ fileBuffer: Buffer;
77
+ filename: string;
78
+ message?: string;
79
+ }): Promise<{
80
+ fileId: string;
81
+ }>;
82
+ on(event: "message", listener: (payload: SlackMessageEvent) => void): this;
83
+ on(event: "error", listener: (payload: SlackErrorEvent) => void): this;
84
+ on(event: "ready", listener: (payload: {
85
+ botUser: {
86
+ id: string;
87
+ username: string;
88
+ };
89
+ }) => void): this;
90
+ on(event: "disconnect", listener: (payload: {
91
+ reason: string;
92
+ }) => void): this;
93
+ on(event: string, listener: (...args: unknown[]) => void): this;
94
+ off(event: string, listener: (...args: unknown[]) => void): this;
95
+ }
96
+ /**
97
+ * SlackManager handles Slack connections for agents
98
+ *
99
+ * Unlike DiscordManager which creates N connectors (one per agent),
100
+ * SlackManager creates ONE connector shared across all Slack-enabled agents,
101
+ * with channel→agent routing.
102
+ */
103
+ export declare class SlackManager {
104
+ private ctx;
105
+ private connector;
106
+ private sessionManagers;
107
+ private channelAgentMap;
108
+ private channelConfigs;
109
+ private initialized;
110
+ constructor(ctx: FleetManagerContext);
111
+ /**
112
+ * Initialize the Slack connector for all configured agents
113
+ */
114
+ initialize(): Promise<void>;
115
+ /**
116
+ * Connect the Slack connector and subscribe to events
117
+ */
118
+ start(): Promise<void>;
119
+ /**
120
+ * Disconnect the Slack connector gracefully
121
+ */
122
+ stop(): Promise<void>;
123
+ /**
124
+ * Get the connector (if any)
125
+ */
126
+ getConnector(): ISlackConnector | null;
127
+ /**
128
+ * Check if the connector is connected
129
+ */
130
+ isConnected(): boolean;
131
+ /**
132
+ * Get the state of the connector
133
+ */
134
+ getState(): SlackConnectorState | null;
135
+ /**
136
+ * Get the channel→agent routing map
137
+ */
138
+ getChannelAgentMap(): Map<string, string>;
139
+ /**
140
+ * Check if a specific agent has Slack configured
141
+ */
142
+ hasAgent(agentName: string): boolean;
143
+ private handleMessage;
144
+ /**
145
+ * Extract text content from an SDK message
146
+ */
147
+ private extractMessageContent;
148
+ /**
149
+ * Handle errors from the Slack connector
150
+ */
151
+ private handleError;
152
+ private static readonly MAX_MESSAGE_LENGTH;
153
+ formatErrorMessage(error: Error): string;
154
+ splitResponse(text: string): string[];
155
+ private findNaturalBreak;
156
+ }
157
+ export {};
158
+ //# sourceMappingURL=slack-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-manager.d.ts","sourceRoot":"","sources":["../../src/fleet-manager/slack-manager.ts"],"names":[],"mappings":"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"}