@guildai/cli 0.10.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 (203) 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/agent/logs.d.ts +3 -0
  36. package/dist/commands/setup.d.ts +16 -0
  37. package/dist/commands/skill/create.d.ts +3 -0
  38. package/dist/commands/skill/get.d.ts +3 -0
  39. package/dist/commands/skill/list.d.ts +3 -0
  40. package/dist/commands/skill/update.d.ts +3 -0
  41. package/dist/commands/skill/version/create.d.ts +3 -0
  42. package/dist/commands/skill/version/get.d.ts +3 -0
  43. package/dist/commands/skill/version/list.d.ts +3 -0
  44. package/dist/devtools-AO7YSDOD.js +67 -0
  45. package/dist/devtools-AO7YSDOD.js.map +7 -0
  46. package/dist/dist-4CBK6X5H.js +1566 -0
  47. package/dist/dist-4CBK6X5H.js.map +7 -0
  48. package/dist/esm-FRAVZP4J.js +13 -0
  49. package/dist/esm-FRAVZP4J.js.map +7 -0
  50. package/dist/execa-XQMWSABC.js +35 -0
  51. package/dist/execa-XQMWSABC.js.map +7 -0
  52. package/dist/index.js +8231 -253
  53. package/dist/index.js.map +7 -0
  54. package/dist/lib/api-types.d.ts +44 -0
  55. package/dist/lib/auth.d.ts +1 -1
  56. package/dist/lib/config.d.ts +9 -0
  57. package/dist/lib/errors.d.ts +1 -1
  58. package/dist/lib/output-mode.d.ts +9 -2
  59. package/dist/lib/output.d.ts +17 -1
  60. package/dist/lib/session-events.d.ts +14 -3
  61. package/dist/lib/session-polling.d.ts +24 -1
  62. package/dist/lib/session-resume.d.ts +15 -1
  63. package/dist/lib/stdin.d.ts +5 -1
  64. package/dist/lib/websocket-client.d.ts +46 -0
  65. package/dist/open-RF4X5MOP.js +13 -0
  66. package/dist/open-RF4X5MOP.js.map +7 -0
  67. package/dist/server-JYVH64FD.js +27659 -0
  68. package/dist/server-JYVH64FD.js.map +7 -0
  69. package/dist/test-SNIYRJ32.js +692 -0
  70. package/dist/test-SNIYRJ32.js.map +7 -0
  71. package/docs/skills/codex-agent-dev.md +2 -2
  72. package/package.json +8 -12
  73. package/dist/commands/agent/chat.js +0 -278
  74. package/dist/commands/agent/clone.js +0 -116
  75. package/dist/commands/agent/code.js +0 -87
  76. package/dist/commands/agent/fork.js +0 -218
  77. package/dist/commands/agent/get.js +0 -37
  78. package/dist/commands/agent/grep.js +0 -107
  79. package/dist/commands/agent/init.js +0 -390
  80. package/dist/commands/agent/list.js +0 -110
  81. package/dist/commands/agent/owners.js +0 -74
  82. package/dist/commands/agent/publish.js +0 -91
  83. package/dist/commands/agent/pull.js +0 -198
  84. package/dist/commands/agent/revalidate.js +0 -56
  85. package/dist/commands/agent/save.js +0 -346
  86. package/dist/commands/agent/search.js +0 -61
  87. package/dist/commands/agent/tags/add.js +0 -73
  88. package/dist/commands/agent/tags/list.js +0 -43
  89. package/dist/commands/agent/tags/remove.js +0 -84
  90. package/dist/commands/agent/tags/set.js +0 -71
  91. package/dist/commands/agent/test.js +0 -486
  92. package/dist/commands/agent/unpublish.js +0 -64
  93. package/dist/commands/agent/update.js +0 -110
  94. package/dist/commands/agent/versions.js +0 -55
  95. package/dist/commands/agent/workspaces.js +0 -54
  96. package/dist/commands/auth/login.js +0 -33
  97. package/dist/commands/auth/logout.js +0 -24
  98. package/dist/commands/auth/status.js +0 -38
  99. package/dist/commands/auth/token.js +0 -19
  100. package/dist/commands/chat.js +0 -1345
  101. package/dist/commands/config/get.js +0 -64
  102. package/dist/commands/config/list.js +0 -47
  103. package/dist/commands/config/path.js +0 -38
  104. package/dist/commands/config/set.js +0 -132
  105. package/dist/commands/credentials/endpoint-list.js +0 -88
  106. package/dist/commands/credentials/list.js +0 -50
  107. package/dist/commands/credentials/policy-create.js +0 -66
  108. package/dist/commands/credentials/policy-delete.js +0 -33
  109. package/dist/commands/credentials/policy-list.js +0 -45
  110. package/dist/commands/credentials/policy-update.js +0 -66
  111. package/dist/commands/doctor.js +0 -233
  112. package/dist/commands/integration/connect.js +0 -76
  113. package/dist/commands/integration/create.js +0 -298
  114. package/dist/commands/integration/get.js +0 -95
  115. package/dist/commands/integration/list.js +0 -62
  116. package/dist/commands/integration/operation/create.js +0 -164
  117. package/dist/commands/integration/operation/list.js +0 -92
  118. package/dist/commands/integration/update.js +0 -139
  119. package/dist/commands/integration/version/build.js +0 -86
  120. package/dist/commands/integration/version/create.js +0 -45
  121. package/dist/commands/integration/version/get.js +0 -72
  122. package/dist/commands/integration/version/list.js +0 -45
  123. package/dist/commands/integration/version/publish.js +0 -79
  124. package/dist/commands/integration/version/test.js +0 -104
  125. package/dist/commands/job/get-step.js +0 -40
  126. package/dist/commands/job/get.js +0 -44
  127. package/dist/commands/mcp.js +0 -34
  128. package/dist/commands/session/create.js +0 -59
  129. package/dist/commands/session/events.js +0 -56
  130. package/dist/commands/session/get.js +0 -33
  131. package/dist/commands/session/interrupt.js +0 -33
  132. package/dist/commands/session/list.js +0 -59
  133. package/dist/commands/session/send.js +0 -54
  134. package/dist/commands/session/tasks.js +0 -45
  135. package/dist/commands/setup.js +0 -230
  136. package/dist/commands/trigger/activate.js +0 -41
  137. package/dist/commands/trigger/create.js +0 -197
  138. package/dist/commands/trigger/deactivate.js +0 -41
  139. package/dist/commands/trigger/get.js +0 -33
  140. package/dist/commands/trigger/list.js +0 -57
  141. package/dist/commands/trigger/sessions.js +0 -48
  142. package/dist/commands/trigger/update.js +0 -128
  143. package/dist/commands/version.js +0 -24
  144. package/dist/commands/workspace/agent/add.js +0 -114
  145. package/dist/commands/workspace/agent/list.js +0 -78
  146. package/dist/commands/workspace/agent/remove.js +0 -78
  147. package/dist/commands/workspace/clear.js +0 -45
  148. package/dist/commands/workspace/context/edit.js +0 -107
  149. package/dist/commands/workspace/context/get.js +0 -47
  150. package/dist/commands/workspace/context/list.js +0 -51
  151. package/dist/commands/workspace/context/publish.js +0 -42
  152. package/dist/commands/workspace/create.js +0 -51
  153. package/dist/commands/workspace/current.js +0 -63
  154. package/dist/commands/workspace/get.js +0 -39
  155. package/dist/commands/workspace/list.js +0 -70
  156. package/dist/commands/workspace/select.js +0 -184
  157. package/dist/components/AgentInstallPrompt.js +0 -97
  158. package/dist/components/SplashAnimation.js +0 -321
  159. package/dist/components/TaskView.js +0 -268
  160. package/dist/lib/agent-helpers.js +0 -306
  161. package/dist/lib/alternate-screen.js +0 -59
  162. package/dist/lib/api-client.js +0 -154
  163. package/dist/lib/api-types.js +0 -10
  164. package/dist/lib/auth.js +0 -284
  165. package/dist/lib/braille-canvas.js +0 -321
  166. package/dist/lib/colors.js +0 -46
  167. package/dist/lib/config-cache.js +0 -45
  168. package/dist/lib/config.js +0 -153
  169. package/dist/lib/did-you-mean.js +0 -144
  170. package/dist/lib/errors.js +0 -375
  171. package/dist/lib/event-filter.js +0 -91
  172. package/dist/lib/generated-types.js +0 -56
  173. package/dist/lib/git.js +0 -176
  174. package/dist/lib/gk.js +0 -91
  175. package/dist/lib/guild-config.js +0 -178
  176. package/dist/lib/iap.js +0 -117
  177. package/dist/lib/integration-helpers.js +0 -38
  178. package/dist/lib/loading-messages.js +0 -72
  179. package/dist/lib/logo.js +0 -141
  180. package/dist/lib/lottie-serverside.js +0 -181
  181. package/dist/lib/markdown.js +0 -38
  182. package/dist/lib/npmrc.js +0 -59
  183. package/dist/lib/output-mode.js +0 -33
  184. package/dist/lib/output.js +0 -591
  185. package/dist/lib/owner-helpers.js +0 -112
  186. package/dist/lib/polling.js +0 -76
  187. package/dist/lib/progress.js +0 -324
  188. package/dist/lib/session-events-fetch.js +0 -25
  189. package/dist/lib/session-events.js +0 -112
  190. package/dist/lib/session-polling.js +0 -160
  191. package/dist/lib/session-resume.js +0 -96
  192. package/dist/lib/spinners.js +0 -770
  193. package/dist/lib/splash.js +0 -41
  194. package/dist/lib/stdin.js +0 -84
  195. package/dist/lib/svg-to-braille.js +0 -76
  196. package/dist/lib/table.js +0 -59
  197. package/dist/lib/update-check.js +0 -65
  198. package/dist/lib/validate-input-schema.js +0 -208
  199. package/dist/lib/version-helpers.js +0 -121
  200. package/dist/lib/workspace-helpers.js +0 -49
  201. package/dist/mcp/resources.js +0 -67
  202. package/dist/mcp/server.js +0 -64
  203. 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