@openclaw-cloud/agent-controller 0.21.0 → 1.0.0-beta.2
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.
- package/dist/handlers/board-handler.d.ts +19 -1
- package/dist/handlers/board-handler.js +145 -10
- package/dist/handlers/board-handler.js.map +1 -1
- package/dist/index.js +37 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp-client.d.ts +29 -0
- package/dist/mcp-client.js +70 -0
- package/dist/mcp-client.js.map +1 -0
- package/dist/skills/index.d.ts +1 -1
- package/dist/skills/index.js +1 -21
- package/dist/skills/index.js.map +1 -1
- package/package.json +5 -3
- package/dist/skills/board-tools/SKILL.md +0 -75
- package/dist/skills/board-tools/scripts/board-artifact.sh +0 -56
- package/dist/skills/board-tools/scripts/board-artifacts.sh +0 -16
- package/dist/skills/board-tools/scripts/board-comment.sh +0 -23
- package/dist/skills/board-tools/scripts/board-move.sh +0 -13
- package/dist/skills/board-tools/scripts/board-result.sh +0 -35
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AgentApi } from '../api.js';
|
|
2
|
+
import type { McpBoardClient } from '../mcp-client.js';
|
|
2
3
|
import type { BoardState, BoardEvent, BoardInfo } from '../types.js';
|
|
3
4
|
export declare class BoardHandler {
|
|
4
5
|
private boardState;
|
|
@@ -7,8 +8,23 @@ export declare class BoardHandler {
|
|
|
7
8
|
private workspaceId;
|
|
8
9
|
private currentCardProcessingId;
|
|
9
10
|
private api;
|
|
10
|
-
|
|
11
|
+
private mcpClient;
|
|
12
|
+
private mcpToolNames;
|
|
13
|
+
private useMcp;
|
|
14
|
+
constructor(api: AgentApi, mcpClient?: McpBoardClient);
|
|
11
15
|
initialize(): Promise<string | null>;
|
|
16
|
+
/**
|
|
17
|
+
* Find an MCP tool name matching a path pattern.
|
|
18
|
+
* Tool names are generated from method + path: e.g. get__api_agent_board
|
|
19
|
+
*/
|
|
20
|
+
private findTool;
|
|
21
|
+
private getBoard;
|
|
22
|
+
private claimCard;
|
|
23
|
+
private getTask;
|
|
24
|
+
private postResult;
|
|
25
|
+
private postArtifact;
|
|
26
|
+
private postComment;
|
|
27
|
+
private postMove;
|
|
12
28
|
onBoardEvent(event: BoardEvent): Promise<void>;
|
|
13
29
|
tryClaimCard(cardId: string): Promise<void>;
|
|
14
30
|
startTask(cardId: string): Promise<void>;
|
|
@@ -18,4 +34,6 @@ export declare class BoardHandler {
|
|
|
18
34
|
checkQueue(existingData?: BoardInfo): Promise<void>;
|
|
19
35
|
getBoardStatus(): BoardState;
|
|
20
36
|
getBoardId(): string | null;
|
|
37
|
+
/** Whether this handler is using MCP tools (vs HTTP fallback). */
|
|
38
|
+
isUsingMcp(): boolean;
|
|
21
39
|
}
|
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
import { getProvider } from '../providers/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Try to parse JSON response from MCP tool result.
|
|
4
|
+
* Returns the parsed object or throws on error.
|
|
5
|
+
*/
|
|
6
|
+
function parseMcpResult(result, toolName) {
|
|
7
|
+
if (result.isError) {
|
|
8
|
+
const errText = result.content[0]?.text ?? 'Unknown MCP error';
|
|
9
|
+
throw new Error(`MCP tool ${toolName} failed: ${errText}`);
|
|
10
|
+
}
|
|
11
|
+
const text = result.content[0]?.text;
|
|
12
|
+
if (!text)
|
|
13
|
+
throw new Error(`MCP tool ${toolName} returned empty result`);
|
|
14
|
+
return JSON.parse(text);
|
|
15
|
+
}
|
|
2
16
|
export class BoardHandler {
|
|
3
17
|
boardState = { state: 'idle', cardId: null };
|
|
4
18
|
myColumnIds = [];
|
|
@@ -6,12 +20,39 @@ export class BoardHandler {
|
|
|
6
20
|
workspaceId = null;
|
|
7
21
|
currentCardProcessingId = null;
|
|
8
22
|
api;
|
|
9
|
-
|
|
23
|
+
mcpClient = null;
|
|
24
|
+
mcpToolNames = [];
|
|
25
|
+
useMcp = false;
|
|
26
|
+
constructor(api, mcpClient) {
|
|
10
27
|
this.api = api;
|
|
28
|
+
this.mcpClient = mcpClient ?? null;
|
|
11
29
|
}
|
|
12
30
|
async initialize() {
|
|
13
31
|
try {
|
|
14
|
-
|
|
32
|
+
// Try to connect MCP client first
|
|
33
|
+
if (this.mcpClient) {
|
|
34
|
+
try {
|
|
35
|
+
await this.mcpClient.connect();
|
|
36
|
+
this.mcpToolNames = await this.mcpClient.listTools();
|
|
37
|
+
console.log(`[board] MCP tools available: ${this.mcpToolNames.join(', ')}`);
|
|
38
|
+
this.useMcp = true;
|
|
39
|
+
// Set up MCP event handler for board notifications
|
|
40
|
+
this.mcpClient.setEventHandler((event) => {
|
|
41
|
+
this.onBoardEvent({
|
|
42
|
+
event: (event.type ?? event.event),
|
|
43
|
+
cardId: event.cardId,
|
|
44
|
+
columnId: event.columnId,
|
|
45
|
+
}).catch((err) => {
|
|
46
|
+
console.error('[board] MCP event handler error:', err instanceof Error ? err.message : err);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
console.warn('[board] MCP connection failed, falling back to HTTP:', err instanceof Error ? err.message : err);
|
|
52
|
+
this.useMcp = false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const data = await this.getBoard();
|
|
15
56
|
this.boardId = data.board.id;
|
|
16
57
|
this.workspaceId = data.board.workspaceId;
|
|
17
58
|
this.myColumnIds = data.board.myColumnIds;
|
|
@@ -26,6 +67,96 @@ export class BoardHandler {
|
|
|
26
67
|
return null;
|
|
27
68
|
}
|
|
28
69
|
}
|
|
70
|
+
// ─── MCP-aware API methods ──────────────────────────────────────────────
|
|
71
|
+
/**
|
|
72
|
+
* Find an MCP tool name matching a path pattern.
|
|
73
|
+
* Tool names are generated from method + path: e.g. get__api_agent_board
|
|
74
|
+
*/
|
|
75
|
+
findTool(method, pathFragment) {
|
|
76
|
+
const prefix = method.toLowerCase() + '_';
|
|
77
|
+
return this.mcpToolNames.find((t) => t.startsWith(prefix) && t.includes(pathFragment.replace(/[^a-zA-Z0-9]/g, '_'))) ?? null;
|
|
78
|
+
}
|
|
79
|
+
async getBoard() {
|
|
80
|
+
if (this.useMcp && this.mcpClient) {
|
|
81
|
+
const toolName = this.findTool('get', 'api_agent_board');
|
|
82
|
+
if (toolName && !toolName.includes('cards')) {
|
|
83
|
+
const result = await this.mcpClient.callTool(toolName);
|
|
84
|
+
return parseMcpResult(result, toolName);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Fallback to HTTP
|
|
88
|
+
return this.api.get('/api/agent/board');
|
|
89
|
+
}
|
|
90
|
+
async claimCard(cardId) {
|
|
91
|
+
if (this.useMcp && this.mcpClient) {
|
|
92
|
+
const toolName = this.findTool('post', 'agent_board_cards__cardId__claim');
|
|
93
|
+
if (toolName) {
|
|
94
|
+
const result = await this.mcpClient.callTool(toolName, { cardId });
|
|
95
|
+
// Convert MCP result to Response-like for compatibility
|
|
96
|
+
if (result.isError) {
|
|
97
|
+
const text = result.content[0]?.text ?? '';
|
|
98
|
+
const status = text.includes('409') ? 409 : 500;
|
|
99
|
+
return { ok: false, status, text: () => Promise.resolve(text) };
|
|
100
|
+
}
|
|
101
|
+
return { ok: true, status: 200, text: () => Promise.resolve(result.content[0]?.text ?? '') };
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return this.api.post(`/api/agent/board/cards/${cardId}/claim`);
|
|
105
|
+
}
|
|
106
|
+
async getTask(cardId) {
|
|
107
|
+
if (this.useMcp && this.mcpClient) {
|
|
108
|
+
const toolName = this.findTool('get', 'agent_board_cards__cardId__task');
|
|
109
|
+
if (toolName) {
|
|
110
|
+
const result = await this.mcpClient.callTool(toolName, { cardId });
|
|
111
|
+
return parseMcpResult(result, toolName);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return this.api.get(`/api/agent/board/cards/${cardId}/task`);
|
|
115
|
+
}
|
|
116
|
+
async postResult(cardId, body) {
|
|
117
|
+
if (this.useMcp && this.mcpClient) {
|
|
118
|
+
const toolName = this.findTool('post', 'agent_board_cards__cardId__result');
|
|
119
|
+
if (toolName) {
|
|
120
|
+
const result = await this.mcpClient.callTool(toolName, { cardId, body });
|
|
121
|
+
if (result.isError) {
|
|
122
|
+
throw new Error(`MCP tool ${toolName} failed: ${result.content[0]?.text}`);
|
|
123
|
+
}
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
await this.api.post(`/api/agent/board/cards/${cardId}/result`, body);
|
|
128
|
+
}
|
|
129
|
+
async postArtifact(cardId, body) {
|
|
130
|
+
if (this.useMcp && this.mcpClient) {
|
|
131
|
+
const toolName = this.findTool('post', 'agent_board_cards__cardId__artifacts');
|
|
132
|
+
if (toolName) {
|
|
133
|
+
await this.mcpClient.callTool(toolName, { cardId, body });
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
await this.api.post(`/api/agent/board/cards/${cardId}/artifacts`, body);
|
|
138
|
+
}
|
|
139
|
+
async postComment(cardId, body) {
|
|
140
|
+
if (this.useMcp && this.mcpClient) {
|
|
141
|
+
const toolName = this.findTool('post', 'agent_board_cards__cardId__comments');
|
|
142
|
+
if (toolName) {
|
|
143
|
+
await this.mcpClient.callTool(toolName, { cardId, body });
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
await this.api.post(`/api/agent/board/cards/${cardId}/comments`, body);
|
|
148
|
+
}
|
|
149
|
+
async postMove(cardId) {
|
|
150
|
+
if (this.useMcp && this.mcpClient) {
|
|
151
|
+
const toolName = this.findTool('post', 'agent_board_cards__cardId__move');
|
|
152
|
+
if (toolName) {
|
|
153
|
+
await this.mcpClient.callTool(toolName, { cardId });
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
await this.api.post(`/api/agent/board/cards/${cardId}/move`);
|
|
158
|
+
}
|
|
159
|
+
// ─── Board event handling ────────────────────────────────────────────────
|
|
29
160
|
async onBoardEvent(event) {
|
|
30
161
|
switch (event.event) {
|
|
31
162
|
case 'card:entered':
|
|
@@ -46,7 +177,7 @@ export class BoardHandler {
|
|
|
46
177
|
}
|
|
47
178
|
async tryClaimCard(cardId) {
|
|
48
179
|
try {
|
|
49
|
-
const res = await this.
|
|
180
|
+
const res = await this.claimCard(cardId);
|
|
50
181
|
if (res.ok) {
|
|
51
182
|
this.boardState = { state: 'working', cardId };
|
|
52
183
|
console.log(`Claimed card: ${cardId}`);
|
|
@@ -70,7 +201,7 @@ export class BoardHandler {
|
|
|
70
201
|
async startTask(cardId) {
|
|
71
202
|
try {
|
|
72
203
|
// Fetch task prompt from backend (includes rendered workflow prompt)
|
|
73
|
-
const taskData = await this.
|
|
204
|
+
const taskData = await this.getTask(cardId);
|
|
74
205
|
this.currentCardProcessingId = taskData.cardProcessingId;
|
|
75
206
|
process.env.BOARD_CARD_ID = cardId;
|
|
76
207
|
if (taskData.mockActions) {
|
|
@@ -119,16 +250,16 @@ export class BoardHandler {
|
|
|
119
250
|
await new Promise((r) => setTimeout(r, action.ms ?? 1000));
|
|
120
251
|
break;
|
|
121
252
|
case 'artifact':
|
|
122
|
-
await this.
|
|
253
|
+
await this.postArtifact(cardId, action.body ?? {});
|
|
123
254
|
break;
|
|
124
255
|
case 'comment':
|
|
125
|
-
await this.
|
|
256
|
+
await this.postComment(cardId, action.body ?? {});
|
|
126
257
|
break;
|
|
127
258
|
case 'result':
|
|
128
|
-
await this.
|
|
259
|
+
await this.postResult(cardId, (action.body ?? {}));
|
|
129
260
|
break;
|
|
130
261
|
case 'move':
|
|
131
|
-
await this.
|
|
262
|
+
await this.postMove(cardId);
|
|
132
263
|
break;
|
|
133
264
|
}
|
|
134
265
|
console.log(`Mock action executed: ${action.type}`);
|
|
@@ -150,7 +281,7 @@ export class BoardHandler {
|
|
|
150
281
|
const body = { status };
|
|
151
282
|
if (error)
|
|
152
283
|
body.error = error;
|
|
153
|
-
await this.
|
|
284
|
+
await this.postResult(cardId, body);
|
|
154
285
|
console.log(`Reported result for card ${cardId}: ${status}`);
|
|
155
286
|
}
|
|
156
287
|
catch (err) {
|
|
@@ -160,7 +291,7 @@ export class BoardHandler {
|
|
|
160
291
|
}
|
|
161
292
|
async checkQueue(existingData) {
|
|
162
293
|
try {
|
|
163
|
-
const data = existingData ?? await this.
|
|
294
|
+
const data = existingData ?? (await this.getBoard());
|
|
164
295
|
const candidates = [];
|
|
165
296
|
for (const col of data.board.columns) {
|
|
166
297
|
if (!this.myColumnIds.includes(col.id))
|
|
@@ -195,5 +326,9 @@ export class BoardHandler {
|
|
|
195
326
|
getBoardId() {
|
|
196
327
|
return this.boardId;
|
|
197
328
|
}
|
|
329
|
+
/** Whether this handler is using MCP tools (vs HTTP fallback). */
|
|
330
|
+
isUsingMcp() {
|
|
331
|
+
return this.useMcp;
|
|
332
|
+
}
|
|
198
333
|
}
|
|
199
334
|
//# sourceMappingURL=board-handler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board-handler.js","sourceRoot":"","sources":["../../src/handlers/board-handler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,OAAO,YAAY;IACf,UAAU,GAAe,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACzD,WAAW,GAAa,EAAE,CAAC;IAC3B,OAAO,GAAkB,IAAI,CAAC;IAC9B,WAAW,GAAkB,IAAI,CAAC;IAClC,uBAAuB,GAAkB,IAAI,CAAC;IAC9C,GAAG,CAAW;IAEtB,YAAY,GAAa;QACvB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAc,CAAC;YACjE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;YAC1C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,OAAO,gBAAgB,IAAI,CAAC,WAAW,eAAe,IAAI,CAAC,WAAW,CAAC,MAAM,YAAY,CAAC,CAAC;YAElI,8DAA8D;YAC9D,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC5B,oEAAoE;YACpE,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACxF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAiB;QAClC,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC;YACpB,KAAK,cAAc;gBACjB,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;oBAAE,OAAO;gBAC1E,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,MAAM;oBAAE,OAAO;gBAC7C,sFAAsF;gBACtF,IAAI,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC9D,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACtC,MAAM;YACR,KAAK,cAAc,CAAC;YACpB,KAAK,YAAY,CAAC;YAClB,KAAK,gBAAgB;gBACnB,oBAAoB;gBACpB,MAAM;QACV,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,MAAM,QAAQ,CAAC,CAAC;YAC1E,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,IAAI,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;gBAC/C,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAC;gBACvC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC;iBAAM,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC9B,IAAI,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBAClD,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,0CAA0C,CAAC,CAAC;YACxE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBAClD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC9C,OAAO,CAAC,KAAK,CAAC,cAAc,MAAM,iBAAiB,GAAG,CAAC,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAClD,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAc;QAC5B,IAAI,CAAC;YACH,qEAAqE;YACrE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,0BAA0B,MAAM,OAAO,CAAa,CAAC;YACzF,IAAI,CAAC,uBAAuB,GAAG,QAAQ,CAAC,gBAAgB,CAAC;YAEzD,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC;YAEnC,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;gBACzB,oEAAoE;gBACpE,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,+CAA+C;gBAC/C,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;gBAC/B,IAAI,CAAC,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBAE/D,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBAC1C,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBAEnF,QAAQ,CAAC,WAAW,CAAC;wBACnB,UAAU,EAAE,YAAY;wBACxB,IAAI,EAAE,QAAQ,CAAC,MAAM;wBACrB,cAAc,EAAE,SAAS,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;wBAC/C,MAAM,EAAE,GAAG,EAAE;4BACX,YAAY,CAAC,SAAS,CAAC,CAAC;4BACxB,OAAO,EAAE,CAAC;wBACZ,CAAC;wBACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;4BACjB,YAAY,CAAC,SAAS,CAAC,CAAC;4BACxB,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;wBAC3B,CAAC;qBACF,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;wBACxB,YAAY,CAAC,SAAS,CAAC,CAAC;wBACxB,MAAM,CAAC,GAAG,CAAC,CAAC;oBACd,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC;YAED,uEAAuE;YACvE,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,aAAa,MAAM,UAAU,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACvF,4BAA4B;YAC5B,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5F,IAAI,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACpD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,MAAc,EAAE,OAAqB;QACpE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;gBACpB,KAAK,MAAM;oBACT,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;oBAC3D,MAAM;gBACR,KAAK,UAAU;oBACb,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,MAAM,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC/E,MAAM;gBACR,KAAK,SAAS;oBACZ,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,MAAM,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC9E,MAAM;gBACR,KAAK,QAAQ;oBACX,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,MAAM,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC5E,MAAM;gBACR,KAAK,MAAM;oBACT,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,MAAM,OAAO,CAAC,CAAC;oBAC7D,MAAM;YACV,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,yBAAyB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAEjC,+BAA+B;QAC/B,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QAEpC,IAAI,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9B,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClG,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,MAA8B,EAAE,KAAc;QACvF,IAAI,CAAC;YACH,MAAM,IAAI,GAA2B,EAAE,MAAM,EAAE,CAAC;YAChD,IAAI,KAAK;gBAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YAC9B,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,MAAM,SAAS,EAAE,IAAI,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,4BAA4B,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,gBAAgB,MAAM,UAAU,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1F,kEAAkE;QACpE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,YAAwB;QACvC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,YAAY,IAAK,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAe,CAAC;YACnF,MAAM,UAAU,GAAiE,EAAE,CAAC;YAEpF,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACrC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,SAAS;gBACjD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;oBAC7B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;wBAC1B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACxB,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAEpC,yFAAyF;YACzF,MAAM,aAAa,GAA2B,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;YAC1F,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACvB,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACtD,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACtD,IAAI,EAAE,KAAK,EAAE;oBAAE,OAAO,EAAE,GAAG,EAAE,CAAC;gBAC9B,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,UAAU,UAAU,CAAC,MAAM,iDAAiD,CAAC,CAAC;YAC1F,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"board-handler.js","sourceRoot":"","sources":["../../src/handlers/board-handler.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';
|
|
2
2
|
import { fileURLToPath } from 'node:url';
|
|
3
3
|
import { dirname, join } from 'node:path';
|
|
4
|
+
import fs from 'node:fs';
|
|
5
|
+
import os from 'node:os';
|
|
4
6
|
import { createConnection, subscribeToChannel, logCollector } from './connection.js';
|
|
5
7
|
import { startHeartbeat } from './heartbeat.js';
|
|
6
8
|
import { createAgentApi } from './api.js';
|
|
7
9
|
import { BoardHandler } from './handlers/board-handler.js';
|
|
10
|
+
import { McpBoardClient } from './mcp-client.js';
|
|
8
11
|
import { configureProvider, createProvider, getProvider } from './providers/index.js';
|
|
9
12
|
import { DEBUG } from './debug.js';
|
|
10
13
|
import { requireEnv, getBackendUrl } from './utils/env.js';
|
|
@@ -29,6 +32,33 @@ async function refreshConfigFromBootstrap() {
|
|
|
29
32
|
console.error('[startup] Failed to refresh config from bootstrap:', err instanceof Error ? err.message : err);
|
|
30
33
|
}
|
|
31
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Read MCP server config from openclaw.json (injected by bootstrap).
|
|
37
|
+
* Returns McpBoardClient if config is found, null otherwise.
|
|
38
|
+
*/
|
|
39
|
+
function createMcpClient() {
|
|
40
|
+
try {
|
|
41
|
+
const openclawDir = process.env.OPENCLAW_STATE_DIR?.trim() || join(os.homedir(), '.openclaw');
|
|
42
|
+
const configPath = join(openclawDir, 'openclaw.json');
|
|
43
|
+
if (!fs.existsSync(configPath))
|
|
44
|
+
return null;
|
|
45
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
46
|
+
const mcpConfig = config?.mcpServers?.['openclaw-cloud'];
|
|
47
|
+
if (!mcpConfig?.url)
|
|
48
|
+
return null;
|
|
49
|
+
const token = mcpConfig.headers?.Authorization?.replace('Bearer ', '') ?? '';
|
|
50
|
+
if (!token) {
|
|
51
|
+
console.warn('[mcp] No auth token in MCP config, skipping MCP client');
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
console.log(`[mcp] Found MCP config: ${mcpConfig.url}`);
|
|
55
|
+
return new McpBoardClient({ url: mcpConfig.url, token });
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
console.warn('[mcp] Failed to read MCP config:', err instanceof Error ? err.message : err);
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
32
62
|
export function main() {
|
|
33
63
|
createLockFile();
|
|
34
64
|
refreshConfigFromBootstrap().catch((err) => {
|
|
@@ -71,7 +101,8 @@ export function main() {
|
|
|
71
101
|
process.exit(1);
|
|
72
102
|
}
|
|
73
103
|
// Board handler — board subscription kept in outer scope for shutdown cleanup
|
|
74
|
-
const
|
|
104
|
+
const mcpClient = createMcpClient();
|
|
105
|
+
const boardHandler = new BoardHandler(api, mcpClient ?? undefined);
|
|
75
106
|
let boardSub = null;
|
|
76
107
|
// RACE-4: boardHandler.initialize() is async, so events published during initialization
|
|
77
108
|
// are missed. This is a known limitation: the initialize() call includes a checkQueue()
|
|
@@ -82,6 +113,9 @@ export function main() {
|
|
|
82
113
|
console.log('No board found for this agent, board handler dormant');
|
|
83
114
|
return;
|
|
84
115
|
}
|
|
116
|
+
// Subscribe to Centrifugo board channel as fallback.
|
|
117
|
+
// When MCP is connected, board events arrive via MCP notifications too,
|
|
118
|
+
// but RACE-2 guard in BoardHandler prevents duplicate claims.
|
|
85
119
|
const boardChannel = `board:${workspaceId}`;
|
|
86
120
|
boardSub = subscribeToChannel(client, boardChannel, { url, token, agentId, backendUrl, api, version: CONTROLLER_VERSION });
|
|
87
121
|
boardSub.on('publication', (ctx) => {
|
|
@@ -92,7 +126,7 @@ export function main() {
|
|
|
92
126
|
console.error('Board event handler error:', err instanceof Error ? err.message : err);
|
|
93
127
|
});
|
|
94
128
|
});
|
|
95
|
-
console.log(`Subscribed to board channel: ${boardChannel}`);
|
|
129
|
+
console.log(`Subscribed to board channel: ${boardChannel}${boardHandler.isUsingMcp() ? ' (MCP primary, Centrifugo fallback)' : ''}`);
|
|
96
130
|
}).catch((err) => {
|
|
97
131
|
console.error('Board handler init error:', err instanceof Error ? err.message : err);
|
|
98
132
|
});
|
|
@@ -107,6 +141,7 @@ export function main() {
|
|
|
107
141
|
console.log('Shutting down...');
|
|
108
142
|
heartbeatHandle.stop();
|
|
109
143
|
boardSub?.unsubscribe();
|
|
144
|
+
mcpClient?.disconnect();
|
|
110
145
|
getProvider()?.disconnect();
|
|
111
146
|
logCollector?.shutdown().catch(() => { });
|
|
112
147
|
client.disconnect();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface McpToolResult {
|
|
2
|
+
content: Array<{
|
|
3
|
+
type: string;
|
|
4
|
+
text?: string;
|
|
5
|
+
}>;
|
|
6
|
+
isError?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface McpBoardClientOptions {
|
|
9
|
+
url: string;
|
|
10
|
+
token: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* MCP client for communicating with the openclaw-cloud MCP server.
|
|
14
|
+
* Used by BoardHandler to call board tools and receive board event notifications.
|
|
15
|
+
*/
|
|
16
|
+
export declare class McpBoardClient {
|
|
17
|
+
private client;
|
|
18
|
+
private connected;
|
|
19
|
+
private onBoardEvent?;
|
|
20
|
+
private url;
|
|
21
|
+
private token;
|
|
22
|
+
constructor(options: McpBoardClientOptions);
|
|
23
|
+
setEventHandler(handler: (event: Record<string, unknown>) => void): void;
|
|
24
|
+
connect(): Promise<void>;
|
|
25
|
+
disconnect(): Promise<void>;
|
|
26
|
+
callTool(name: string, args?: Record<string, unknown>): Promise<McpToolResult>;
|
|
27
|
+
listTools(): Promise<string[]>;
|
|
28
|
+
isConnected(): boolean;
|
|
29
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
2
|
+
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
/**
|
|
5
|
+
* MCP client for communicating with the openclaw-cloud MCP server.
|
|
6
|
+
* Used by BoardHandler to call board tools and receive board event notifications.
|
|
7
|
+
*/
|
|
8
|
+
export class McpBoardClient {
|
|
9
|
+
client;
|
|
10
|
+
connected = false;
|
|
11
|
+
onBoardEvent;
|
|
12
|
+
url;
|
|
13
|
+
token;
|
|
14
|
+
constructor(options) {
|
|
15
|
+
this.url = options.url;
|
|
16
|
+
this.token = options.token;
|
|
17
|
+
this.client = new Client({ name: 'agent-controller', version: '1.0.0' }, { capabilities: {} });
|
|
18
|
+
}
|
|
19
|
+
setEventHandler(handler) {
|
|
20
|
+
this.onBoardEvent = handler;
|
|
21
|
+
}
|
|
22
|
+
async connect() {
|
|
23
|
+
const transport = new StreamableHTTPClientTransport(new URL(this.url), {
|
|
24
|
+
requestInit: {
|
|
25
|
+
headers: { Authorization: `Bearer ${this.token}` },
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
await this.client.connect(transport);
|
|
29
|
+
this.connected = true;
|
|
30
|
+
// Listen for board event notifications from MCP server.
|
|
31
|
+
// The backend dispatches these as method 'board/event' via McpSessionManager.
|
|
32
|
+
const BoardEventNotification = z.object({
|
|
33
|
+
method: z.literal('board/event'),
|
|
34
|
+
params: z.object({}).passthrough().optional(),
|
|
35
|
+
});
|
|
36
|
+
this.client.setNotificationHandler(BoardEventNotification, (notification) => {
|
|
37
|
+
if (this.onBoardEvent && notification.params) {
|
|
38
|
+
this.onBoardEvent(notification.params);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
console.log('[mcp] Client connected to', this.url);
|
|
42
|
+
}
|
|
43
|
+
async disconnect() {
|
|
44
|
+
if (this.connected) {
|
|
45
|
+
try {
|
|
46
|
+
await this.client.close();
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Ignore close errors
|
|
50
|
+
}
|
|
51
|
+
this.connected = false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async callTool(name, args = {}) {
|
|
55
|
+
if (!this.connected)
|
|
56
|
+
throw new Error('MCP client not connected');
|
|
57
|
+
const result = await this.client.callTool({ name, arguments: args });
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
async listTools() {
|
|
61
|
+
if (!this.connected)
|
|
62
|
+
throw new Error('MCP client not connected');
|
|
63
|
+
const result = await this.client.listTools();
|
|
64
|
+
return result.tools.map((t) => t.name);
|
|
65
|
+
}
|
|
66
|
+
isConnected() {
|
|
67
|
+
return this.connected;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=mcp-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"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"}
|
package/dist/skills/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export {};
|
package/dist/skills/index.js
CHANGED
|
@@ -1,22 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { fileURLToPath, URL } from 'node:url';
|
|
4
|
-
function readSkillFiles(skillName) {
|
|
5
|
-
const skillDir = path.join(path.dirname(fileURLToPath(new URL(import.meta.url))), skillName);
|
|
6
|
-
const files = {};
|
|
7
|
-
function walk(dir, prefix = '') {
|
|
8
|
-
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
9
|
-
const relPath = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
10
|
-
if (entry.isDirectory()) {
|
|
11
|
-
walk(path.join(dir, entry.name), relPath);
|
|
12
|
-
}
|
|
13
|
-
else {
|
|
14
|
-
files[relPath] = fs.readFileSync(path.join(dir, entry.name), 'utf-8');
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
walk(skillDir);
|
|
19
|
-
return files;
|
|
20
|
-
}
|
|
21
|
-
export const BOARD_TOOLS_SKILL = readSkillFiles('board-tools');
|
|
1
|
+
export {};
|
|
22
2
|
//# sourceMappingURL=index.js.map
|
package/dist/skills/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw-cloud/agent-controller",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0-beta.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"agent-controller": "bin/agent-controller.js"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"build": "tsc
|
|
10
|
+
"build": "tsc",
|
|
11
11
|
"prepublishOnly": "npm run build",
|
|
12
12
|
"test": "node --experimental-vm-modules node_modules/.bin/jest --forceExit",
|
|
13
13
|
"start": "node bin/agent-controller.js",
|
|
@@ -18,8 +18,10 @@
|
|
|
18
18
|
"bin/"
|
|
19
19
|
],
|
|
20
20
|
"dependencies": {
|
|
21
|
+
"@modelcontextprotocol/sdk": "^1.28.0",
|
|
21
22
|
"centrifuge": "^5.5.3",
|
|
22
|
-
"ws": "^8.19.0"
|
|
23
|
+
"ws": "^8.19.0",
|
|
24
|
+
"zod": "^4.3.6"
|
|
23
25
|
},
|
|
24
26
|
"devDependencies": {
|
|
25
27
|
"@semantic-release/git": "^10.0.1",
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: board-tools
|
|
3
|
-
description: Interact with the AI Factory board — create artifacts, post comments, report task results, move cards. Use when working on a board task (card), saving work output, communicating progress, or completing a task.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Board Tools
|
|
7
|
-
|
|
8
|
-
Tools for interacting with the AI Factory kanban board. Use these when working on a task from the board.
|
|
9
|
-
|
|
10
|
-
## Available Tools
|
|
11
|
-
|
|
12
|
-
### Report Result
|
|
13
|
-
When you finish a task or encounter an unrecoverable error:
|
|
14
|
-
```bash
|
|
15
|
-
# Success
|
|
16
|
-
board-result complete
|
|
17
|
-
|
|
18
|
-
# Failure
|
|
19
|
-
board-result fail "Error description here"
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
### Create Artifact
|
|
23
|
-
Save structured output from your work. Other agents in the pipeline will see these.
|
|
24
|
-
```bash
|
|
25
|
-
# Code artifact (PR, commit, branch)
|
|
26
|
-
board-artifact code "PR #42" --metadata '{"url":"https://gitlab.com/...","branch":"feat/oauth"}'
|
|
27
|
-
|
|
28
|
-
# Document
|
|
29
|
-
board-artifact document "Design Doc" --content "# Architecture\n\n..."
|
|
30
|
-
|
|
31
|
-
# Review
|
|
32
|
-
board-artifact review "Code Review" --content "LGTM. Minor issues:\n- Fix error handling in auth.ts"
|
|
33
|
-
|
|
34
|
-
# Decision
|
|
35
|
-
board-artifact decision "Strategy Decision" --content "We chose B2B focus because..."
|
|
36
|
-
|
|
37
|
-
# Link
|
|
38
|
-
board-artifact link "Staging Deploy" --metadata '{"url":"https://staging.example.com"}'
|
|
39
|
-
|
|
40
|
-
# Data (test results, metrics, etc.)
|
|
41
|
-
board-artifact data "Test Results" --content '{"passed":42,"failed":0}'
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### Post Comment
|
|
45
|
-
Add a human-readable comment to the card (visible in the UI):
|
|
46
|
-
```bash
|
|
47
|
-
board-comment "Completed the OAuth integration. PR ready for review."
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
### Move Card
|
|
51
|
-
Move the card to the next column (usually done after reporting result):
|
|
52
|
-
```bash
|
|
53
|
-
board-move
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
### List Artifacts
|
|
57
|
-
See what previous agents/steps have produced:
|
|
58
|
-
```bash
|
|
59
|
-
board-artifacts
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
## Typical Workflow
|
|
63
|
-
|
|
64
|
-
1. Read the task prompt (provided automatically)
|
|
65
|
-
2. Review previous artifacts if any (provided in prompt, or run `board-artifacts`)
|
|
66
|
-
3. Do the work
|
|
67
|
-
4. Save outputs as artifacts (`board-artifact`)
|
|
68
|
-
5. Post a summary comment (`board-comment`)
|
|
69
|
-
6. Report result (`board-result complete`)
|
|
70
|
-
7. Move the card (`board-move`)
|
|
71
|
-
|
|
72
|
-
## Notes
|
|
73
|
-
- All scripts auto-detect the card ID from the environment (set by the board handler)
|
|
74
|
-
- Authentication is handled automatically via agent token
|
|
75
|
-
- Artifacts persist on the card — visible to all subsequent agents and in the UI
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Create artifact: board-artifact <type> <name> [--content <text>] [--metadata <json>]
|
|
3
|
-
set -euo pipefail
|
|
4
|
-
|
|
5
|
-
CARD_ID="${BOARD_CARD_ID:?BOARD_CARD_ID not set}"
|
|
6
|
-
API_BASE="${BACKEND_URL:?BACKEND_URL not set}"
|
|
7
|
-
TOKEN="${AGENT_TOKEN:?AGENT_TOKEN not set}"
|
|
8
|
-
|
|
9
|
-
TYPE="${1:?Usage: board-artifact <type> <name> [--content <text>] [--metadata <json>]}"
|
|
10
|
-
NAME="${2:?Usage: board-artifact <type> <name> [--content <text>] [--metadata <json>]}"
|
|
11
|
-
shift 2
|
|
12
|
-
|
|
13
|
-
CONTENT=""
|
|
14
|
-
METADATA="{}"
|
|
15
|
-
|
|
16
|
-
while [[ $# -gt 0 ]]; do
|
|
17
|
-
case "$1" in
|
|
18
|
-
--content)
|
|
19
|
-
CONTENT="$2"
|
|
20
|
-
shift 2
|
|
21
|
-
;;
|
|
22
|
-
--metadata)
|
|
23
|
-
METADATA="$2"
|
|
24
|
-
shift 2
|
|
25
|
-
;;
|
|
26
|
-
*)
|
|
27
|
-
echo "Unknown option: $1" >&2
|
|
28
|
-
exit 1
|
|
29
|
-
;;
|
|
30
|
-
esac
|
|
31
|
-
done
|
|
32
|
-
|
|
33
|
-
# Build JSON payload using jq if available, otherwise manual construction
|
|
34
|
-
if command -v jq &>/dev/null; then
|
|
35
|
-
BODY=$(jq -n \
|
|
36
|
-
--arg type "$TYPE" \
|
|
37
|
-
--arg name "$NAME" \
|
|
38
|
-
--arg content "$CONTENT" \
|
|
39
|
-
--argjson metadata "$METADATA" \
|
|
40
|
-
'{type: $type, name: $name, content: (if $content == "" then null else $content end), metadata: $metadata}')
|
|
41
|
-
else
|
|
42
|
-
if [ -z "$CONTENT" ]; then
|
|
43
|
-
BODY="{\"type\":\"$TYPE\",\"name\":\"$NAME\",\"content\":null,\"metadata\":$METADATA}"
|
|
44
|
-
else
|
|
45
|
-
# Escape content for JSON
|
|
46
|
-
ESC_CONTENT=$(printf '%s' "$CONTENT" | sed 's/\\/\\\\/g; s/"/\\"/g')
|
|
47
|
-
BODY="{\"type\":\"$TYPE\",\"name\":\"$NAME\",\"content\":\"$ESC_CONTENT\",\"metadata\":$METADATA}"
|
|
48
|
-
fi
|
|
49
|
-
fi
|
|
50
|
-
|
|
51
|
-
curl -sf -X POST "${API_BASE}/api/agent/board/cards/${CARD_ID}/artifacts" \
|
|
52
|
-
-H "AgentToken: ${TOKEN}" \
|
|
53
|
-
-H "Content-Type: application/json" \
|
|
54
|
-
-d "$BODY"
|
|
55
|
-
|
|
56
|
-
echo "Artifact created: $TYPE / $NAME"
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# List artifacts: board-artifacts
|
|
3
|
-
set -euo pipefail
|
|
4
|
-
|
|
5
|
-
CARD_ID="${BOARD_CARD_ID:?BOARD_CARD_ID not set}"
|
|
6
|
-
API_BASE="${BACKEND_URL:?BACKEND_URL not set}"
|
|
7
|
-
TOKEN="${AGENT_TOKEN:?AGENT_TOKEN not set}"
|
|
8
|
-
|
|
9
|
-
RESPONSE=$(curl -sf "${API_BASE}/api/agent/board/cards/${CARD_ID}/artifacts" \
|
|
10
|
-
-H "AgentToken: ${TOKEN}")
|
|
11
|
-
|
|
12
|
-
if command -v jq &>/dev/null; then
|
|
13
|
-
echo "$RESPONSE" | jq -r '.[] | "[\(.type)] \(.name) (step \(.stepIndex // "n/a")): \(.content // (.metadata | tostring))"'
|
|
14
|
-
else
|
|
15
|
-
echo "$RESPONSE"
|
|
16
|
-
fi
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Post comment: board-comment <message>
|
|
3
|
-
set -euo pipefail
|
|
4
|
-
|
|
5
|
-
CARD_ID="${BOARD_CARD_ID:?BOARD_CARD_ID not set}"
|
|
6
|
-
API_BASE="${BACKEND_URL:?BACKEND_URL not set}"
|
|
7
|
-
TOKEN="${AGENT_TOKEN:?AGENT_TOKEN not set}"
|
|
8
|
-
|
|
9
|
-
MESSAGE="${1:?Usage: board-comment <message>}"
|
|
10
|
-
|
|
11
|
-
if command -v jq &>/dev/null; then
|
|
12
|
-
BODY=$(jq -n --arg content "$MESSAGE" '{content: $content}')
|
|
13
|
-
else
|
|
14
|
-
ESC_MSG=$(printf '%s' "$MESSAGE" | sed 's/\\/\\\\/g; s/"/\\"/g')
|
|
15
|
-
BODY="{\"content\":\"$ESC_MSG\"}"
|
|
16
|
-
fi
|
|
17
|
-
|
|
18
|
-
curl -sf -X POST "${API_BASE}/api/agent/board/cards/${CARD_ID}/comments" \
|
|
19
|
-
-H "AgentToken: ${TOKEN}" \
|
|
20
|
-
-H "Content-Type: application/json" \
|
|
21
|
-
-d "$BODY"
|
|
22
|
-
|
|
23
|
-
echo "Comment posted"
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Move card to next column: board-move
|
|
3
|
-
set -euo pipefail
|
|
4
|
-
|
|
5
|
-
CARD_ID="${BOARD_CARD_ID:?BOARD_CARD_ID not set}"
|
|
6
|
-
API_BASE="${BACKEND_URL:?BACKEND_URL not set}"
|
|
7
|
-
TOKEN="${AGENT_TOKEN:?AGENT_TOKEN not set}"
|
|
8
|
-
|
|
9
|
-
curl -sf -X POST "${API_BASE}/api/agent/board/cards/${CARD_ID}/move" \
|
|
10
|
-
-H "AgentToken: ${TOKEN}" \
|
|
11
|
-
-H "Content-Type: application/json"
|
|
12
|
-
|
|
13
|
-
echo "Card moved to next column"
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Report task result: board-result <complete|fail> [error message]
|
|
3
|
-
set -euo pipefail
|
|
4
|
-
|
|
5
|
-
CARD_ID="${BOARD_CARD_ID:?BOARD_CARD_ID not set}"
|
|
6
|
-
API_BASE="${BACKEND_URL:?BACKEND_URL not set}"
|
|
7
|
-
TOKEN="${AGENT_TOKEN:?AGENT_TOKEN not set}"
|
|
8
|
-
|
|
9
|
-
STATUS="${1:?Usage: board-result <complete|fail> [error message]}"
|
|
10
|
-
shift || true
|
|
11
|
-
|
|
12
|
-
case "$STATUS" in
|
|
13
|
-
complete|completed)
|
|
14
|
-
BODY='{"status":"completed"}'
|
|
15
|
-
;;
|
|
16
|
-
fail|failed)
|
|
17
|
-
ERROR_MSG="${1:-Agent reported failure}"
|
|
18
|
-
BODY="{\"status\":\"failed\",\"error\":\"$ERROR_MSG\"}"
|
|
19
|
-
;;
|
|
20
|
-
needs-input|needs_input|blocked)
|
|
21
|
-
INPUT_MSG="${1:-Agent needs clarification}"
|
|
22
|
-
BODY="{\"status\":\"needs_input\",\"message\":\"$INPUT_MSG\"}"
|
|
23
|
-
;;
|
|
24
|
-
*)
|
|
25
|
-
echo "Usage: board-result <complete|fail|needs-input> [message]" >&2
|
|
26
|
-
exit 1
|
|
27
|
-
;;
|
|
28
|
-
esac
|
|
29
|
-
|
|
30
|
-
curl -sf -X POST "${API_BASE}/api/agent/board/cards/${CARD_ID}/result" \
|
|
31
|
-
-H "AgentToken: ${TOKEN}" \
|
|
32
|
-
-H "Content-Type: application/json" \
|
|
33
|
-
-d "$BODY"
|
|
34
|
-
|
|
35
|
-
echo "Result reported: $STATUS"
|