@truefoundry/trueforge-ui 0.3.0-rc.1 → 0.3.0-rc.3

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 (110) hide show
  1. package/CHANGELOG.md +70 -0
  2. package/README.md +22 -7
  3. package/dist/{AgentCodeSnippets-NZOFJE57.js → AgentCodeSnippets-N546FNNS.js} +38 -23
  4. package/dist/AgentCodeSnippets-N546FNNS.js.map +1 -0
  5. package/dist/AgentMetricChart-YWJYVYYA.js +15 -0
  6. package/dist/{AgentOverview-EEBHJC32.js → AgentOverview-VF74XC7I.js} +7 -7
  7. package/dist/{AgentSessionEventTimeline-26Z6IB3B.js → AgentSessionEventTimeline-RFR6LQMY.js} +19 -10
  8. package/dist/AgentSessionEventTimeline-RFR6LQMY.js.map +1 -0
  9. package/dist/{AgentSessionEventTimelineChart-CGCU7WBK.js → AgentSessionEventTimelineChart-27CQF6FX.js} +144 -57
  10. package/dist/AgentSessionEventTimelineChart-27CQF6FX.js.map +1 -0
  11. package/dist/{AgentSessions-3MPDZASK.js → AgentSessions-4IVX2SGD.js} +36 -12
  12. package/dist/AgentSessions-4IVX2SGD.js.map +1 -0
  13. package/dist/{ConnectorSettings-MXFRWWR6.js → ConnectorSettings-R5VEP7BO.js} +162 -126
  14. package/dist/ConnectorSettings-R5VEP7BO.js.map +1 -0
  15. package/dist/{DockLayout-LM4AFMFY.js → DockLayout-F44RWGEY.js} +10 -10
  16. package/dist/{DrawerLayout-JR3O6RRB.js → DrawerLayout-SQ323AVM.js} +14 -12
  17. package/dist/DrawerLayout-SQ323AVM.js.map +1 -0
  18. package/dist/{ModelSettings-G7IFNC2Y.js → ModelSettings-6QLS63HM.js} +22 -28
  19. package/dist/ModelSettings-6QLS63HM.js.map +1 -0
  20. package/dist/OpenUiFenceBlock-4ROX3G4X.js +9 -0
  21. package/dist/{SandboxSettings-NXAANMAX.js → SandboxSettings-OLKDXIQS.js} +17 -21
  22. package/dist/SandboxSettings-OLKDXIQS.js.map +1 -0
  23. package/dist/SchedulesPage-TMOTK6DR.js +15 -0
  24. package/dist/{SettingsBuilder-L34IQ56S.js → SettingsBuilder-GISAH2WU.js} +8 -8
  25. package/dist/{ShellRouteSync-CEBETGEJ.js → ShellRouteSync-EN33DUQ7.js} +171 -26
  26. package/dist/ShellRouteSync-EN33DUQ7.js.map +1 -0
  27. package/dist/{SidebarLayout-A2HJPPHS.js → SidebarLayout-35K4AKTC.js} +80 -58
  28. package/dist/SidebarLayout-35K4AKTC.js.map +1 -0
  29. package/dist/{SkillSettings-FGGMSUNO.js → SkillSettings-JSX2BTII.js} +24 -22
  30. package/dist/SkillSettings-JSX2BTII.js.map +1 -0
  31. package/dist/{TrueForgeUIWithRouter-MZVJWJMB.js → TrueForgeUIWithRouter-6VCR7ES3.js} +9 -9
  32. package/dist/{WidgetLayout-6QM45OQQ.js → WidgetLayout-RKBSN2FZ.js} +10 -10
  33. package/dist/{chunk-ZTMKFZQ3.js → chunk-2O5EJ6QS.js} +4440 -3042
  34. package/dist/chunk-2O5EJ6QS.js.map +1 -0
  35. package/dist/chunk-6WCIL3H2.js +517 -0
  36. package/dist/chunk-6WCIL3H2.js.map +1 -0
  37. package/dist/{chunk-WVE3F724.js → chunk-73FQVITT.js} +21 -4
  38. package/dist/chunk-73FQVITT.js.map +1 -0
  39. package/dist/{chunk-QC42MLAK.js → chunk-7AAO4UDQ.js} +4 -3
  40. package/dist/chunk-7AAO4UDQ.js.map +1 -0
  41. package/dist/{chunk-CYHJDKFB.js → chunk-F5QVQIBH.js} +172 -46
  42. package/dist/chunk-F5QVQIBH.js.map +1 -0
  43. package/dist/{chunk-FJW36PD7.js → chunk-GIPFF6FZ.js} +28 -24
  44. package/dist/chunk-GIPFF6FZ.js.map +1 -0
  45. package/dist/{chunk-6O6FWUDW.js → chunk-GSJAYYLR.js} +233 -195
  46. package/dist/chunk-GSJAYYLR.js.map +1 -0
  47. package/dist/{chunk-MPNSO7E6.js → chunk-J5BPHEDT.js} +2 -2
  48. package/dist/chunk-KR7WYHVF.js +195 -0
  49. package/dist/chunk-KR7WYHVF.js.map +1 -0
  50. package/dist/{chunk-DMMZSZTN.js → chunk-LUG7E6BL.js} +60 -16
  51. package/dist/chunk-LUG7E6BL.js.map +1 -0
  52. package/dist/chunk-LXJMINS6.js +587 -0
  53. package/dist/chunk-LXJMINS6.js.map +1 -0
  54. package/dist/{chunk-U7KURWW3.js → chunk-PT4EENB3.js} +244 -52
  55. package/dist/chunk-PT4EENB3.js.map +1 -0
  56. package/dist/{chunk-XAU7QFG3.js → chunk-Q6TCT7ZJ.js} +68 -256
  57. package/dist/chunk-Q6TCT7ZJ.js.map +1 -0
  58. package/dist/{chunk-ZKNUMH2M.js → chunk-XLFOXQKZ.js} +13 -11
  59. package/dist/chunk-XLFOXQKZ.js.map +1 -0
  60. package/dist/{chunk-M62XY4NC.js → chunk-XY6LZQES.js} +235 -108
  61. package/dist/chunk-XY6LZQES.js.map +1 -0
  62. package/dist/{createTrueFoundryServer-CmZnBh_l.d.ts → createTrueFoundryServer-B_FYhSdn.d.ts} +8 -5
  63. package/dist/index.d.ts +316 -94
  64. package/dist/index.js +65 -488
  65. package/dist/index.js.map +1 -1
  66. package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +36 -13
  67. package/dist/plugins/trueforge-agent-server-adapter/index.js +69 -34
  68. package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
  69. package/dist/styles.css +1 -1
  70. package/package.json +4 -4
  71. package/dist/AgentCodeSnippets-NZOFJE57.js.map +0 -1
  72. package/dist/AgentMetricChart-JPU3MFQ2.js +0 -15
  73. package/dist/AgentSessionEventTimeline-26Z6IB3B.js.map +0 -1
  74. package/dist/AgentSessionEventTimelineChart-CGCU7WBK.js.map +0 -1
  75. package/dist/AgentSessions-3MPDZASK.js.map +0 -1
  76. package/dist/ConnectorSettings-MXFRWWR6.js.map +0 -1
  77. package/dist/DrawerLayout-JR3O6RRB.js.map +0 -1
  78. package/dist/ModelSettings-G7IFNC2Y.js.map +0 -1
  79. package/dist/OpenUiFenceBlock-2TV5TQ6P.js +0 -9
  80. package/dist/SandboxSettings-NXAANMAX.js.map +0 -1
  81. package/dist/SchedulesPage-KKLUDO6B.js +0 -15
  82. package/dist/ShellRouteSync-CEBETGEJ.js.map +0 -1
  83. package/dist/SidebarLayout-A2HJPPHS.js.map +0 -1
  84. package/dist/SkillSettings-FGGMSUNO.js.map +0 -1
  85. package/dist/chunk-2XPPBEYF.js +0 -74
  86. package/dist/chunk-2XPPBEYF.js.map +0 -1
  87. package/dist/chunk-6O6FWUDW.js.map +0 -1
  88. package/dist/chunk-7Z2C2K7F.js +0 -578
  89. package/dist/chunk-7Z2C2K7F.js.map +0 -1
  90. package/dist/chunk-CYHJDKFB.js.map +0 -1
  91. package/dist/chunk-DMMZSZTN.js.map +0 -1
  92. package/dist/chunk-FJW36PD7.js.map +0 -1
  93. package/dist/chunk-M62XY4NC.js.map +0 -1
  94. package/dist/chunk-QC42MLAK.js.map +0 -1
  95. package/dist/chunk-SFZNIO6U.js +0 -18
  96. package/dist/chunk-SFZNIO6U.js.map +0 -1
  97. package/dist/chunk-U7KURWW3.js.map +0 -1
  98. package/dist/chunk-WVE3F724.js.map +0 -1
  99. package/dist/chunk-XAU7QFG3.js.map +0 -1
  100. package/dist/chunk-ZKNUMH2M.js.map +0 -1
  101. package/dist/chunk-ZTMKFZQ3.js.map +0 -1
  102. /package/dist/{AgentMetricChart-JPU3MFQ2.js.map → AgentMetricChart-YWJYVYYA.js.map} +0 -0
  103. /package/dist/{AgentOverview-EEBHJC32.js.map → AgentOverview-VF74XC7I.js.map} +0 -0
  104. /package/dist/{DockLayout-LM4AFMFY.js.map → DockLayout-F44RWGEY.js.map} +0 -0
  105. /package/dist/{OpenUiFenceBlock-2TV5TQ6P.js.map → OpenUiFenceBlock-4ROX3G4X.js.map} +0 -0
  106. /package/dist/{SchedulesPage-KKLUDO6B.js.map → SchedulesPage-TMOTK6DR.js.map} +0 -0
  107. /package/dist/{SettingsBuilder-L34IQ56S.js.map → SettingsBuilder-GISAH2WU.js.map} +0 -0
  108. /package/dist/{TrueForgeUIWithRouter-MZVJWJMB.js.map → TrueForgeUIWithRouter-6VCR7ES3.js.map} +0 -0
  109. /package/dist/{WidgetLayout-6QM45OQQ.js.map → WidgetLayout-RKBSN2FZ.js.map} +0 -0
  110. /package/dist/{chunk-MPNSO7E6.js.map → chunk-J5BPHEDT.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 = {}) {
@@ -346,7 +348,11 @@ function createHarnessAgentSessionsServer(options = {}) {
346
348
  };
347
349
  },
