@truefoundry/trueforge-ui 0.3.0-rc.1 → 0.3.0-rc.11
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/CHANGELOG.md +156 -0
- package/README.md +23 -8
- package/dist/{AgentCodeSnippets-NZOFJE57.js → AgentCodeSnippets-CHDVZHHK.js} +38 -23
- package/dist/AgentCodeSnippets-CHDVZHHK.js.map +1 -0
- package/dist/AgentMetricChart-6RGWFMJE.js +15 -0
- package/dist/AgentOverview-3LJZ6MO7.js +311 -0
- package/dist/AgentOverview-3LJZ6MO7.js.map +1 -0
- package/dist/{AgentSessionEventTimeline-26Z6IB3B.js → AgentSessionEventTimeline-5GOJKT7D.js} +19 -10
- package/dist/AgentSessionEventTimeline-5GOJKT7D.js.map +1 -0
- package/dist/{AgentSessionEventTimelineChart-CGCU7WBK.js → AgentSessionEventTimelineChart-UYG3JQMP.js} +144 -57
- package/dist/AgentSessionEventTimelineChart-UYG3JQMP.js.map +1 -0
- package/dist/{AgentSessions-3MPDZASK.js → AgentSessions-KUABCQ4W.js} +140 -27
- package/dist/AgentSessions-KUABCQ4W.js.map +1 -0
- package/dist/{ConnectorSettings-MXFRWWR6.js → ConnectorSettings-PED5C2P7.js} +162 -126
- package/dist/ConnectorSettings-PED5C2P7.js.map +1 -0
- package/dist/{DockLayout-LM4AFMFY.js → DockLayout-ACM7BVIH.js} +10 -10
- package/dist/{DrawerLayout-JR3O6RRB.js → DrawerLayout-SGBYRKHI.js} +14 -12
- package/dist/DrawerLayout-SGBYRKHI.js.map +1 -0
- package/dist/{ModelSettings-G7IFNC2Y.js → ModelSettings-GJTVFXFY.js} +22 -28
- package/dist/ModelSettings-GJTVFXFY.js.map +1 -0
- package/dist/OpenUiFenceBlock-MJTC2VJ5.js +9 -0
- package/dist/{SandboxSettings-NXAANMAX.js → SandboxSettings-VETQ7UPE.js} +17 -21
- package/dist/SandboxSettings-VETQ7UPE.js.map +1 -0
- package/dist/SchedulesPage-LHJ3U2VM.js +15 -0
- package/dist/{SettingsBuilder-L34IQ56S.js → SettingsBuilder-5ZCU66FF.js} +9 -9
- package/dist/{SettingsBuilder-L34IQ56S.js.map → SettingsBuilder-5ZCU66FF.js.map} +1 -1
- package/dist/{ShellRouteSync-CEBETGEJ.js → ShellRouteSync-SJXFKUAJ.js} +171 -26
- package/dist/ShellRouteSync-SJXFKUAJ.js.map +1 -0
- package/dist/{SidebarLayout-A2HJPPHS.js → SidebarLayout-TR5CAB6Q.js} +80 -58
- package/dist/SidebarLayout-TR5CAB6Q.js.map +1 -0
- package/dist/{SkillSettings-FGGMSUNO.js → SkillSettings-TRTY2YH3.js} +24 -22
- package/dist/SkillSettings-TRTY2YH3.js.map +1 -0
- package/dist/{TrueForgeUIWithRouter-MZVJWJMB.js → TrueForgeUIWithRouter-GZUSRZIR.js} +9 -9
- package/dist/{WidgetLayout-6QM45OQQ.js → WidgetLayout-2TM6I4LJ.js} +10 -10
- package/dist/{chunk-U7KURWW3.js → chunk-2GIZY3JJ.js} +276 -54
- package/dist/chunk-2GIZY3JJ.js.map +1 -0
- package/dist/{chunk-ZKNUMH2M.js → chunk-2MUK3SMR.js} +13 -11
- package/dist/chunk-2MUK3SMR.js.map +1 -0
- package/dist/{chunk-WVE3F724.js → chunk-2QTH6JHX.js} +21 -4
- package/dist/chunk-2QTH6JHX.js.map +1 -0
- package/dist/{chunk-XAU7QFG3.js → chunk-5N5V7YLO.js} +72 -256
- package/dist/chunk-5N5V7YLO.js.map +1 -0
- package/dist/{chunk-CYHJDKFB.js → chunk-75YEQUUD.js} +189 -52
- package/dist/chunk-75YEQUUD.js.map +1 -0
- package/dist/{chunk-QC42MLAK.js → chunk-7AAO4UDQ.js} +4 -3
- package/dist/chunk-7AAO4UDQ.js.map +1 -0
- package/dist/{chunk-M62XY4NC.js → chunk-BXG6XN2S.js} +235 -108
- package/dist/chunk-BXG6XN2S.js.map +1 -0
- package/dist/chunk-GKXDRULM.js +587 -0
- package/dist/chunk-GKXDRULM.js.map +1 -0
- package/dist/{chunk-ZTMKFZQ3.js → chunk-OH357IHR.js} +5572 -3367
- package/dist/chunk-OH357IHR.js.map +1 -0
- package/dist/{chunk-DMMZSZTN.js → chunk-P6MZDITS.js} +60 -16
- package/dist/chunk-P6MZDITS.js.map +1 -0
- package/dist/{chunk-MPNSO7E6.js → chunk-SLMFEG7X.js} +2 -2
- package/dist/chunk-T6QQV5LK.js +238 -0
- package/dist/chunk-T6QQV5LK.js.map +1 -0
- package/dist/{chunk-6O6FWUDW.js → chunk-UWLL327M.js} +641 -388
- package/dist/chunk-UWLL327M.js.map +1 -0
- package/dist/{chunk-FJW36PD7.js → chunk-VAOCM3QQ.js} +28 -24
- package/dist/chunk-VAOCM3QQ.js.map +1 -0
- package/dist/chunk-Y7O6CMC7.js +517 -0
- package/dist/chunk-Y7O6CMC7.js.map +1 -0
- package/dist/{createTrueFoundryServer-CmZnBh_l.d.ts → createTrueFoundryServer-B_FYhSdn.d.ts} +8 -5
- package/dist/index.d.ts +377 -108
- package/dist/index.js +69 -488
- package/dist/index.js.map +1 -1
- package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +49 -14
- package/dist/plugins/trueforge-agent-server-adapter/index.js +161 -60
- package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +5 -4
- package/dist/AgentCodeSnippets-NZOFJE57.js.map +0 -1
- package/dist/AgentMetricChart-JPU3MFQ2.js +0 -15
- package/dist/AgentOverview-EEBHJC32.js +0 -167
- package/dist/AgentOverview-EEBHJC32.js.map +0 -1
- package/dist/AgentSessionEventTimeline-26Z6IB3B.js.map +0 -1
- package/dist/AgentSessionEventTimelineChart-CGCU7WBK.js.map +0 -1
- package/dist/AgentSessions-3MPDZASK.js.map +0 -1
- package/dist/ConnectorSettings-MXFRWWR6.js.map +0 -1
- package/dist/DrawerLayout-JR3O6RRB.js.map +0 -1
- package/dist/ModelSettings-G7IFNC2Y.js.map +0 -1
- package/dist/OpenUiFenceBlock-2TV5TQ6P.js +0 -9
- package/dist/SandboxSettings-NXAANMAX.js.map +0 -1
- package/dist/SchedulesPage-KKLUDO6B.js +0 -15
- package/dist/ShellRouteSync-CEBETGEJ.js.map +0 -1
- package/dist/SidebarLayout-A2HJPPHS.js.map +0 -1
- package/dist/SkillSettings-FGGMSUNO.js.map +0 -1
- package/dist/chunk-2XPPBEYF.js +0 -74
- package/dist/chunk-2XPPBEYF.js.map +0 -1
- package/dist/chunk-6O6FWUDW.js.map +0 -1
- package/dist/chunk-7Z2C2K7F.js +0 -578
- package/dist/chunk-7Z2C2K7F.js.map +0 -1
- package/dist/chunk-CYHJDKFB.js.map +0 -1
- package/dist/chunk-DMMZSZTN.js.map +0 -1
- package/dist/chunk-FJW36PD7.js.map +0 -1
- package/dist/chunk-M62XY4NC.js.map +0 -1
- package/dist/chunk-QC42MLAK.js.map +0 -1
- package/dist/chunk-SFZNIO6U.js +0 -18
- package/dist/chunk-SFZNIO6U.js.map +0 -1
- package/dist/chunk-U7KURWW3.js.map +0 -1
- package/dist/chunk-WVE3F724.js.map +0 -1
- package/dist/chunk-XAU7QFG3.js.map +0 -1
- package/dist/chunk-ZKNUMH2M.js.map +0 -1
- package/dist/chunk-ZTMKFZQ3.js.map +0 -1
- /package/dist/{AgentMetricChart-JPU3MFQ2.js.map → AgentMetricChart-6RGWFMJE.js.map} +0 -0
- /package/dist/{DockLayout-LM4AFMFY.js.map → DockLayout-ACM7BVIH.js.map} +0 -0
- /package/dist/{OpenUiFenceBlock-2TV5TQ6P.js.map → OpenUiFenceBlock-MJTC2VJ5.js.map} +0 -0
- /package/dist/{SchedulesPage-KKLUDO6B.js.map → SchedulesPage-LHJ3U2VM.js.map} +0 -0
- /package/dist/{TrueForgeUIWithRouter-MZVJWJMB.js.map → TrueForgeUIWithRouter-GZUSRZIR.js.map} +0 -0
- /package/dist/{WidgetLayout-6QM45OQQ.js.map → WidgetLayout-2TM6I4LJ.js.map} +0 -0
- /package/dist/{chunk-MPNSO7E6.js.map → chunk-SLMFEG7X.js.map} +0 -0
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createTrueFoundryServer
|
|
3
|
-
} from "../../chunk-
|
|
4
|
-
import {
|
|
5
|
-
drainListPages
|
|
6
|
-
} from "../../chunk-SFZNIO6U.js";
|
|
3
|
+
} from "../../chunk-7AAO4UDQ.js";
|
|
7
4
|
import {
|
|
8
5
|
readSessionIsCreateAgent
|
|
9
6
|
} from "../../chunk-RDXBMTP5.js";
|
|
@@ -100,15 +97,18 @@ function toUiTerminalTurnState(state) {
|
|
|
100
97
|
}
|
|
101
98
|
}
|
|
102
99
|
function toUiSessionEvent(event) {
|
|
100
|
+
if (event.type === "turn.update") return void 0;
|
|
103
101
|
if (event.type !== "turn.done") return { ...event };
|
|
104
102
|
return { ...event, state: toUiTerminalTurnState(event.state) };
|
|
105
103
|
}
|
|
106
104
|
function toUiStreamingEvent(event) {
|
|
105
|
+
if (event.type === "turn.update") return void 0;
|
|
107
106
|
if (event.type !== "turn.done") return { ...event };
|
|
108
107
|
return { ...event, state: toUiTerminalTurnState(event.state) };
|
|
109
108
|
}
|
|
110
109
|
function toUiEventItem(item) {
|
|
111
|
-
|
|
110
|
+
const event = toUiSessionEvent(item.event);
|
|
111
|
+
return event === void 0 ? void 0 : { turnId: item.turnId, event };
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
// src/plugins/trueforge-agent-server-adapter/chatServer.ts
|
|
@@ -116,7 +116,10 @@ function toUiMcpServer(server) {
|
|
|
116
116
|
return server;
|
|
117
117
|
}
|
|
118
118
|
function toUiSkill(skill) {
|
|
119
|
-
return { name: skill.name };
|
|
119
|
+
return { name: skill.name, preload: skill.preload === true };
|
|
120
|
+
}
|
|
121
|
+
function toHarnessSkill(skill) {
|
|
122
|
+
return { name: skill.id ?? skill.name, preload: skill.preload === true };
|
|
120
123
|
}
|
|
121
124
|
function toHarnessAgentSpec(spec) {
|
|
122
125
|
const { skills, mcpServers, ...rest } = spec;
|
|
@@ -132,7 +135,7 @@ function toHarnessAgentSpec(spec) {
|
|
|
132
135
|
return server;
|
|
133
136
|
})
|
|
134
137
|
},
|
|
135
|
-
...skills === void 0 ? {} : { skills: skills.map(
|
|
138
|
+
...skills === void 0 ? {} : { skills: skills.map(toHarnessSkill) }
|
|
136
139
|
};
|
|
137
140
|
}
|
|
138
141
|
function toUiAgentSpec(spec) {
|
|
@@ -177,7 +180,11 @@ function toUiTurn(turn) {
|
|
|
177
180
|
};
|
|
178
181
|
}
|
|
179
182
|
function toListResult(page, map) {
|
|
180
|
-
const data =
|
|
183
|
+
const data = [];
|
|
184
|
+
for (const item of page.data) {
|
|
185
|
+
const mapped = map(item);
|
|
186
|
+
if (mapped !== void 0) data.push(mapped);
|
|
187
|
+
}
|
|
181
188
|
const token = page.response.pagination.nextPageToken;
|
|
182
189
|
return {
|
|
183
190
|
data,
|
|
@@ -237,7 +244,8 @@ function createHarnessChatServer(options = {}) {
|
|
|
237
244
|
...request.limit === void 0 ? {} : { limit: request.limit },
|
|
238
245
|
...request.order === void 0 ? {} : { order: request.order },
|
|
239
246
|
...request.pageToken === void 0 ? {} : { pageToken: request.pageToken },
|
|
240
|
-
...request.agentId === void 0 || request.agentId.length === 0 ? {} : { agentId: request.agentId }
|
|
247
|
+
...request.agentId === void 0 || request.agentId.length === 0 ? {} : { agentId: request.agentId },
|
|
248
|
+
...request.createdByMe === void 0 ? {} : { createdByMe: request.createdByMe }
|
|
241
249
|
});
|
|
242
250
|
return toListResult(page, toUiSession);
|
|
243
251
|
},
|
|
@@ -265,10 +273,13 @@ function createHarnessChatServer(options = {}) {
|
|
|
265
273
|
});
|
|
266
274
|
let fallbackSequence = 0;
|
|
267
275
|
for await (const item of stream.withMetadata()) {
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
276
|
+
const event = toUiStreamingEvent(item.data);
|
|
277
|
+
if (event !== void 0) {
|
|
278
|
+
yield {
|
|
279
|
+
sequenceNumber: sequenceNumber(item.id, fallbackSequence),
|
|
280
|
+
event
|
|
281
|
+
};
|
|
282
|
+
}
|
|
272
283
|
fallbackSequence += 1;
|
|
273
284
|
}
|
|
274
285
|
},
|
|
@@ -283,10 +294,13 @@ function createHarnessChatServer(options = {}) {
|
|
|
283
294
|
});
|
|
284
295
|
let fallbackSequence = 0;
|
|
285
296
|
for await (const item of stream.withMetadata()) {
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
297
|
+
const event = toUiStreamingEvent(item.data);
|
|
298
|
+
if (event !== void 0) {
|
|
299
|
+
yield {
|
|
300
|
+
sequenceNumber: sequenceNumber(item.id, fallbackSequence),
|
|
301
|
+
event
|
|
302
|
+
};
|
|
303
|
+
}
|
|
290
304
|
fallbackSequence += 1;
|
|
291
305
|
}
|
|
292
306
|
},
|
|
@@ -326,12 +340,13 @@ function toSessionListEntry(session) {
|
|
|
326
340
|
isMutable: session.agent.type === "inline",
|
|
327
341
|
metrics: {
|
|
328
342
|
totalTurns: session.metrics.totalTurns,
|
|
329
|
-
totalCostInUsd: session.metrics.totalCostInUsd,
|
|
343
|
+
...session.metrics.totalCostInUsd == null ? {} : { totalCostInUsd: session.metrics.totalCostInUsd },
|
|
330
344
|
totalDurationMs: session.metrics.totalDurationMs
|
|
331
345
|
},
|
|
332
346
|
...session.title === null ? {} : { title: session.title },
|
|
333
347
|
...session.agent.type === "reference" && session.agent.name !== null ? { agentName: session.agent.name } : {},
|
|
334
|
-
...session.agent.type === "inline" ? { agentSpec: toUiAgentSpec(session.agent.spec) } : {}
|
|
348
|
+
...session.agent.type === "inline" ? { agentSpec: toUiAgentSpec(session.agent.spec) } : {},
|
|
349
|
+
...session.source?.type === "schedule" ? { sourceType: session.source.type } : {}
|
|
335
350
|
};
|
|
336
351
|
}
|
|
337
352
|
function createHarnessAgentSessionsServer(options = {}) {
|
|
@@ -342,11 +357,16 @@ function createHarnessAgentSessionsServer(options = {}) {
|
|
|
342
357
|
return {
|
|
343
358
|
agentId: data.id,
|
|
344
359
|
name: data.name,
|
|
360
|
+
description: data.description,
|
|
345
361
|
agentSpec: toUiAgentSpec(data.manifest)
|
|
346
362
|
};
|
|
347
363
|
},
|
|
348
364
|
async getCodeSnippets({ agentId }) {
|
|
349
|
-
const
|
|
365
|
+
const absoluteBaseUrl = resolveTrueForgeBaseUrl(options.baseUrl ?? "/").replace(/\/$/, "");
|
|
366
|
+
const { data } = await client.internal.agents.getCodeSnippets(
|
|
367
|
+
agentId,
|
|
368
|
+
/^https?:\/\//i.test(absoluteBaseUrl) ? { baseUrl: absoluteBaseUrl } : void 0
|
|
369
|
+
);
|
|
350
370
|
return data.snippets;
|
|
351
371
|
},
|
|
352
372
|
async listSessions(requestParams = {}) {
|
|
@@ -356,7 +376,8 @@ function createHarnessAgentSessionsServer(options = {}) {
|
|
|
356
376
|
...requestParams.pageToken === void 0 ? {} : { pageToken: requestParams.pageToken },
|
|
357
377
|
...requestParams.startTimestamp === void 0 ? {} : { startTimestamp: parseIsoDate(requestParams.startTimestamp) },
|
|
358
378
|
...requestParams.endTimestamp === void 0 ? {} : { endTimestamp: parseIsoDate(requestParams.endTimestamp) },
|
|
359
|
-
...requestParams.agentId === void 0 || requestParams.agentId.length === 0 ? {} : { agentId: requestParams.agentId }
|
|
379
|
+
...requestParams.agentId === void 0 || requestParams.agentId.length === 0 ? {} : { agentId: requestParams.agentId },
|
|
380
|
+
...requestParams.createdByMe === void 0 ? {} : { createdByMe: requestParams.createdByMe }
|
|
360
381
|
});
|
|
361
382
|
return toListResult(page, toSessionListEntry);
|
|
362
383
|
},
|
|
@@ -370,6 +391,43 @@ function createHarnessAgentSessionsServer(options = {}) {
|
|
|
370
391
|
};
|
|
371
392
|
}
|
|
372
393
|
|
|
394
|
+
// src/plugins/trueforge-agent-server-adapter/agentsList.ts
|
|
395
|
+
var AGENTS_PAGE_DEFAULT = 50;
|
|
396
|
+
var AGENTS_PAGE_LIMIT = 100;
|
|
397
|
+
function clampAgentsPageSize(size) {
|
|
398
|
+
return Math.min(Math.max(size, 1), AGENTS_PAGE_LIMIT);
|
|
399
|
+
}
|
|
400
|
+
async function listAgentsPage({
|
|
401
|
+
client,
|
|
402
|
+
limit,
|
|
403
|
+
offset = 0,
|
|
404
|
+
agentName
|
|
405
|
+
}) {
|
|
406
|
+
const pageSize = clampAgentsPageSize(limit);
|
|
407
|
+
const start = Math.max(0, offset);
|
|
408
|
+
const page = await client.agents.list({
|
|
409
|
+
limit: pageSize,
|
|
410
|
+
...agentName === void 0 ? {} : { agentName }
|
|
411
|
+
});
|
|
412
|
+
let at = 0;
|
|
413
|
+
while (at < start) {
|
|
414
|
+
if (!page.hasNextPage()) return [];
|
|
415
|
+
await page.getNextPage();
|
|
416
|
+
at += pageSize;
|
|
417
|
+
}
|
|
418
|
+
return [...page.data];
|
|
419
|
+
}
|
|
420
|
+
async function drainAgentsList(client) {
|
|
421
|
+
const items = [];
|
|
422
|
+
const page = await client.agents.list({ limit: AGENTS_PAGE_DEFAULT });
|
|
423
|
+
for (; ; ) {
|
|
424
|
+
items.push(...page.data);
|
|
425
|
+
if (!page.hasNextPage()) break;
|
|
426
|
+
await page.getNextPage();
|
|
427
|
+
}
|
|
428
|
+
return items;
|
|
429
|
+
}
|
|
430
|
+
|
|
373
431
|
// src/plugins/trueforge-agent-server-adapter/catalogs/connectorCatalog.ts
|
|
374
432
|
var DEFAULT_API_KEY_HEADER = "Authorization";
|
|
375
433
|
function toUiAuthPublic(auth) {
|
|
@@ -410,10 +468,21 @@ function toUiCatalogEntry(server) {
|
|
|
410
468
|
auth: toUiAuthPublic(server.auth)
|
|
411
469
|
};
|
|
412
470
|
}
|
|
471
|
+
function toUiToolAnnotations(value) {
|
|
472
|
+
if (typeof value !== "object" || value === null) return void 0;
|
|
473
|
+
const readOnlyHint = Reflect.get(value, "readOnlyHint");
|
|
474
|
+
const destructiveHint = Reflect.get(value, "destructiveHint");
|
|
475
|
+
const annotations = {
|
|
476
|
+
...typeof readOnlyHint === "boolean" ? { readOnlyHint } : {},
|
|
477
|
+
...typeof destructiveHint === "boolean" ? { destructiveHint } : {}
|
|
478
|
+
};
|
|
479
|
+
return Object.keys(annotations).length > 0 ? annotations : void 0;
|
|
480
|
+
}
|
|
413
481
|
function toUiTool(tool) {
|
|
414
482
|
const name = typeof tool.name === "string" && tool.name !== "" ? tool.name : "tool";
|
|
415
483
|
const description = typeof tool.description === "string" ? tool.description : "";
|
|
416
|
-
|
|
484
|
+
const annotations = toUiToolAnnotations(Reflect.get(tool, "annotations"));
|
|
485
|
+
return annotations === void 0 ? { id: name, name, description } : { id: name, name, description, annotations };
|
|
417
486
|
}
|
|
418
487
|
function toUiConnector(server) {
|
|
419
488
|
const auth = toUiAuthPublic(server.manifest.auth);
|
|
@@ -554,17 +623,9 @@ async function listModels(client) {
|
|
|
554
623
|
const body = await client.models.list();
|
|
555
624
|
return body.data;
|
|
556
625
|
}
|
|
557
|
-
async function listConfiguredMcpServersPage(client, req = {}) {
|
|
558
|
-
const page = await client.mcpServers.list({
|
|
559
|
-
...req.limit === void 0 ? {} : { limit: req.limit },
|
|
560
|
-
...req.pageToken === void 0 ? {} : { pageToken: req.pageToken }
|
|
561
|
-
});
|
|
562
|
-
return toListResult(page, (server) => server);
|
|
563
|
-
}
|
|
564
626
|
async function listConfiguredMcpServers(client) {
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
});
|
|
627
|
+
const body = await client.mcpServers.list();
|
|
628
|
+
return body.data;
|
|
568
629
|
}
|
|
569
630
|
async function listSkills(client) {
|
|
570
631
|
const body = await client.skills.list();
|
|
@@ -609,7 +670,9 @@ function toLibraryEntry(agent) {
|
|
|
609
670
|
return {
|
|
610
671
|
name: agent.name,
|
|
611
672
|
agentId: agent.id,
|
|
612
|
-
|
|
673
|
+
description: agent.description,
|
|
674
|
+
agentSpec: toUiAgentSpec(agent.manifest),
|
|
675
|
+
createdBySubject: agent.createdBySubject
|
|
613
676
|
};
|
|
614
677
|
}
|
|
615
678
|
function createHarnessBuilderServer(options = {}) {
|
|
@@ -631,17 +694,31 @@ function createHarnessBuilderServer(options = {}) {
|
|
|
631
694
|
});
|
|
632
695
|
},
|
|
633
696
|
// Skills require a configured sandbox provider; keep the picker empty when skill capability is off.
|
|
697
|
+
// Catalog AvailableSkill.name is store identity (FQN in TFY). Picker `id` copies that
|
|
698
|
+
// attach key; `name` is displayName so the draft can show a label without losing the wire key.
|
|
699
|
+
// Draft mounts `{ id, name }`; toHarnessSkill admits AgentSpec.skills[].name = id ?? name.
|
|
634
700
|
getSkills: async () => {
|
|
635
701
|
const skills = await listSkills(client);
|
|
636
|
-
return skills.map((skill) =>
|
|
702
|
+
return skills.map((skill) => {
|
|
703
|
+
const { display_name, repository_name, version: versionRaw } = skill.metadata ?? {};
|
|
704
|
+
const version = Number(versionRaw);
|
|
705
|
+
const hasVersion = Number.isInteger(version) && version > 0;
|
|
706
|
+
return {
|
|
707
|
+
id: skill.name,
|
|
708
|
+
name: display_name ?? skill.name,
|
|
709
|
+
description: skill.description,
|
|
710
|
+
...repository_name === void 0 ? {} : { skillRepoName: repository_name },
|
|
711
|
+
...hasVersion ? {
|
|
712
|
+
version,
|
|
713
|
+
loadVersions: async () => (await client.skills.listVersions({ name: skill.name })).data
|
|
714
|
+
} : {}
|
|
715
|
+
};
|
|
716
|
+
});
|
|
637
717
|
},
|
|
638
718
|
getMcp: async () => (await listConfiguredMcpServers(client)).map(toUiConnectorFromReadEntry),
|
|
639
|
-
|
|
640
|
-
const
|
|
641
|
-
return
|
|
642
|
-
data: page.data.map(toUiConnectorFromReadEntry),
|
|
643
|
-
...page.nextPageToken === void 0 ? {} : { nextPageToken: page.nextPageToken }
|
|
644
|
-
};
|
|
719
|
+
getMcpConnector: async ({ connectorId }) => {
|
|
720
|
+
const body = await client.mcpServers.get(connectorId);
|
|
721
|
+
return toUiConnectorFromReadEntry(body.data);
|
|
645
722
|
},
|
|
646
723
|
getMcpTools: async ({ connectorId }) => {
|
|
647
724
|
const body = await client.mcpServers.listTools(connectorId);
|
|
@@ -650,30 +727,42 @@ function createHarnessBuilderServer(options = {}) {
|
|
|
650
727
|
);
|
|
651
728
|
},
|
|
652
729
|
async searchAgents(req) {
|
|
653
|
-
const
|
|
654
|
-
const query = req?.query?.trim().toLowerCase();
|
|
655
|
-
const filtered = query === void 0 || query === "" ? data : data.filter((agent) => agent.name.toLowerCase().includes(query));
|
|
730
|
+
const limit = clampAgentsPageSize(req?.limit ?? AGENTS_PAGE_DEFAULT);
|
|
656
731
|
const offset = req?.offset ?? 0;
|
|
657
|
-
const
|
|
658
|
-
|
|
732
|
+
const query = req?.query?.trim();
|
|
733
|
+
const rows = await listAgentsPage({
|
|
734
|
+
client,
|
|
735
|
+
limit,
|
|
736
|
+
offset,
|
|
737
|
+
...query === void 0 || query === "" ? {} : { agentName: query }
|
|
738
|
+
});
|
|
739
|
+
return rows.map(toLibraryEntry);
|
|
659
740
|
},
|
|
660
|
-
async saveAgent({ agentName, agentSpec, intent }) {
|
|
741
|
+
async saveAgent({ agentName, description: descriptionRaw, agentSpec, intent }) {
|
|
661
742
|
const manifest = toHarnessAgentSpec(agentSpec);
|
|
743
|
+
const description = descriptionRaw?.trim();
|
|
662
744
|
if (intent === "update") {
|
|
663
|
-
const
|
|
664
|
-
const existing =
|
|
745
|
+
const agents = await drainAgentsList(client);
|
|
746
|
+
const existing = agents.find((agent) => agent.name === agentName);
|
|
665
747
|
if (!existing) {
|
|
666
748
|
return {};
|
|
667
749
|
}
|
|
668
|
-
await client.agents.update(existing.id, {
|
|
750
|
+
await client.agents.update(existing.id, {
|
|
751
|
+
...description ? { description } : {},
|
|
752
|
+
manifest
|
|
753
|
+
});
|
|
669
754
|
return { agentId: existing.id };
|
|
670
755
|
}
|
|
671
|
-
const created = await client.agents.create({
|
|
756
|
+
const created = await client.agents.create({
|
|
757
|
+
name: agentName,
|
|
758
|
+
description: description || agentName,
|
|
759
|
+
manifest
|
|
760
|
+
});
|
|
672
761
|
return { agentId: created.data.id };
|
|
673
762
|
},
|
|
674
763
|
async deleteAgent({ agentName }) {
|
|
675
|
-
const
|
|
676
|
-
const existing =
|
|
764
|
+
const agents = await drainAgentsList(client);
|
|
765
|
+
const existing = agents.find((agent) => agent.name === agentName);
|
|
677
766
|
if (!existing) return;
|
|
678
767
|
await client.agents.delete(existing.id);
|
|
679
768
|
}
|
|
@@ -957,10 +1046,12 @@ function toHarnessManifest3(req) {
|
|
|
957
1046
|
};
|
|
958
1047
|
}
|
|
959
1048
|
function toUiSkill2(skill, catalogNames) {
|
|
1049
|
+
const manifest = skill.manifest;
|
|
1050
|
+
const displayName = "displayName" in manifest && typeof manifest.displayName === "string" ? manifest.displayName : manifest.name;
|
|
960
1051
|
const base = {
|
|
961
1052
|
id: skill.name,
|
|
962
|
-
name:
|
|
963
|
-
description:
|
|
1053
|
+
name: displayName,
|
|
1054
|
+
description: manifest.description
|
|
964
1055
|
};
|
|
965
1056
|
if (catalogNames.has(skill.name)) {
|
|
966
1057
|
return { ...base, catalogId: skill.name };
|
|
@@ -1005,13 +1096,21 @@ function createSkillCatalog(client) {
|
|
|
1005
1096
|
};
|
|
1006
1097
|
}
|
|
1007
1098
|
|
|
1099
|
+
// src/plugins/trueforge-agent-server-adapter/permissionsServer.ts
|
|
1100
|
+
function createHarnessPermissionsServer(options = {}) {
|
|
1101
|
+
const client = options.client ?? createTrueForgeClient(options);
|
|
1102
|
+
return {
|
|
1103
|
+
listPermissions: async (request) => client.internal.listPermissions(request)
|
|
1104
|
+
};
|
|
1105
|
+
}
|
|
1106
|
+
|
|
1008
1107
|
// src/plugins/trueforge-agent-server-adapter/schedules/scheduleServer.ts
|
|
1009
1108
|
var SCHEDULES_PAGE_LIMIT = 25;
|
|
1010
1109
|
async function loadAgentIndex(client) {
|
|
1011
|
-
const
|
|
1110
|
+
const agents = await drainAgentsList(client);
|
|
1012
1111
|
const idToName = /* @__PURE__ */ new Map();
|
|
1013
1112
|
const nameToId = /* @__PURE__ */ new Map();
|
|
1014
|
-
for (const agent of
|
|
1113
|
+
for (const agent of agents) {
|
|
1015
1114
|
idToName.set(agent.id, agent.name);
|
|
1016
1115
|
nameToId.set(agent.name, agent.id);
|
|
1017
1116
|
}
|
|
@@ -1047,7 +1146,8 @@ function toUiSchedule(wire, index) {
|
|
|
1047
1146
|
cron: wire.manifest.cron,
|
|
1048
1147
|
timezone: wire.manifest.timezone ?? "UTC",
|
|
1049
1148
|
status: wireStatus(wire.manifest),
|
|
1050
|
-
lastRunAt: null
|
|
1149
|
+
lastRunAt: null,
|
|
1150
|
+
createdBySubject: wire.createdBySubject
|
|
1051
1151
|
};
|
|
1052
1152
|
}
|
|
1053
1153
|
function toWireManifest(input) {
|
|
@@ -1127,7 +1227,7 @@ function createScheduleServer(options) {
|
|
|
1127
1227
|
|
|
1128
1228
|
// src/plugins/trueforge-agent-server-adapter/index.ts
|
|
1129
1229
|
function createTrueForgeAgentUIServer(options = {}) {
|
|
1130
|
-
const { catalog: catalogOverride, ...clientOptions } = options;
|
|
1230
|
+
const { catalog: catalogOverride, permissions, ...clientOptions } = options;
|
|
1131
1231
|
const client = createTrueForgeClient(clientOptions);
|
|
1132
1232
|
const catalog = catalogOverride ?? {
|
|
1133
1233
|
modelCatalog: createModelProviderCatalog(client),
|
|
@@ -1141,7 +1241,8 @@ function createTrueForgeAgentUIServer(options = {}) {
|
|
|
1141
1241
|
catalog,
|
|
1142
1242
|
sessions: createHarnessAgentSessionsServer({ ...clientOptions, client }),
|
|
1143
1243
|
metrics: createHarnessAgentMetricsServer({ ...clientOptions, client }),
|
|
1144
|
-
schedules: createScheduleServer({ client })
|
|
1244
|
+
schedules: createScheduleServer({ client }),
|
|
1245
|
+
permissions: permissions ?? createHarnessPermissionsServer({ client })
|
|
1145
1246
|
});
|
|
1146
1247
|
}
|
|
1147
1248
|
export {
|
|
@@ -1151,6 +1252,7 @@ export {
|
|
|
1151
1252
|
createHarnessAgentSessionsServer,
|
|
1152
1253
|
createHarnessBuilderServer,
|
|
1153
1254
|
createHarnessChatServer,
|
|
1255
|
+
createHarnessPermissionsServer,
|
|
1154
1256
|
createModelProviderCatalog,
|
|
1155
1257
|
createSandboxProviderCatalog,
|
|
1156
1258
|
createScheduleServer,
|
|
@@ -1160,7 +1262,6 @@ export {
|
|
|
1160
1262
|
filterUiSandboxProviders,
|
|
1161
1263
|
getCapabilities,
|
|
1162
1264
|
listConfiguredMcpServers,
|
|
1163
|
-
listConfiguredMcpServersPage,
|
|
1164
1265
|
listModels,
|
|
1165
1266
|
listSkills,
|
|
1166
1267
|
modelProviderLogosByName,
|