@burdenoff/microfe-botmanor 2026.1025.3 → 2026.1027.1
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/dist/botlit/BotlitRoutes.js +55 -51
- package/dist/botlit/BotlitRoutes.js.map +1 -1
- package/dist/botlit/components/AgentApprovalPanel.js +233 -0
- package/dist/botlit/components/AgentApprovalPanel.js.map +1 -0
- package/dist/botlit/hooks/useAgentApprovals.js +195 -0
- package/dist/botlit/hooks/useAgentApprovals.js.map +1 -0
- package/dist/botlit/pages/AgentApprovalsPage.js +205 -0
- package/dist/botlit/pages/AgentApprovalsPage.js.map +1 -0
- package/dist/botlit/pages/AgentDetailPage.js +343 -324
- package/dist/botlit/pages/AgentDetailPage.js.map +1 -1
- package/dist/botlit/pages/AgentsListPage.js +143 -135
- package/dist/botlit/pages/AgentsListPage.js.map +1 -1
- package/dist/botlit/pages/PolicyDetailPage.js +419 -609
- package/dist/botlit/pages/PolicyDetailPage.js.map +1 -1
- package/dist/botlit/utils/policyConfig.js +189 -0
- package/dist/botlit/utils/policyConfig.js.map +1 -0
- package/package.json +1 -1
|
@@ -7,17 +7,18 @@ import { Badge as ee, StatusBadge as te } from "../components/Badge.js";
|
|
|
7
7
|
import { isNative as l, nativeImpact as ne, nativeNotify as u } from "../../utils/nativeBridge.js";
|
|
8
8
|
import { EmptyState as re } from "../components/EmptyState.js";
|
|
9
9
|
import { FormField as d, Input as f, Textarea as p } from "../components/Input.js";
|
|
10
|
-
import { useCreatePolicy as
|
|
11
|
-
import { toUnion as
|
|
10
|
+
import { useCreatePolicy as m, useDeletePolicy as ie, usePolicy as ae, useUpdatePolicy as oe } from "../hooks/usePolicies.js";
|
|
11
|
+
import { toUnion as h } from "../utils/unions.js";
|
|
12
12
|
import "../hooks/index.js";
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
13
|
+
import { A2A_TRUST_LEVELS as se, CREATABLE_POLICY_TYPES as ce, EMPTY_POLICY_FORM as le, TOOL_RISK_LEVELS as ue, buildPolicyConfig as de, isCreatablePolicyType as fe, unenforcedConfigKeys as pe } from "../utils/policyConfig.js";
|
|
14
|
+
import { useState as g } from "react";
|
|
15
|
+
import { PagePurpose as me } from "@burdenoff/fe-libs/ui";
|
|
16
|
+
import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
|
|
17
|
+
import { useParams as he } from "react-router";
|
|
18
|
+
import { AlertTriangle as b, ArrowLeft as ge, Clock as x, Database as S, DollarSign as C, Edit as _e, FileText as w, Power as ve, Save as T, Settings as ye, Shield as E, Trash2 as D, Wrench as O } from "lucide-react";
|
|
19
|
+
import { toast as k } from "sonner";
|
|
19
20
|
//#region src/botlit/pages/PolicyDetailPage.tsx
|
|
20
|
-
var
|
|
21
|
+
var be = [
|
|
21
22
|
"CONTENT",
|
|
22
23
|
"TOOL",
|
|
23
24
|
"DATA",
|
|
@@ -25,23 +26,19 @@ var O = [
|
|
|
25
26
|
"BUDGET",
|
|
26
27
|
"RATE_LIMIT",
|
|
27
28
|
"RETENTION"
|
|
28
|
-
],
|
|
29
|
+
], xe = [
|
|
29
30
|
"PRIVATE",
|
|
30
31
|
"WORKSPACE",
|
|
31
32
|
"PUBLIC"
|
|
32
|
-
]
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
BUDGET: /* @__PURE__ */ g(x, { size: 18 }),
|
|
42
|
-
RATE_LIMIT: /* @__PURE__ */ g(y, { size: 18 }),
|
|
43
|
-
RETENTION: /* @__PURE__ */ g(T, { size: 18 })
|
|
44
|
-
})[e] || /* @__PURE__ */ g(w, { size: 18 }), ge = {
|
|
33
|
+
], A = "flex h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm", j = ({ type: e }) => ({
|
|
34
|
+
CONTENT: /* @__PURE__ */ v(b, { size: 18 }),
|
|
35
|
+
TOOL: /* @__PURE__ */ v(O, { size: 18 }),
|
|
36
|
+
DATA: /* @__PURE__ */ v(S, { size: 18 }),
|
|
37
|
+
RESPONSE: /* @__PURE__ */ v(w, { size: 18 }),
|
|
38
|
+
BUDGET: /* @__PURE__ */ v(C, { size: 18 }),
|
|
39
|
+
RATE_LIMIT: /* @__PURE__ */ v(x, { size: 18 }),
|
|
40
|
+
RETENTION: /* @__PURE__ */ v(D, { size: 18 })
|
|
41
|
+
})[e] || /* @__PURE__ */ v(E, { size: 18 }), M = {
|
|
45
42
|
CONTENT: "Content Policy",
|
|
46
43
|
TOOL: "Tool Policy",
|
|
47
44
|
DATA: "Data Policy",
|
|
@@ -49,262 +46,174 @@ var A = ({ type: e }) => ({
|
|
|
49
46
|
BUDGET: "Budget Policy",
|
|
50
47
|
RATE_LIMIT: "Rate Limit Policy",
|
|
51
48
|
RETENTION: "Retention Policy"
|
|
52
|
-
},
|
|
53
|
-
let { policyId:
|
|
49
|
+
}, N = ({ isNew: S }) => {
|
|
50
|
+
let { policyId: N } = he(), { navigateTo: P } = e(), { data: F, loading: Se, refetch: I } = ae(S ? void 0 : N), { create: Ce, loading: we } = m(), { update: L, loading: R } = oe(), { remove: Te, loading: Ee } = ie(), [z, B] = g(!1), [De, V] = g(!1), [H, U] = g({
|
|
54
51
|
name: "",
|
|
55
52
|
description: "",
|
|
56
53
|
type: "CONTENT",
|
|
57
54
|
visibility: "PRIVATE"
|
|
58
|
-
}), [
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}), [K, q] = h({
|
|
69
|
-
maxTokensPerExecution: 1e4,
|
|
70
|
-
maxCostPerExecution: 1,
|
|
71
|
-
allowEscalation: !1,
|
|
72
|
-
maxModelTier: "gpt-4"
|
|
73
|
-
}), [J, Y] = h({
|
|
74
|
-
requestsPerMinute: 60,
|
|
75
|
-
requestsPerHour: 1e3,
|
|
76
|
-
tokensPerMinute: 1e5,
|
|
77
|
-
scope: "app"
|
|
78
|
-
}), [X, Ce] = h({
|
|
79
|
-
allowedModels: "",
|
|
80
|
-
allowedProviders: ""
|
|
81
|
-
}), [we, Te] = h(!1), [Z, Ee] = h({
|
|
82
|
-
executionDataRetentionDays: 90,
|
|
83
|
-
payloadSnapshotsEnabled: !0
|
|
84
|
-
}), De = async () => {
|
|
85
|
-
if (!B.name) return;
|
|
86
|
-
let e;
|
|
87
|
-
switch (B.type) {
|
|
88
|
-
case "CONTENT":
|
|
89
|
-
e = {
|
|
90
|
-
jailbreakDetection: H.jailbreakDetection,
|
|
91
|
-
piiDetection: H.piiDetection,
|
|
92
|
-
toxicityThreshold: H.toxicityThreshold,
|
|
93
|
-
customPatterns: H.customPatterns.split("\n").filter(Boolean)
|
|
94
|
-
};
|
|
95
|
-
break;
|
|
96
|
-
case "TOOL":
|
|
97
|
-
e = {
|
|
98
|
-
allowedTools: W.allowedTools.split(",").map((e) => e.trim()).filter(Boolean),
|
|
99
|
-
deniedTools: W.deniedTools.split(",").map((e) => e.trim()).filter(Boolean),
|
|
100
|
-
limits: {
|
|
101
|
-
maxCallsPerExecution: W.maxCallsPerExecution,
|
|
102
|
-
timeoutSeconds: W.timeoutSeconds
|
|
103
|
-
}
|
|
104
|
-
};
|
|
105
|
-
break;
|
|
106
|
-
case "BUDGET":
|
|
107
|
-
e = {
|
|
108
|
-
maxTokensPerExecution: K.maxTokensPerExecution,
|
|
109
|
-
maxCostPerExecution: K.maxCostPerExecution,
|
|
110
|
-
modelEscalationConstraints: {
|
|
111
|
-
allowEscalation: K.allowEscalation,
|
|
112
|
-
maxModelTier: K.maxModelTier
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
|
-
break;
|
|
116
|
-
case "RATE_LIMIT":
|
|
117
|
-
e = {
|
|
118
|
-
limits: {
|
|
119
|
-
requestsPerMinute: J.requestsPerMinute,
|
|
120
|
-
requestsPerHour: J.requestsPerHour,
|
|
121
|
-
tokensPerMinute: J.tokensPerMinute
|
|
122
|
-
},
|
|
123
|
-
scope: J.scope
|
|
124
|
-
};
|
|
125
|
-
break;
|
|
126
|
-
case "RESPONSE": {
|
|
127
|
-
let t = k(X.allowedModels), n = k(X.allowedProviders).map((e) => e.toUpperCase());
|
|
128
|
-
e = {
|
|
129
|
-
...t.length > 0 ? { allowedModels: t } : {},
|
|
130
|
-
...n.length > 0 ? { allowedProviders: n } : {}
|
|
131
|
-
};
|
|
132
|
-
break;
|
|
55
|
+
}), [W, G] = g({
|
|
56
|
+
name: "",
|
|
57
|
+
description: "",
|
|
58
|
+
visibility: "PRIVATE"
|
|
59
|
+
}), [K, Oe] = g(le), [q, J] = g(null), Y = (e, t) => {
|
|
60
|
+
J(null), Oe((n) => ({
|
|
61
|
+
...n,
|
|
62
|
+
[e]: {
|
|
63
|
+
...n[e],
|
|
64
|
+
...t
|
|
133
65
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
66
|
+
}));
|
|
67
|
+
}, [X, ke] = g(!1), Ae = async () => {
|
|
68
|
+
if (!H.name) return;
|
|
69
|
+
let e = de(H.type, K);
|
|
70
|
+
if (!e.ok) {
|
|
71
|
+
J(e.error), k.error(e.error);
|
|
72
|
+
return;
|
|
140
73
|
}
|
|
141
74
|
try {
|
|
142
|
-
await
|
|
143
|
-
name:
|
|
144
|
-
description:
|
|
145
|
-
type:
|
|
146
|
-
visibility:
|
|
147
|
-
status:
|
|
148
|
-
config: e
|
|
75
|
+
await Ce({
|
|
76
|
+
name: H.name,
|
|
77
|
+
description: H.description,
|
|
78
|
+
type: H.type,
|
|
79
|
+
visibility: H.visibility,
|
|
80
|
+
status: X ? "ACTIVE" : "DRAFT",
|
|
81
|
+
config: e.config
|
|
149
82
|
});
|
|
150
83
|
} catch (e) {
|
|
151
|
-
|
|
84
|
+
k.error(e instanceof Error ? e.message : "Failed to create policy");
|
|
152
85
|
return;
|
|
153
86
|
}
|
|
154
|
-
|
|
155
|
-
},
|
|
156
|
-
if (!(!
|
|
87
|
+
k.success(`Policy "${H.name}" created`), P("policies");
|
|
88
|
+
}, je = async () => {
|
|
89
|
+
if (!(!N || !W.name)) {
|
|
157
90
|
try {
|
|
158
|
-
await
|
|
159
|
-
policyId:
|
|
91
|
+
await L({
|
|
92
|
+
policyId: N,
|
|
160
93
|
input: {
|
|
161
|
-
name:
|
|
162
|
-
description:
|
|
163
|
-
visibility:
|
|
94
|
+
name: W.name,
|
|
95
|
+
description: W.description,
|
|
96
|
+
visibility: W.visibility
|
|
164
97
|
}
|
|
165
98
|
});
|
|
166
99
|
} catch (e) {
|
|
167
|
-
|
|
100
|
+
k.error(e instanceof Error ? e.message : "Failed to update policy");
|
|
168
101
|
return;
|
|
169
102
|
}
|
|
170
|
-
await
|
|
103
|
+
await I(), k.success("Policy updated"), B(!1);
|
|
171
104
|
}
|
|
172
|
-
},
|
|
173
|
-
if (
|
|
174
|
-
await
|
|
105
|
+
}, Me = async () => {
|
|
106
|
+
if (N) try {
|
|
107
|
+
await Te(N), l() && u("success"), P("policies");
|
|
175
108
|
} catch (e) {
|
|
176
109
|
throw l() && u("error"), e;
|
|
177
110
|
}
|
|
178
|
-
},
|
|
179
|
-
if (!
|
|
180
|
-
let e =
|
|
111
|
+
}, Z = F?.status === "ACTIVE", Ne = async () => {
|
|
112
|
+
if (!N) return;
|
|
113
|
+
let e = Z ? "DRAFT" : "ACTIVE";
|
|
181
114
|
try {
|
|
182
|
-
await
|
|
183
|
-
policyId:
|
|
115
|
+
await L({
|
|
116
|
+
policyId: N,
|
|
184
117
|
input: { status: e }
|
|
185
118
|
});
|
|
186
119
|
} catch (e) {
|
|
187
|
-
|
|
120
|
+
k.error(e instanceof Error ? e.message : "Failed to update policy");
|
|
188
121
|
return;
|
|
189
122
|
}
|
|
190
|
-
await
|
|
191
|
-
},
|
|
192
|
-
|
|
193
|
-
name:
|
|
194
|
-
description:
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
}), R(!0));
|
|
123
|
+
await I(), k.success(e === "ACTIVE" ? "Policy is now enforced" : "Policy is no longer enforced");
|
|
124
|
+
}, Pe = () => {
|
|
125
|
+
F && (G({
|
|
126
|
+
name: F.name,
|
|
127
|
+
description: F.description || "",
|
|
128
|
+
visibility: h(F.visibility, xe, "PRIVATE")
|
|
129
|
+
}), B(!0));
|
|
198
130
|
};
|
|
199
|
-
if (
|
|
131
|
+
if (S) return /* @__PURE__ */ v(n, {
|
|
200
132
|
title: "Create Policy",
|
|
201
133
|
description: "Define guardrails and constraints for your AI agents",
|
|
202
|
-
actions: /* @__PURE__ */
|
|
134
|
+
actions: /* @__PURE__ */ y("div", {
|
|
203
135
|
className: "flex gap-2",
|
|
204
|
-
children: [/* @__PURE__ */
|
|
136
|
+
children: [/* @__PURE__ */ v(c, {
|
|
205
137
|
variant: "outline",
|
|
206
|
-
onClick: () =>
|
|
138
|
+
onClick: () => P("policies"),
|
|
207
139
|
children: "Cancel"
|
|
208
|
-
}), /* @__PURE__ */
|
|
209
|
-
leftIcon: /* @__PURE__ */
|
|
210
|
-
onClick:
|
|
211
|
-
isLoading:
|
|
212
|
-
disabled: !
|
|
140
|
+
}), /* @__PURE__ */ v(c, {
|
|
141
|
+
leftIcon: /* @__PURE__ */ v(T, { size: 16 }),
|
|
142
|
+
onClick: Ae,
|
|
143
|
+
isLoading: we,
|
|
144
|
+
disabled: !H.name,
|
|
213
145
|
children: "Create"
|
|
214
146
|
})]
|
|
215
147
|
}),
|
|
216
|
-
children: /* @__PURE__ */
|
|
148
|
+
children: /* @__PURE__ */ y("div", {
|
|
217
149
|
className: "max-w-2xl space-y-6",
|
|
218
150
|
children: [
|
|
219
|
-
/* @__PURE__ */
|
|
151
|
+
/* @__PURE__ */ y(r, { children: [/* @__PURE__ */ v(o, { children: /* @__PURE__ */ v(s, { children: "Basic Information" }) }), /* @__PURE__ */ y(i, {
|
|
220
152
|
className: "space-y-4",
|
|
221
153
|
children: [
|
|
222
|
-
/* @__PURE__ */
|
|
154
|
+
/* @__PURE__ */ v(d, {
|
|
223
155
|
label: "Policy Name",
|
|
224
156
|
required: !0,
|
|
225
|
-
children: /* @__PURE__ */
|
|
157
|
+
children: /* @__PURE__ */ v(f, {
|
|
226
158
|
placeholder: "e.g., Production Content Policy",
|
|
227
|
-
value:
|
|
228
|
-
onChange: (e) =>
|
|
229
|
-
...
|
|
159
|
+
value: H.name,
|
|
160
|
+
onChange: (e) => U({
|
|
161
|
+
...H,
|
|
230
162
|
name: e.target.value
|
|
231
163
|
})
|
|
232
164
|
})
|
|
233
165
|
}),
|
|
234
|
-
/* @__PURE__ */
|
|
166
|
+
/* @__PURE__ */ v(d, {
|
|
235
167
|
label: "Description",
|
|
236
|
-
children: /* @__PURE__ */
|
|
168
|
+
children: /* @__PURE__ */ v(p, {
|
|
237
169
|
placeholder: "What does this policy enforce?",
|
|
238
|
-
value:
|
|
239
|
-
onChange: (e) =>
|
|
240
|
-
...
|
|
170
|
+
value: H.description,
|
|
171
|
+
onChange: (e) => U({
|
|
172
|
+
...H,
|
|
241
173
|
description: e.target.value
|
|
242
174
|
}),
|
|
243
175
|
rows: 3
|
|
244
176
|
})
|
|
245
177
|
}),
|
|
246
|
-
/* @__PURE__ */
|
|
178
|
+
/* @__PURE__ */ y("div", {
|
|
247
179
|
className: "grid grid-cols-2 gap-4",
|
|
248
|
-
children: [/* @__PURE__ */
|
|
180
|
+
children: [/* @__PURE__ */ v(d, {
|
|
249
181
|
label: "Policy Type",
|
|
250
182
|
required: !0,
|
|
251
|
-
children: /* @__PURE__ */
|
|
252
|
-
className:
|
|
253
|
-
value:
|
|
254
|
-
onChange: (e) =>
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
children: "Tool Policy"
|
|
266
|
-
}),
|
|
267
|
-
/* @__PURE__ */ g("option", {
|
|
268
|
-
value: "DATA",
|
|
269
|
-
children: "Data Policy"
|
|
270
|
-
}),
|
|
271
|
-
/* @__PURE__ */ g("option", {
|
|
272
|
-
value: "RESPONSE",
|
|
273
|
-
children: "Response & Model Policy"
|
|
274
|
-
}),
|
|
275
|
-
/* @__PURE__ */ g("option", {
|
|
276
|
-
value: "BUDGET",
|
|
277
|
-
children: "Budget Policy"
|
|
278
|
-
}),
|
|
279
|
-
/* @__PURE__ */ g("option", {
|
|
280
|
-
value: "RATE_LIMIT",
|
|
281
|
-
children: "Rate Limit Policy"
|
|
282
|
-
}),
|
|
283
|
-
/* @__PURE__ */ g("option", {
|
|
284
|
-
value: "RETENTION",
|
|
285
|
-
children: "Retention Policy"
|
|
286
|
-
})
|
|
287
|
-
]
|
|
183
|
+
children: /* @__PURE__ */ v("select", {
|
|
184
|
+
className: A,
|
|
185
|
+
value: H.type,
|
|
186
|
+
onChange: (e) => {
|
|
187
|
+
let t = e.target.value;
|
|
188
|
+
fe(t) && (J(null), U({
|
|
189
|
+
...H,
|
|
190
|
+
type: t
|
|
191
|
+
}));
|
|
192
|
+
},
|
|
193
|
+
children: ce.map((e) => /* @__PURE__ */ v("option", {
|
|
194
|
+
value: e,
|
|
195
|
+
children: M[e]
|
|
196
|
+
}, e))
|
|
288
197
|
})
|
|
289
|
-
}), /* @__PURE__ */
|
|
198
|
+
}), /* @__PURE__ */ v(d, {
|
|
290
199
|
label: "Visibility",
|
|
291
|
-
children: /* @__PURE__ */
|
|
200
|
+
children: /* @__PURE__ */ y("select", {
|
|
292
201
|
className: "flex h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm",
|
|
293
|
-
value:
|
|
294
|
-
onChange: (e) =>
|
|
295
|
-
...
|
|
202
|
+
value: H.visibility,
|
|
203
|
+
onChange: (e) => U({
|
|
204
|
+
...H,
|
|
296
205
|
visibility: e.target.value
|
|
297
206
|
}),
|
|
298
207
|
children: [
|
|
299
|
-
/* @__PURE__ */
|
|
208
|
+
/* @__PURE__ */ v("option", {
|
|
300
209
|
value: "PRIVATE",
|
|
301
210
|
children: "Private"
|
|
302
211
|
}),
|
|
303
|
-
/* @__PURE__ */
|
|
212
|
+
/* @__PURE__ */ v("option", {
|
|
304
213
|
value: "WORKSPACE",
|
|
305
214
|
children: "Workspace"
|
|
306
215
|
}),
|
|
307
|
-
/* @__PURE__ */
|
|
216
|
+
/* @__PURE__ */ v("option", {
|
|
308
217
|
value: "PUBLIC",
|
|
309
218
|
children: "Public"
|
|
310
219
|
})
|
|
@@ -314,628 +223,529 @@ var A = ({ type: e }) => ({
|
|
|
314
223
|
})
|
|
315
224
|
]
|
|
316
225
|
})] }),
|
|
317
|
-
|
|
226
|
+
H.type === "CONTENT" && /* @__PURE__ */ y(r, { children: [/* @__PURE__ */ y(o, { children: [/* @__PURE__ */ y(s, {
|
|
318
227
|
className: "flex items-center gap-2",
|
|
319
|
-
children: [/* @__PURE__ */
|
|
320
|
-
}) }), /* @__PURE__ */
|
|
228
|
+
children: [/* @__PURE__ */ v(b, { size: 18 }), "Content Policy Configuration"]
|
|
229
|
+
}), /* @__PURE__ */ v(a, { children: "Checked against every message sent to an agent and every response it gives. A blocked message is refused; a blocked response is replaced with a refusal." })] }), /* @__PURE__ */ y(i, {
|
|
321
230
|
className: "space-y-4",
|
|
322
231
|
children: [
|
|
323
|
-
/* @__PURE__ */
|
|
324
|
-
className: "
|
|
325
|
-
children: [/* @__PURE__ */
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
className: "
|
|
336
|
-
}), /* @__PURE__ */ g("label", {
|
|
337
|
-
htmlFor: "jailbreak",
|
|
338
|
-
className: "text-sm",
|
|
339
|
-
children: "Jailbreak Detection"
|
|
340
|
-
})]
|
|
341
|
-
}), /* @__PURE__ */ _("div", {
|
|
342
|
-
className: "flex items-center gap-2",
|
|
343
|
-
children: [/* @__PURE__ */ g("input", {
|
|
344
|
-
type: "checkbox",
|
|
345
|
-
id: "pii",
|
|
346
|
-
checked: H.piiDetection,
|
|
347
|
-
onChange: (e) => U({
|
|
348
|
-
...H,
|
|
349
|
-
piiDetection: e.target.checked
|
|
350
|
-
}),
|
|
351
|
-
className: "h-4 w-4"
|
|
352
|
-
}), /* @__PURE__ */ g("label", {
|
|
353
|
-
htmlFor: "pii",
|
|
354
|
-
className: "text-sm",
|
|
232
|
+
/* @__PURE__ */ y("div", {
|
|
233
|
+
className: "flex items-start gap-2",
|
|
234
|
+
children: [/* @__PURE__ */ v("input", {
|
|
235
|
+
type: "checkbox",
|
|
236
|
+
id: "pii",
|
|
237
|
+
checked: K.content.piiDetection,
|
|
238
|
+
onChange: (e) => Y("content", { piiDetection: e.target.checked }),
|
|
239
|
+
className: "mt-1 h-4 w-4"
|
|
240
|
+
}), /* @__PURE__ */ y("label", {
|
|
241
|
+
htmlFor: "pii",
|
|
242
|
+
className: "text-sm",
|
|
243
|
+
children: [/* @__PURE__ */ v("span", {
|
|
244
|
+
className: "font-medium",
|
|
355
245
|
children: "PII Detection"
|
|
246
|
+
}), /* @__PURE__ */ v("span", {
|
|
247
|
+
className: "block text-text-secondary",
|
|
248
|
+
children: "Blocks text containing an email address, a US SSN or a card-number shaped digit run."
|
|
356
249
|
})]
|
|
357
250
|
})]
|
|
358
251
|
}),
|
|
359
|
-
/* @__PURE__ */
|
|
360
|
-
label: "
|
|
361
|
-
description: "
|
|
362
|
-
children: /* @__PURE__ */
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
step: .1,
|
|
367
|
-
value: H.toxicityThreshold,
|
|
368
|
-
onChange: (e) => U({
|
|
369
|
-
...H,
|
|
370
|
-
toxicityThreshold: parseFloat(e.target.value)
|
|
371
|
-
})
|
|
252
|
+
/* @__PURE__ */ v(d, {
|
|
253
|
+
label: "Blocked Keywords",
|
|
254
|
+
description: "Comma-separated. Case-insensitive; any occurrence blocks the text.",
|
|
255
|
+
children: /* @__PURE__ */ v(f, {
|
|
256
|
+
placeholder: "e.g., internal-only, project-x",
|
|
257
|
+
value: K.content.blockedKeywords,
|
|
258
|
+
onChange: (e) => Y("content", { blockedKeywords: e.target.value })
|
|
372
259
|
})
|
|
373
260
|
}),
|
|
374
|
-
/* @__PURE__ */
|
|
375
|
-
label: "
|
|
376
|
-
description: "One
|
|
377
|
-
children: /* @__PURE__ */
|
|
378
|
-
placeholder: "
|
|
379
|
-
value:
|
|
380
|
-
onChange: (e) =>
|
|
381
|
-
...H,
|
|
382
|
-
customPatterns: e.target.value
|
|
383
|
-
}),
|
|
261
|
+
/* @__PURE__ */ v(d, {
|
|
262
|
+
label: "Blocked Patterns",
|
|
263
|
+
description: "One regular expression per line, matched case-insensitively.",
|
|
264
|
+
children: /* @__PURE__ */ v(p, {
|
|
265
|
+
placeholder: "e.g., \\bACME-\\d{6}\\b",
|
|
266
|
+
value: K.content.blockedPatterns,
|
|
267
|
+
onChange: (e) => Y("content", { blockedPatterns: e.target.value }),
|
|
384
268
|
rows: 3
|
|
385
269
|
})
|
|
386
270
|
})
|
|
387
271
|
]
|
|
388
272
|
})] }),
|
|
389
|
-
|
|
273
|
+
H.type === "TOOL" && /* @__PURE__ */ y(r, { children: [/* @__PURE__ */ y(o, { children: [/* @__PURE__ */ y(s, {
|
|
390
274
|
className: "flex items-center gap-2",
|
|
391
|
-
children: [/* @__PURE__ */
|
|
392
|
-
}) }), /* @__PURE__ */
|
|
275
|
+
children: [/* @__PURE__ */ v(O, { size: 18 }), "Tool Policy Configuration"]
|
|
276
|
+
}), /* @__PURE__ */ v(a, { children: "Applies to MCP tool calls made by agents and through Call Tool, and to agent delegation. Leave a field empty to not restrict it." })] }), /* @__PURE__ */ y(i, {
|
|
393
277
|
className: "space-y-4",
|
|
394
278
|
children: [
|
|
395
|
-
/* @__PURE__ */
|
|
279
|
+
/* @__PURE__ */ v(d, {
|
|
396
280
|
label: "Allowed Tools",
|
|
397
|
-
description: "Comma-separated tool
|
|
398
|
-
children: /* @__PURE__ */
|
|
399
|
-
placeholder: "e.g., search,
|
|
400
|
-
value:
|
|
401
|
-
onChange: (e) =>
|
|
402
|
-
...W,
|
|
403
|
-
allowedTools: e.target.value
|
|
404
|
-
})
|
|
281
|
+
description: "Comma-separated MCP tool names. End an entry with * to allow a prefix. Empty allows every tool.",
|
|
282
|
+
children: /* @__PURE__ */ v(f, {
|
|
283
|
+
placeholder: "e.g., search, read_*",
|
|
284
|
+
value: K.tool.allowedTools,
|
|
285
|
+
onChange: (e) => Y("tool", { allowedTools: e.target.value })
|
|
405
286
|
})
|
|
406
287
|
}),
|
|
407
|
-
/* @__PURE__ */
|
|
288
|
+
/* @__PURE__ */ v(d, {
|
|
408
289
|
label: "Denied Tools",
|
|
409
|
-
description: "Comma-separated tool
|
|
410
|
-
children: /* @__PURE__ */
|
|
411
|
-
placeholder: "e.g.,
|
|
412
|
-
value:
|
|
413
|
-
onChange: (e) =>
|
|
414
|
-
...W,
|
|
415
|
-
deniedTools: e.target.value
|
|
416
|
-
})
|
|
290
|
+
description: "Comma-separated MCP tool names that may never run. A deny always wins.",
|
|
291
|
+
children: /* @__PURE__ */ v(f, {
|
|
292
|
+
placeholder: "e.g., delete_*, execute_code",
|
|
293
|
+
value: K.tool.deniedTools,
|
|
294
|
+
onChange: (e) => Y("tool", { deniedTools: e.target.value })
|
|
417
295
|
})
|
|
418
296
|
}),
|
|
419
|
-
/* @__PURE__ */
|
|
420
|
-
className: "grid grid-cols-2 gap-4",
|
|
421
|
-
children: [/* @__PURE__ */
|
|
422
|
-
label: "Max
|
|
423
|
-
children: /* @__PURE__ */
|
|
297
|
+
/* @__PURE__ */ y("div", {
|
|
298
|
+
className: "grid grid-cols-1 sm:grid-cols-2 gap-4",
|
|
299
|
+
children: [/* @__PURE__ */ v(d, {
|
|
300
|
+
label: "Max Tool Risk Level",
|
|
301
|
+
children: /* @__PURE__ */ y("select", {
|
|
302
|
+
className: A,
|
|
303
|
+
value: K.tool.maxToolRiskLevel,
|
|
304
|
+
onChange: (e) => Y("tool", { maxToolRiskLevel: e.target.value }),
|
|
305
|
+
children: [/* @__PURE__ */ v("option", {
|
|
306
|
+
value: "",
|
|
307
|
+
children: "Any risk level"
|
|
308
|
+
}), ue.map((e) => /* @__PURE__ */ y("option", {
|
|
309
|
+
value: e,
|
|
310
|
+
children: ["Up to ", e.toLowerCase()]
|
|
311
|
+
}, e))]
|
|
312
|
+
})
|
|
313
|
+
}), /* @__PURE__ */ v(d, {
|
|
314
|
+
label: "Minimum A2A Trust Level",
|
|
315
|
+
description: "For delegation to external registry agents.",
|
|
316
|
+
children: /* @__PURE__ */ y("select", {
|
|
317
|
+
className: A,
|
|
318
|
+
value: K.tool.a2aMinTrustLevel,
|
|
319
|
+
onChange: (e) => Y("tool", { a2aMinTrustLevel: e.target.value }),
|
|
320
|
+
children: [/* @__PURE__ */ v("option", {
|
|
321
|
+
value: "",
|
|
322
|
+
children: "Default (verified publisher)"
|
|
323
|
+
}), se.map((e) => /* @__PURE__ */ v("option", {
|
|
324
|
+
value: e,
|
|
325
|
+
children: e === "VERIFIED_PUBLISHER" ? "Verified publisher" : e.charAt(0) + e.slice(1).toLowerCase()
|
|
326
|
+
}, e))]
|
|
327
|
+
})
|
|
328
|
+
})]
|
|
329
|
+
}),
|
|
330
|
+
/* @__PURE__ */ y("div", {
|
|
331
|
+
className: "grid grid-cols-1 sm:grid-cols-2 gap-4",
|
|
332
|
+
children: [/* @__PURE__ */ v(d, {
|
|
333
|
+
label: "Max Tool Calls Per Execution",
|
|
334
|
+
description: "Tool calls allowed in one agent turn.",
|
|
335
|
+
children: /* @__PURE__ */ v(f, {
|
|
424
336
|
type: "number",
|
|
425
337
|
min: 1,
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
maxCallsPerExecution: parseInt(e.target.value)
|
|
430
|
-
})
|
|
338
|
+
placeholder: "No limit",
|
|
339
|
+
value: K.tool.maxCallsPerExecution,
|
|
340
|
+
onChange: (e) => Y("tool", { maxCallsPerExecution: e.target.value })
|
|
431
341
|
})
|
|
432
|
-
}), /* @__PURE__ */
|
|
433
|
-
label: "Timeout (seconds)",
|
|
434
|
-
|
|
342
|
+
}), /* @__PURE__ */ v(d, {
|
|
343
|
+
label: "Tool Call Timeout (seconds)",
|
|
344
|
+
description: "Can only shorten the platform's own timeout.",
|
|
345
|
+
children: /* @__PURE__ */ v(f, {
|
|
435
346
|
type: "number",
|
|
436
347
|
min: 1,
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
timeoutSeconds: parseInt(e.target.value)
|
|
441
|
-
})
|
|
348
|
+
placeholder: "Platform default",
|
|
349
|
+
value: K.tool.timeoutSeconds,
|
|
350
|
+
onChange: (e) => Y("tool", { timeoutSeconds: e.target.value })
|
|
442
351
|
})
|
|
443
352
|
})]
|
|
444
353
|
})
|
|
445
354
|
]
|
|
446
355
|
})] }),
|
|
447
|
-
|
|
356
|
+
H.type === "BUDGET" && /* @__PURE__ */ y(r, { children: [/* @__PURE__ */ y(o, { children: [/* @__PURE__ */ y(s, {
|
|
448
357
|
className: "flex items-center gap-2",
|
|
449
|
-
children: [/* @__PURE__ */
|
|
450
|
-
}) }), /* @__PURE__ */
|
|
358
|
+
children: [/* @__PURE__ */ v(C, { size: 18 }), "Budget Policy Configuration"]
|
|
359
|
+
}), /* @__PURE__ */ v(a, { children: "Token budgets apply per agent. Leave a field empty to not restrict it." })] }), /* @__PURE__ */ v(i, {
|
|
451
360
|
className: "space-y-4",
|
|
452
|
-
children:
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
maxTokensPerExecution: parseInt(e.target.value)
|
|
464
|
-
})
|
|
465
|
-
})
|
|
466
|
-
}), /* @__PURE__ */ g(d, {
|
|
467
|
-
label: "Max Cost Per Execution ($)",
|
|
468
|
-
children: /* @__PURE__ */ g(f, {
|
|
469
|
-
type: "number",
|
|
470
|
-
min: .01,
|
|
471
|
-
step: .01,
|
|
472
|
-
value: K.maxCostPerExecution,
|
|
473
|
-
onChange: (e) => q({
|
|
474
|
-
...K,
|
|
475
|
-
maxCostPerExecution: parseFloat(e.target.value)
|
|
476
|
-
})
|
|
477
|
-
})
|
|
478
|
-
})]
|
|
479
|
-
}),
|
|
480
|
-
/* @__PURE__ */ _("div", {
|
|
481
|
-
className: "flex items-center gap-2",
|
|
482
|
-
children: [/* @__PURE__ */ g("input", {
|
|
483
|
-
type: "checkbox",
|
|
484
|
-
id: "escalation",
|
|
485
|
-
checked: K.allowEscalation,
|
|
486
|
-
onChange: (e) => q({
|
|
487
|
-
...K,
|
|
488
|
-
allowEscalation: e.target.checked
|
|
489
|
-
}),
|
|
490
|
-
className: "h-4 w-4"
|
|
491
|
-
}), /* @__PURE__ */ g("label", {
|
|
492
|
-
htmlFor: "escalation",
|
|
493
|
-
className: "text-sm",
|
|
494
|
-
children: "Allow Model Escalation"
|
|
495
|
-
})]
|
|
496
|
-
}),
|
|
497
|
-
/* @__PURE__ */ g(d, {
|
|
498
|
-
label: "Max Model Tier",
|
|
499
|
-
children: /* @__PURE__ */ _("select", {
|
|
500
|
-
className: "flex h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm",
|
|
501
|
-
value: K.maxModelTier,
|
|
502
|
-
onChange: (e) => q({
|
|
503
|
-
...K,
|
|
504
|
-
maxModelTier: e.target.value
|
|
505
|
-
}),
|
|
506
|
-
children: [
|
|
507
|
-
/* @__PURE__ */ g("option", {
|
|
508
|
-
value: "gpt-3.5-turbo",
|
|
509
|
-
children: "GPT-3.5 Turbo"
|
|
510
|
-
}),
|
|
511
|
-
/* @__PURE__ */ g("option", {
|
|
512
|
-
value: "gpt-4",
|
|
513
|
-
children: "GPT-4"
|
|
514
|
-
}),
|
|
515
|
-
/* @__PURE__ */ g("option", {
|
|
516
|
-
value: "gpt-4-turbo",
|
|
517
|
-
children: "GPT-4 Turbo"
|
|
518
|
-
}),
|
|
519
|
-
/* @__PURE__ */ g("option", {
|
|
520
|
-
value: "claude-3-sonnet",
|
|
521
|
-
children: "Claude 3 Sonnet"
|
|
522
|
-
}),
|
|
523
|
-
/* @__PURE__ */ g("option", {
|
|
524
|
-
value: "claude-3-opus",
|
|
525
|
-
children: "Claude 3 Opus"
|
|
526
|
-
})
|
|
527
|
-
]
|
|
361
|
+
children: /* @__PURE__ */ y("div", {
|
|
362
|
+
className: "grid grid-cols-1 sm:grid-cols-2 gap-4",
|
|
363
|
+
children: [/* @__PURE__ */ v(d, {
|
|
364
|
+
label: "Max Tokens Per Day",
|
|
365
|
+
description: "An agent that has used this many tokens today (UTC) is refused.",
|
|
366
|
+
children: /* @__PURE__ */ v(f, {
|
|
367
|
+
type: "number",
|
|
368
|
+
min: 1,
|
|
369
|
+
placeholder: "No limit",
|
|
370
|
+
value: K.budget.maxTokensPerDay,
|
|
371
|
+
onChange: (e) => Y("budget", { maxTokensPerDay: e.target.value })
|
|
528
372
|
})
|
|
529
|
-
})
|
|
530
|
-
|
|
373
|
+
}), /* @__PURE__ */ v(d, {
|
|
374
|
+
label: "Max Output Tokens Per Model Call",
|
|
375
|
+
description: "Lowers the agent's own max-tokens setting when it is higher.",
|
|
376
|
+
children: /* @__PURE__ */ v(f, {
|
|
377
|
+
type: "number",
|
|
378
|
+
min: 1,
|
|
379
|
+
placeholder: "No limit",
|
|
380
|
+
value: K.budget.maxTokensPerExecution,
|
|
381
|
+
onChange: (e) => Y("budget", { maxTokensPerExecution: e.target.value })
|
|
382
|
+
})
|
|
383
|
+
})]
|
|
384
|
+
})
|
|
531
385
|
})] }),
|
|
532
|
-
|
|
386
|
+
H.type === "RATE_LIMIT" && /* @__PURE__ */ y(r, { children: [/* @__PURE__ */ y(o, { children: [/* @__PURE__ */ y(s, {
|
|
533
387
|
className: "flex items-center gap-2",
|
|
534
|
-
children: [/* @__PURE__ */
|
|
535
|
-
}) }), /* @__PURE__ */
|
|
388
|
+
children: [/* @__PURE__ */ v(x, { size: 18 }), "Rate Limit Configuration"]
|
|
389
|
+
}), /* @__PURE__ */ v(a, { children: "Every limit is counted per agent. Leave a field empty to not restrict it." })] }), /* @__PURE__ */ v(i, {
|
|
536
390
|
className: "space-y-4",
|
|
537
|
-
children:
|
|
538
|
-
className: "grid grid-cols-3 gap-4",
|
|
391
|
+
children: /* @__PURE__ */ y("div", {
|
|
392
|
+
className: "grid grid-cols-1 sm:grid-cols-3 gap-4",
|
|
539
393
|
children: [
|
|
540
|
-
/* @__PURE__ */
|
|
394
|
+
/* @__PURE__ */ v(d, {
|
|
541
395
|
label: "Requests / Minute",
|
|
542
|
-
children: /* @__PURE__ */
|
|
396
|
+
children: /* @__PURE__ */ v(f, {
|
|
543
397
|
type: "number",
|
|
544
398
|
min: 1,
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
requestsPerMinute: parseInt(e.target.value)
|
|
549
|
-
})
|
|
399
|
+
placeholder: "No limit",
|
|
400
|
+
value: K.rateLimit.requestsPerMinute,
|
|
401
|
+
onChange: (e) => Y("rateLimit", { requestsPerMinute: e.target.value })
|
|
550
402
|
})
|
|
551
403
|
}),
|
|
552
|
-
/* @__PURE__ */
|
|
404
|
+
/* @__PURE__ */ v(d, {
|
|
553
405
|
label: "Requests / Hour",
|
|
554
|
-
children: /* @__PURE__ */
|
|
406
|
+
children: /* @__PURE__ */ v(f, {
|
|
555
407
|
type: "number",
|
|
556
408
|
min: 1,
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
requestsPerHour: parseInt(e.target.value)
|
|
561
|
-
})
|
|
409
|
+
placeholder: "No limit",
|
|
410
|
+
value: K.rateLimit.requestsPerHour,
|
|
411
|
+
onChange: (e) => Y("rateLimit", { requestsPerHour: e.target.value })
|
|
562
412
|
})
|
|
563
413
|
}),
|
|
564
|
-
/* @__PURE__ */
|
|
414
|
+
/* @__PURE__ */ v(d, {
|
|
565
415
|
label: "Tokens / Minute",
|
|
566
|
-
children: /* @__PURE__ */
|
|
416
|
+
children: /* @__PURE__ */ v(f, {
|
|
567
417
|
type: "number",
|
|
568
418
|
min: 1,
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
tokensPerMinute: parseInt(e.target.value)
|
|
573
|
-
})
|
|
419
|
+
placeholder: "No limit",
|
|
420
|
+
value: K.rateLimit.tokensPerMinute,
|
|
421
|
+
onChange: (e) => Y("rateLimit", { tokensPerMinute: e.target.value })
|
|
574
422
|
})
|
|
575
423
|
})
|
|
576
424
|
]
|
|
577
|
-
})
|
|
578
|
-
label: "Scope",
|
|
579
|
-
children: /* @__PURE__ */ _("select", {
|
|
580
|
-
className: "flex h-10 w-full rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm",
|
|
581
|
-
value: J.scope,
|
|
582
|
-
onChange: (e) => Y({
|
|
583
|
-
...J,
|
|
584
|
-
scope: e.target.value
|
|
585
|
-
}),
|
|
586
|
-
children: [
|
|
587
|
-
/* @__PURE__ */ g("option", {
|
|
588
|
-
value: "connector",
|
|
589
|
-
children: "Per Connector"
|
|
590
|
-
}),
|
|
591
|
-
/* @__PURE__ */ g("option", {
|
|
592
|
-
value: "app",
|
|
593
|
-
children: "Per Bot"
|
|
594
|
-
}),
|
|
595
|
-
/* @__PURE__ */ g("option", {
|
|
596
|
-
value: "agent",
|
|
597
|
-
children: "Per Agent"
|
|
598
|
-
}),
|
|
599
|
-
/* @__PURE__ */ g("option", {
|
|
600
|
-
value: "user_group",
|
|
601
|
-
children: "Per User Group"
|
|
602
|
-
})
|
|
603
|
-
]
|
|
604
|
-
})
|
|
605
|
-
})]
|
|
425
|
+
})
|
|
606
426
|
})] }),
|
|
607
|
-
|
|
427
|
+
H.type === "RESPONSE" && /* @__PURE__ */ y(r, { children: [/* @__PURE__ */ y(o, { children: [/* @__PURE__ */ y(s, {
|
|
608
428
|
className: "flex items-center gap-2",
|
|
609
|
-
children: [/* @__PURE__ */
|
|
610
|
-
}), /* @__PURE__ */
|
|
429
|
+
children: [/* @__PURE__ */ v(w, { size: 18 }), "Model Usage Allowlist"]
|
|
430
|
+
}), /* @__PURE__ */ v(a, { children: "Agents in this workspace may only answer with models that match every active model policy. Leave both fields empty to allow all models." })] }), /* @__PURE__ */ y(i, {
|
|
611
431
|
className: "space-y-4",
|
|
612
|
-
children: [/* @__PURE__ */
|
|
432
|
+
children: [/* @__PURE__ */ v(d, {
|
|
613
433
|
label: "Allowed Models",
|
|
614
434
|
description: "Comma-separated model IDs. End an entry with * to allow a prefix.",
|
|
615
|
-
children: /* @__PURE__ */
|
|
435
|
+
children: /* @__PURE__ */ v(f, {
|
|
616
436
|
placeholder: "e.g., gpt-4o-mini, anthropic.claude-*",
|
|
617
|
-
value:
|
|
618
|
-
onChange: (e) =>
|
|
619
|
-
...X,
|
|
620
|
-
allowedModels: e.target.value
|
|
621
|
-
})
|
|
437
|
+
value: K.response.allowedModels,
|
|
438
|
+
onChange: (e) => Y("response", { allowedModels: e.target.value })
|
|
622
439
|
})
|
|
623
|
-
}), /* @__PURE__ */
|
|
440
|
+
}), /* @__PURE__ */ v(d, {
|
|
624
441
|
label: "Allowed Providers",
|
|
625
442
|
description: "Comma-separated provider types, e.g. OPENAI, ANTHROPIC, AWS_BEDROCK.",
|
|
626
|
-
children: /* @__PURE__ */
|
|
443
|
+
children: /* @__PURE__ */ v(f, {
|
|
627
444
|
placeholder: "e.g., AWS_BEDROCK, ANTHROPIC",
|
|
628
|
-
value:
|
|
629
|
-
onChange: (e) =>
|
|
630
|
-
...X,
|
|
631
|
-
allowedProviders: e.target.value
|
|
632
|
-
})
|
|
445
|
+
value: K.response.allowedProviders,
|
|
446
|
+
onChange: (e) => Y("response", { allowedProviders: e.target.value })
|
|
633
447
|
})
|
|
634
448
|
})]
|
|
635
449
|
})] }),
|
|
636
|
-
|
|
450
|
+
q && /* @__PURE__ */ v("p", {
|
|
451
|
+
className: "text-sm text-status-error-text",
|
|
452
|
+
role: "alert",
|
|
453
|
+
children: q
|
|
454
|
+
}),
|
|
455
|
+
/* @__PURE__ */ v(r, { children: /* @__PURE__ */ v(i, {
|
|
637
456
|
className: "pt-6",
|
|
638
|
-
children: /* @__PURE__ */
|
|
457
|
+
children: /* @__PURE__ */ y("div", {
|
|
639
458
|
className: "flex items-start gap-2",
|
|
640
|
-
children: [/* @__PURE__ */
|
|
459
|
+
children: [/* @__PURE__ */ v("input", {
|
|
641
460
|
type: "checkbox",
|
|
642
461
|
id: "activate-on-create",
|
|
643
|
-
checked:
|
|
644
|
-
onChange: (e) =>
|
|
462
|
+
checked: X,
|
|
463
|
+
onChange: (e) => ke(e.target.checked),
|
|
645
464
|
className: "mt-1 h-4 w-4"
|
|
646
|
-
}), /* @__PURE__ */
|
|
465
|
+
}), /* @__PURE__ */ y("label", {
|
|
647
466
|
htmlFor: "activate-on-create",
|
|
648
467
|
className: "text-sm",
|
|
649
|
-
children: [/* @__PURE__ */
|
|
468
|
+
children: [/* @__PURE__ */ v("span", {
|
|
650
469
|
className: "font-medium",
|
|
651
470
|
children: "Enforce immediately"
|
|
652
|
-
}), /* @__PURE__ */
|
|
471
|
+
}), /* @__PURE__ */ v("span", {
|
|
653
472
|
className: "block text-text-secondary",
|
|
654
473
|
children: "Only active policies are enforced. Leave unchecked to save this policy as a draft and activate it later."
|
|
655
474
|
})]
|
|
656
475
|
})]
|
|
657
476
|
})
|
|
658
|
-
}) })
|
|
659
|
-
B.type === "RETENTION" && /* @__PURE__ */ _(r, { children: [/* @__PURE__ */ g(o, { children: /* @__PURE__ */ _(s, {
|
|
660
|
-
className: "flex items-center gap-2",
|
|
661
|
-
children: [/* @__PURE__ */ g(T, { size: 18 }), "Retention Policy Configuration"]
|
|
662
|
-
}) }), /* @__PURE__ */ _(i, {
|
|
663
|
-
className: "space-y-4",
|
|
664
|
-
children: [/* @__PURE__ */ g(d, {
|
|
665
|
-
label: "Execution Data Retention (days)",
|
|
666
|
-
children: /* @__PURE__ */ g(f, {
|
|
667
|
-
type: "number",
|
|
668
|
-
min: 1,
|
|
669
|
-
value: Z.executionDataRetentionDays,
|
|
670
|
-
onChange: (e) => Ee({
|
|
671
|
-
...Z,
|
|
672
|
-
executionDataRetentionDays: parseInt(e.target.value)
|
|
673
|
-
})
|
|
674
|
-
})
|
|
675
|
-
}), /* @__PURE__ */ _("div", {
|
|
676
|
-
className: "flex items-center gap-2",
|
|
677
|
-
children: [/* @__PURE__ */ g("input", {
|
|
678
|
-
type: "checkbox",
|
|
679
|
-
id: "snapshots",
|
|
680
|
-
checked: Z.payloadSnapshotsEnabled,
|
|
681
|
-
onChange: (e) => Ee({
|
|
682
|
-
...Z,
|
|
683
|
-
payloadSnapshotsEnabled: e.target.checked
|
|
684
|
-
}),
|
|
685
|
-
className: "h-4 w-4"
|
|
686
|
-
}), /* @__PURE__ */ g("label", {
|
|
687
|
-
htmlFor: "snapshots",
|
|
688
|
-
className: "text-sm",
|
|
689
|
-
children: "Enable Payload Snapshots"
|
|
690
|
-
})]
|
|
691
|
-
})]
|
|
692
|
-
})] })
|
|
477
|
+
}) })
|
|
693
478
|
]
|
|
694
479
|
})
|
|
695
480
|
});
|
|
696
|
-
if (
|
|
481
|
+
if (Se) return /* @__PURE__ */ v(n, {
|
|
697
482
|
title: "Loading...",
|
|
698
|
-
children: /* @__PURE__ */
|
|
483
|
+
children: /* @__PURE__ */ v("div", { className: "h-96 bg-bg-sunken motion-safe:animate-vc-shimmer rounded-lg" })
|
|
699
484
|
});
|
|
700
|
-
if (!
|
|
485
|
+
if (!F) return /* @__PURE__ */ v(n, {
|
|
701
486
|
title: "Policy Not Found",
|
|
702
|
-
children: /* @__PURE__ */
|
|
487
|
+
children: /* @__PURE__ */ v(re, {
|
|
703
488
|
illustration: "empty-generic",
|
|
704
489
|
title: "Policy Not Found",
|
|
705
490
|
description: "This policy doesn't exist.",
|
|
706
|
-
action: /* @__PURE__ */
|
|
707
|
-
onClick: () =>
|
|
491
|
+
action: /* @__PURE__ */ v(c, {
|
|
492
|
+
onClick: () => P("policies"),
|
|
708
493
|
children: "Back to Policies"
|
|
709
494
|
})
|
|
710
495
|
})
|
|
711
496
|
});
|
|
712
|
-
let
|
|
713
|
-
return /* @__PURE__ */
|
|
714
|
-
title: /* @__PURE__ */
|
|
497
|
+
let Q = h(F.type, be, "CONTENT"), $ = pe(Q, F.config);
|
|
498
|
+
return /* @__PURE__ */ v(n, {
|
|
499
|
+
title: /* @__PURE__ */ y("div", {
|
|
715
500
|
className: "flex items-center gap-3",
|
|
716
501
|
children: [
|
|
717
|
-
/* @__PURE__ */
|
|
502
|
+
/* @__PURE__ */ v(c, {
|
|
718
503
|
variant: "ghost",
|
|
719
504
|
size: "icon",
|
|
720
|
-
onClick: () =>
|
|
721
|
-
children: /* @__PURE__ */
|
|
505
|
+
onClick: () => P("policies"),
|
|
506
|
+
children: /* @__PURE__ */ v(ge, { size: 20 })
|
|
722
507
|
}),
|
|
723
|
-
/* @__PURE__ */
|
|
508
|
+
/* @__PURE__ */ v("div", {
|
|
724
509
|
className: "p-2 rounded-lg bg-action-primary-bg/10",
|
|
725
|
-
children: /* @__PURE__ */
|
|
510
|
+
children: /* @__PURE__ */ v(j, { type: Q })
|
|
726
511
|
}),
|
|
727
|
-
/* @__PURE__ */
|
|
512
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ y("div", {
|
|
728
513
|
className: "flex items-center gap-2",
|
|
729
|
-
children: [/* @__PURE__ */
|
|
730
|
-
}), /* @__PURE__ */
|
|
514
|
+
children: [/* @__PURE__ */ v("span", { children: F.name }), /* @__PURE__ */ v(te, { status: F.status })]
|
|
515
|
+
}), /* @__PURE__ */ v("p", {
|
|
731
516
|
className: "text-sm font-normal text-text-secondary",
|
|
732
|
-
children:
|
|
517
|
+
children: F.description
|
|
733
518
|
})] })
|
|
734
519
|
]
|
|
735
520
|
}),
|
|
736
|
-
actions: /* @__PURE__ */
|
|
521
|
+
actions: /* @__PURE__ */ v("div", {
|
|
737
522
|
className: "flex gap-2",
|
|
738
|
-
children:
|
|
523
|
+
children: z ? /* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v(c, {
|
|
739
524
|
variant: "outline",
|
|
740
|
-
onClick: () =>
|
|
525
|
+
onClick: () => B(!1),
|
|
741
526
|
children: "Cancel"
|
|
742
|
-
}), /* @__PURE__ */
|
|
743
|
-
leftIcon: /* @__PURE__ */
|
|
744
|
-
onClick:
|
|
745
|
-
isLoading:
|
|
746
|
-
disabled: !
|
|
527
|
+
}), /* @__PURE__ */ v(c, {
|
|
528
|
+
leftIcon: /* @__PURE__ */ v(T, { size: 16 }),
|
|
529
|
+
onClick: je,
|
|
530
|
+
isLoading: R,
|
|
531
|
+
disabled: !W.name,
|
|
747
532
|
children: "Save Changes"
|
|
748
|
-
})] }) : /* @__PURE__ */ _
|
|
749
|
-
/* @__PURE__ */
|
|
750
|
-
variant:
|
|
751
|
-
leftIcon: /* @__PURE__ */
|
|
752
|
-
onClick: () => void
|
|
753
|
-
isLoading:
|
|
754
|
-
children:
|
|
533
|
+
})] }) : /* @__PURE__ */ y(_, { children: [
|
|
534
|
+
/* @__PURE__ */ v(c, {
|
|
535
|
+
variant: Z ? "outline" : "default",
|
|
536
|
+
leftIcon: /* @__PURE__ */ v(ve, { size: 16 }),
|
|
537
|
+
onClick: () => void Ne(),
|
|
538
|
+
isLoading: R,
|
|
539
|
+
children: Z ? "Deactivate" : "Activate"
|
|
755
540
|
}),
|
|
756
|
-
/* @__PURE__ */
|
|
541
|
+
/* @__PURE__ */ v(c, {
|
|
757
542
|
variant: "outline",
|
|
758
|
-
leftIcon: /* @__PURE__ */
|
|
759
|
-
onClick:
|
|
543
|
+
leftIcon: /* @__PURE__ */ v(_e, { size: 16 }),
|
|
544
|
+
onClick: Pe,
|
|
760
545
|
children: "Edit"
|
|
761
546
|
}),
|
|
762
|
-
|
|
547
|
+
De ? /* @__PURE__ */ y("div", {
|
|
763
548
|
className: "flex gap-2",
|
|
764
|
-
children: [/* @__PURE__ */
|
|
549
|
+
children: [/* @__PURE__ */ v(c, {
|
|
765
550
|
variant: "outline",
|
|
766
551
|
size: "sm",
|
|
767
|
-
onClick: () =>
|
|
552
|
+
onClick: () => V(!1),
|
|
768
553
|
children: "Cancel"
|
|
769
|
-
}), /* @__PURE__ */
|
|
554
|
+
}), /* @__PURE__ */ v(c, {
|
|
770
555
|
variant: "destructive",
|
|
771
556
|
size: "sm",
|
|
772
557
|
onClick: () => {
|
|
773
|
-
ne("medium"),
|
|
558
|
+
ne("medium"), Me();
|
|
774
559
|
},
|
|
775
|
-
isLoading:
|
|
560
|
+
isLoading: Ee,
|
|
776
561
|
children: "Confirm Delete"
|
|
777
562
|
})]
|
|
778
|
-
}) : /* @__PURE__ */
|
|
563
|
+
}) : /* @__PURE__ */ v(c, {
|
|
779
564
|
variant: "destructive",
|
|
780
|
-
leftIcon: /* @__PURE__ */
|
|
781
|
-
onClick: () =>
|
|
565
|
+
leftIcon: /* @__PURE__ */ v(D, { size: 16 }),
|
|
566
|
+
onClick: () => V(!0),
|
|
782
567
|
children: "Delete"
|
|
783
568
|
})
|
|
784
569
|
] })
|
|
785
570
|
}),
|
|
786
|
-
children: /* @__PURE__ */
|
|
571
|
+
children: /* @__PURE__ */ y("div", {
|
|
787
572
|
className: "space-y-6",
|
|
788
573
|
children: [
|
|
789
|
-
/* @__PURE__ */
|
|
790
|
-
icon: /* @__PURE__ */
|
|
574
|
+
/* @__PURE__ */ v(me, {
|
|
575
|
+
icon: /* @__PURE__ */ v(E, { size: 18 }),
|
|
791
576
|
children: "This is a single guardrail and its rules. Review and tune exactly what it enforces — what content to block, which tools are allowed, the spend or rate limits it applies — then attach it to the agents and bots that should obey it. Policies are how you keep agents safe, compliant and within budget."
|
|
792
577
|
}),
|
|
793
|
-
|
|
578
|
+
z && /* @__PURE__ */ y(r, { children: [/* @__PURE__ */ v(o, { children: /* @__PURE__ */ v(s, { children: "Edit Policy" }) }), /* @__PURE__ */ y(i, {
|
|
794
579
|
className: "space-y-4",
|
|
795
580
|
children: [
|
|
796
|
-
/* @__PURE__ */
|
|
581
|
+
/* @__PURE__ */ v(d, {
|
|
797
582
|
label: "Policy Name",
|
|
798
583
|
required: !0,
|
|
799
|
-
children: /* @__PURE__ */
|
|
800
|
-
value:
|
|
801
|
-
onChange: (e) =>
|
|
802
|
-
...
|
|
584
|
+
children: /* @__PURE__ */ v(f, {
|
|
585
|
+
value: W.name,
|
|
586
|
+
onChange: (e) => G({
|
|
587
|
+
...W,
|
|
803
588
|
name: e.target.value
|
|
804
589
|
})
|
|
805
590
|
})
|
|
806
591
|
}),
|
|
807
|
-
/* @__PURE__ */
|
|
592
|
+
/* @__PURE__ */ v(d, {
|
|
808
593
|
label: "Description",
|
|
809
|
-
children: /* @__PURE__ */
|
|
810
|
-
value:
|
|
811
|
-
onChange: (e) =>
|
|
812
|
-
...
|
|
594
|
+
children: /* @__PURE__ */ v(p, {
|
|
595
|
+
value: W.description,
|
|
596
|
+
onChange: (e) => G({
|
|
597
|
+
...W,
|
|
813
598
|
description: e.target.value
|
|
814
599
|
}),
|
|
815
600
|
rows: 3
|
|
816
601
|
})
|
|
817
602
|
}),
|
|
818
|
-
/* @__PURE__ */
|
|
603
|
+
/* @__PURE__ */ v(d, {
|
|
819
604
|
label: "Visibility",
|
|
820
|
-
children: /* @__PURE__ */
|
|
821
|
-
className:
|
|
822
|
-
value:
|
|
823
|
-
onChange: (e) =>
|
|
824
|
-
...
|
|
605
|
+
children: /* @__PURE__ */ y("select", {
|
|
606
|
+
className: A,
|
|
607
|
+
value: W.visibility,
|
|
608
|
+
onChange: (e) => G({
|
|
609
|
+
...W,
|
|
825
610
|
visibility: e.target.value
|
|
826
611
|
}),
|
|
827
612
|
children: [
|
|
828
|
-
/* @__PURE__ */
|
|
613
|
+
/* @__PURE__ */ v("option", {
|
|
829
614
|
value: "PRIVATE",
|
|
830
615
|
children: "Private"
|
|
831
616
|
}),
|
|
832
|
-
/* @__PURE__ */
|
|
617
|
+
/* @__PURE__ */ v("option", {
|
|
833
618
|
value: "WORKSPACE",
|
|
834
619
|
children: "Workspace"
|
|
835
620
|
}),
|
|
836
|
-
/* @__PURE__ */
|
|
621
|
+
/* @__PURE__ */ v("option", {
|
|
837
622
|
value: "PUBLIC",
|
|
838
623
|
children: "Public"
|
|
839
624
|
})
|
|
840
625
|
]
|
|
841
626
|
})
|
|
842
627
|
}),
|
|
843
|
-
/* @__PURE__ */
|
|
628
|
+
/* @__PURE__ */ v("p", {
|
|
844
629
|
className: "text-sm text-text-secondary",
|
|
845
630
|
children: "Note: Policy type and configuration cannot be changed after creation."
|
|
846
631
|
})
|
|
847
632
|
]
|
|
848
633
|
})] }),
|
|
849
|
-
/* @__PURE__ */
|
|
634
|
+
/* @__PURE__ */ y("div", {
|
|
850
635
|
className: "grid grid-cols-2 md:grid-cols-4 gap-4",
|
|
851
636
|
children: [
|
|
852
|
-
/* @__PURE__ */
|
|
637
|
+
/* @__PURE__ */ v(r, {
|
|
853
638
|
treatment: "glass",
|
|
854
639
|
glow: !0,
|
|
855
|
-
children: /* @__PURE__ */
|
|
640
|
+
children: /* @__PURE__ */ y(i, {
|
|
856
641
|
className: "pt-6 text-center",
|
|
857
642
|
children: [
|
|
858
|
-
/* @__PURE__ */
|
|
643
|
+
/* @__PURE__ */ v("div", {
|
|
859
644
|
className: "p-3 rounded-full bg-action-primary-bg/10 w-fit mx-auto mb-2",
|
|
860
|
-
children: /* @__PURE__ */
|
|
645
|
+
children: /* @__PURE__ */ v(j, { type: Q })
|
|
861
646
|
}),
|
|
862
|
-
/* @__PURE__ */
|
|
647
|
+
/* @__PURE__ */ v("p", {
|
|
863
648
|
className: "text-lg font-bold",
|
|
864
|
-
children:
|
|
649
|
+
children: M[Q]
|
|
865
650
|
}),
|
|
866
|
-
/* @__PURE__ */
|
|
651
|
+
/* @__PURE__ */ v("p", {
|
|
867
652
|
className: "text-sm text-text-secondary",
|
|
868
653
|
children: "Policy Type"
|
|
869
654
|
})
|
|
870
655
|
]
|
|
871
656
|
})
|
|
872
657
|
}),
|
|
873
|
-
/* @__PURE__ */
|
|
658
|
+
/* @__PURE__ */ v(r, { children: /* @__PURE__ */ y(i, {
|
|
874
659
|
className: "pt-6 text-center",
|
|
875
|
-
children: [/* @__PURE__ */
|
|
660
|
+
children: [/* @__PURE__ */ v("p", {
|
|
876
661
|
className: "text-3xl font-bold text-text-primary capitalize",
|
|
877
|
-
children:
|
|
878
|
-
}), /* @__PURE__ */
|
|
662
|
+
children: F.visibility.toLowerCase()
|
|
663
|
+
}), /* @__PURE__ */ v("p", {
|
|
879
664
|
className: "text-sm text-text-secondary",
|
|
880
665
|
children: "Visibility"
|
|
881
666
|
})]
|
|
882
667
|
}) }),
|
|
883
|
-
/* @__PURE__ */
|
|
668
|
+
/* @__PURE__ */ v(r, { children: /* @__PURE__ */ y(i, {
|
|
884
669
|
className: "pt-6 text-center",
|
|
885
|
-
children: [/* @__PURE__ */
|
|
670
|
+
children: [/* @__PURE__ */ v("p", {
|
|
886
671
|
className: "text-3xl font-bold text-text-primary",
|
|
887
|
-
children:
|
|
888
|
-
}), /* @__PURE__ */
|
|
672
|
+
children: F.revision
|
|
673
|
+
}), /* @__PURE__ */ v("p", {
|
|
889
674
|
className: "text-sm text-text-secondary",
|
|
890
675
|
children: "Revision"
|
|
891
676
|
})]
|
|
892
677
|
}) }),
|
|
893
|
-
/* @__PURE__ */
|
|
678
|
+
/* @__PURE__ */ v(r, { children: /* @__PURE__ */ y(i, {
|
|
894
679
|
className: "pt-6 text-center",
|
|
895
|
-
children: [/* @__PURE__ */
|
|
680
|
+
children: [/* @__PURE__ */ v("p", {
|
|
896
681
|
className: "text-lg font-bold text-text-primary",
|
|
897
|
-
children: t(
|
|
898
|
-
}), /* @__PURE__ */
|
|
682
|
+
children: t(F.updatedAt)
|
|
683
|
+
}), /* @__PURE__ */ v("p", {
|
|
899
684
|
className: "text-sm text-text-secondary",
|
|
900
685
|
children: "Last Updated"
|
|
901
686
|
})]
|
|
902
687
|
}) })
|
|
903
688
|
]
|
|
904
689
|
}),
|
|
905
|
-
/* @__PURE__ */
|
|
906
|
-
className: "
|
|
907
|
-
children: /* @__PURE__ */
|
|
908
|
-
|
|
909
|
-
|
|
690
|
+
/* @__PURE__ */ y(r, { children: [/* @__PURE__ */ y(o, { children: [/* @__PURE__ */ v(s, { children: "Configuration" }), /* @__PURE__ */ v(a, { children: "Current policy configuration" })] }), /* @__PURE__ */ y(i, {
|
|
691
|
+
className: "space-y-4",
|
|
692
|
+
children: [$ === null ? /* @__PURE__ */ y("div", {
|
|
693
|
+
className: "flex items-start gap-2 p-3 bg-status-warning-bg-subtle rounded-lg text-sm",
|
|
694
|
+
"data-testid": "policy-not-enforced",
|
|
695
|
+
children: [/* @__PURE__ */ v(b, {
|
|
696
|
+
size: 16,
|
|
697
|
+
className: "mt-0.5 shrink-0 text-status-warning-text"
|
|
698
|
+
}), /* @__PURE__ */ y("p", { children: [M[Q], " settings are not enforced at runtime. This policy is kept for reference only and does not restrict any agent."] })]
|
|
699
|
+
}) : $.length > 0 ? /* @__PURE__ */ y("div", {
|
|
700
|
+
className: "flex items-start gap-2 p-3 bg-status-warning-bg-subtle rounded-lg text-sm",
|
|
701
|
+
"data-testid": "policy-ignored-keys",
|
|
702
|
+
children: [/* @__PURE__ */ v(b, {
|
|
703
|
+
size: 16,
|
|
704
|
+
className: "mt-0.5 shrink-0 text-status-warning-text"
|
|
705
|
+
}), /* @__PURE__ */ y("p", { children: [
|
|
706
|
+
"These settings are not enforced at runtime and have no effect:",
|
|
707
|
+
" ",
|
|
708
|
+
/* @__PURE__ */ v("span", {
|
|
709
|
+
className: "font-mono",
|
|
710
|
+
children: $.join(", ")
|
|
711
|
+
}),
|
|
712
|
+
". Create a new policy to use the enforced settings."
|
|
713
|
+
] })]
|
|
714
|
+
}) : null, /* @__PURE__ */ v("div", {
|
|
715
|
+
className: "p-4 bg-bg-sunken rounded-lg font-mono text-sm overflow-auto",
|
|
716
|
+
children: /* @__PURE__ */ v("pre", { children: JSON.stringify(F.config, null, 2) })
|
|
717
|
+
})]
|
|
718
|
+
})] }),
|
|
719
|
+
/* @__PURE__ */ y(r, { children: [/* @__PURE__ */ v(o, { children: /* @__PURE__ */ y(s, {
|
|
910
720
|
className: "flex items-center gap-2",
|
|
911
|
-
children: [/* @__PURE__ */
|
|
912
|
-
}) }), /* @__PURE__ */
|
|
721
|
+
children: [/* @__PURE__ */ v(ye, { size: 18 }), "Metadata"]
|
|
722
|
+
}) }), /* @__PURE__ */ v(i, { children: /* @__PURE__ */ y("div", {
|
|
913
723
|
className: "grid grid-cols-2 md:grid-cols-4 gap-6 text-sm",
|
|
914
724
|
children: [
|
|
915
|
-
/* @__PURE__ */
|
|
725
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
|
|
916
726
|
className: "text-text-secondary",
|
|
917
727
|
children: "Created"
|
|
918
|
-
}), /* @__PURE__ */
|
|
728
|
+
}), /* @__PURE__ */ v("p", {
|
|
919
729
|
className: "font-medium",
|
|
920
|
-
children: t(
|
|
730
|
+
children: t(F.createdAt)
|
|
921
731
|
})] }),
|
|
922
|
-
/* @__PURE__ */
|
|
732
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
|
|
923
733
|
className: "text-text-secondary",
|
|
924
734
|
children: "Updated"
|
|
925
|
-
}), /* @__PURE__ */
|
|
735
|
+
}), /* @__PURE__ */ v("p", {
|
|
926
736
|
className: "font-medium",
|
|
927
|
-
children: t(
|
|
737
|
+
children: t(F.updatedAt)
|
|
928
738
|
})] }),
|
|
929
|
-
/* @__PURE__ */
|
|
739
|
+
/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("p", {
|
|
930
740
|
className: "text-text-secondary",
|
|
931
741
|
children: "Tags"
|
|
932
|
-
}), /* @__PURE__ */
|
|
742
|
+
}), /* @__PURE__ */ v("div", {
|
|
933
743
|
className: "flex gap-1",
|
|
934
|
-
children:
|
|
744
|
+
children: F.tags.length > 0 ? F.tags.map((e) => /* @__PURE__ */ v(ee, {
|
|
935
745
|
variant: "secondary",
|
|
936
746
|
className: "text-xs",
|
|
937
747
|
children: e
|
|
938
|
-
}, e)) : /* @__PURE__ */
|
|
748
|
+
}, e)) : /* @__PURE__ */ v("span", {
|
|
939
749
|
className: "text-text-secondary",
|
|
940
750
|
children: "None"
|
|
941
751
|
})
|
|
@@ -947,6 +757,6 @@ var A = ({ type: e }) => ({
|
|
|
947
757
|
});
|
|
948
758
|
};
|
|
949
759
|
//#endregion
|
|
950
|
-
export {
|
|
760
|
+
export { N as PolicyDetailPage };
|
|
951
761
|
|
|
952
762
|
//# sourceMappingURL=PolicyDetailPage.js.map
|