348
350
  async getCodeSnippets({ agentId }) {
349
- const { data } = await client.internal.agents.getCodeSnippets(agentId);
351
+ const absoluteBaseUrl = resolveTrueForgeBaseUrl(options.baseUrl ?? "/").replace(/\/$/, "");
352
+ const { data } = await client.internal.agents.getCodeSnippets(
353
+ agentId,
354
+ /^https?:\/\//i.test(absoluteBaseUrl) ? { baseUrl: absoluteBaseUrl } : void 0
355
+ );
350
356
  return data.snippets;
351
357
  },
352
358
  async listSessions(requestParams = {}) {
@@ -356,7 +362,8 @@ function createHarnessAgentSessionsServer(options = {}) {
356
362
  ...requestParams.pageToken === void 0 ? {} : { pageToken: requestParams.pageToken },
357
363
  ...requestParams.startTimestamp === void 0 ? {} : { startTimestamp: parseIsoDate(requestParams.startTimestamp) },
358
364
  ...requestParams.endTimestamp === void 0 ? {} : { endTimestamp: parseIsoDate(requestParams.endTimestamp) },
359
- ...requestParams.agentId === void 0 || requestParams.agentId.length === 0 ? {} : { agentId: requestParams.agentId }
365
+ ...requestParams.agentId === void 0 || requestParams.agentId.length === 0 ? {} : { agentId: requestParams.agentId },
366
+ ...requestParams.createdByMe === void 0 ? {} : { createdByMe: requestParams.createdByMe }
360
367
  });
