bazilion 0.7.0 → 0.8.0

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 (37) hide show
  1. package/dist/cli.js +80 -17
  2. package/dist/cli.js.map +1 -1
  3. package/dist/daemon.js +143 -23
  4. package/dist/daemon.js.map +1 -1
  5. package/dist/web/client/assets/{TemplatesTabs-Da7mg9FI.js → TemplatesTabs-UM04RMO9.js} +1 -1
  6. package/dist/web/client/assets/{_id-LT6Ejjr0.js → _id-BNJapCT4.js} +1 -1
  7. package/dist/web/client/assets/{_id-_6jIt0_-.js → _id-CjGoV8Mr.js} +1 -1
  8. package/dist/web/client/assets/{_id-BdKmo0gb.js → _id-DehuCHUw.js} +1 -1
  9. package/dist/web/client/assets/{_id-MR2XjWh0.js → _id-Dz9fjcCM.js} +1 -1
  10. package/dist/web/client/assets/{agents-0arKbVYG.js → agents-M6omAXcZ.js} +1 -1
  11. package/dist/web/client/assets/{config-BSAVT-17.js → config-DIuEc5bm.js} +1 -1
  12. package/dist/web/client/assets/{groups-BqTkhHes.js → groups-DpE2d2zZ.js} +1 -1
  13. package/dist/web/client/assets/{inbox-ozoCXzr5.js → inbox-BPnLsRNf.js} +1 -1
  14. package/dist/web/client/assets/{index-iayCEuU2.js → index-MAJuXnie.js} +2 -2
  15. package/dist/web/client/assets/{login-D8lNr2SX.js → login-CawJX16E.js} +1 -1
  16. package/dist/web/client/assets/{mcp-BLnngDsj.js → mcp-DIrh9-v_.js} +1 -1
  17. package/dist/web/client/assets/{memory-D1GQjEvN.js → memory-BpHbdKsd.js} +1 -1
  18. package/dist/web/client/assets/{profile-groups-C2yJPTaE.js → profile-groups-ByoKak0c.js} +1 -1
  19. package/dist/web/client/assets/{profiles-BV7AAZjj.js → profiles-BEjv8LGo.js} +1 -1
  20. package/dist/web/client/assets/{routes-DSHQLA7K.js → routes-D2COHy7v.js} +1 -1
  21. package/dist/web/client/assets/{services-BbCJe1Du.js → services-D212jSK_.js} +1 -1
  22. package/dist/web/client/assets/skills-Da0MURjY.js +1 -0
  23. package/dist/web/client/assets/styles-BgE5bCHA.css +2 -0
  24. package/dist/web/client/assets/{telegram-gE4j8gte.js → telegram-Czh2MdVm.js} +1 -1
  25. package/dist/web/client/assets/{tokens-D2_O9ARe.js → tokens-E_JvO5JN.js} +1 -1
  26. package/dist/web/client/assets/{triggers-WljnfEfJ.js → triggers-BBRZQOm7.js} +1 -1
  27. package/dist/web/server/assets/{_id-D0ytyXGY.js → _id-BdRiQb2H.js} +42 -5
  28. package/dist/web/server/assets/{_id-81NrHA5d.js → _id-DUIrFV3G.js} +1 -1
  29. package/dist/web/server/assets/{_tanstack-start-manifest_v-DBlFH2gg.js → _tanstack-start-manifest_v-D9FLKShQ.js} +23 -23
  30. package/dist/web/server/assets/{router-BpBZgRwn.js → router-BrDascdO.js} +3 -3
  31. package/dist/web/server/assets/{skills-dLyBZb3B.js → skills-D89ND2kR.js} +67 -7
  32. package/dist/web/server/assets/{skills-CpsyR_WA.js → skills-l2cyQ3zS.js} +1 -1
  33. package/dist/web/server/server.js +2 -2
  34. package/dist/worker.js.map +1 -1
  35. package/package.json +3 -3
  36. package/dist/web/client/assets/skills-C6czKR5I.js +0 -1
  37. package/dist/web/client/assets/styles-C06axZZk.css +0 -2
