@datalayer/core 1.2.27 → 1.2.29

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 (80) hide show
  1. package/lib/api/evals/__tests__/external-definition.golden.json +110 -0
  2. package/lib/api/evals/client.d.ts +13 -1
  3. package/lib/api/evals/client.js +13 -0
  4. package/lib/api/evals/types.d.ts +168 -1
  5. package/lib/api/mcp/agentAccess.d.ts +10 -0
  6. package/lib/api/mcp/agentAccess.js +28 -0
  7. package/lib/api/mcp/generated.js +20 -0
  8. package/lib/api/mcp/index.d.ts +1 -0
  9. package/lib/api/mcp/index.js +1 -0
  10. package/lib/api/mcp/observability.d.ts +1 -1
  11. package/lib/api/mcp/observability.js +2 -0
  12. package/lib/api/mcp/operations.d.ts +28 -10
  13. package/lib/api/mcp/tasks.d.ts +9 -1
  14. package/lib/api/otel/firewall.d.ts +74 -0
  15. package/lib/api/otel/firewall.js +42 -0
  16. package/lib/api/otel/index.d.ts +1 -0
  17. package/lib/api/otel/index.js +1 -0
  18. package/lib/cli-login.js +2 -2
  19. package/lib/components/anonymous/AnonymousKeyExpired.js +15 -3
  20. package/lib/components/index.d.ts +1 -0
  21. package/lib/components/index.js +1 -0
  22. package/lib/components/mcp/ScopeList.js +10 -1
  23. package/lib/components/principal/PrincipalSwitcherMenu.js +4 -4
  24. package/lib/components/sharing/ShareAccessComponent.js +33 -8
  25. package/lib/components/toast/ToastPanel.d.ts +11 -0
  26. package/lib/components/toast/ToastPanel.js +42 -0
  27. package/lib/components/toast/index.d.ts +2 -0
  28. package/lib/components/toast/index.js +6 -0
  29. package/lib/components/toast/toastQueue.d.ts +35 -0
  30. package/lib/components/toast/toastQueue.js +47 -0
  31. package/lib/hooks/index.d.ts +1 -0
  32. package/lib/hooks/index.js +1 -0
  33. package/lib/hooks/useCache.d.ts +4 -2
  34. package/lib/hooks/useCache.js +13 -4
  35. package/lib/hooks/useDatalayer.js +12 -16
  36. package/lib/hooks/useKeptScroll.d.ts +6 -0
  37. package/lib/hooks/useKeptScroll.js +54 -0
  38. package/lib/hooks/useMcp.d.ts +2 -2
  39. package/lib/hooks/useMcp.js +5 -2
  40. package/lib/hooks/useNavigate.d.ts +16 -2
  41. package/lib/hooks/useNavigate.js +65 -5
  42. package/lib/hooks/useToast.d.ts +6 -0
  43. package/lib/hooks/useToast.js +40 -1
  44. package/lib/models/McpAgentAccess.d.ts +95 -0
  45. package/lib/models/McpAgentAccess.js +5 -0
  46. package/lib/models/Usage.d.ts +13 -0
  47. package/lib/models/Usage.js +5 -0
  48. package/lib/models/index.d.ts +1 -0
  49. package/lib/models/index.js +1 -0
  50. package/lib/otel/client/OtelClient.d.ts +56 -0
  51. package/lib/otel/client/OtelClient.js +25 -0
  52. package/lib/otel/client/index.d.ts +1 -1
  53. package/lib/otel/index.d.ts +1 -1
  54. package/lib/otel/views/OtelLive.js +3 -3
  55. package/lib/otel/views/OtelLiveSpans.js +2 -2
  56. package/lib/otel/views/OtelLogsList.js +3 -3
  57. package/lib/otel/views/OtelMetricsChart.d.ts +13 -0
  58. package/lib/otel/views/OtelMetricsChart.js +109 -26
  59. package/lib/otel/views/OtelSpanDetail.js +3 -3
  60. package/lib/otel/views/OtelSqlView.js +4 -4
  61. package/lib/otel/views/OtelSystemView.js +2 -2
  62. package/lib/otel/views/OtelTimelineRangeSlider.js +2 -2
  63. package/lib/otel/views/OtelTracesList.js +2 -2
  64. package/lib/state/substates/LayoutState.js +24 -3
  65. package/lib/state/substates/NavigationState.d.ts +11 -3
  66. package/lib/state/substates/NavigationState.js +48 -5
  67. package/lib/views/mcp/AuditLog.js +1 -1
  68. package/lib/views/mcp/ConnectedAgents.d.ts +1 -1
  69. package/lib/views/mcp/ConnectedAgents.js +13 -10
  70. package/lib/views/mcp/McpDashboard.d.ts +1 -1
  71. package/lib/views/mcp/McpDashboard.js +6 -6
  72. package/lib/views/mcp/McpHome.d.ts +3 -1
  73. package/lib/views/mcp/McpHome.js +19 -9
  74. package/lib/views/mcp/McpObservability.d.ts +22 -3
  75. package/lib/views/mcp/McpObservability.js +65 -17
  76. package/lib/views/mcp/Policies.js +1 -1
  77. package/lib/views/mcp/RunDetail.js +2 -2
  78. package/lib/views/mcp/types.d.ts +8 -4
  79. package/lib/views/otel/OtelHeader.js +2 -2
  80. package/package.json +2 -2
