@guildai/cli 0.11.0 → 0.12.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 (198) hide show
  1. package/dist/auth-CRMO5O3N.js +29 -0
  2. package/dist/auth-CRMO5O3N.js.map +7 -0
  3. package/dist/chat-5VX2WJH2.js +303 -0
  4. package/dist/chat-5VX2WJH2.js.map +7 -0
  5. package/dist/chat-SIKDYZQK.js +31 -0
  6. package/dist/chat-SIKDYZQK.js.map +7 -0
  7. package/dist/chunk-56YCMGL3.js +522 -0
  8. package/dist/chunk-56YCMGL3.js.map +7 -0
  9. package/dist/chunk-6EX6E7WP.js +7042 -0
  10. package/dist/chunk-6EX6E7WP.js.map +7 -0
  11. package/dist/chunk-B7VAF5UG.js +532 -0
  12. package/dist/chunk-B7VAF5UG.js.map +7 -0
  13. package/dist/chunk-DOIYVBNY.js +3057 -0
  14. package/dist/chunk-DOIYVBNY.js.map +7 -0
  15. package/dist/chunk-ENKEEJ45.js +17 -0
  16. package/dist/chunk-ENKEEJ45.js.map +7 -0
  17. package/dist/chunk-IBRKVGMZ.js +97041 -0
  18. package/dist/chunk-IBRKVGMZ.js.map +7 -0
  19. package/dist/chunk-LFMQJOKC.js +19778 -0
  20. package/dist/chunk-LFMQJOKC.js.map +7 -0
  21. package/dist/chunk-M347HP6M.js +22896 -0
  22. package/dist/chunk-M347HP6M.js.map +7 -0
  23. package/dist/chunk-OYQ476FQ.js +44 -0
  24. package/dist/chunk-OYQ476FQ.js.map +7 -0
  25. package/dist/chunk-PNCUR4OB.js +257 -0
  26. package/dist/chunk-PNCUR4OB.js.map +7 -0
  27. package/dist/chunk-RIG2HZWM.js +317 -0
  28. package/dist/chunk-RIG2HZWM.js.map +7 -0
  29. package/dist/chunk-SPZPZXUN.js +826 -0
  30. package/dist/chunk-SPZPZXUN.js.map +7 -0
  31. package/dist/chunk-VVSOU6ON.js +53 -0
  32. package/dist/chunk-VVSOU6ON.js.map +7 -0
  33. package/dist/chunk-X3ADGWOF.js +3643 -0
  34. package/dist/chunk-X3ADGWOF.js.map +7 -0
  35. package/dist/commands/skill/create.d.ts +3 -0
  36. package/dist/commands/skill/get.d.ts +3 -0
  37. package/dist/commands/skill/list.d.ts +3 -0
  38. package/dist/commands/skill/update.d.ts +3 -0
  39. package/dist/commands/skill/version/create.d.ts +3 -0
  40. package/dist/commands/skill/version/get.d.ts +3 -0
  41. package/dist/commands/skill/version/list.d.ts +3 -0
  42. package/dist/devtools-AO7YSDOD.js +67 -0
  43. package/dist/devtools-AO7YSDOD.js.map +7 -0
  44. package/dist/dist-4CBK6X5H.js +1566 -0
  45. package/dist/dist-4CBK6X5H.js.map +7 -0
  46. package/dist/esm-FRAVZP4J.js +13 -0
  47. package/dist/esm-FRAVZP4J.js.map +7 -0
  48. package/dist/execa-XQMWSABC.js +35 -0
  49. package/dist/execa-XQMWSABC.js.map +7 -0
  50. package/dist/index.js +8230 -263
  51. package/dist/index.js.map +7 -0
  52. package/dist/lib/api-types.d.ts +44 -0
  53. package/dist/lib/config.d.ts +9 -0
  54. package/dist/lib/errors.d.ts +1 -1
  55. package/dist/lib/output.d.ts +11 -1
  56. package/dist/lib/session-events.d.ts +1 -1
  57. package/dist/lib/session-polling.d.ts +24 -1
  58. package/dist/lib/websocket-client.d.ts +46 -0
  59. package/dist/open-RF4X5MOP.js +13 -0
  60. package/dist/open-RF4X5MOP.js.map +7 -0
  61. package/dist/server-JYVH64FD.js +27659 -0
  62. package/dist/server-JYVH64FD.js.map +7 -0
  63. package/dist/test-SNIYRJ32.js +692 -0
  64. package/dist/test-SNIYRJ32.js.map +7 -0
  65. package/docs/skills/codex-agent-dev.md +2 -2
  66. package/package.json +8 -12
  67. package/dist/commands/agent/chat.js +0 -281
  68. package/dist/commands/agent/clone.js +0 -118
  69. package/dist/commands/agent/code.js +0 -87
  70. package/dist/commands/agent/fork.js +0 -220
  71. package/dist/commands/agent/get.js +0 -37
  72. package/dist/commands/agent/grep.js +0 -107
  73. package/dist/commands/agent/init.js +0 -403
  74. package/dist/commands/agent/list.js +0 -110
  75. package/dist/commands/agent/logs.js +0 -62
  76. package/dist/commands/agent/owners.js +0 -74
  77. package/dist/commands/agent/publish.js +0 -91
  78. package/dist/commands/agent/pull.js +0 -194
  79. package/dist/commands/agent/revalidate.js +0 -56
  80. package/dist/commands/agent/save.js +0 -345
  81. package/dist/commands/agent/search.js +0 -61
  82. package/dist/commands/agent/tags/add.js +0 -73
  83. package/dist/commands/agent/tags/list.js +0 -43
  84. package/dist/commands/agent/tags/remove.js +0 -84
  85. package/dist/commands/agent/tags/set.js +0 -71
  86. package/dist/commands/agent/test.js +0 -489
  87. package/dist/commands/agent/unpublish.js +0 -64
  88. package/dist/commands/agent/update.js +0 -118
  89. package/dist/commands/agent/versions.js +0 -55
  90. package/dist/commands/agent/workspaces.js +0 -54
  91. package/dist/commands/auth/login.js +0 -31
  92. package/dist/commands/auth/logout.js +0 -24
  93. package/dist/commands/auth/status.js +0 -38
  94. package/dist/commands/auth/token.js +0 -19
  95. package/dist/commands/chat.js +0 -1416
  96. package/dist/commands/config/get.js +0 -64
  97. package/dist/commands/config/list.js +0 -46
  98. package/dist/commands/config/path.js +0 -37
  99. package/dist/commands/config/set.js +0 -132
  100. package/dist/commands/credentials/endpoint-list.js +0 -88
  101. package/dist/commands/credentials/list.js +0 -50
  102. package/dist/commands/credentials/policy-create.js +0 -66
  103. package/dist/commands/credentials/policy-delete.js +0 -33
  104. package/dist/commands/credentials/policy-list.js +0 -45
  105. package/dist/commands/credentials/policy-update.js +0 -66
  106. package/dist/commands/doctor.js +0 -233
  107. package/dist/commands/integration/connect.js +0 -76
  108. package/dist/commands/integration/create.js +0 -298
  109. package/dist/commands/integration/get.js +0 -95
  110. package/dist/commands/integration/list.js +0 -62
  111. package/dist/commands/integration/operation/create.js +0 -164
  112. package/dist/commands/integration/operation/list.js +0 -92
  113. package/dist/commands/integration/update.js +0 -139
  114. package/dist/commands/integration/version/build.js +0 -86
  115. package/dist/commands/integration/version/create.js +0 -45
  116. package/dist/commands/integration/version/get.js +0 -72
  117. package/dist/commands/integration/version/list.js +0 -45
  118. package/dist/commands/integration/version/publish.js +0 -79
  119. package/dist/commands/integration/version/test.js +0 -104
  120. package/dist/commands/job/get-step.js +0 -40
  121. package/dist/commands/job/get.js +0 -44
  122. package/dist/commands/mcp.js +0 -34
  123. package/dist/commands/session/create.js +0 -59
  124. package/dist/commands/session/events.js +0 -56
  125. package/dist/commands/session/get.js +0 -33
  126. package/dist/commands/session/interrupt.js +0 -33
  127. package/dist/commands/session/list.js +0 -59
  128. package/dist/commands/session/send.js +0 -54
  129. package/dist/commands/session/tasks.js +0 -45
  130. package/dist/commands/setup.js +0 -260
  131. package/dist/commands/trigger/activate.js +0 -41
  132. package/dist/commands/trigger/create.js +0 -197
  133. package/dist/commands/trigger/deactivate.js +0 -41
  134. package/dist/commands/trigger/get.js +0 -33
  135. package/dist/commands/trigger/list.js +0 -57
  136. package/dist/commands/trigger/sessions.js +0 -48
  137. package/dist/commands/trigger/update.js +0 -128
  138. package/dist/commands/version.js +0 -24
  139. package/dist/commands/workspace/agent/add.js +0 -114
  140. package/dist/commands/workspace/agent/list.js +0 -78
  141. package/dist/commands/workspace/agent/remove.js +0 -78
  142. package/dist/commands/workspace/clear.js +0 -45
  143. package/dist/commands/workspace/context/edit.js +0 -107
  144. package/dist/commands/workspace/context/get.js +0 -47
  145. package/dist/commands/workspace/context/list.js +0 -51
  146. package/dist/commands/workspace/context/publish.js +0 -42
  147. package/dist/commands/workspace/create.js +0 -51
  148. package/dist/commands/workspace/current.js +0 -63
  149. package/dist/commands/workspace/get.js +0 -39
  150. package/dist/commands/workspace/list.js +0 -70
  151. package/dist/commands/workspace/select.js +0 -184
  152. package/dist/components/AgentInstallPrompt.js +0 -97
  153. package/dist/components/SplashAnimation.js +0 -321
  154. package/dist/components/TaskView.js +0 -268
  155. package/dist/lib/agent-helpers.js +0 -306
  156. package/dist/lib/alternate-screen.js +0 -59
  157. package/dist/lib/api-client.js +0 -154
  158. package/dist/lib/api-types.js +0 -10
  159. package/dist/lib/auth.js +0 -284
  160. package/dist/lib/braille-canvas.js +0 -321
  161. package/dist/lib/colors.js +0 -46
  162. package/dist/lib/config-cache.js +0 -45
  163. package/dist/lib/config.js +0 -153
  164. package/dist/lib/did-you-mean.js +0 -144
  165. package/dist/lib/errors.js +0 -375
  166. package/dist/lib/event-filter.js +0 -91
  167. package/dist/lib/generated-types.js +0 -56
  168. package/dist/lib/git.js +0 -176
  169. package/dist/lib/gk.js +0 -91
  170. package/dist/lib/guild-config.js +0 -178
  171. package/dist/lib/iap.js +0 -117
  172. package/dist/lib/integration-helpers.js +0 -38
  173. package/dist/lib/loading-messages.js +0 -72
  174. package/dist/lib/logo.js +0 -141
  175. package/dist/lib/lottie-serverside.js +0 -181
  176. package/dist/lib/markdown.js +0 -38
  177. package/dist/lib/npmrc.js +0 -59
  178. package/dist/lib/output-mode.js +0 -54
  179. package/dist/lib/output.js +0 -622
  180. package/dist/lib/owner-helpers.js +0 -112
  181. package/dist/lib/polling.js +0 -76
  182. package/dist/lib/progress.js +0 -324
  183. package/dist/lib/session-events-fetch.js +0 -25
  184. package/dist/lib/session-events.js +0 -126
  185. package/dist/lib/session-polling.js +0 -166
  186. package/dist/lib/session-resume.js +0 -229
  187. package/dist/lib/spinners.js +0 -770
  188. package/dist/lib/splash.js +0 -42
  189. package/dist/lib/stdin.js +0 -91
  190. package/dist/lib/svg-to-braille.js +0 -76
  191. package/dist/lib/table.js +0 -59
  192. package/dist/lib/update-check.js +0 -65
  193. package/dist/lib/validate-input-schema.js +0 -208
  194. package/dist/lib/version-helpers.js +0 -137
  195. package/dist/lib/workspace-helpers.js +0 -49
  196. package/dist/mcp/resources.js +0 -67
  197. package/dist/mcp/server.js +0 -64
  198. package/dist/mcp/tools.js +0 -753
