@truefoundry/trueforge-ui 0.3.0-rc.1 → 0.3.0-rc.10
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 +143 -0
- package/README.md +23 -8
- package/dist/{AgentCodeSnippets-NZOFJE57.js → AgentCodeSnippets-RJBB4DDE.js} +38 -23
- package/dist/AgentCodeSnippets-RJBB4DDE.js.map +1 -0
- package/dist/AgentMetricChart-UPGSJ2WP.js +15 -0
- package/dist/{AgentOverview-EEBHJC32.js → AgentOverview-U5WIQXZN.js} +11 -9
- package/dist/AgentOverview-U5WIQXZN.js.map +1 -0
- package/dist/{AgentSessionEventTimeline-26Z6IB3B.js → AgentSessionEventTimeline-GRGIQTRE.js} +19 -10
- package/dist/AgentSessionEventTimeline-GRGIQTRE.js.map +1 -0
- package/dist/{AgentSessionEventTimelineChart-CGCU7WBK.js → AgentSessionEventTimelineChart-GNF4VOUT.js} +144 -57
- package/dist/AgentSessionEventTimelineChart-GNF4VOUT.js.map +1 -0
- package/dist/{AgentSessions-3MPDZASK.js → AgentSessions-5OTF2BUW.js} +72 -24
- package/dist/AgentSessions-5OTF2BUW.js.map +1 -0
- package/dist/{ConnectorSettings-MXFRWWR6.js → ConnectorSettings-HDKGLDCY.js} +162 -126
- package/dist/ConnectorSettings-HDKGLDCY.js.map +1 -0
- package/dist/{DockLayout-LM4AFMFY.js → DockLayout-D2FPQCAL.js} +10 -10
- package/dist/{DrawerLayout-JR3O6RRB.js → DrawerLayout-HUV7RAWL.js} +14 -12
- package/dist/DrawerLayout-HUV7RAWL.js.map +1 -0
- package/dist/{ModelSettings-G7IFNC2Y.js → ModelSettings-VNQ7HPKH.js} +22 -28
- package/dist/ModelSettings-VNQ7HPKH.js.map +1 -0
- package/dist/OpenUiFenceBlock-KPZFLUSC.js +9 -0
- package/dist/{SandboxSettings-NXAANMAX.js → SandboxSettings-ZLXGMFBF.js} +17 -21
- package/dist/SandboxSettings-ZLXGMFBF.js.map +1 -0
- package/dist/SchedulesPage-QKYI2Z3A.js +15 -0
- package/dist/{SettingsBuilder-L34IQ56S.js → SettingsBuilder-RVVYXOJW.js} +9 -9
- package/dist/{SettingsBuilder-L34IQ56S.js.map → SettingsBuilder-RVVYXOJW.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-KYA76FQ7.js} +80 -58
- package/dist/SidebarLayout-KYA76FQ7.js.map +1 -0
- package/dist/{SkillSettings-FGGMSUNO.js → SkillSettings-7OHT7FPI.js} +24 -22
- package/dist/SkillSettings-7OHT7FPI.js.map +1 -0
- package/dist/{TrueForgeUIWithRouter-MZVJWJMB.js → TrueForgeUIWithRouter-LKG4XLW6.js} +9 -9
- package/dist/{WidgetLayout-6QM45OQQ.js → WidgetLayout-W2RGGOQ3.js} +10 -10
- package/dist/{chunk-U7KURWW3.js → chunk-2GIZY3JJ.js} +276 -54
- package/dist/chunk-2GIZY3JJ.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-3ZW74FHC.js} +68 -256
- package/dist/chunk-3ZW74FHC.js.map +1 -0
- package/dist/{chunk-FJW36PD7.js → chunk-67ZO7Z2W.js} +28 -24
- package/dist/chunk-67ZO7Z2W.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-MPNSO7E6.js → chunk-CG75X77Q.js} +2 -2
- package/dist/chunk-DPPOEFBD.js +517 -0
- package/dist/chunk-DPPOEFBD.js.map +1 -0
- package/dist/{chunk-6O6FWUDW.js → chunk-EPAL2HD5.js} +641 -388
- package/dist/chunk-EPAL2HD5.js.map +1 -0
- package/dist/{chunk-ZTMKFZQ3.js → chunk-GG23N2GW.js} +5099 -3295
- package/dist/chunk-GG23N2GW.js.map +1 -0
- package/dist/chunk-JCL3Q7RW.js +587 -0
- package/dist/chunk-JCL3Q7RW.js.map +1 -0
- package/dist/{chunk-M62XY4NC.js → chunk-JKEBMGLH.js} +235 -108
- package/dist/chunk-JKEBMGLH.js.map +1 -0
- package/dist/{chunk-DMMZSZTN.js → chunk-KSGNKS2D.js} +60 -16
- package/dist/chunk-KSGNKS2D.js.map +1 -0
- package/dist/{chunk-CYHJDKFB.js → chunk-PCI6VMB5.js} +189 -52
- package/dist/chunk-PCI6VMB5.js.map +1 -0
- package/dist/{chunk-ZKNUMH2M.js → chunk-PQ7VWBQQ.js} +13 -11
- package/dist/chunk-PQ7VWBQQ.js.map +1 -0
- package/dist/chunk-T6QQV5LK.js +238 -0
- package/dist/chunk-T6QQV5LK.js.map +1 -0
- package/dist/{createTrueFoundryServer-CmZnBh_l.d.ts → createTrueFoundryServer-B_FYhSdn.d.ts} +8 -5
- package/dist/index.d.ts +369 -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 +138 -50
- 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.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-UPGSJ2WP.js.map} +0 -0
- /package/dist/{DockLayout-LM4AFMFY.js.map → DockLayout-D2FPQCAL.js.map} +0 -0
- /package/dist/{OpenUiFenceBlock-2TV5TQ6P.js.map → OpenUiFenceBlock-KPZFLUSC.js.map} +0 -0
- /package/dist/{SchedulesPage-KKLUDO6B.js.map → SchedulesPage-QKYI2Z3A.js.map} +0 -0
- /package/dist/{TrueForgeUIWithRouter-MZVJWJMB.js.map → TrueForgeUIWithRouter-LKG4XLW6.js.map} +0 -0
- /package/dist/{WidgetLayout-6QM45OQQ.js.map → WidgetLayout-W2RGGOQ3.js.map} +0 -0
- /package/dist/{chunk-MPNSO7E6.js.map → chunk-CG75X77Q.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";
|
|
@@ -116,7 +113,10 @@ function toUiMcpServer(server) {
|
|
|
116
113
|
return server;
|
|
117
114
|
}
|
|
118
115
|
function toUiSkill(skill) {
|
|
119
|
-
return { name: skill.name };
|
|
116
|
+
return { name: skill.name, preload: skill.preload === true };
|
|
117
|
+
}
|
|
118
|
+
function toHarnessSkill(skill) {
|
|
119
|
+
return { name: skill.id ?? skill.name, preload: skill.preload === true };
|
|
120
120
|
}
|
|
121
121
|
function toHarnessAgentSpec(spec) {
|
|
122
122
|
const { skills, mcpServers, ...rest } = spec;
|
|
@@ -132,7 +132,7 @@ function toHarnessAgentSpec(spec) {
|
|
|
132
132
|
return server;
|
|
133
133
|
})
|
|
134
134
|
},
|
|
135
|
-
...skills === void 0 ? {} : { skills: skills.map(
|
|
135
|
+
...skills === void 0 ? {} : { skills: skills.map(toHarnessSkill) }
|
|
136
136
|
};
|
|
137
137
|
}
|
|
138
138
|
function toUiAgentSpec(spec) {
|
|
@@ -237,7 +237,8 @@ function createHarnessChatServer(options = {}) {
|
|
|
237
237
|
...request.limit === void 0 ? {} : { limit: request.limit },
|
|
238
238
|
...request.order === void 0 ? {} : { order: request.order },
|
|
239
239
|
...request.pageToken === void 0 ? {} : { pageToken: request.pageToken },
|
|
240
|
-
...request.agentId === void 0 || request.agentId.length === 0 ? {} : { agentId: request.agentId }
|
|
240
|
+
...request.agentId === void 0 || request.agentId.length === 0 ? {} : { agentId: request.agentId },
|
|
241
|
+
...request.createdByMe === void 0 ? {} : { createdByMe: request.createdByMe }
|
|
241
242
|
});
|
|
242
243
|
return toListResult(page, toUiSession);
|
|
243
244
|
},
|
|
@@ -326,12 +327,13 @@ function toSessionListEntry(session) {
|
|
|
326
327
|
isMutable: session.agent.type === "inline",
|
|
327
328
|
metrics: {
|
|
328
329
|
totalTurns: session.metrics.totalTurns,
|
|
329
|
-
totalCostInUsd: session.metrics.totalCostInUsd,
|
|
330
|
+
...session.metrics.totalCostInUsd == null ? {} : { totalCostInUsd: session.metrics.totalCostInUsd },
|
|
330
331
|
totalDurationMs: session.metrics.totalDurationMs
|
|
331
332
|
},
|
|
332
333
|
...session.title === null ? {} : { title: session.title },
|
|
333
334
|
...session.agent.type === "reference" && session.agent.name !== null ? { agentName: session.agent.name } : {},
|
|
334
|
-
...session.agent.type === "inline" ? { agentSpec: toUiAgentSpec(session.agent.spec) } : {}
|
|
335
|
+
...session.agent.type === "inline" ? { agentSpec: toUiAgentSpec(session.agent.spec) } : {},
|
|
336
|
+
...session.source?.type === "schedule" ? { sourceType: session.source.type } : {}
|
|
335
337
|
};
|
|
336
338
|
}
|
|
337
339
|
function createHarnessAgentSessionsServer(options = {}) {
|
|
@@ -342,11 +344,16 @@ function createHarnessAgentSessionsServer(options = {}) {
|
|
|
342
344
|
return {
|
|
343
345
|
agentId: data.id,
|
|
344
346
|
name: data.name,
|
|
347
|
+
description: data.description,
|
|
345
348
|
agentSpec: toUiAgentSpec(data.manifest)
|
|
346
349
|
};
|
|
347
350
|
},
|
|
348
351
|
async getCodeSnippets({ agentId }) {
|
|
349
|
-
const
|
|
352
|
+
const absoluteBaseUrl = resolveTrueForgeBaseUrl(options.baseUrl ?? "/").replace(/\/$/, "");
|
|
353
|
+
const { data } = await client.internal.agents.getCodeSnippets(
|
|
354
|
+
agentId,
|
|
355
|
+
/^https?:\/\//i.test(absoluteBaseUrl) ? { baseUrl: absoluteBaseUrl } : void 0
|
|
356
|
+
);
|
|
350
357
|
return data.snippets;
|
|
351
358
|
},
|
|
352
359
|
async listSessions(requestParams = {}) {
|
|
@@ -356,7 +363,8 @@ function createHarnessAgentSessionsServer(options = {}) {
|
|
|
356
363
|
...requestParams.pageToken === void 0 ? {} : { pageToken: requestParams.pageToken },
|
|
357
364
|
...requestParams.startTimestamp === void 0 ? {} : { startTimestamp: parseIsoDate(requestParams.startTimestamp) },
|
|
358
365
|
...requestParams.endTimestamp === void 0 ? {} : { endTimestamp: parseIsoDate(requestParams.endTimestamp) },
|
|
359
|
-
...requestParams.agentId === void 0 || requestParams.agentId.length === 0 ? {} : { agentId: requestParams.agentId }
|
|
366
|
+
...requestParams.agentId === void 0 || requestParams.agentId.length === 0 ? {} : { agentId: requestParams.agentId },
|
|
367
|
+
...requestParams.createdByMe === void 0 ? {} : { createdByMe: requestParams.createdByMe }
|
|
360
368
|
});
|
|
361
369
|
return toListResult(page, toSessionListEntry);
|
|
362
370
|
},
|
|
@@ -370,6 +378,43 @@ function createHarnessAgentSessionsServer(options = {}) {
|
|
|
370
378
|
};
|
|
371
379
|
}
|
|
372
380
|
|
|
381
|
+
// src/plugins/trueforge-agent-server-adapter/agentsList.ts
|
|
382
|
+
var AGENTS_PAGE_DEFAULT = 50;
|
|
383
|
+
var AGENTS_PAGE_LIMIT = 100;
|
|
384
|
+
function clampAgentsPageSize(size) {
|
|
385
|
+
return Math.min(Math.max(size, 1), AGENTS_PAGE_LIMIT);
|
|
386
|
+
}
|
|
387
|
+
async function listAgentsPage({
|
|
388
|
+
client,
|
|
389
|
+
limit,
|
|
390
|
+
offset = 0,
|
|
391
|
+
agentName
|
|
392
|
+
}) {
|
|
393
|
+
const pageSize = clampAgentsPageSize(limit);
|
|
394
|
+
const start = Math.max(0, offset);
|
|
395
|
+
const page = await client.agents.list({
|
|
396
|
+
limit: pageSize,
|
|
397
|
+
...agentName === void 0 ? {} : { agentName }
|
|
398
|
+
});
|
|
399
|
+
let at = 0;
|
|
400
|
+
while (at < start) {
|
|
401
|
+
if (!page.hasNextPage()) return [];
|
|
402
|
+
await page.getNextPage();
|
|
403
|
+
at += pageSize;
|
|
404
|
+
}
|
|
405
|
+
return [...page.data];
|
|
406
|
+
}
|
|
407
|
+
async function drainAgentsList(client) {
|
|
408
|
+
const items = [];
|
|
409
|
+
const page = await client.agents.list({ limit: AGENTS_PAGE_DEFAULT });
|
|
410
|
+
for (; ; ) {
|
|
411
|
+
items.push(...page.data);
|
|
412
|
+
if (!page.hasNextPage()) break;
|
|
413
|
+
await page.getNextPage();
|
|
414
|
+
}
|
|
415
|
+
return items;
|
|
416
|
+
}
|
|
417
|
+
|
|
373
418
|
// src/plugins/trueforge-agent-server-adapter/catalogs/connectorCatalog.ts
|
|
374
419
|
var DEFAULT_API_KEY_HEADER = "Authorization";
|
|
375
420
|
function toUiAuthPublic(auth) {
|
|
@@ -410,10 +455,21 @@ function toUiCatalogEntry(server) {
|
|
|
410
455
|
auth: toUiAuthPublic(server.auth)
|
|
411
456
|
};
|
|
412
457
|
}
|
|
458
|
+
function toUiToolAnnotations(value) {
|
|
459
|
+
if (typeof value !== "object" || value === null) return void 0;
|
|
460
|
+
const readOnlyHint = Reflect.get(value, "readOnlyHint");
|
|
461
|
+
const destructiveHint = Reflect.get(value, "destructiveHint");
|
|
462
|
+
const annotations = {
|
|
463
|
+
...typeof readOnlyHint === "boolean" ? { readOnlyHint } : {},
|
|
464
|
+
...typeof destructiveHint === "boolean" ? { destructiveHint } : {}
|
|
465
|
+
};
|
|
466
|
+
return Object.keys(annotations).length > 0 ? annotations : void 0;
|
|
467
|
+
}
|
|
413
468
|
function toUiTool(tool) {
|
|
414
469
|
const name = typeof tool.name === "string" && tool.name !== "" ? tool.name : "tool";
|
|
415
470
|
const description = typeof tool.description === "string" ? tool.description : "";
|
|
416
|
-
|
|
471
|
+
const annotations = toUiToolAnnotations(Reflect.get(tool, "annotations"));
|
|
472
|
+
return annotations === void 0 ? { id: name, name, description } : { id: name, name, description, annotations };
|
|
417
473
|
}
|
|
418
474
|
function toUiConnector(server) {
|
|
419
475
|
const auth = toUiAuthPublic(server.manifest.auth);
|
|
@@ -554,17 +610,9 @@ async function listModels(client) {
|
|
|
554
610
|
const body = await client.models.list();
|
|
555
611
|
return body.data;
|
|
556
612
|
}
|
|
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
613
|
async function listConfiguredMcpServers(client) {
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
});
|
|
614
|
+
const body = await client.mcpServers.list();
|
|
615
|
+
return body.data;
|
|
568
616
|
}
|
|
569
617
|
async function listSkills(client) {
|
|
570
618
|
const body = await client.skills.list();
|
|
@@ -609,7 +657,9 @@ function toLibraryEntry(agent) {
|
|
|
609
657
|
return {
|
|
610
658
|
name: agent.name,
|
|
611
659
|
agentId: agent.id,
|
|
612
|
-
|
|
660
|
+
description: agent.description,
|
|
661
|
+
agentSpec: toUiAgentSpec(agent.manifest),
|
|
662
|
+
createdBySubject: agent.createdBySubject
|
|
613
663
|
};
|
|
614
664
|
}
|
|
615
665
|
function createHarnessBuilderServer(options = {}) {
|
|
@@ -631,17 +681,31 @@ function createHarnessBuilderServer(options = {}) {
|
|
|
631
681
|
});
|
|
632
682
|
},
|
|
633
683
|
// Skills require a configured sandbox provider; keep the picker empty when skill capability is off.
|
|
684
|
+
// Catalog AvailableSkill.name is store identity (FQN in TFY). Picker `id` copies that
|
|
685
|
+
// attach key; `name` is displayName so the draft can show a label without losing the wire key.
|
|
686
|
+
// Draft mounts `{ id, name }`; toHarnessSkill admits AgentSpec.skills[].name = id ?? name.
|
|
634
687
|
getSkills: async () => {
|
|
635
688
|
const skills = await listSkills(client);
|
|
636
|
-
return skills.map((skill) =>
|
|
689
|
+
return skills.map((skill) => {
|
|
690
|
+
const { display_name, repository_name, version: versionRaw } = skill.metadata ?? {};
|
|
691
|
+
const version = Number(versionRaw);
|
|
692
|
+
const hasVersion = Number.isInteger(version) && version > 0;
|
|
693
|
+
return {
|
|
694
|
+
id: skill.name,
|
|
695
|
+
name: display_name ?? skill.name,
|
|
696
|
+
description: skill.description,
|
|
697
|
+
...repository_name === void 0 ? {} : { skillRepoName: repository_name },
|
|
698
|
+
...hasVersion ? {
|
|
699
|
+
version,
|
|
700
|
+
loadVersions: async () => (await client.skills.listVersions({ name: skill.name })).data
|
|
701
|
+
} : {}
|
|
702
|
+
};
|
|
703
|
+
});
|
|
637
704
|
},
|
|
638
705
|
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
|
-
};
|
|
706
|
+
getMcpConnector: async ({ connectorId }) => {
|
|
707
|
+
const body = await client.mcpServers.get(connectorId);
|
|
708
|
+
return toUiConnectorFromReadEntry(body.data);
|
|
645
709
|
},
|
|
646
710
|
getMcpTools: async ({ connectorId }) => {
|
|
647
711
|
const body = await client.mcpServers.listTools(connectorId);
|
|
@@ -650,30 +714,42 @@ function createHarnessBuilderServer(options = {}) {
|
|
|
650
714
|
);
|
|
651
715
|
},
|
|
652
716
|
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));
|
|
717
|
+
const limit = clampAgentsPageSize(req?.limit ?? AGENTS_PAGE_DEFAULT);
|
|
656
718
|
const offset = req?.offset ?? 0;
|
|
657
|
-
const
|
|
658
|
-
|
|
719
|
+
const query = req?.query?.trim();
|
|
720
|
+
const rows = await listAgentsPage({
|
|
721
|
+
client,
|
|
722
|
+
limit,
|
|
723
|
+
offset,
|
|
724
|
+
...query === void 0 || query === "" ? {} : { agentName: query }
|
|
725
|
+
});
|
|
726
|
+
return rows.map(toLibraryEntry);
|
|
659
727
|
},
|
|
660
|
-
async saveAgent({ agentName, agentSpec, intent }) {
|
|
728
|
+
async saveAgent({ agentName, description: descriptionRaw, agentSpec, intent }) {
|
|
661
729
|
const manifest = toHarnessAgentSpec(agentSpec);
|
|
730
|
+
const description = descriptionRaw?.trim();
|
|
662
731
|
if (intent === "update") {
|
|
663
|
-
const
|
|
664
|
-
const existing =
|
|
732
|
+
const agents = await drainAgentsList(client);
|
|
733
|
+
const existing = agents.find((agent) => agent.name === agentName);
|
|
665
734
|
if (!existing) {
|
|
666
735
|
return {};
|
|
667
736
|
}
|
|
668
|
-
await client.agents.update(existing.id, {
|
|
737
|
+
await client.agents.update(existing.id, {
|
|
738
|
+
...description ? { description } : {},
|
|
739
|
+
manifest
|
|
740
|
+
});
|
|
669
741
|
return { agentId: existing.id };
|
|
670
742
|
}
|
|
671
|
-
const created = await client.agents.create({
|
|
743
|
+
const created = await client.agents.create({
|
|
744
|
+
name: agentName,
|
|
745
|
+
description: description || agentName,
|
|
746
|
+
manifest
|
|
747
|
+
});
|
|
672
748
|
return { agentId: created.data.id };
|
|
673
749
|
},
|
|
674
750
|
async deleteAgent({ agentName }) {
|
|
675
|
-
const
|
|
676
|
-
const existing =
|
|
751
|
+
const agents = await drainAgentsList(client);
|
|
752
|
+
const existing = agents.find((agent) => agent.name === agentName);
|
|
677
753
|
if (!existing) return;
|
|
678
754
|
await client.agents.delete(existing.id);
|
|
679
755
|
}
|
|
@@ -957,10 +1033,12 @@ function toHarnessManifest3(req) {
|
|
|
957
1033
|
};
|
|
958
1034
|
}
|
|
959
1035
|
function toUiSkill2(skill, catalogNames) {
|
|
1036
|
+
const manifest = skill.manifest;
|
|
1037
|
+
const displayName = "displayName" in manifest && typeof manifest.displayName === "string" ? manifest.displayName : manifest.name;
|
|
960
1038
|
const base = {
|
|
961
1039
|
id: skill.name,
|
|
962
|
-
name:
|
|
963
|
-
description:
|
|
1040
|
+
name: displayName,
|
|
1041
|
+
description: manifest.description
|
|
964
1042
|
};
|
|
965
1043
|
if (catalogNames.has(skill.name)) {
|
|
966
1044
|
return { ...base, catalogId: skill.name };
|
|
@@ -1005,13 +1083,21 @@ function createSkillCatalog(client) {
|
|
|
1005
1083
|
};
|
|
1006
1084
|
}
|
|
1007
1085
|
|
|
1086
|
+
// src/plugins/trueforge-agent-server-adapter/permissionsServer.ts
|
|
1087
|
+
function createHarnessPermissionsServer(options = {}) {
|
|
1088
|
+
const client = options.client ?? createTrueForgeClient(options);
|
|
1089
|
+
return {
|
|
1090
|
+
listPermissions: async (request) => client.internal.listPermissions(request)
|
|
1091
|
+
};
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1008
1094
|
// src/plugins/trueforge-agent-server-adapter/schedules/scheduleServer.ts
|
|
1009
1095
|
var SCHEDULES_PAGE_LIMIT = 25;
|
|
1010
1096
|
async function loadAgentIndex(client) {
|
|
1011
|
-
const
|
|
1097
|
+
const agents = await drainAgentsList(client);
|
|
1012
1098
|
const idToName = /* @__PURE__ */ new Map();
|
|
1013
1099
|
const nameToId = /* @__PURE__ */ new Map();
|
|
1014
|
-
for (const agent of
|
|
1100
|
+
for (const agent of agents) {
|
|
1015
1101
|
idToName.set(agent.id, agent.name);
|
|
1016
1102
|
nameToId.set(agent.name, agent.id);
|
|
1017
1103
|
}
|
|
@@ -1047,7 +1133,8 @@ function toUiSchedule(wire, index) {
|
|
|
1047
1133
|
cron: wire.manifest.cron,
|
|
1048
1134
|
timezone: wire.manifest.timezone ?? "UTC",
|
|
1049
1135
|
status: wireStatus(wire.manifest),
|
|
1050
|
-
lastRunAt: null
|
|
1136
|
+
lastRunAt: null,
|
|
1137
|
+
createdBySubject: wire.createdBySubject
|
|
1051
1138
|
};
|
|
1052
1139
|
}
|
|
1053
1140
|
function toWireManifest(input) {
|
|
@@ -1127,7 +1214,7 @@ function createScheduleServer(options) {
|
|
|
1127
1214
|
|
|
1128
1215
|
// src/plugins/trueforge-agent-server-adapter/index.ts
|
|
1129
1216
|
function createTrueForgeAgentUIServer(options = {}) {
|
|
1130
|
-
const { catalog: catalogOverride, ...clientOptions } = options;
|
|
1217
|
+
const { catalog: catalogOverride, permissions, ...clientOptions } = options;
|
|
1131
1218
|
const client = createTrueForgeClient(clientOptions);
|
|
1132
1219
|
const catalog = catalogOverride ?? {
|
|
1133
1220
|
modelCatalog: createModelProviderCatalog(client),
|
|
@@ -1141,7 +1228,8 @@ function createTrueForgeAgentUIServer(options = {}) {
|
|
|
1141
1228
|
catalog,
|
|
1142
1229
|
sessions: createHarnessAgentSessionsServer({ ...clientOptions, client }),
|
|
1143
1230
|
metrics: createHarnessAgentMetricsServer({ ...clientOptions, client }),
|
|
1144
|
-
schedules: createScheduleServer({ client })
|
|
1231
|
+
schedules: createScheduleServer({ client }),
|
|
1232
|
+
permissions: permissions ?? createHarnessPermissionsServer({ client })
|
|
1145
1233
|
});
|
|
1146
1234
|
}
|
|
1147
1235
|
export {
|
|
@@ -1151,6 +1239,7 @@ export {
|
|
|
1151
1239
|
createHarnessAgentSessionsServer,
|
|
1152
1240
|
createHarnessBuilderServer,
|
|
1153
1241
|
createHarnessChatServer,
|
|
1242
|
+
createHarnessPermissionsServer,
|
|
1154
1243
|
createModelProviderCatalog,
|
|
1155
1244
|
createSandboxProviderCatalog,
|
|
1156
1245
|
createScheduleServer,
|
|
@@ -1160,7 +1249,6 @@ export {
|
|
|
1160
1249
|
filterUiSandboxProviders,
|
|
1161
1250
|
getCapabilities,
|
|
1162
1251
|
listConfiguredMcpServers,
|
|
1163
|
-
listConfiguredMcpServersPage,
|
|
1164
1252
|
listModels,
|
|
1165
1253
|
listSkills,
|
|
1166
1254
|
modelProviderLogosByName,
|