@@ -160,8 +160,8 @@ export const RunDetail = ({ taskUid, errorState, routes, mock = false, }) => {
160
160
  return (_jsxs(Box, { display: "grid", gap: 3, minWidth: 0, children: [_jsxs(Box, { children: [_jsx(Link, { href: routes.runs, onClick: event => {
161
161
  event.preventDefault();
162
162
  navigate(routes.runs);
163
- }, sx: { fontSize: 0 }, children: "All runs" }), _jsx(Heading, { as: "h2", sx: { fontSize: 3, mt: 1, mb: 1 }, children: task.tool || 'Run' }), _jsxs(Box, { display: "flex", gap: 2, alignItems: "center", flexWrap: "wrap", children: [_jsx(Label, { size: "small", variant: look.variant, children: look.label }), _jsx(Text, { sx: { fontFamily: 'mono', fontSize: 0, color: 'fg.muted' }, children: task.uid }), _jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: ["updated ", _jsx(RelativeTime, { datetime: task.lastUpdatedAt })] })] }), task.statusMessage && (_jsx(Text, { as: "p", sx: { fontSize: 1, color: 'fg.muted', mt: 2 }, children: task.statusMessage }))] }), task.status === 'input_required' && (_jsxs(Box, { borderWidth: 1, borderStyle: "solid", borderColor: "attention.emphasis", borderRadius: 2, p: 3, display: "grid", gap: 2, children: [_jsx(Heading, { as: "h3", sx: { fontSize: 1 }, children: "This run is waiting on you" }), _jsx(Textarea, { "aria-label": "Your answer", value: reply, onChange: event => setReply(event.target.value), placeholder: "Your answer", rows: 3 }), _jsx(Box, { children: _jsx(Button, { variant: "primary", disabled: !reply.trim() || answer.isPending, onClick: () => answer.mutate({ taskUid: task.uid, input: { answer: reply } }, { onSuccess: () => setReply('') }), children: answer.isPending ? 'Answering…' : 'Answer' }) })] })), _jsxs(Box, { children: [_jsx(Heading, { as: "h3", sx: { fontSize: 1, mb: 2 }, children: "Output" }), output ? (_jsx(Box, { as: "pre", fontFamily: "mono", fontSize: 0, whiteSpace: "pre-wrap", overflowX: "auto", bg: "canvas.subtle", borderRadius: 2, p: 3, m: 0, children: output })) : (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: over
163
+ }, sx: { fontSize: 0 }, children: "All runs" }), _jsx(Heading, { as: "h2", sx: { fontSize: 3, mt: 1, mb: 1 }, children: task.tool || 'Run' }), _jsxs(Box, { display: "flex", gap: 2, alignItems: "center", flexWrap: "wrap", children: [_jsx(Label, { size: "small", variant: look.variant, children: look.label }), _jsx(Text, { sx: { fontFamily: 'mono', fontSize: 0, color: 'fg.muted' }, children: task.uid }), _jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: ["updated ", _jsx(RelativeTime, { datetime: task.lastUpdatedAt })] })] }), task.statusMessage && (_jsx(Text, { as: "p", sx: { fontSize: 1, color: 'fg.muted', mt: 2 }, children: task.statusMessage }))] }), task.status === 'input_required' && (_jsxs(Box, { borderWidth: 1, borderStyle: "solid", borderColor: "attention.emphasis", borderRadius: 2, p: 3, display: "grid", gap: 2, children: [_jsx(Heading, { as: "h3", sx: { fontSize: 1 }, children: "This run is waiting on you" }), _jsx(Textarea, { "aria-label": "Your answer", value: reply, onChange: event => setReply(event.target.value), placeholder: "Your answer", rows: 3 }), _jsxs(Box, { children: [_jsx(Button, { variant: "primary", disabled: !reply.trim() || answer.isPending, onClick: () => answer.mutate({ taskUid: task.uid, input: { answer: reply } }, { onSuccess: () => setReply('') }), children: answer.isPending ? 'Answering…' : 'Answer' }), answer.error && (_jsxs(Text, { as: "p", sx: { fontSize: 0, color: 'danger.fg', mt: 2 }, children: ["The answer did not reach the run: ", answer.error.message] }))] })] })), _jsxs(Box, { children: [_jsx(Heading, { as: "h3", sx: { fontSize: 1, mb: 2 }, children: "Output" }), output ? (_jsx(Box, { as: "pre", fontFamily: "mono", fontSize: 0, whiteSpace: "pre-wrap", overflowX: "auto", bg: "canvas.subtle", borderRadius: 2, p: 3, m: 0, children: output })) : (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: over
164
164
  ? 'This run printed nothing.'
165
- : 'Nothing printed yet. Output appears here as it arrives.' }))] }), failure && (_jsxs(Box, { children: [_jsx(Heading, { as: "h3", sx: { fontSize: 1, mb: 2 }, children: "Why it failed" }), _jsx(Text, { sx: { fontFamily: 'mono', fontSize: 0, color: 'danger.fg' }, children: failure })] })), _jsx(TraceTimelineSection, { tree: mock ? SAMPLE_TRACE : (trace.data?.tree ?? []), traceId: mock ? SAMPLE_TRACE[0].span.trace_id : trace.data?.traceId, live: !over }), !over && (_jsxs(Box, { children: [_jsx(Button, { variant: "danger", disabled: cancel.isPending, onClick: () => cancel.mutate(task.uid), children: cancel.isPending ? 'Cancelling…' : 'Cancel this run' }), _jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mt: 2 }, children: "Cancelling interrupts the work itself, so the sandbox stops being billed for it. What it has already printed is kept." })] }))] }));
165
+ : 'Nothing printed yet. Output appears here as it arrives.' }))] }), failure && (_jsxs(Box, { children: [_jsx(Heading, { as: "h3", sx: { fontSize: 1, mb: 2 }, children: "Why it failed" }), _jsx(Text, { sx: { fontFamily: 'mono', fontSize: 0, color: 'danger.fg' }, children: failure })] })), _jsx(TraceTimelineSection, { tree: mock ? SAMPLE_TRACE : (trace.data?.tree ?? []), traceId: mock ? SAMPLE_TRACE[0].span.trace_id : trace.data?.traceId, live: !over }), !over && (_jsxs(Box, { children: [_jsx(Button, { variant: "danger", disabled: cancel.isPending, onClick: () => cancel.mutate(task.uid), children: cancel.isPending ? 'Cancelling…' : 'Cancel this run' }), cancel.error && (_jsxs(Text, { as: "p", sx: { fontSize: 0, color: 'danger.fg', mt: 2 }, children: ["The run was not cancelled: ", cancel.error.message] })), _jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mt: 2 }, children: "Cancelling interrupts the work itself, so the sandbox stops being billed for it. What it has already printed is kept." })] }))] }));
166
166
  };