@@ -1,4 +1,4 @@
1
- import { t as Route } from "./_id-81NrHA5d.js";
1
+ import { t as Route } from "./_id-DUIrFV3G.js";
2
2
  import { t as AgentTabs } from "./AgentTabs-BOjTN7QF.js";
3
3
  import { t as AgentAvatar } from "./AgentAvatar-8gTAy_tP.js";
4
4
  import { t as ChatPane } from "./ChatPane-BvpswYvF.js";
@@ -419,14 +419,19 @@ function SkillsTable({ agentId, attached, all }) {
419
419
  const router = useRouter();
420
420
  const [pending, setPending] = useState(null);
421
421
  const [err, setErr] = useState(null);
422
- async function attach(name) {
423
- setPending(name);
422
+ async function attach(skill) {
423
+ const findings = skill.scanFindings ?? [];
424
+ if (!(findings.length === 0 || confirm(`Skill "${skill.name}" has ${findings.length} scan finding${findings.length === 1 ? "" : "s"}. Attach it anyway?`))) return;
425
+ setPending(skill.name);
424
426
  setErr(null);
425
427
  try {
426
428
  const res = await fetch(`/api/agents/${encodeURIComponent(agentId)}/skills`, {
427
429
  method: "POST",
428
430
  headers: { "content-type": "application/json" },
429
- body: JSON.stringify({ skill: name })
431
+ body: JSON.stringify({
432
+ skill: skill.name,
433
+ allowFindings: findings.length > 0
434
+ })
430
435
  });
431
436
  if (!res.ok) {
432
437
  const body = await res.json().catch(() => null);
@@ -465,6 +470,7 @@ function SkillsTable({ agentId, attached, all }) {
465
470
  }), /* @__PURE__ */ jsxs("table", { children: [/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
466
471
  /* @__PURE__ */ jsx("th", { children: "name" }),
467
472
  /* @__PURE__ */ jsx("th", { children: "description" }),
473
+ /* @__PURE__ */ jsx("th", { children: "scan" }),
468
474
  /* @__PURE__ */ jsx("th", {})
469
475
  ] }) }), /* @__PURE__ */ jsx("tbody", { children: all.map((s) => {
470
476
  const isAttached = attached.has(s.name);
@@ -475,6 +481,7 @@ function SkillsTable({ agentId, attached, all }) {
475
481
  className: "text-mocha-light",
476
482
  children: "—"
477
483
  }) }),
484
+ /* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx(SkillFindingSummary, { findings: s.scanFindings ?? [] }) }),
478
485
  /* @__PURE__ */ jsx("td", { children: isAttached ? /* @__PURE__ */ jsx("button", {
479
486
  type: "button",
480
487
  className: "ghost-btn",
@@ -485,12 +492,42 @@ function SkillsTable({ agentId, attached, all }) {
485
492
  type: "button",
486
493
  className: "ghost-btn",
487
494
  disabled: busy,
488
- onClick: () => attach(s.name),
495
+ onClick: () => attach(s),
489
496
  children: busy ? "…" : "attach"
490
497
  }) })
491
498
  ] }, s.name);
492
499
  }) })] })] });
493
500
  }