361
368
  return toListResult(page, toSessionListEntry);
362
369
  },
@@ -410,10 +417,21 @@ function toUiCatalogEntry(server) {
410
417
  auth: toUiAuthPublic(server.auth)
411
418
  };
412
419
  }
420
+ function toUiToolAnnotations(value) {
421
+ if (typeof value !== "object" || value === null) return void 0;
422
+ const readOnlyHint = Reflect.get(value, "readOnlyHint");
423
+ const destructiveHint = Reflect.get(value, "destructiveHint");
424
+ const annotations = {
425
+ ...typeof readOnlyHint === "boolean" ? { readOnlyHint } : {},
426
+ ...typeof destructiveHint === "boolean" ? { destructiveHint } : {}
427
+ };
428
+ return Object.keys(annotations).length > 0 ? annotations : void 0;
429
+ }
413
430
  function toUiTool(tool) {
414
431
  const name = typeof tool.name === "string" && tool.name !== "" ? tool.name : "tool";
415
432
  const description = typeof tool.description === "string" ? tool.description : "";
416
- return { id: name, name, description };
433
+ const annotations = toUiToolAnnotations(Reflect.get(tool, "annotations"));
434
+ return annotations === void 0 ? { id: name, name, description } : { id: name, name, description, annotations };
417
435
  }
418
436
  function toUiConnector(server) {
419
437
  const auth = toUiAuthPublic(server.manifest.auth);
@@ -554,17 +572,9 @@ async function listModels(client) {
554
572
  const body = await client.models.list();
555
573
  return body.data;
556
574
  }
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
575
  async function listConfiguredMcpServers(client) {
565
- return drainListPages({
566
- fetchPage: (pageToken) => listConfiguredMcpServersPage(client, { pageToken })
567
- });
576
+ const body = await client.mcpServers.list();
577
+ return body.data;
568
578
  }
569
579
  async function listSkills(client) {
570
580
  const body = await client.skills.list();
@@ -631,17 +641,31 @@ function createHarnessBuilderServer(options = {}) {
631
641
  });
632
642
  },
633
643
  // Skills require a configured sandbox provider; keep the picker empty when skill capability is off.