167
167
  export default RunDetail;
@@ -51,20 +51,24 @@ export type McpErrorStateFn = (error: unknown, subject: string) => McpErrorState
51
51
  export interface McpRoutes {
52
52
  /** The dashboard: what the connected clients are doing right now. */
53
53
  dashboard: string;
54
- /** Setup and access: the endpoint and the per-client cards. */
55
- access: string;
54
+ /** Configuration: the endpoint and the per-client setup cards. */
55
+ configuration: string;
56
56
  /** The audit log. */
57
57
  audit: string;
58
58
  /** The runs list; a task appends `/{uid}`. */
59
59
  runs: string;
60
60
  /** The observability panes. */
61
61
  observability: string;
62
- /** The connected agents. */
63
- agents: string;
62
+ /** The MCP clients: live connections and authorized clients. */
63
+ clients: string;
64
64
  /** The effective policy. */
65
65
  policies: string;
66
66
  /** The calls list, where an Overview count of calls or credits leads. */
67
67
  calls?: string;
68
68
  /** The bound code sandboxes, where the Overview's sandbox count leads. */
69
69
  sandboxes?: string;
70
+ /** What each agent may execute, where the Tools summary leads. */
71
+ tools?: string;
72
+ /** What each agent can reach, where the Reach summary leads. */
73
+ reach?: string;
70
74
  }