501
+ function SkillFindingSummary({ findings }) {
502
+ if (findings.length === 0) return /* @__PURE__ */ jsx("span", {
503
+ className: "text-mocha-light",
504
+ children: "clean"
505
+ });
506
+ return /* @__PURE__ */ jsxs("details", {
507
+ className: "text-[0.82em]",
508
+ children: [/* @__PURE__ */ jsxs("summary", {
509
+ className: findings.some((f) => f.severity === "danger") ? "cursor-pointer text-[#9B3D3D]" : "cursor-pointer text-mocha",
510
+ children: [
511
+ findings.length,
512
+ " finding",
513
+ findings.length === 1 ? "" : "s"
514
+ ]
515
+ }), /* @__PURE__ */ jsx("ul", {
516
+ className: "m-0 list-disc pl-4",
517
+ children: findings.map((f, i) => /* @__PURE__ */ jsxs("li", { children: [
518
+ /* @__PURE__ */ jsx("span", {
519
+ className: "font-mono",
520
+ children: f.severity
521
+ }),
522
+ ": ",
523
+ f.code,
524
+ f.line ? ` line ${f.line}` : "",
525
+ " - ",
526
+ f.message
527
+ ] }, `${f.code}-${f.line ?? 0}-${i}`))
528
+ })]
529
+ });
530
+ }
494
531
  function TelegramSection({ agent }) {
495
532
  const router = useRouter();
496
533
  const [busy, setBusy] = useState(false);
@@ -2,7 +2,7 @@ import { t as createServerFn } from "../server.js";
2
2
  import { t as createSsrRpc } from "./createSsrRpc-ZBGxhl8t.js";
3
3
  import { createFileRoute, lazyRouteComponent, redirect } from "@tanstack/react-router";
4
4
  //#region src/routes/agents/$id/index.tsx
5
- var $$splitComponentImporter = () => import("./_id-D0ytyXGY.js");
5
+ var $$splitComponentImporter = () => import("./_id-BdRiQb2H.js");
6
6
  var fetchAgent = createServerFn({ method: "POST" }).inputValidator((d) => d).handler(createSsrRpc("846c9081aed17057351730985f133b0aab67a5dabfca9562552829a90ff30849"));
7
7
  var Route = createFileRoute("/agents/$id/")({
8
8
  loader: async ({ params }) => {
@@ -26,21 +26,21 @@ var tsrStartManifest = () => ({ routes: {
26
26
  "/groups/$id/"
27
27
  ],
28
28
  preloads: [
29
- "/assets/index-iayCEuU2.js",
29
+ "/assets/index-MAJuXnie.js",
30
30
  "/assets/jsx-runtime-DGeXAQPT.js",
31
31
  "/assets/preload-helper-CvnapA2_.js"
32
32
  ],
33
33
  scripts: [{ attrs: {
34
34
  type: "module",
35
35
  async: !0,
36
- src: "/assets/index-iayCEuU2.js"
36
+ src: "/assets/index-MAJuXnie.js"
37
37
  } }]
38
38
  },
39
39
  "/": {
40
40
  filePath: "/home/runner/work/bazilion/bazilion/apps/web/src/routes/index.tsx",
41
41
  children: void 0,
42
42
  preloads: [
43
- "/assets/routes-DSHQLA7K.js",
43
+ "/assets/routes-D2COHy7v.js",
44
44
  "/assets/ChatPane-DzEgOEqS.js",
45
45
  "/assets/SpawnTeamModal-BEkNCKXm.js",
46
46
  "/assets/wire-constants-BkT5-597.js"
@@ -49,7 +49,7 @@ var tsrStartManifest = () => ({ routes: {
49
49
  "/login": {
50
50
  filePath: "/home/runner/work/bazilion/bazilion/apps/web/src/routes/login.tsx",
51
51
  children: void 0,
52
- preloads: ["/assets/login-D8lNr2SX.js"]
52
+ preloads: ["/assets/login-CawJX16E.js"]
53
53
  },
54
54
  "/welcome": {
55
55
  filePath: "/home/runner/work/bazilion/bazilion/apps/web/src/routes/welcome.tsx",
@@ -59,13 +59,13 @@ var tsrStartManifest = () => ({ routes: {
59
59
  "/config/mcp": {
60
60
  filePath: "/home/runner/work/bazilion/bazilion/apps/web/src/routes/config/mcp.tsx",
61
61
  children: void 0,
62
- preloads: ["/assets/mcp-BLnngDsj.js", "/assets/ConfigTabs-pY-V0Rie.js"]
62
+ preloads: ["/assets/mcp-DIrh9-v_.js", "/assets/ConfigTabs-pY-V0Rie.js"]
63
63
  },
64
64
  "/config/services": {
65
65
  filePath: "/home/runner/work/bazilion/bazilion/apps/web/src/routes/config/services.tsx",
66
66
  children: void 0,
67
67
  preloads: [
68
- "/assets/services-BbCJe1Du.js",
68
+ "/assets/services-D212jSK_.js",
69
69
  "/assets/ConfigTabs-pY-V0Rie.js",
70
70
  "/assets/FieldRow-CNKma5LE.js"
71
71
  ]
@@ -73,13 +73,13 @@ var tsrStartManifest = () => ({ routes: {
73
73
  "/config/tokens": {
74
74
  filePath: "/home/runner/work/bazilion/bazilion/apps/web/src/routes/config/tokens.tsx",
75
75
  children: void 0,
76
- preloads: ["/assets/tokens-D2_O9ARe.js", "/assets/ConfigTabs-pY-V0Rie.js"]
76
+ preloads: ["/assets/tokens-E_JvO5JN.js", "/assets/ConfigTabs-pY-V0Rie.js"]
77
77
  },
78
78
  "/profile-groups/$id": {
79
79
  filePath: "/home/runner/work/bazilion/bazilion/apps/web/src/routes/profile-groups/$id.tsx",
80
80
  children: void 0,
81
81
  preloads: [
82
- "/assets/_id-_6jIt0_-.js",
82
+ "/assets/_id-CjGoV8Mr.js",
83
83
  "/assets/Button-ByiV6fpd.js",
84
84
  "/assets/MembersEditor-C6UpqDdV.js"
85
85
  ]
@@ -87,18 +87,18 @@ var tsrStartManifest = () => ({ routes: {
87
87
  "/profiles/$id": {
88
88
  filePath: "/home/runner/work/bazilion/bazilion/apps/web/src/routes/profiles/$id.tsx",
89
89
  children: void 0,
90
- preloads: ["/assets/_id-LT6Ejjr0.js"]
90
+ preloads: ["/assets/_id-BNJapCT4.js"]
91
91
  },
92
92
  "/agents/": {
93
93
  filePath: "/home/runner/work/bazilion/bazilion/apps/web/src/routes/agents/index.tsx",
94
94
  children: void 0,
95
- preloads: ["/assets/agents-0arKbVYG.js", "/assets/AgentAvatar-JYijLvZ2.js"]
95
+ preloads: ["/assets/agents-M6omAXcZ.js", "/assets/AgentAvatar-JYijLvZ2.js"]
96
96
  },
97
97
  "/config/": {
98
98
  filePath: "/home/runner/work/bazilion/bazilion/apps/web/src/routes/config/index.tsx",
99
99
  children: void 0,
100
100
  preloads: [
101
- "/assets/config-BSAVT-17.js",
101
+ "/assets/config-DIuEc5bm.js",
102
102
  "/assets/ConfigTabs-pY-V0Rie.js",
103
103
  "/assets/FieldRow-CNKma5LE.js"
104
104
  ]
@@ -106,48 +106,48 @@ var tsrStartManifest = () => ({ routes: {
106
106
  "/groups/": {
107
107
  filePath: "/home/runner/work/bazilion/bazilion/apps/web/src/routes/groups/index.tsx",
108
108
  children: void 0,
109
- preloads: ["/assets/groups-BqTkhHes.js"]
109
+ preloads: ["/assets/groups-DpE2d2zZ.js"]
110
110
  },
111
111
  "/profile-groups/": {
112
112
  filePath: "/home/runner/work/bazilion/bazilion/apps/web/src/routes/profile-groups/index.tsx",
113
113
  children: void 0,
114
114
  preloads: [
115
- "/assets/profile-groups-C2yJPTaE.js",
115
+ "/assets/profile-groups-ByoKak0c.js",
116
116
  "/assets/Button-ByiV6fpd.js",
117
117
  "/assets/MembersEditor-C6UpqDdV.js",
118
118
  "/assets/SpawnTeamModal-BEkNCKXm.js",
119
- "/assets/TemplatesTabs-Da7mg9FI.js"
119
+ "/assets/TemplatesTabs-UM04RMO9.js"
120
120
  ]
121
121
  },
122
122
  "/profiles/": {
123
123
  filePath: "/home/runner/work/bazilion/bazilion/apps/web/src/routes/profiles/index.tsx",
124
124
  children: void 0,
125
125
  preloads: [
126
- "/assets/profiles-BV7AAZjj.js",
126
+ "/assets/profiles-BEjv8LGo.js",
127
127
  "/assets/Button-ByiV6fpd.js",
128
- "/assets/TemplatesTabs-Da7mg9FI.js"
128
+ "/assets/TemplatesTabs-UM04RMO9.js"
129
129
  ]
130
130
  },
131
131
  "/skills/": {
132
132
  filePath: "/home/runner/work/bazilion/bazilion/apps/web/src/routes/skills/index.tsx",
133
133
  children: void 0,
134
- preloads: ["/assets/skills-C6czKR5I.js"]
134
+ preloads: ["/assets/skills-Da0MURjY.js"]
135
135
  },
136
136
  "/agents/$id/inbox": {
137
137
  filePath: "/home/runner/work/bazilion/bazilion/apps/web/src/routes/agents/$id/inbox.tsx",
138
138
  children: void 0,
139
- preloads: ["/assets/inbox-ozoCXzr5.js", "/assets/AgentTabs-DioGqUVR.js"]
139
+ preloads: ["/assets/inbox-BPnLsRNf.js", "/assets/AgentTabs-DioGqUVR.js"]
140
140
  },
141
141
  "/agents/$id/triggers": {
142
142
  filePath: "/home/runner/work/bazilion/bazilion/apps/web/src/routes/agents/$id/triggers.tsx",
143
143
  children: void 0,
144
- preloads: ["/assets/triggers-WljnfEfJ.js", "/assets/AgentTabs-DioGqUVR.js"]
144
+ preloads: ["/assets/triggers-BBRZQOm7.js", "/assets/AgentTabs-DioGqUVR.js"]
145
145
  },
146
146
  "/config/integrations/telegram": {
147
147
  filePath: "/home/runner/work/bazilion/bazilion/apps/web/src/routes/config/integrations/telegram.tsx",
148
148
  children: void 0,
149
149
  preloads: [
150
- "/assets/telegram-gE4j8gte.js",
150
+ "/assets/telegram-Czh2MdVm.js",
151
151
  "/assets/Button-ByiV6fpd.js",
152
152
  "/assets/ConfigTabs-pY-V0Rie.js"
153
153
  ]
@@ -155,13 +155,13 @@ var tsrStartManifest = () => ({ routes: {
155
155
  "/groups/$id/memory": {
156
156
  filePath: "/home/runner/work/bazilion/bazilion/apps/web/src/routes/groups/$id/memory.tsx",
157
157
  children: void 0,
158
- preloads: ["/assets/memory-D1GQjEvN.js"]
158
+ preloads: ["/assets/memory-BpHbdKsd.js"]
159
159
  },
160
160
  "/agents/$id/": {
161
161
  filePath: "/home/runner/work/bazilion/bazilion/apps/web/src/routes/agents/$id/index.tsx",
162
162
  children: void 0,
163
163
  preloads: [
164
- "/assets/_id-BdKmo0gb.js",
164
+ "/assets/_id-DehuCHUw.js",
165
165
  "/assets/AgentAvatar-JYijLvZ2.js",
166
166
  "/assets/AgentTabs-DioGqUVR.js",
167
167
  "/assets/ChatPane-DzEgOEqS.js",
@@ -171,7 +171,7 @@ var tsrStartManifest = () => ({ routes: {
171
171
  "/groups/$id/": {
172
172
  filePath: "/home/runner/work/bazilion/bazilion/apps/web/src/routes/groups/$id/index.tsx",
173
173
  children: void 0,
174
- preloads: ["/assets/_id-MR2XjWh0.js", "/assets/Button-ByiV6fpd.js"]
174
+ preloads: ["/assets/_id-Dz9fjcCM.js", "/assets/Button-ByiV6fpd.js"]
175
175
  }
176
176
  } });
177
177
  //#endregion
@@ -3,7 +3,7 @@ import { t as DAEMON_BASE_URL } from "./daemon-client-2NRMzlTr.js";
3
3
  import { n as BaziuLogo, r as PawIcon, t as Route$3 } from "./login-CNznncgA.js";
4
4
  import { t as createSsrRpc } from "./createSsrRpc-ZBGxhl8t.js";
5
5
  import { t as Route$4 } from "./routes-V9URcp1v.js";
6
- import { t as Route$5 } from "./skills-CpsyR_WA.js";
6
+ import { t as Route$5 } from "./skills-l2cyQ3zS.js";
7
7
  import { t as Route$6 } from "./profiles-CZ5NkmVw.js";
8
8
  import { t as Route$7 } from "./profile-groups-aoJleXHP.js";
9
9
  import { t as Route$8 } from "./groups-CbSwND2r.js";
@@ -15,7 +15,7 @@ import { t as Route$13 } from "./tokens-DdpnfV_Y.js";
15
15
  import { t as Route$14 } from "./services-Ccc5s2bS.js";
16
16
  import { t as Route$15 } from "./mcp-CKqwG4mt.js";
17
17
  import { t as Route$16 } from "./_id-CnQflrRv.js";
18
- import { t as Route$17 } from "./_id-81NrHA5d.js";
18
+ import { t as Route$17 } from "./_id-DUIrFV3G.js";
19
19
  import { t as Route$18 } from "./memory-Ns2-Z31p.js";
20
20
  import { t as Route$19 } from "./telegram-T3l9KtiE.js";
21
21
  import { t as Route$20 } from "./triggers-BcTTwMfy.js";
@@ -142,7 +142,7 @@ function isSetupOpen(path) {
142
142
  }
143
143
  //#endregion
144
144
  //#region src/styles.css?url
145
- var styles_default = "/assets/styles-C06axZZk.css";
145
+ var styles_default = "/assets/styles-BgE5bCHA.css";
146
146
  //#endregion
147
147
  //#region src/routes/__root.tsx
148
148
  var THEME_INIT_SCRIPT = `(function(){try{var t=localStorage.getItem('baziu-theme');var sd=window.matchMedia&&window.matchMedia('(prefers-color-scheme: dark)').matches;var d=t==='dark'||((t===null||t==='system')&&sd);document.documentElement.classList.toggle('dark',d);}catch(e){}})();`;
@@ -1,4 +1,4 @@
1
- import { t as Route } from "./skills-CpsyR_WA.js";
1
+ import { t as Route } from "./skills-l2cyQ3zS.js";
2
2
  import { useRef, useState } from "react";
3
3
  import { useRouter } from "@tanstack/react-router";
4
4
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -21,10 +21,11 @@ function SkillsPage() {
21
21
  /* @__PURE__ */ jsxs("table", { children: [/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
22
22
  /* @__PURE__ */ jsx("th", { children: "name" }),
23
23
  /* @__PURE__ */ jsx("th", { children: "description" }),
24
+ /* @__PURE__ */ jsx("th", { children: "scan" }),
24
25
  /* @__PURE__ */ jsx("th", { children: "source" }),
25
26
  /* @__PURE__ */ jsx("th", {})
26
27
  ] }) }), /* @__PURE__ */ jsxs("tbody", { children: [skills.length === 0 && /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", {
27
- colSpan: 4,
28
+ colSpan: 5,
28
29
  className: "muted",
29
30
  children: "no skills installed yet"
30
31
  }) }), skills.map((s) => /* @__PURE__ */ jsxs("tr", { children: [
@@ -33,6 +34,7 @@ function SkillsPage() {
33
34
  className: "text-[#9B3D3D]",
34
35
  children: ["parse error: ", s.parseError]
35
36
  }) : s.description }),
37
+ /* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx(FindingSummary, { findings: s.scanFindings ?? [] }) }),
36
38
  /* @__PURE__ */ jsxs("td", {
37
39
  className: "text-[0.78em] text-mocha-light",
38
40
  children: [/* @__PURE__ */ jsx("span", {
@@ -59,11 +61,13 @@ function ImportCard({ onImported }) {
59
61
  const [zipFile, setZipFile] = useState(null);
60
62
  const [dragOver, setDragOver] = useState(false);
61
63
  const [err, setErr] = useState(null);
64
+ const [findings, setFindings] = useState([]);
62
65
  const [submitting, setSubmitting] = useState(false);
63
66
  const fileInput = useRef(null);
64
67
  async function submit(e) {
65
68
  e.preventDefault();
66
69
  setErr(null);
70
+ setFindings([]);
67
71
  setSubmitting(true);
68
72
  try {
69
73
  let res;
@@ -102,8 +106,10 @@ function ImportCard({ onImported }) {
102
106
  }
103
107
  if (!res.ok) {
104
108
  const e2 = await res.json().catch(() => null);
109
+ setFindings(e2?.findings ?? []);
105
110
  throw new Error(e2?.error ?? `${res.status} ${res.statusText}`);
106
111
  }
112
+ setFindings(flattenImportFindings((await res.json().catch(() => null))?.findings));
107
113
  setPath("");
108
114
  setZipFile(null);
109
115
  onImported();
@@ -181,6 +187,13 @@ function ImportCard({ onImported }) {
181
187
  className: "err",
182
188
  children: err
183
189
  }),
190
+ findings.length > 0 && /* @__PURE__ */ jsxs("div", {
191
+ className: "mb-3 rounded-md border border-[#D7A3A3] bg-[#FFF7F5] p-3 text-[0.86em] text-[#7C2D2D]",
192
+ children: [/* @__PURE__ */ jsx("div", {
193
+ className: "mb-1 font-semibold",
194
+ children: "scan findings"
195
+ }), /* @__PURE__ */ jsx(FindingList, { findings })]
196
+ }),
184
197
  /* @__PURE__ */ jsxs("form", {
185
198
  onSubmit: submit,
186
199
  children: [
@@ -245,11 +258,18 @@ function ImportCard({ onImported }) {
245
258
  children: submitting ? "importing…" : tab === "zip" ? "upload & import" : tab === "openclaw" ? "import from OpenClaw" : "import"
246
259
  }), /* @__PURE__ */ jsxs("label", {
247
260
  className: "m-0 inline-flex cursor-pointer items-center text-[0.88em] text-mocha",
248
- children: [/* @__PURE__ */ jsx("input", {
249
- type: "checkbox",
250
- checked: force,
251
- onChange: (e) => setForce(e.target.checked)
252
- }), "overwrite existing"]
261
+ children: [
262
+ /* @__PURE__ */ jsx("input", {
263
+ type: "checkbox",
264
+ checked: force,
265
+ onChange: (e) => setForce(e.target.checked)
266
+ }),
267
+ "overwrite existing",
268
+ /* @__PURE__ */ jsx("span", {
269
+ className: "ml-1 text-mocha-light",
270
+ children: "/ confirm scan findings"
271
+ })
272
+ ]
253
273
  })]
254
274
  })
255
275
  ]
@@ -257,5 +277,45 @@ function ImportCard({ onImported }) {
257
277
  ]
258
278
  });
259
279
  }
280
+ function FindingSummary({ findings }) {
281
+ if (findings.length === 0) return /* @__PURE__ */ jsx("span", {
282
+ className: "text-mocha-light",
283
+ children: "clean"
284
+ });
285
+ return /* @__PURE__ */ jsxs("details", {
286
+ className: "text-[0.82em]",
287
+ children: [/* @__PURE__ */ jsxs("summary", {
288
+ className: findings.some((f) => f.severity === "danger") ? "cursor-pointer text-[#9B3D3D]" : "cursor-pointer text-mocha",
289
+ children: [
290
+ findings.length,
291
+ " finding",
292
+ findings.length === 1 ? "" : "s"
293
+ ]
294
+ }), /* @__PURE__ */ jsx(FindingList, { findings })]
295
+ });
296
+ }
297
+ function FindingList({ findings }) {
298
+ return /* @__PURE__ */ jsx("ul", {
299
+ className: "m-0 list-disc pl-4",
300
+ children: findings.map((f, i) => /* @__PURE__ */ jsxs("li", { children: [
301
+ /* @__PURE__ */ jsx("span", {
302
+ className: "font-mono",
303
+ children: f.severity
304
+ }),
305
+ ": ",
306
+ f.code,
307
+ f.line ? ` line ${f.line}` : "",
308
+ " - ",
309
+ f.message
310
+ ] }, `${f.code}-${f.line ?? 0}-${i}`))
311
+ });
312
+ }
313
+ function flattenImportFindings(findings) {
314
+ if (!findings) return [];
315
+ return Object.entries(findings).flatMap(([name, items]) => items.map((item) => ({
316
+ ...item,
317
+ message: `${name}: ${item.message}`
318
+ })));
319
+ }
260
320
  //#endregion
261
321
  export { SkillsPage as component };
@@ -2,7 +2,7 @@ import { t as createServerFn } from "../server.js";
2
2
  import { t as createSsrRpc } from "./createSsrRpc-ZBGxhl8t.js";
3
3
  import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
4
4
  //#region src/routes/skills/index.tsx
5
- var $$splitComponentImporter = () => import("./skills-dLyBZb3B.js");
5
+ var $$splitComponentImporter = () => import("./skills-D89ND2kR.js");
6
6
  var fetchSkills = createServerFn({ method: "GET" }).handler(createSsrRpc("ae1d30575b229c1e2622fbaf2252800a9a7acc84afdd68cba025ca890b8d52c5"));
7
7
  var Route = createFileRoute("/skills/")({
8
8
  loader: () => fetchSkills(),
@@ -3547,7 +3547,7 @@ var defaultSerovalPlugins = [
3547
3547
  * the dev styles URL for route-scoped CSS collection.
3548
3548
  */
3549
3549
  async function getStartManifest(matchedRoutes) {
3550
- const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-DBlFH2gg.js");
3550
+ const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-D9FLKShQ.js");
3551
3551
  const startManifest = tsrStartManifest();
3552
3552
  let routes = startManifest.routes;
3553
3553
  routes[rootRouteId];
@@ -5521,7 +5521,7 @@ var getBaseManifest = getProdBaseManifest;
5521
5521
  var createEarlyHintsForRequest = createEarlyHintsCollector;
5522
5522
  async function loadEntries() {
5523
5523
  const [routerEntry, startEntry, pluginAdapters] = await Promise.all([
5524
- import("./assets/router-BpBZgRwn.js"),
5524
+ import("./assets/router-BrDascdO.js"),
5525
5525
  import("./assets/start-CYDpZ6cb.js"),
5526
5526
  import("./assets/empty-plugin-adapters-DKUlnwwl.js")
5527
5527
  ]);