@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.
Files changed (111) hide show
  1. package/CHANGELOG.md +143 -0
  2. package/README.md +23 -8
  3. package/dist/{AgentCodeSnippets-NZOFJE57.js → AgentCodeSnippets-RJBB4DDE.js} +38 -23
  4. package/dist/AgentCodeSnippets-RJBB4DDE.js.map +1 -0
  5. package/dist/AgentMetricChart-UPGSJ2WP.js +15 -0
  6. package/dist/{AgentOverview-EEBHJC32.js → AgentOverview-U5WIQXZN.js} +11 -9
  7. package/dist/AgentOverview-U5WIQXZN.js.map +1 -0
  8. package/dist/{AgentSessionEventTimeline-26Z6IB3B.js → AgentSessionEventTimeline-GRGIQTRE.js} +19 -10
  9. package/dist/AgentSessionEventTimeline-GRGIQTRE.js.map +1 -0
  10. package/dist/{AgentSessionEventTimelineChart-CGCU7WBK.js → AgentSessionEventTimelineChart-GNF4VOUT.js} +144 -57
  11. package/dist/AgentSessionEventTimelineChart-GNF4VOUT.js.map +1 -0
  12. package/dist/{AgentSessions-3MPDZASK.js → AgentSessions-5OTF2BUW.js} +72 -24
  13. package/dist/AgentSessions-5OTF2BUW.js.map +1 -0
  14. package/dist/{ConnectorSettings-MXFRWWR6.js → ConnectorSettings-HDKGLDCY.js} +162 -126
  15. package/dist/ConnectorSettings-HDKGLDCY.js.map +1 -0
  16. package/dist/{DockLayout-LM4AFMFY.js → DockLayout-D2FPQCAL.js} +10 -10
  17. package/dist/{DrawerLayout-JR3O6RRB.js → DrawerLayout-HUV7RAWL.js} +14 -12
  18. package/dist/DrawerLayout-HUV7RAWL.js.map +1 -0
  19. package/dist/{ModelSettings-G7IFNC2Y.js → ModelSettings-VNQ7HPKH.js} +22 -28
  20. package/dist/ModelSettings-VNQ7HPKH.js.map +1 -0
  21. package/dist/OpenUiFenceBlock-KPZFLUSC.js +9 -0
  22. package/dist/{SandboxSettings-NXAANMAX.js → SandboxSettings-ZLXGMFBF.js} +17 -21
  23. package/dist/SandboxSettings-ZLXGMFBF.js.map +1 -0
  24. package/dist/SchedulesPage-QKYI2Z3A.js +15 -0
  25. package/dist/{SettingsBuilder-L34IQ56S.js → SettingsBuilder-RVVYXOJW.js} +9 -9
  26. package/dist/{SettingsBuilder-L34IQ56S.js.map → SettingsBuilder-RVVYXOJW.js.map} +1 -1
  27. package/dist/{ShellRouteSync-CEBETGEJ.js → ShellRouteSync-SJXFKUAJ.js} +171 -26
  28. package/dist/ShellRouteSync-SJXFKUAJ.js.map +1 -0
  29. package/dist/{SidebarLayout-A2HJPPHS.js → SidebarLayout-KYA76FQ7.js} +80 -58
  30. package/dist/SidebarLayout-KYA76FQ7.js.map +1 -0
  31. package/dist/{SkillSettings-FGGMSUNO.js → SkillSettings-7OHT7FPI.js} +24 -22
  32. package/dist/SkillSettings-7OHT7FPI.js.map +1 -0
  33. package/dist/{TrueForgeUIWithRouter-MZVJWJMB.js → TrueForgeUIWithRouter-LKG4XLW6.js} +9 -9
  34. package/dist/{WidgetLayout-6QM45OQQ.js → WidgetLayout-W2RGGOQ3.js} +10 -10
  35. package/dist/{chunk-U7KURWW3.js → chunk-2GIZY3JJ.js} +276 -54
  36. package/dist/chunk-2GIZY3JJ.js.map +1 -0
  37. package/dist/{chunk-WVE3F724.js → chunk-2QTH6JHX.js} +21 -4
  38. package/dist/chunk-2QTH6JHX.js.map +1 -0
  39. package/dist/{chunk-XAU7QFG3.js → chunk-3ZW74FHC.js} +68 -256
  40. package/dist/chunk-3ZW74FHC.js.map +1 -0
  41. package/dist/{chunk-FJW36PD7.js → chunk-67ZO7Z2W.js} +28 -24
  42. package/dist/chunk-67ZO7Z2W.js.map +1 -0
  43. package/dist/{chunk-QC42MLAK.js → chunk-7AAO4UDQ.js} +4 -3
  44. package/dist/chunk-7AAO4UDQ.js.map +1 -0
  45. package/dist/{chunk-MPNSO7E6.js → chunk-CG75X77Q.js} +2 -2
  46. package/dist/chunk-DPPOEFBD.js +517 -0
  47. package/dist/chunk-DPPOEFBD.js.map +1 -0
  48. package/dist/{chunk-6O6FWUDW.js → chunk-EPAL2HD5.js} +641 -388
  49. package/dist/chunk-EPAL2HD5.js.map +1 -0
  50. package/dist/{chunk-ZTMKFZQ3.js → chunk-GG23N2GW.js} +5099 -3295
  51. package/dist/chunk-GG23N2GW.js.map +1 -0
  52. package/dist/chunk-JCL3Q7RW.js +587 -0
  53. package/dist/chunk-JCL3Q7RW.js.map +1 -0
  54. package/dist/{chunk-M62XY4NC.js → chunk-JKEBMGLH.js} +235 -108
  55. package/dist/chunk-JKEBMGLH.js.map +1 -0
  56. package/dist/{chunk-DMMZSZTN.js → chunk-KSGNKS2D.js} +60 -16
  57. package/dist/chunk-KSGNKS2D.js.map +1 -0
  58. package/dist/{chunk-CYHJDKFB.js → chunk-PCI6VMB5.js} +189 -52
  59. package/dist/chunk-PCI6VMB5.js.map +1 -0
  60. package/dist/{chunk-ZKNUMH2M.js → chunk-PQ7VWBQQ.js} +13 -11
  61. package/dist/chunk-PQ7VWBQQ.js.map +1 -0
  62. package/dist/chunk-T6QQV5LK.js +238 -0
  63. package/dist/chunk-T6QQV5LK.js.map +1 -0
  64. package/dist/{createTrueFoundryServer-CmZnBh_l.d.ts → createTrueFoundryServer-B_FYhSdn.d.ts} +8 -5
  65. package/dist/index.d.ts +369 -108
  66. package/dist/index.js +69 -488
  67. package/dist/index.js.map +1 -1
  68. package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +49 -14
  69. package/dist/plugins/trueforge-agent-server-adapter/index.js +138 -50
  70. package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
  71. package/dist/styles.css +1 -1
  72. package/package.json +5 -4
  73. package/dist/AgentCodeSnippets-NZOFJE57.js.map +0 -1
  74. package/dist/AgentMetricChart-JPU3MFQ2.js +0 -15
  75. package/dist/AgentOverview-EEBHJC32.js.map +0 -1
  76. package/dist/AgentSessionEventTimeline-26Z6IB3B.js.map +0 -1
  77. package/dist/AgentSessionEventTimelineChart-CGCU7WBK.js.map +0 -1
  78. package/dist/AgentSessions-3MPDZASK.js.map +0 -1
  79. package/dist/ConnectorSettings-MXFRWWR6.js.map +0 -1
  80. package/dist/DrawerLayout-JR3O6RRB.js.map +0 -1
  81. package/dist/ModelSettings-G7IFNC2Y.js.map +0 -1
  82. package/dist/OpenUiFenceBlock-2TV5TQ6P.js +0 -9
  83. package/dist/SandboxSettings-NXAANMAX.js.map +0 -1
  84. package/dist/SchedulesPage-KKLUDO6B.js +0 -15
  85. package/dist/ShellRouteSync-CEBETGEJ.js.map +0 -1
  86. package/dist/SidebarLayout-A2HJPPHS.js.map +0 -1
  87. package/dist/SkillSettings-FGGMSUNO.js.map +0 -1
  88. package/dist/chunk-2XPPBEYF.js +0 -74
  89. package/dist/chunk-2XPPBEYF.js.map +0 -1
  90. package/dist/chunk-6O6FWUDW.js.map +0 -1
  91. package/dist/chunk-7Z2C2K7F.js +0 -578
  92. package/dist/chunk-7Z2C2K7F.js.map +0 -1
  93. package/dist/chunk-CYHJDKFB.js.map +0 -1
  94. package/dist/chunk-DMMZSZTN.js.map +0 -1
  95. package/dist/chunk-FJW36PD7.js.map +0 -1
  96. package/dist/chunk-M62XY4NC.js.map +0 -1
  97. package/dist/chunk-QC42MLAK.js.map +0 -1
  98. package/dist/chunk-SFZNIO6U.js +0 -18
  99. package/dist/chunk-SFZNIO6U.js.map +0 -1
  100. package/dist/chunk-U7KURWW3.js.map +0 -1
  101. package/dist/chunk-WVE3F724.js.map +0 -1
  102. package/dist/chunk-XAU7QFG3.js.map +0 -1
  103. package/dist/chunk-ZKNUMH2M.js.map +0 -1
  104. package/dist/chunk-ZTMKFZQ3.js.map +0 -1
  105. /package/dist/{AgentMetricChart-JPU3MFQ2.js.map → AgentMetricChart-UPGSJ2WP.js.map} +0 -0
  106. /package/dist/{DockLayout-LM4AFMFY.js.map → DockLayout-D2FPQCAL.js.map} +0 -0
  107. /package/dist/{OpenUiFenceBlock-2TV5TQ6P.js.map → OpenUiFenceBlock-KPZFLUSC.js.map} +0 -0
  108. /package/dist/{SchedulesPage-KKLUDO6B.js.map → SchedulesPage-QKYI2Z3A.js.map} +0 -0
  109. /package/dist/{TrueForgeUIWithRouter-MZVJWJMB.js.map → TrueForgeUIWithRouter-LKG4XLW6.js.map} +0 -0
  110. /package/dist/{WidgetLayout-6QM45OQQ.js.map → WidgetLayout-W2RGGOQ3.js.map} +0 -0
  111. /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-QC42MLAK.js";
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(({ name }) => ({ name })) }
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 { data } = await client.internal.agents.getCodeSnippets(agentId);
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
- return { id: name, name, description };
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
- return drainListPages({
566
- fetchPage: (pageToken) => listConfiguredMcpServersPage(client, { pageToken })
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
- agentSpec: toUiAgentSpec(agent.manifest)
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) => ({ id: skill.name, name: skill.name, description: skill.description }));
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
- listMcp: async (req) => {
640
- const page = await listConfiguredMcpServersPage(client, req ?? {});
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 { data } = await client.agents.list();
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 limit = req?.limit ?? 50;
658
- return filtered.slice(offset, offset + limit).map(toLibraryEntry);
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 { data } = await client.agents.list();
664
- const existing = data.find((agent) => agent.name === agentName);
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, { manifest });
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({ name: agentName, manifest });
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 { data } = await client.agents.list();
676
- const existing = data.find((agent) => agent.name === agentName);
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: skill.name,
963
- description: skill.manifest.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 { data } = await client.agents.list();
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 data) {
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,