@@ -11,7 +11,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
11
11
  * pass `onSignOut` to wire up your own logout action.
12
12
  */
13
13
  import { useState, useCallback, useRef } from 'react';
14
- import { Box } from '@datalayer/primer-addons';
14
+ import { Box, Card } from '@datalayer/primer-addons';
15
15
  import { Text, Button, Dialog } from '@primer/react';
16
16
  import { TelescopeIcon, SignOutIcon } from '@primer/octicons-react';
17
17
  import { UserBadge } from '../profile/index.js';
@@ -67,5 +67,5 @@ export const OtelHeader = ({ baseUrl = '', token, trailing, onNavigate, onSignOu
67
67
  onClick: () => setDialogOpen(false),
68
68
  buttonType: 'default',
69
69
  },
70
- ], children: [_jsxs(Box, { mb: 2, children: [_jsx(Text, { sx: { fontWeight: 'bold', fontSize: 1, color: 'fg.muted' }, children: "Request" }), _jsx(Box, { as: "pre", fontFamily: "mono", fontSize: 1, p: 2, mt: 1, bg: "canvas.inset", borderRadius: 2, overflow: "auto", color: "fg.default", whiteSpace: "pre-wrap", wordBreak: "break-all", border: "1px solid", borderColor: "border.default", children: dialogRequest })] }), _jsxs(Box, { children: [_jsx(Text, { sx: { fontWeight: 'bold', fontSize: 1, color: 'fg.muted' }, children: "Response" }), _jsx(Box, { as: "pre", fontFamily: "mono", fontSize: 1, p: 2, mt: 1, bg: "canvas.subtle", borderRadius: 2, overflow: "auto", maxHeight: 300, color: dialogVariant === 'error' ? 'danger.fg' : 'fg.default', whiteSpace: "pre-wrap", wordBreak: "break-all", children: dialogBody })] })] }))] }));
70
+ ], children: [_jsxs(Box, { mb: 2, children: [_jsx(Text, { sx: { fontWeight: 'bold', fontSize: 1, color: 'fg.muted' }, children: "Request" }), _jsx(Card, { border: true, shadow: "none", display: "block", as: "pre", fontFamily: "mono", fontSize: 1, p: 2, mt: 1, bg: "canvas.inset", overflow: "auto", color: "fg.default", whiteSpace: "pre-wrap", wordBreak: "break-all", children: dialogRequest })] }), _jsxs(Box, { children: [_jsx(Text, { sx: { fontWeight: 'bold', fontSize: 1, color: 'fg.muted' }, children: "Response" }), _jsx(Box, { as: "pre", fontFamily: "mono", fontSize: 1, p: 2, mt: 1, bg: "canvas.subtle", borderRadius: 2, overflow: "auto", maxHeight: 300, color: dialogVariant === 'error' ? 'danger.fg' : 'fg.default', whiteSpace: "pre-wrap", wordBreak: "break-all", children: dialogBody })] })] }))] }));
71
71
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datalayer/core",
3
- "version": "1.2.27",
3
+ "version": "1.2.29",
4
4
  "type": "module",
5
5
  "workspaces": [
6
6
  ".",
@@ -137,7 +137,7 @@
137
137
  "@primer/behaviors": "^1.8.4",
138
138
  "@primer/brand-primitives": "^0.51.0",
139
139
  "@primer/css": "^21.5.1",
140
- "@primer/octicons-react": "^19.35.0",
140
+ "@primer/octicons-react": "^19.42.0",
141
141
  "@primer/primitives": "^10.7.0",
142
142
  "@primer/react": "^37.31.0",
143
143
  "@primer/react-brand": "^0.58.0",