644
+ // Catalog AvailableSkill.name is store identity (FQN in TFY). Picker `id` copies that
645
+ // attach key; `name` is displayName so the draft can show a label without losing the wire key.
646
+ // Draft mounts `{ id, name }`; toHarnessSkill admits AgentSpec.skills[].name = id ?? name.
634
647
  getSkills: async () => {
635
648
  const skills = await listSkills(client);
636
- return skills.map((skill) => ({ id: skill.name, name: skill.name, description: skill.description }));
649
+ return skills.map((skill) => {
650
+ const { display_name, repository_name, version: versionRaw } = skill.metadata ?? {};
651
+ const version = Number(versionRaw);
652
+ const hasVersion = Number.isInteger(version) && version > 0;
653
+ return {
654
+ id: skill.name,
655
+ name: display_name ?? skill.name,
656
+ description: skill.description,
657
+ ...repository_name === void 0 ? {} : { skillRepoName: repository_name },
658
+ ...hasVersion ? {
659
+ version,
660
+ loadVersions: async () => (await client.skills.listVersions({ name: skill.name })).data
661
+ } : {}
662
+ };
663
+ });
637
664
  },
638
665
  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
- };
666
+ getMcpConnector: async ({ connectorId }) => {
667
+ const body = await client.mcpServers.get(connectorId);
668
+ return toUiConnectorFromReadEntry(body.data);
645
669
  },
646
670
  getMcpTools: async ({ connectorId }) => {
647
671
  const body = await client.mcpServers.listTools(connectorId);
@@ -957,10 +981,12 @@ function toHarnessManifest3(req) {
957
981
  };
958
982
  }
959
983
  function toUiSkill2(skill, catalogNames) {
984
+ const manifest = skill.manifest;
985
+ const displayName = "displayName" in manifest && typeof manifest.displayName === "string" ? manifest.displayName : manifest.name;
960
986
  const base = {
961
987
  id: skill.name,
962
- name: skill.name,
963
- description: skill.manifest.description
988
+ name: displayName,
989
+ description: manifest.description
964
990
  };
965
991
  if (catalogNames.has(skill.name)) {
966
992
  return { ...base, catalogId: skill.name };
@@ -1005,6 +1031,14 @@ function createSkillCatalog(client) {
1005
1031
  };
1006
1032
  }
1007
1033
 
1034
+ // src/plugins/trueforge-agent-server-adapter/permissionsServer.ts
1035
+ function createHarnessPermissionsServer(options = {}) {
1036
+ const client = options.client ?? createTrueForgeClient(options);
1037
+ return {
1038
+ listPermissions: (request) => client.internal.listPermissions(request)
1039
+ };
1040
+ }
1041
+
1008
1042
  // src/plugins/trueforge-agent-server-adapter/schedules/scheduleServer.ts
1009
1043
  var SCHEDULES_PAGE_LIMIT = 25;
1010
1044
  async function loadAgentIndex(client) {
@@ -1127,7 +1161,7 @@ function createScheduleServer(options) {
1127
1161
 
1128
1162
  // src/plugins/trueforge-agent-server-adapter/index.ts
1129
1163
  function createTrueForgeAgentUIServer(options = {}) {
1130
- const { catalog: catalogOverride, ...clientOptions } = options;
1164
+ const { catalog: catalogOverride, permissions, ...clientOptions } = options;
1131
1165
  const client = createTrueForgeClient(clientOptions);
1132
1166
  const catalog = catalogOverride ?? {
1133
1167
  modelCatalog: createModelProviderCatalog(client),
@@ -1141,7 +1175,8 @@ function createTrueForgeAgentUIServer(options = {}) {
1141
1175
  catalog,
1142
1176
  sessions: createHarnessAgentSessionsServer({ ...clientOptions, client }),
1143
1177
  metrics: createHarnessAgentMetricsServer({ ...clientOptions, client }),
1144
- schedules: createScheduleServer({ client })
1178
+ schedules: createScheduleServer({ client }),
1179
+ permissions: permissions ?? createHarnessPermissionsServer({ client })
1145
1180
  });
1146
1181
  }
1147
1182
  export {
@@ -1151,6 +1186,7 @@ export {
1151
1186
  createHarnessAgentSessionsServer,
1152
1187
  createHarnessBuilderServer,
1153
1188
  createHarnessChatServer,
1189
+ createHarnessPermissionsServer,
1154
1190
  createModelProviderCatalog,
1155
1191
  createSandboxProviderCatalog,
1156
1192
  createScheduleServer,
@@ -1160,7 +1196,6 @@ export {
1160
1196
  filterUiSandboxProviders,
1161
1197
  getCapabilities,
1162
1198
  listConfiguredMcpServers,
1163
- listConfiguredMcpServersPage,
1164
1199
  listModels,
1165
1200
  listSkills,
1166
1201
  modelProviderLogosByName,