package/dist/mcp/tools.js DELETED
@@ -1,753 +0,0 @@
1
- // Copyright 2026 Guild.ai
2
- // SPDX-License-Identifier: Apache-2.0
3
- import { z } from 'zod';
4
- import { pollForResponse as pollForSessionResponse } from '../lib/session-polling.js';
5
- // ---------------------------------------------------------------------------
6
- // Constants
7
- // ---------------------------------------------------------------------------
8
- const POLL_TIMEOUT_MS = 120_000;
9
- // ---------------------------------------------------------------------------
10
- // Helpers
11
- // ---------------------------------------------------------------------------
12
- function debugLog(debug, message) {
13
- if (debug) {
14
- process.stderr.write(`[guild-mcp] ${message}\n`);
15
- }
16
- }
17
- function extractEventText(event) {
18
- if (!event.content)
19
- return undefined;
20
- if (typeof event.content === 'string') {
21
- return event.content;
22
- }
23
- if (typeof event.content === 'object' && event.content.data) {
24
- return event.content.data;
25
- }
26
- return undefined;
27
- }
28
- async function pollForMcpResponse(apiClient, sessionId, debug) {
29
- debugLog(debug, `Polling response for session ${sessionId}`);
30
- const result = await pollForSessionResponse(apiClient, sessionId, undefined, POLL_TIMEOUT_MS);
31
- return result.response || 'Agent completed without output.';
32
- }
33
- function errText(action, error) {
34
- return `Failed to ${action}: ${error instanceof Error ? error.message : String(error)}`;
35
- }
36
- // ---------------------------------------------------------------------------
37
- // Shared schema fragments
38
- // ---------------------------------------------------------------------------
39
- const workspaceIdParam = z
40
- .string()
41
- .optional()
42
- .describe('Workspace ID (defaults to current workspace)');
43
- // ---------------------------------------------------------------------------
44
- // Tool registration
45
- // ---------------------------------------------------------------------------
46
- export function registerTools(server, apiClient, defaultWorkspaceId, debug) {
47
- // =========================================================================
48
- // User
49
- // =========================================================================
50
- server.tool('guild_whoami', 'Get current user info', {}, async () => {
51
- debugLog(debug, 'guild_whoami');
52
- try {
53
- const me = await apiClient.get('/me');
54
- const text = [`Name: ${me.name}`, `ID: ${me.id}`, `Type: ${me.type}`].join('\n');
55
- return { content: [{ type: 'text', text }] };
56
- }
57
- catch (error) {
58
- return {
59
- content: [{ type: 'text', text: errText('get user info', error) }],
60
- isError: true,
61
- };
62
- }
63
- });
64
- // =========================================================================
65
- // Workspaces
66
- // =========================================================================
67
- server.tool('guild_list_workspaces', 'List workspaces the current user has access to', {
68
- search: z.string().optional().describe('Filter workspaces by name'),
69
- limit: z
70
- .number()
71
- .int()
72
- .min(1)
73
- .max(100)
74
- .optional()
75
- .describe('Max results (default 20)'),
76
- }, async ({ search, limit }) => {
77
- debugLog(debug, `guild_list_workspaces: search=${search || ''}`);
78
- try {
79
- const params = new URLSearchParams();
80
- if (search)
81
- params.set('search', search);
82
- params.set('limit', String(limit || 20));
83
- const response = await apiClient.get(`/me/workspaces?${params.toString()}`);
84
- const text = response.items
85
- .map((w) => `• ${w.full_name || w.name} (${w.id})`)
86
- .join('\n');
87
- return {
88
- content: [{ type: 'text', text: text || 'No workspaces found.' }],
89
- };
90
- }
91
- catch (error) {
92
- return {
93
- content: [{ type: 'text', text: errText('list workspaces', error) }],
94
- isError: true,
95
- };
96
- }
97
- });
98
- server.tool('guild_get_workspace', 'Get workspace details including context', {
99
- workspace_id: workspaceIdParam,
100
- }, async ({ workspace_id }) => {
101
- const wsId = workspace_id || defaultWorkspaceId;
102
- debugLog(debug, `guild_get_workspace: ${wsId}`);
103
- try {
104
- const ws = await apiClient.get(`/workspaces/${wsId}`);
105
- const ownerLine = ws.owner
106
- ? `Owner: ${ws.owner.name} (${ws.owner.type})`
107
- : null;
108
- const text = [`Name: ${ws.full_name || ws.name}`, `ID: ${ws.id}`, ownerLine]
109
- .filter(Boolean)
110
- .join('\n');
111
- return { content: [{ type: 'text', text }] };
112
- }
113
- catch (error) {
114
- return {
115
- content: [{ type: 'text', text: errText('get workspace', error) }],
116
- isError: true,
117
- };
118
- }
119
- });
120
- server.tool('guild_list_workspace_agents', 'List agents installed in a workspace', {
121
- workspace_id: workspaceIdParam,
122
- search: z.string().optional().describe('Filter agents by name'),
123
- }, async ({ workspace_id, search }) => {
124
- const wsId = workspace_id || defaultWorkspaceId;
125
- debugLog(debug, `guild_list_workspace_agents: ws=${wsId} search=${search || ''}`);
126
- try {
127
- let endpoint = `/workspaces/${wsId}/workspace_agents`;
128
- if (search)
129
- endpoint += `?search=${encodeURIComponent(search)}`;
130
- const agents = await apiClient.fetchAll(endpoint);
131
- const text = agents
132
- .map((wa) => {
133
- const name = wa.agent.full_name || wa.agent.name;
134
- const version = wa.agent_version.version_number ||
135
- wa.agent_version.sha?.slice(0, 7) ||
136
- 'latest';
137
- return `• ${name} (workspace_agent: ${wa.id}, agent: ${wa.agent.id}) — v${version}`;
138
- })
139
- .join('\n');
140
- return {
141
- content: [{ type: 'text', text: text || 'No agents in workspace.' }],
142
- };
143
- }
144
- catch (error) {
145
- return {
146
- content: [
147
- { type: 'text', text: errText('list workspace agents', error) },
148
- ],
149
- isError: true,
150
- };
151
- }
152
- });
153
- server.tool('guild_add_workspace_agent', 'Install an agent in a workspace', {
154
- agent_id: z.string().describe('The agent ID to install'),
155
- workspace_id: workspaceIdParam,
156
- }, async ({ agent_id, workspace_id }) => {
157
- const wsId = workspace_id || defaultWorkspaceId;
158
- debugLog(debug, `guild_add_workspace_agent: ${agent_id} ws=${wsId}`);
159
- try {
160
- const wa = await apiClient.post(`/workspaces/${wsId}/workspace_agents`, { agent_id });
161
- return {
162
- content: [
163
- {
164
- type: 'text',
165
- text: `Installed agent ${wa.agent.full_name || wa.agent.name} (workspace_agent: ${wa.id})`,
166
- },
167
- ],
168
- };
169
- }
170
- catch (error) {
171
- return {
172
- content: [
173
- { type: 'text', text: errText('add workspace agent', error) },
174
- ],
175
- isError: true,
176
- };
177
- }
178
- });
179
- server.tool('guild_remove_workspace_agent', 'Remove an agent from the workspace', {
180
- workspace_agent_id: z.string().describe('The workspace agent ID to remove'),
181
- }, async ({ workspace_agent_id }) => {
182
- debugLog(debug, `guild_remove_workspace_agent: ${workspace_agent_id}`);
183
- try {
184
- await apiClient.delete(`/workspace_agents/${workspace_agent_id}`);
185
- return {
186
- content: [
187
- {
188
- type: 'text',
189
- text: `Removed workspace agent ${workspace_agent_id}.`,
190
- },
191
- ],
192
- };
193
- }
194
- catch (error) {
195
- return {
196
- content: [
197
- { type: 'text', text: errText('remove workspace agent', error) },
198
- ],
199
- isError: true,
200
- };
201
- }
202
- });
203
- // =========================================================================
204
- // Contexts
205
- // =========================================================================
206
- server.tool('guild_list_contexts', 'List context versions for a workspace', {
207
- workspace_id: workspaceIdParam,
208
- limit: z
209
- .number()
210
- .int()
211
- .min(1)
212
- .max(100)
213
- .optional()
214
- .describe('Max results (default 20)'),
215
- }, async ({ workspace_id, limit }) => {
216
- const wsId = workspace_id || defaultWorkspaceId;
217
- debugLog(debug, `guild_list_contexts: ws=${wsId}`);
218
- try {
219
- const response = await apiClient.get(`/workspaces/${wsId}/contexts?limit=${limit || 20}`);
220
- const text = response.items
221
- .map((c) => {
222
- const summary = c.summary ? ` — ${c.summary}` : '';
223
- return `• ${c.id} [${c.status}] ${c.created_at}${summary}`;
224
- })
225
- .join('\n');
226
- return {
227
- content: [{ type: 'text', text: text || 'No contexts found.' }],
228
- };
229
- }
230
- catch (error) {
231
- return {
232
- content: [{ type: 'text', text: errText('list contexts', error) }],
233
- isError: true,
234
- };
235
- }
236
- });
237
- server.tool('guild_get_context', 'Get the content of a specific context version', {
238
- context_id: z.string().describe('The context ID'),
239
- }, async ({ context_id }) => {
240
- debugLog(debug, `guild_get_context: ${context_id}`);
241
- try {
242
- const ctx = await apiClient.get(`/contexts/${context_id}`);
243
- const sections = [
244
- `Context: ${ctx.id}`,
245
- `Status: ${ctx.status}`,
246
- `Created: ${ctx.created_at}`,
247
- ];
248
- if (ctx.summary)
249
- sections.push(`Summary: ${ctx.summary}`);
250
- if (ctx.manual_context) {
251
- sections.push('', '--- Manual Context ---', ctx.manual_context);
252
- }
253
- if (ctx.generated_context) {
254
- sections.push('', '--- Generated Context ---', ctx.generated_context);
255
- }
256
- return { content: [{ type: 'text', text: sections.join('\n') }] };
257
- }
258
- catch (error) {
259
- return {
260
- content: [{ type: 'text', text: errText('get context', error) }],
261
- isError: true,
262
- };
263
- }
264
- });
265
- server.tool('guild_publish_context', 'Create or publish a new context version for a workspace', {
266
- content: z.string().describe('The context content to publish'),
267
- workspace_id: workspaceIdParam,
268
- status: z
269
- .enum(['ACTIVE', 'ARCHIVED'])
270
- .optional()
271
- .describe('Context status (default ACTIVE)'),
272
- summary: z.string().optional().describe('Short summary of the context'),
273
- }, async ({ content, workspace_id, status, summary }) => {
274
- const wsId = workspace_id || defaultWorkspaceId;
275
- debugLog(debug, `guild_publish_context: ws=${wsId}`);
276
- try {
277
- const body = { manual_context: content };
278
- if (status)
279
- body.status = status;
280
- if (summary)
281
- body.summary = summary;
282
- const ctx = await apiClient.post(`/workspaces/${wsId}/contexts`, body);
283
- return {
284
- content: [
285
- {
286
- type: 'text',
287
- text: `Published context ${ctx.id} [${ctx.status}]`,
288
- },
289
- ],
290
- };
291
- }
292
- catch (error) {
293
- return {
294
- content: [{ type: 'text', text: errText('publish context', error) }],
295
- isError: true,
296
- };
297
- }
298
- });
299
- // =========================================================================
300
- // Agents (catalog)
301
- // =========================================================================
302
- server.tool('guild_search_agents', 'Search or list agents in the Guild catalog', {
303
- search: z.string().optional().describe('Search query to filter agents by name'),
304
- published_only: z
305
- .boolean()
306
- .optional()
307
- .describe('Only show published agents (default true)'),
308
- limit: z
309
- .number()
310
- .int()
311
- .min(1)
312
- .max(100)
313
- .optional()
314
- .describe('Max results (default 20)'),
315
- }, async ({ search, published_only, limit }) => {
316
- debugLog(debug, `guild_search_agents: search=${search || ''}`);
317
- try {
318
- const params = new URLSearchParams();
319
- if (search)
320
- params.set('search', search);
321
- if (published_only !== undefined)
322
- params.set('published_only', String(published_only));
323
- params.set('limit', String(limit || 20));
324
- const response = await apiClient.get(`/agents?${params.toString()}`);
325
- const text = response.items
326
- .map((a) => {
327
- const name = a.full_name || a.name;
328
- const desc = a.description ? ` — ${a.description}` : '';
329
- return `• ${name} (${a.id})${desc}`;
330
- })
331
- .join('\n');
332
- return {
333
- content: [{ type: 'text', text: text || 'No agents found.' }],
334
- };
335
- }
336
- catch (error) {
337
- return {
338
- content: [{ type: 'text', text: errText('search agents', error) }],
339
- isError: true,
340
- };
341
- }
342
- });
343
- server.tool('guild_get_agent', 'Get details for a specific Guild agent', {
344
- agent_id: z
345
- .string()
346
- .describe('The agent ID or full name (e.g. owner~agent-name)'),
347
- }, async ({ agent_id }) => {
348
- debugLog(debug, `guild_get_agent: ${agent_id}`);
349
- try {
350
- const agent = await apiClient.get(`/agents/${agent_id}`);
351
- const lines = [
352
- `Name: ${agent.full_name || agent.name}`,
353
- `ID: ${agent.id}`,
354
- `Status: ${agent.status}`,
355
- agent.description ? `Description: ${agent.description}` : null,
356
- agent.owner ? `Owner: ${agent.owner.name}` : null,
357
- agent.is_public !== undefined ? `Public: ${agent.is_public}` : null,
358
- ];
359
- return {
360
- content: [{ type: 'text', text: lines.filter(Boolean).join('\n') }],
361
- };
362
- }
363
- catch (error) {
364
- return {
365
- content: [{ type: 'text', text: errText('get agent', error) }],
366
- isError: true,
367
- };
368
- }
369
- });
370
- server.tool('guild_get_agent_readme', 'Get the README for a Guild agent', {
371
- agent_id: z.string().describe('The agent ID or full name'),
372
- }, async ({ agent_id }) => {
373
- debugLog(debug, `guild_get_agent_readme: ${agent_id}`);
374
- try {
375
- const readme = await apiClient.get(`/agents/${agent_id}/readme`);
376
- return { content: [{ type: 'text', text: readme.content }] };
377
- }
378
- catch (error) {
379
- return {
380
- content: [
381
- { type: 'text', text: errText('get agent readme', error) },
382
- ],
383
- isError: true,
384
- };
385
- }
386
- });
387
- server.tool('guild_get_agent_code', 'Get the source code files for a Guild agent', {
388
- agent_id: z.string().describe('The agent ID or full name'),
389
- }, async ({ agent_id }) => {
390
- debugLog(debug, `guild_get_agent_code: ${agent_id}`);
391
- try {
392
- const files = await apiClient.get(`/agents/${agent_id}/code`);
393
- if (files.length === 0) {
394
- return {
395
- content: [{ type: 'text', text: 'No source files found.' }],
396
- };
397
- }
398
- const text = files.map((f) => `--- ${f.path} ---\n${f.content}`).join('\n\n');
399
- return { content: [{ type: 'text', text }] };
400
- }
401
- catch (error) {
402
- return {
403
- content: [{ type: 'text', text: errText('get agent code', error) }],
404
- isError: true,
405
- };
406
- }
407
- });
408
- server.tool('guild_list_agent_versions', 'List versions of a Guild agent', {
409
- agent_id: z.string().describe('The agent ID or full name'),
410
- limit: z
411
- .number()
412
- .int()
413
- .min(1)
414
- .max(100)
415
- .optional()
416
- .describe('Max results (default 20)'),
417
- }, async ({ agent_id, limit }) => {
418
- debugLog(debug, `guild_list_agent_versions: ${agent_id}`);
419
- try {
420
- const response = await apiClient.get(`/agents/${agent_id}/versions?limit=${limit || 20}`);
421
- const text = response.items
422
- .map((v) => {
423
- const version = v.version_number || v.sha?.slice(0, 7) || 'ephemeral';
424
- return `• ${version} (${v.id}) [${v.status}] — ${v.summary} — ${v.created_at}`;
425
- })
426
- .join('\n');
427
- return {
428
- content: [{ type: 'text', text: text || 'No versions found.' }],
429
- };
430
- }
431
- catch (error) {
432
- return {
433
- content: [
434
- { type: 'text', text: errText('list agent versions', error) },
435
- ],
436
- isError: true,
437
- };
438
- }
439
- });
440
- // =========================================================================
441
- // Sessions
442
- // =========================================================================
443
- server.tool('guild_chat', 'Start a new chat session with a Guild agent and get a response', {
444
- message: z.string().describe('The message to send to the agent'),
445
- agent: z
446
- .string()
447
- .optional()
448
- .describe('Agent identifier (e.g. owner~agent-name). Uses workspace default if not specified'),
449
- workspace_id: workspaceIdParam,
450
- }, async ({ message, agent, workspace_id }) => {
451
- const wsId = workspace_id || defaultWorkspaceId;
452
- debugLog(debug, `guild_chat: message="${message}", agent=${agent || 'default'}, ws=${wsId}`);
453
- try {
454
- const body = {
455
- session_type: 'chat',
456
- initial_prompt: message,
457
- };
458
- if (agent) {
459
- body.agent_id = agent;
460
- }
461
- const session = await apiClient.post(`/workspaces/${wsId}/sessions`, body);
462
- debugLog(debug, `Session created: ${session.id}`);
463
- const response = await pollForMcpResponse(apiClient, session.id, debug);
464
- return {
465
- content: [{ type: 'text', text: response }],
466
- };
467
- }
468
- catch (error) {
469
- return {
470
- content: [{ type: 'text', text: errText('chat', error) }],
471
- isError: true,
472
- };
473
- }
474
- });
475
- server.tool('guild_send_message', 'Send a follow-up message to an existing Guild session', {
476
- session_id: z.string().describe('The session ID to send the message to'),
477
- message: z.string().describe('The message to send'),
478
- }, async ({ session_id, message }) => {
479
- debugLog(debug, `guild_send_message: session=${session_id}`);
480
- try {
481
- await apiClient.post(`/sessions/${session_id}/events`, {
482
- event_type: 'user_message',
483
- content: { type: 'text', data: message },
484
- });
485
- const response = await pollForMcpResponse(apiClient, session_id, debug);
486
- return {
487
- content: [{ type: 'text', text: response }],
488
- };
489
- }
490
- catch (error) {
491
- return {
492
- content: [{ type: 'text', text: errText('send message', error) }],
493
- isError: true,
494
- };
495
- }
496
- });
497
- server.tool('guild_list_sessions', 'List recent sessions in a Guild workspace', {
498
- workspace_id: workspaceIdParam,
499
- limit: z
500
- .number()
501
- .int()
502
- .min(1)
503
- .max(100)
504
- .optional()
505
- .describe('Number of sessions to return (default 20)'),
506
- }, async ({ workspace_id, limit }) => {
507
- const wsId = workspace_id || defaultWorkspaceId;
508
- debugLog(debug, `guild_list_sessions: ws=${wsId}`);
509
- try {
510
- const queryLimit = limit || 20;
511
- const response = await apiClient.get(`/workspaces/${wsId}/sessions?limit=${queryLimit}`);
512
- const text = response.items
513
- .map((s) => `• ${s.id} (${s.session_type}) — ${s.created_at}`)
514
- .join('\n');
515
- return {
516
- content: [{ type: 'text', text: text || 'No sessions found.' }],
517
- };
518
- }
519
- catch (error) {
520
- return {
521
- content: [{ type: 'text', text: errText('list sessions', error) }],
522
- isError: true,
523
- };
524
- }
525
- });
526
- server.tool('guild_get_session', 'Get session details and recent events from a Guild session', {
527
- session_id: z.string().describe('The session ID'),
528
- }, async ({ session_id }) => {
529
- debugLog(debug, `guild_get_session: ${session_id}`);
530
- try {
531
- const [session, eventsResponse] = await Promise.all([
532
- apiClient.get(`/sessions/${session_id}`),
533
- apiClient.get(`/sessions/${session_id}/events`),
534
- ]);
535
- const events = eventsResponse.events || [];
536
- const recentEvents = events.slice(-20);
537
- const eventLines = recentEvents.map((e) => {
538
- const text = extractEventText(e);
539
- const preview = text
540
- ? `: ${text.slice(0, 100)}${text.length > 100 ? '...' : ''}`
541
- : '';
542
- return ` [${e.event_type}]${preview}`;
543
- });
544
- const text = [
545
- `Session: ${session.id}`,
546
- `Type: ${session.session_type}`,
547
- `Created: ${session.created_at}`,
548
- `Updated: ${session.updated_at}`,
549
- '',
550
- `Recent events (${recentEvents.length} of ${events.length}):`,
551
- ...eventLines,
552
- ].join('\n');
553
- return {
554
- content: [{ type: 'text', text }],
555
- };
556
- }
557
- catch (error) {
558
- return {
559
- content: [{ type: 'text', text: errText('get session', error) }],
560
- isError: true,
561
- };
562
- }
563
- });
564
- server.tool('guild_get_session_events', 'Get events from a Guild session with pagination', {
565
- session_id: z.string().describe('The session ID'),
566
- limit: z
567
- .number()
568
- .int()
569
- .min(1)
570
- .max(200)
571
- .optional()
572
- .describe('Max events to return (default 50)'),
573
- }, async ({ session_id, limit }) => {
574
- debugLog(debug, `guild_get_session_events: ${session_id}`);
575
- try {
576
- const response = await apiClient.get(`/sessions/${session_id}/events`);
577
- const events = response.events || [];
578
- const maxEvents = limit || 50;
579
- const displayed = events.slice(-maxEvents);
580
- const lines = displayed.map((e) => {
581
- const text = extractEventText(e);
582
- const preview = text
583
- ? `: ${text.slice(0, 200)}${text.length > 200 ? '...' : ''}`
584
- : '';
585
- return `[${e.created_at}] ${e.event_type}${preview}`;
586
- });
587
- const header = `Events (${displayed.length} of ${events.length}):`;
588
- return {
589
- content: [{ type: 'text', text: [header, ...lines].join('\n') }],
590
- };
591
- }
592
- catch (error) {
593
- return {
594
- content: [
595
- { type: 'text', text: errText('get session events', error) },
596
- ],
597
- isError: true,
598
- };
599
- }
600
- });
601
- server.tool('guild_interrupt_session', 'Interrupt a running Guild session', {
602
- session_id: z.string().describe('The session ID to interrupt'),
603
- }, async ({ session_id }) => {
604
- debugLog(debug, `guild_interrupt_session: ${session_id}`);
605
- try {
606
- await apiClient.post(`/sessions/${session_id}/interrupt`);
607
- return {
608
- content: [
609
- {
610
- type: 'text',
611
- text: `Interrupted session ${session_id}.`,
612
- },
613
- ],
614
- };
615
- }
616
- catch (error) {
617
- return {
618
- content: [
619
- { type: 'text', text: errText('interrupt session', error) },
620
- ],
621
- isError: true,
622
- };
623
- }
624
- });
625
- // =========================================================================
626
- // Triggers
627
- // =========================================================================
628
- server.tool('guild_list_triggers', 'List triggers configured in a workspace', {
629
- workspace_id: workspaceIdParam,
630
- limit: z
631
- .number()
632
- .int()
633
- .min(1)
634
- .max(100)
635
- .optional()
636
- .describe('Max results (default 20)'),
637
- }, async ({ workspace_id, limit }) => {
638
- const wsId = workspace_id || defaultWorkspaceId;
639
- debugLog(debug, `guild_list_triggers: ws=${wsId}`);
640
- try {
641
- const response = await apiClient.get(`/workspaces/${wsId}/triggers?limit=${limit || 20}`);
642
- const text = response.items
643
- .map((t) => {
644
- const agent = t.agent.full_name || t.agent.name;
645
- const disabled = t.deactivated_at ? ' [DISABLED]' : '';
646
- if (t.type === 'webhook') {
647
- return `• ${t.id} [webhook] ${t.integration.name}/${t.event_type || '*'} → ${agent}${disabled}`;
648
- }
649
- return `• ${t.id} [time] ${t.frequency} → ${agent}${disabled}`;
650
- })
651
- .join('\n');
652
- return {
653
- content: [{ type: 'text', text: text || 'No triggers found.' }],
654
- };
655
- }
656
- catch (error) {
657
- return {
658
- content: [{ type: 'text', text: errText('list triggers', error) }],
659
- isError: true,
660
- };
661
- }
662
- });
663
- server.tool('guild_get_trigger_sessions', 'List sessions spawned by a specific trigger', {
664
- trigger_id: z.string().describe('The trigger ID'),
665
- workspace_id: workspaceIdParam,
666
- limit: z
667
- .number()
668
- .int()
669
- .min(1)
670
- .max(100)
671
- .optional()
672
- .describe('Max results (default 20)'),
673
- }, async ({ trigger_id, workspace_id, limit }) => {
674
- const wsId = workspace_id || defaultWorkspaceId;
675
- debugLog(debug, `guild_get_trigger_sessions: ${trigger_id} ws=${wsId}`);
676
- try {
677
- const response = await apiClient.get(`/workspaces/${wsId}/sessions?trigger_id=${trigger_id}&limit=${limit || 20}`);
678
- const text = response.items
679
- .map((s) => `• ${s.id} (${s.session_type}) — ${s.created_at}`)
680
- .join('\n');
681
- return {
682
- content: [
683
- { type: 'text', text: text || 'No trigger sessions found.' },
684
- ],
685
- };
686
- }
687
- catch (error) {
688
- return {
689
- content: [
690
- { type: 'text', text: errText('get trigger sessions', error) },
691
- ],
692
- isError: true,
693
- };
694
- }
695
- });
696
- // =========================================================================
697
- // Credentials / Integrations
698
- // =========================================================================
699
- server.tool('guild_list_credentials', 'List connected integration credentials', {}, async () => {
700
- debugLog(debug, 'guild_list_credentials');
701
- try {
702
- const me = await apiClient.get('/me');
703
- const response = await apiClient.get(`/credentials?account_id=${me.id}`);
704
- const text = response.items
705
- .map((c) => {
706
- const status = c.status ? ` [${c.status}]` : '';
707
- return `• ${c.service} (${c.id})${status}`;
708
- })
709
- .join('\n');
710
- return {
711
- content: [{ type: 'text', text: text || 'No credentials found.' }],
712
- };
713
- }
714
- catch (error) {
715
- return {
716
- content: [
717
- { type: 'text', text: errText('list credentials', error) },
718
- ],
719
- isError: true,
720
- };
721
- }
722
- });
723
- server.tool('guild_list_available_integrations', 'List available integrations that can be connected', {}, async () => {
724
- debugLog(debug, 'guild_list_available_integrations');
725
- try {
726
- const integrations = await apiClient.get('/credentials/available');
727
- const items = Array.isArray(integrations) ? integrations : [];
728
- const text = items
729
- .map((i) => {
730
- const desc = i.description ? ` — ${i.description}` : '';
731
- return `• ${i.name || i.service} (${i.service})${desc}`;
732
- })
733
- .join('\n');
734
- return {
735
- content: [
736
- { type: 'text', text: text || 'No integrations available.' },
737
- ],
738
- };
739
- }
740
- catch (error) {
741
- return {
742
- content: [
743
- {
744
- type: 'text',
745
- text: errText('list available integrations', error),
746
- },
747
- ],
748
- isError: true,
749
- };
750
- }
751
- });
752
- }
753
- //# sourceMappingURL=tools.js.map