kennel 0.2.11 → 0.2.13
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/cli/src/plugins/external.js +19 -7
- package/dist/cli/src/site/server-plugins.d.ts +1 -4
- package/dist/core/api-client.js +3 -11
- package/dist/core/runtime.js +84 -695
- package/dist/package/preview.js +99 -729
- package/dist/plugins/external.js +19 -7
- package/dist/site/server-plugins.d.ts +1 -4
- package/dist/site/server-plugins.js +28 -537
- package/kernel/apps/web/package.json +0 -1
- package/kernel/apps/web/src/app.css +0 -1
- package/kernel/apps/web/src/app.tsx +7 -24
- package/kernel/apps/web/src/folder-plugin-view.tsx +6 -3
- package/kernel/apps/web/src/plugins.ts +2 -14
- package/kernel/apps/web/vite.config.ts +22 -20
- package/kernel/packages/api/openapi.json +85 -224
- package/kernel/packages/api/package.json +0 -1
- package/kernel/packages/api/src/contracts/schemas.ts +1 -9
- package/kernel/packages/api/src/server/folder-metadata-plugin.ts +9 -151
- package/kernel/packages/api/src/server/plugins.ts +11 -26
- package/kernel/packages/api/src/shared/viewer-route.ts +3 -5
- package/kernel/packages/api-client/src/generated.d.ts +16 -53
- package/kernel/packages/markdown/README.md +2 -2
- package/kernel/packages/notes/package.json +1 -0
- package/kernel/packages/notes/src/client.tsx +0 -1
- package/kernel/packages/notes/src/manifest.ts +7 -0
- package/kernel/packages/notes/src/pages/notes-page.tsx +1 -1
- package/kernel/packages/notes/src/ui/folder-notes-list.tsx +52 -7
- package/kernel/packages/plugins/SKILL.md +3 -2
- package/kernel/packages/plugins/package.json +5 -1
- package/kernel/packages/plugins/src/hooks.ts +24 -0
- package/kernel/packages/plugins/src/index.ts +1 -7
- package/kernel/packages/plugins/src/page.ts +0 -7
- package/kernel/packages/plugins/src/types.ts +8 -0
- package/kernel/packages/plugins/tsconfig.json +1 -1
- package/kernel/packages/plugins/tsup.config.ts +1 -0
- package/kernel/packages/ui/src/components/folder-activity.tsx +16 -98
- package/kernel/packages/ui/src/components/folder-landing.tsx +4 -0
- package/kernel/packages/ui/src/components/markdown-copy-block.tsx +78 -0
- package/kernel/packages/ui/src/components/pagination.tsx +88 -2
- package/kernel/packages/ui/src/components/plugin-icon.tsx +19 -0
- package/kernel/packages/ui/src/lib/folder-activity.ts +4 -17
- package/kernel/packages/ui/src/lib/source-components.tsx +12 -6
- package/kernel/packages/ui/src/styles/folder-activity.css +1 -31
- package/package.json +2 -2
- package/web/assets/{abnfDiagram-VRR7QNED-CSaxgLw6.js → abnfDiagram-VRR7QNED-Dt7QEF5H.js} +1 -1
- package/web/assets/app-C1j063QX.js +2 -0
- package/web/assets/app-options-98-a6ivv.js +25 -0
- package/web/assets/{app-view-header-Cpx74SQs.js → app-view-header-BJ9CWTE1.js} +1 -1
- package/web/assets/{arc-DOrTJz--.js → arc-PFB0H7oD.js} +1 -1
- package/web/assets/{architectureDiagram-ZJ3FMSHR-EjOjwlGK.js → architectureDiagram-ZJ3FMSHR-BHLqEXlZ.js} +1 -1
- package/web/assets/{ask-tray-DLEoRbpV.js → ask-tray-C3gBesHJ.js} +1 -1
- package/web/assets/{blockDiagram-677ZJIJ3-Dg2LWLOW.js → blockDiagram-677ZJIJ3-UbnYoYDg.js} +1 -1
- package/web/assets/{button-C6arH7zt.js → button-CuuAtS1I.js} +1 -1
- package/web/assets/{c4Diagram-LMCZKHZV-CWHqGPk8.js → c4Diagram-LMCZKHZV-4OSx1V4W.js} +1 -1
- package/web/assets/channel-BuvY5cQN.js +1 -0
- package/web/assets/{chunk-2Q5K7J3B-Dzz0QWV_.js → chunk-2Q5K7J3B-CgxJ1aJb.js} +1 -1
- package/web/assets/{chunk-32BRIVSS-BocStooX.js → chunk-32BRIVSS-Bfwxg2LM.js} +1 -1
- package/web/assets/{chunk-5VM5RSS4-D8BF5Y5h.js → chunk-5VM5RSS4-BZN9a2hI.js} +1 -1
- package/web/assets/{chunk-EX3LRPZG-CWMl9KkL.js → chunk-EX3LRPZG-CrH6hhqq.js} +1 -1
- package/web/assets/{chunk-JWPE2WC7-BZEr7iFk.js → chunk-JWPE2WC7-Ddn7ZSp8.js} +1 -1
- package/web/assets/{chunk-MOJQB5TN-DbKnLJ33.js → chunk-MOJQB5TN-9lJ7f_hI.js} +1 -1
- package/web/assets/{chunk-RYQCIY6F-BF9KWoi2.js → chunk-RYQCIY6F-QrFo_00s.js} +1 -1
- package/web/assets/{chunk-V7JOEXUC-e88zamUH.js → chunk-V7JOEXUC-Dn0lQjVf.js} +1 -1
- package/web/assets/{chunk-VR4S4FIN-NDHM58HJ.js → chunk-VR4S4FIN-DXVPySkB.js} +1 -1
- package/web/assets/{chunk-XXDRQBXY-BtzSzNoD.js → chunk-XXDRQBXY-CBiFDOdZ.js} +1 -1
- package/web/assets/classDiagram-OUVF2IWQ-DCYNCJhe.js +1 -0
- package/web/assets/classDiagram-v2-EOCWNBFH-DCYNCJhe.js +1 -0
- package/web/assets/client-DBJY3XDL.js +43 -0
- package/web/assets/client-DKJs0w4y.js +6 -0
- package/web/assets/{command-BWtewOrt.js → command-onjTnuXT.js} +1 -1
- package/web/assets/{copy-context-YESgZ_hu.js → copy-context-CciRaLNN.js} +1 -1
- package/web/assets/{cose-bilkent-JH36ORCC-i7x8jZ9M.js → cose-bilkent-JH36ORCC-CGRic2um.js} +1 -1
- package/web/assets/{cynefin-VYW2F7L2-D8HPrHMt.js → cynefin-VYW2F7L2-Blk0Lu0l.js} +1 -1
- package/web/assets/{cynefinDiagram-TSTJHNR4-BtkeCNXb.js → cynefinDiagram-TSTJHNR4-DpnnHRDK.js} +1 -1
- package/web/assets/{dagre-VKFMJZFB-oIThwshO.js → dagre-VKFMJZFB-llzMokKp.js} +1 -1
- package/web/assets/{diagram-FQU43EPY-DTuhEo03.js → diagram-FQU43EPY-DC6xHovR.js} +1 -1
- package/web/assets/{diagram-G47NLZAW-BcQ_4_fE.js → diagram-G47NLZAW-B8GVS3EA.js} +1 -1
- package/web/assets/{diagram-NH7WQ7WH-BA4VC8Du.js → diagram-NH7WQ7WH-DWUaARfh.js} +1 -1
- package/web/assets/{diagram-OA4YK3LP-BOpyrmty.js → diagram-OA4YK3LP-9Uaes_Yi.js} +1 -1
- package/web/assets/{diagram-WEI45ONY-BzrSPDJ7.js → diagram-WEI45ONY-DPPTBWud.js} +1 -1
- package/web/assets/document-D23WzFsW.js +23 -0
- package/web/assets/{ebnfDiagram-CCIWWBDH-BNV_4xDp.js → ebnfDiagram-CCIWWBDH-BPrKneNw.js} +1 -1
- package/web/assets/{entities-D0qpC3B9.js → entities-DPg0B8vd.js} +1 -1
- package/web/assets/{erDiagram-Q63AITRT-NT1La9pi.js → erDiagram-Q63AITRT-CFqYBcnb.js} +1 -1
- package/web/assets/{file-viewer-C1N6vaip.js → file-viewer-Ck73SsLA.js} +1 -1
- package/web/assets/{flowDiagram-23GEKE2U-CIYWUYkz.js → flowDiagram-23GEKE2U-C7RpYqaT.js} +1 -1
- package/web/assets/folder-filter-bar-DzejUj87.js +4 -0
- package/web/assets/{folder-image-Bz0xznQT.js → folder-image-BjIicmQ6.js} +1 -1
- package/web/assets/folder-landing-CCIXZfkp.js +55 -0
- package/web/assets/folder-list-TuRwuTss.js +1 -0
- package/web/assets/folder-mobile-bar-Bqnfwi-z.js +1 -0
- package/web/assets/folder-plugin-view-CrinCX1o.js +2 -0
- package/web/assets/{ganttDiagram-NO4QXBWP-DeUfoXQA.js → ganttDiagram-NO4QXBWP-Cz2sxU8F.js} +1 -1
- package/web/assets/{gitGraphDiagram-IHSO6WYX-DMeTgUPh.js → gitGraphDiagram-IHSO6WYX-BSuz0yF-.js} +1 -1
- package/web/assets/{index-CCXE8zc9.js → index-BVyeNcuc.js} +1 -1
- package/web/assets/{index-CegvVQ1C.js → index-Cg-gtBkw.js} +1 -1
- package/web/assets/index-DLn_2LPp.js +2 -0
- package/web/assets/{index-DY0VGBht.js → index-DbVDdnzL.js} +1 -1
- package/web/assets/index-uY9jLiL5.css +1 -0
- package/web/assets/{infoDiagram-FWYZ7A6U-DI_P8Ghi.js → infoDiagram-FWYZ7A6U-CpeKgqoS.js} +1 -1
- package/web/assets/input-Bz_puamS.js +9 -0
- package/web/assets/{ishikawaDiagram-FXEZZL3T-B8bM-8CD.js → ishikawaDiagram-FXEZZL3T-5c2Tmknb.js} +1 -1
- package/web/assets/{journeyDiagram-5HDEW3XC-pviYejXU.js → journeyDiagram-5HDEW3XC-Cu-wRkR4.js} +1 -1
- package/web/assets/{kanban-definition-HUTT4EX6-DfvdDvpU.js → kanban-definition-HUTT4EX6-BunSqkPe.js} +1 -1
- package/web/assets/{linear-DNOuKTk_.js → linear-C8e8bGVv.js} +1 -1
- package/web/assets/{mermaid.core-CisVJ_Cs.js → mermaid.core-DLgjY1g2.js} +4 -4
- package/web/assets/{metadata-C7E_6HIN.js → metadata-DEfJKlnd.js} +1 -1
- package/web/assets/{mindmap-definition-LN4V7U3C-DzdcaduN.js → mindmap-definition-LN4V7U3C-W9ENYFOD.js} +1 -1
- package/web/assets/{pegDiagram-2B236MQR-D_7xhlXd.js → pegDiagram-2B236MQR-0vPlHCFp.js} +1 -1
- package/web/assets/{pieDiagram-ENE6RG2P-CisikHMW.js → pieDiagram-ENE6RG2P-CakaveRV.js} +1 -1
- package/web/assets/{popover-D7MTK-sz.js → popover-3AMcPJpt.js} +1 -1
- package/web/assets/{project-search-dialog-BsHc39D0.js → project-search-dialog-BSKA4peX.js} +1 -1
- package/web/assets/{quadrantDiagram-ABIIQ3AL-D6adg-7z.js → quadrantDiagram-ABIIQ3AL-jxHw_egj.js} +1 -1
- package/web/assets/{railroadDiagram-RFXS5EU6-CyPAHeJ-.js → railroadDiagram-RFXS5EU6-lIjDXPZt.js} +1 -1
- package/web/assets/{requirementDiagram-TGXJPOKE-CgpSiPTv.js → requirementDiagram-TGXJPOKE-C-JiT4bc.js} +1 -1
- package/web/assets/{sankeyDiagram-HTMAVEWB-BxvReW6S.js → sankeyDiagram-HTMAVEWB-SuLPAw9X.js} +1 -1
- package/web/assets/{search-DEgwpq-P.js → search-CKujW14f.js} +1 -1
- package/web/assets/{selection-popup-d94JnDPy.js → selection-popup-CtxT9SWn.js} +3 -3
- package/web/assets/{sequenceDiagram-DBY2YBRQ-uuplzETI.js → sequenceDiagram-DBY2YBRQ-o9UwTkZR.js} +1 -1
- package/web/assets/{sizeCapture-X5ZJPWSS-Bi3F7nOa.js → sizeCapture-X5ZJPWSS-ClbWGybF.js} +1 -1
- package/web/assets/{stateDiagram-2N3HPSRC-DqypF7lE.js → stateDiagram-2N3HPSRC-Ce4avoWx.js} +1 -1
- package/web/assets/stateDiagram-v2-6OUMAXLB-CsrPTZoJ.js +1 -0
- package/web/assets/{swimlanes-5IMT3BWC-CGD9YT1l.js → swimlanes-5IMT3BWC-DMZI4XZT.js} +2 -2
- package/web/assets/swimlanesDiagram-G3AALYLV-pShSVcTd.js +8 -0
- package/web/assets/{timeline-definition-FHXFAJF6-DCjNS9Ol.js → timeline-definition-FHXFAJF6-CPIpIgPN.js} +1 -1
- package/web/assets/{utils-DCaHk0Gm.js → utils-Cg80pk1W.js} +1 -1
- package/web/assets/{vennDiagram-L72KCM5P-BJ58yQgD.js → vennDiagram-L72KCM5P-_rha8uDZ.js} +1 -1
- package/web/assets/view-context-BDtIUHQy.js +229 -0
- package/web/assets/{viewer-capabilities-DCuJdf64.js → viewer-capabilities-YYZqMs56.js} +1 -1
- package/web/assets/{wardleyDiagram-EHGQE667-BiLuq9mr.js → wardleyDiagram-EHGQE667-D4EAOS35.js} +1 -1
- package/web/assets/{xychartDiagram-FW5EYKEG-DzAZpIRG.js → xychartDiagram-FW5EYKEG-DR8PwXpe.js} +1 -1
- package/web/index.html +2 -2
- package/kernel/packages/agents/eslint.config.js +0 -10
- package/kernel/packages/agents/package.json +0 -75
- package/kernel/packages/agents/src/agent-card.tsx +0 -334
- package/kernel/packages/agents/src/client.tsx +0 -13
- package/kernel/packages/agents/src/index.ts +0 -18
- package/kernel/packages/agents/src/manifest.ts +0 -7
- package/kernel/packages/agents/src/node.ts +0 -447
- package/kernel/packages/agents/src/profiles.ts +0 -137
- package/kernel/packages/agents/src/resolve.ts +0 -69
- package/kernel/packages/agents/src/server.ts +0 -60
- package/kernel/packages/agents/src/types.ts +0 -82
- package/kernel/packages/agents/src/viewer.tsx +0 -370
- package/kernel/packages/agents/test/profiles.test.mjs +0 -88
- package/kernel/packages/agents/test/resolve.test.mjs +0 -729
- package/kernel/packages/agents/tsconfig.json +0 -17
- package/kernel/packages/api/test/agents-loading.test.ts +0 -94
- package/kernel/packages/ui/src/components/folder-skill-list.tsx +0 -62
- package/web/assets/app-DoXXGPMx.js +0 -2
- package/web/assets/app-options-jTBHy0A7.js +0 -25
- package/web/assets/channel-54w4vQjC.js +0 -1
- package/web/assets/classDiagram-OUVF2IWQ-Bh9Ib2pw.js +0 -1
- package/web/assets/classDiagram-v2-EOCWNBFH-Bh9Ib2pw.js +0 -1
- package/web/assets/client-BgUDusrU.js +0 -5
- package/web/assets/client-COaHUqSC.js +0 -17
- package/web/assets/client-UC06V2VL.js +0 -22
- package/web/assets/document-BDtU3CbX.js +0 -19
- package/web/assets/folder-filter-bar-C_2Mobfq.js +0 -4
- package/web/assets/folder-landing-3gqbGaYS.js +0 -54
- package/web/assets/folder-list-DDI0TF2e.js +0 -1
- package/web/assets/folder-metadata-DjV3ZUra.js +0 -2
- package/web/assets/folder-mobile-bar-CF4CpJXL.js +0 -1
- package/web/assets/folder-plugin-view-C48J0HKe.js +0 -3
- package/web/assets/index-Bp9DidgD.js +0 -1
- package/web/assets/index-CXhBn-ar.js +0 -1
- package/web/assets/index-CtuOSBHa.js +0 -2
- package/web/assets/index-Dwhf8F_U.css +0 -1
- package/web/assets/select-DGaccqVB.js +0 -30
- package/web/assets/stateDiagram-v2-6OUMAXLB-EsEb0a5Q.js +0 -1
- package/web/assets/swimlanesDiagram-G3AALYLV-DKIYuN5l.js +0 -8
- package/web/assets/use-folder-filter-hA6fa7nm.js +0 -1
- package/web/assets/view-context-BrzQ7WBV.js +0 -229
|
@@ -28,7 +28,7 @@ import type {
|
|
|
28
28
|
// Sessions functionality is commented out (can be re-enabled).
|
|
29
29
|
// FolderSession,
|
|
30
30
|
} from "@raggle-ai/ui/lib/folder-activity"
|
|
31
|
-
import { useFolderNotes } from "@raggle-ai/notes/
|
|
31
|
+
import { useFolderNotes } from "@raggle-ai/notes/data/use-folder-notes"
|
|
32
32
|
import { LinkProvider } from "@raggle-ai/ui/components/link"
|
|
33
33
|
import { toast, Toaster } from "@raggle-ai/ui/components/sonner"
|
|
34
34
|
|
|
@@ -43,6 +43,7 @@ import {
|
|
|
43
43
|
writeFolderQueryCache,
|
|
44
44
|
} from "./folder-query-cache"
|
|
45
45
|
import { localSource } from "./local-source"
|
|
46
|
+
import { getFolderPlugin } from "./plugins"
|
|
46
47
|
import { queryClient } from "./query-client"
|
|
47
48
|
import { useView, ViewProvider } from "./view-context"
|
|
48
49
|
import {
|
|
@@ -154,10 +155,6 @@ const folderRoute = createRoute({
|
|
|
154
155
|
// getParentRoute: () => folderRoute,
|
|
155
156
|
// path: "sessions",
|
|
156
157
|
// })
|
|
157
|
-
const folderSkillsRoute = createRoute({
|
|
158
|
-
getParentRoute: () => folderRoute,
|
|
159
|
-
path: "skills",
|
|
160
|
-
})
|
|
161
158
|
const folderViewRoute = createRoute({
|
|
162
159
|
getParentRoute: () => folderRoute,
|
|
163
160
|
path: "views/$pluginId",
|
|
@@ -211,7 +208,6 @@ const routeTree = rootRoute.addChildren([
|
|
|
211
208
|
folderNotesRoute,
|
|
212
209
|
folderCollectionRoute,
|
|
213
210
|
// folderSessionsRoute,
|
|
214
|
-
folderSkillsRoute,
|
|
215
211
|
folderViewRoute,
|
|
216
212
|
folderViewDetailRoute,
|
|
217
213
|
folderProjectsRoute,
|
|
@@ -297,7 +293,6 @@ const cacheTimes = {
|
|
|
297
293
|
plugins: Number.POSITIVE_INFINITY,
|
|
298
294
|
// Sessions functionality is commented out (can be re-enabled).
|
|
299
295
|
// sessions: 5_000,
|
|
300
|
-
skills: 15_000,
|
|
301
296
|
}
|
|
302
297
|
|
|
303
298
|
function folderQueryKey(folderId: string, part: MetadataPart) {
|
|
@@ -387,14 +382,6 @@ function FolderContent() {
|
|
|
387
382
|
// staleTime: cacheTimes.sessions,
|
|
388
383
|
// })
|
|
389
384
|
const notes = useFolderNotes(href, loadMetadata && params.section === "notes")
|
|
390
|
-
// Skills are loaded on demand, only when their section is open.
|
|
391
|
-
const skills = useQuery({
|
|
392
|
-
enabled: Boolean(loadMetadata && params.section === "skills"),
|
|
393
|
-
gcTime: 5 * 60_000,
|
|
394
|
-
queryFn: ({ signal }) => fetchMetadataPart(href, "skills", { signal }),
|
|
395
|
-
queryKey: folderQueryKey(folderId, "skills"),
|
|
396
|
-
staleTime: cacheTimes.skills,
|
|
397
|
-
})
|
|
398
385
|
const metadata = useMemo<FolderMetadata | undefined>(() => {
|
|
399
386
|
if (!identity.data) return undefined
|
|
400
387
|
return {
|
|
@@ -408,16 +395,8 @@ function FolderContent() {
|
|
|
408
395
|
// Sessions functionality is commented out (can be re-enabled).
|
|
409
396
|
// sessions: sessions.data?.sessions ?? { items: [] },
|
|
410
397
|
sessions: { items: [] },
|
|
411
|
-
skills: skills.data?.skills ?? { items: [] },
|
|
412
398
|
}
|
|
413
|
-
}, [
|
|
414
|
-
discovery.data,
|
|
415
|
-
identity.data,
|
|
416
|
-
notes.files,
|
|
417
|
-
plugins.data,
|
|
418
|
-
skills.data,
|
|
419
|
-
view.workspace,
|
|
420
|
-
])
|
|
399
|
+
}, [discovery.data, identity.data, notes.files, plugins.data, view.workspace])
|
|
421
400
|
const metadataErrorReason =
|
|
422
401
|
identity.error ??
|
|
423
402
|
(params.section === "projects" ? discovery.error : undefined) ??
|
|
@@ -532,6 +511,7 @@ function FolderContent() {
|
|
|
532
511
|
) : null
|
|
533
512
|
|
|
534
513
|
const collectionPage = Boolean(params.collectionId)
|
|
514
|
+
const activePlugin = getFolderPlugin(params.view?.pluginId)
|
|
535
515
|
const landingProps = {
|
|
536
516
|
data: metadata,
|
|
537
517
|
collectionId: params.collectionId,
|
|
@@ -560,6 +540,9 @@ function FolderContent() {
|
|
|
560
540
|
tab: routeFolderTab(params),
|
|
561
541
|
tabHref,
|
|
562
542
|
view: params.view,
|
|
543
|
+
viewNavigation: activePlugin
|
|
544
|
+
? { icon: activePlugin.icon, label: activePlugin.label }
|
|
545
|
+
: undefined,
|
|
563
546
|
}
|
|
564
547
|
|
|
565
548
|
return (
|
|
@@ -2,6 +2,7 @@ import { useParams } from "@tanstack/react-router"
|
|
|
2
2
|
import { api } from "~/api-client"
|
|
3
3
|
|
|
4
4
|
import type { FolderPluginViewProps } from "kennel-plugins/client"
|
|
5
|
+
import { FolderPathProvider } from "kennel-plugins/hooks"
|
|
5
6
|
|
|
6
7
|
import { FolderFilterMetadataProvider } from "./folder-filter-icons"
|
|
7
8
|
import { getFolderPlugin } from "./plugins"
|
|
@@ -80,8 +81,10 @@ export function FolderPluginPage() {
|
|
|
80
81
|
}
|
|
81
82
|
const Component = plugin.component
|
|
82
83
|
return (
|
|
83
|
-
<
|
|
84
|
-
<
|
|
85
|
-
|
|
84
|
+
<FolderPathProvider key={`${folderId}:${plugin.id}`} folder={folder}>
|
|
85
|
+
<FolderFilterMetadataProvider>
|
|
86
|
+
<Component {...view} />
|
|
87
|
+
</FolderFilterMetadataProvider>
|
|
88
|
+
</FolderPathProvider>
|
|
86
89
|
)
|
|
87
90
|
}
|
|
@@ -1,21 +1,9 @@
|
|
|
1
|
-
import { lazy } from "react"
|
|
2
|
-
import { externalFolderPlugins } from "@/external-plugins"
|
|
3
|
-
|
|
4
1
|
import type { FolderPluginClient } from "kennel-plugins/client"
|
|
5
|
-
import {
|
|
2
|
+
import { externalFolderPlugins } from "@/external-plugins"
|
|
6
3
|
|
|
7
4
|
// Keep navigation metadata cheap. Import only the selected plugin's UI;
|
|
8
5
|
// never construct an import path from an untrusted URL segment.
|
|
9
|
-
export const folderPlugins: FolderPluginClient[] = [
|
|
10
|
-
{
|
|
11
|
-
...agentsManifest,
|
|
12
|
-
component: lazy(async () => ({
|
|
13
|
-
default: (await import("@raggle-ai/agents/client")).agentsClient
|
|
14
|
-
.component,
|
|
15
|
-
})),
|
|
16
|
-
},
|
|
17
|
-
...externalFolderPlugins,
|
|
18
|
-
]
|
|
6
|
+
export const folderPlugins: FolderPluginClient[] = [...externalFolderPlugins]
|
|
19
7
|
|
|
20
8
|
const byId = new Map(folderPlugins.map((plugin) => [plugin.id, plugin]))
|
|
21
9
|
export function getFolderPlugin(id: string | undefined) {
|
|
@@ -53,27 +53,16 @@ const packageEntry = (name: string): string | undefined => {
|
|
|
53
53
|
// and disable ACP live sessions. Local loopback keeps the intentional
|
|
54
54
|
// multi-folder hot-viewer workflows (linked notes, server reuse).
|
|
55
55
|
const remoteAccess = process.env.KENNEL_VIEWER_REMOTE === "1"
|
|
56
|
-
//
|
|
57
|
-
// lives either hoisted at the workspace root or nested under the markdown
|
|
58
|
-
// re-export package (Bun has used both layouts). Resolve it defensively so a
|
|
59
|
-
// layout change or a missing copy degrades to normal node_modules resolution
|
|
60
|
-
// instead of crashing config load — and so a stale hoisted copy can never
|
|
61
|
-
// mask the version @raggle-ai/markdown actually depends on.
|
|
56
|
+
// Use the markdown package's dependency, never a stale root-level install.
|
|
62
57
|
const resolveBarkdown = (): string | undefined => {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
),
|
|
69
|
-
]) {
|
|
70
|
-
if (existsSync(candidate)) return realpathSync(candidate)
|
|
71
|
-
}
|
|
72
|
-
return undefined
|
|
58
|
+
const candidate = resolve(
|
|
59
|
+
workspace,
|
|
60
|
+
"packages/markdown/node_modules/@raggle-ai/barkdown",
|
|
61
|
+
)
|
|
62
|
+
return existsSync(candidate) ? realpathSync(candidate) : undefined
|
|
73
63
|
}
|
|
74
64
|
const barkdown = resolveBarkdown()
|
|
75
65
|
const internalPackages: Array<[RegExp, string]> = [
|
|
76
|
-
[/^@raggle-ai\/agents(\/.*)?$/, "packages/agents/src"],
|
|
77
66
|
[/^kennel-plugins(\/.*)?$/, "packages/plugins/src"],
|
|
78
67
|
[/^@raggle-ai\/kennel-api(\/.*)?$/, "packages/api/src"],
|
|
79
68
|
[/^@raggle-ai\/markdown(\/.*)?$/, "packages/markdown/src"],
|
|
@@ -84,9 +73,13 @@ const internalPackages: Array<[RegExp, string]> = [
|
|
|
84
73
|
[/^kennel-client(\/.*)?$/, "packages/api-client/src"],
|
|
85
74
|
]
|
|
86
75
|
const hostPackageNames = [
|
|
87
|
-
"@raggle-ai/barkdown",
|
|
88
76
|
"@tanstack/react-query",
|
|
89
77
|
"@tanstack/react-router",
|
|
78
|
+
"class-variance-authority",
|
|
79
|
+
"clsx",
|
|
80
|
+
"radix-ui",
|
|
81
|
+
"sonner",
|
|
82
|
+
"tailwind-merge",
|
|
90
83
|
"date-fns",
|
|
91
84
|
"effect",
|
|
92
85
|
"lucide-react",
|
|
@@ -224,6 +217,17 @@ export default defineConfig({
|
|
|
224
217
|
}),
|
|
225
218
|
// Only non-API BarkDown assets remain here; core owns /api/*.
|
|
226
219
|
barkdownPlugin(root),
|
|
220
|
+
{
|
|
221
|
+
name: "kennel-plugin-style-sources",
|
|
222
|
+
enforce: "pre",
|
|
223
|
+
transform(code, id) {
|
|
224
|
+
if (id.split("?")[0] !== resolve(import.meta.dirname, "src/app.css")) return
|
|
225
|
+
const sources = externalSourceRoots
|
|
226
|
+
.map((folder) => `@source ${JSON.stringify(folder.replaceAll("\\", "/"))};`)
|
|
227
|
+
.join("\n")
|
|
228
|
+
return `${code}\n${sources}\n`
|
|
229
|
+
},
|
|
230
|
+
},
|
|
227
231
|
tailwindcss(),
|
|
228
232
|
react(),
|
|
229
233
|
],
|
|
@@ -261,8 +265,6 @@ export default defineConfig({
|
|
|
261
265
|
"./src/main.tsx",
|
|
262
266
|
"./src/App.tsx",
|
|
263
267
|
"./src/markdown-page.tsx",
|
|
264
|
-
"../../packages/agents/src/viewer.tsx",
|
|
265
|
-
"../../packages/agents/src/node.ts",
|
|
266
268
|
],
|
|
267
269
|
},
|
|
268
270
|
host: "127.0.0.1",
|
|
@@ -164,7 +164,6 @@
|
|
|
164
164
|
"workspace",
|
|
165
165
|
"collections",
|
|
166
166
|
"plugins",
|
|
167
|
-
"skills",
|
|
168
167
|
"sessions",
|
|
169
168
|
"calendar",
|
|
170
169
|
"schema"
|
|
@@ -322,6 +321,23 @@
|
|
|
322
321
|
"error": {
|
|
323
322
|
"type": "string"
|
|
324
323
|
},
|
|
324
|
+
"icon": {
|
|
325
|
+
"type": "object",
|
|
326
|
+
"properties": {
|
|
327
|
+
"paths": {
|
|
328
|
+
"minItems": 1,
|
|
329
|
+
"type": "array",
|
|
330
|
+
"items": {
|
|
331
|
+
"type": "string",
|
|
332
|
+
"minLength": 1
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
"required": [
|
|
337
|
+
"paths"
|
|
338
|
+
],
|
|
339
|
+
"additionalProperties": false
|
|
340
|
+
},
|
|
325
341
|
"id": {
|
|
326
342
|
"type": "string"
|
|
327
343
|
},
|
|
@@ -433,48 +449,6 @@
|
|
|
433
449
|
],
|
|
434
450
|
"additionalProperties": false
|
|
435
451
|
},
|
|
436
|
-
"skills": {
|
|
437
|
-
"type": "object",
|
|
438
|
-
"properties": {
|
|
439
|
-
"items": {
|
|
440
|
-
"type": "array",
|
|
441
|
-
"items": {
|
|
442
|
-
"type": "object",
|
|
443
|
-
"properties": {
|
|
444
|
-
"description": {
|
|
445
|
-
"type": "string"
|
|
446
|
-
},
|
|
447
|
-
"name": {
|
|
448
|
-
"type": "string"
|
|
449
|
-
},
|
|
450
|
-
"openHref": {
|
|
451
|
-
"type": "string"
|
|
452
|
-
},
|
|
453
|
-
"relativePath": {
|
|
454
|
-
"type": "string"
|
|
455
|
-
},
|
|
456
|
-
"source": {
|
|
457
|
-
"type": "string",
|
|
458
|
-
"enum": [
|
|
459
|
-
"global",
|
|
460
|
-
"local"
|
|
461
|
-
]
|
|
462
|
-
}
|
|
463
|
-
},
|
|
464
|
-
"required": [
|
|
465
|
-
"name",
|
|
466
|
-
"relativePath",
|
|
467
|
-
"source"
|
|
468
|
-
],
|
|
469
|
-
"additionalProperties": false
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
},
|
|
473
|
-
"required": [
|
|
474
|
-
"items"
|
|
475
|
-
],
|
|
476
|
-
"additionalProperties": false
|
|
477
|
-
},
|
|
478
452
|
"workspace": {
|
|
479
453
|
"type": "object",
|
|
480
454
|
"properties": {
|
|
@@ -1402,6 +1376,23 @@
|
|
|
1402
1376
|
"error": {
|
|
1403
1377
|
"type": "string"
|
|
1404
1378
|
},
|
|
1379
|
+
"icon": {
|
|
1380
|
+
"type": "object",
|
|
1381
|
+
"properties": {
|
|
1382
|
+
"paths": {
|
|
1383
|
+
"minItems": 1,
|
|
1384
|
+
"type": "array",
|
|
1385
|
+
"items": {
|
|
1386
|
+
"type": "string",
|
|
1387
|
+
"minLength": 1
|
|
1388
|
+
}
|
|
1389
|
+
}
|
|
1390
|
+
},
|
|
1391
|
+
"required": [
|
|
1392
|
+
"paths"
|
|
1393
|
+
],
|
|
1394
|
+
"additionalProperties": false
|
|
1395
|
+
},
|
|
1405
1396
|
"id": {
|
|
1406
1397
|
"type": "string"
|
|
1407
1398
|
},
|
|
@@ -1428,61 +1419,6 @@
|
|
|
1428
1419
|
],
|
|
1429
1420
|
"additionalProperties": false
|
|
1430
1421
|
},
|
|
1431
|
-
{
|
|
1432
|
-
"type": "object",
|
|
1433
|
-
"properties": {
|
|
1434
|
-
"folder": {
|
|
1435
|
-
"type": "string"
|
|
1436
|
-
},
|
|
1437
|
-
"skills": {
|
|
1438
|
-
"type": "object",
|
|
1439
|
-
"properties": {
|
|
1440
|
-
"items": {
|
|
1441
|
-
"type": "array",
|
|
1442
|
-
"items": {
|
|
1443
|
-
"type": "object",
|
|
1444
|
-
"properties": {
|
|
1445
|
-
"description": {
|
|
1446
|
-
"type": "string"
|
|
1447
|
-
},
|
|
1448
|
-
"name": {
|
|
1449
|
-
"type": "string"
|
|
1450
|
-
},
|
|
1451
|
-
"openHref": {
|
|
1452
|
-
"type": "string"
|
|
1453
|
-
},
|
|
1454
|
-
"relativePath": {
|
|
1455
|
-
"type": "string"
|
|
1456
|
-
},
|
|
1457
|
-
"source": {
|
|
1458
|
-
"type": "string",
|
|
1459
|
-
"enum": [
|
|
1460
|
-
"global",
|
|
1461
|
-
"local"
|
|
1462
|
-
]
|
|
1463
|
-
}
|
|
1464
|
-
},
|
|
1465
|
-
"required": [
|
|
1466
|
-
"name",
|
|
1467
|
-
"relativePath",
|
|
1468
|
-
"source"
|
|
1469
|
-
],
|
|
1470
|
-
"additionalProperties": false
|
|
1471
|
-
}
|
|
1472
|
-
}
|
|
1473
|
-
},
|
|
1474
|
-
"required": [
|
|
1475
|
-
"items"
|
|
1476
|
-
],
|
|
1477
|
-
"additionalProperties": false
|
|
1478
|
-
}
|
|
1479
|
-
},
|
|
1480
|
-
"required": [
|
|
1481
|
-
"folder",
|
|
1482
|
-
"skills"
|
|
1483
|
-
],
|
|
1484
|
-
"additionalProperties": false
|
|
1485
|
-
},
|
|
1486
1422
|
{
|
|
1487
1423
|
"type": "object",
|
|
1488
1424
|
"properties": {
|
|
@@ -1585,6 +1521,23 @@
|
|
|
1585
1521
|
"error": {
|
|
1586
1522
|
"type": "string"
|
|
1587
1523
|
},
|
|
1524
|
+
"icon": {
|
|
1525
|
+
"type": "object",
|
|
1526
|
+
"properties": {
|
|
1527
|
+
"paths": {
|
|
1528
|
+
"minItems": 1,
|
|
1529
|
+
"type": "array",
|
|
1530
|
+
"items": {
|
|
1531
|
+
"type": "string",
|
|
1532
|
+
"minLength": 1
|
|
1533
|
+
}
|
|
1534
|
+
}
|
|
1535
|
+
},
|
|
1536
|
+
"required": [
|
|
1537
|
+
"paths"
|
|
1538
|
+
],
|
|
1539
|
+
"additionalProperties": false
|
|
1540
|
+
},
|
|
1588
1541
|
"id": {
|
|
1589
1542
|
"type": "string"
|
|
1590
1543
|
},
|
|
@@ -1696,48 +1649,6 @@
|
|
|
1696
1649
|
],
|
|
1697
1650
|
"additionalProperties": false
|
|
1698
1651
|
},
|
|
1699
|
-
"skills": {
|
|
1700
|
-
"type": "object",
|
|
1701
|
-
"properties": {
|
|
1702
|
-
"items": {
|
|
1703
|
-
"type": "array",
|
|
1704
|
-
"items": {
|
|
1705
|
-
"type": "object",
|
|
1706
|
-
"properties": {
|
|
1707
|
-
"description": {
|
|
1708
|
-
"type": "string"
|
|
1709
|
-
},
|
|
1710
|
-
"name": {
|
|
1711
|
-
"type": "string"
|
|
1712
|
-
},
|
|
1713
|
-
"openHref": {
|
|
1714
|
-
"type": "string"
|
|
1715
|
-
},
|
|
1716
|
-
"relativePath": {
|
|
1717
|
-
"type": "string"
|
|
1718
|
-
},
|
|
1719
|
-
"source": {
|
|
1720
|
-
"type": "string",
|
|
1721
|
-
"enum": [
|
|
1722
|
-
"global",
|
|
1723
|
-
"local"
|
|
1724
|
-
]
|
|
1725
|
-
}
|
|
1726
|
-
},
|
|
1727
|
-
"required": [
|
|
1728
|
-
"name",
|
|
1729
|
-
"relativePath",
|
|
1730
|
-
"source"
|
|
1731
|
-
],
|
|
1732
|
-
"additionalProperties": false
|
|
1733
|
-
}
|
|
1734
|
-
}
|
|
1735
|
-
},
|
|
1736
|
-
"required": [
|
|
1737
|
-
"items"
|
|
1738
|
-
],
|
|
1739
|
-
"additionalProperties": false
|
|
1740
|
-
},
|
|
1741
1652
|
"workspace": {
|
|
1742
1653
|
"type": "object",
|
|
1743
1654
|
"properties": {
|
|
@@ -1994,6 +1905,23 @@
|
|
|
1994
1905
|
"error": {
|
|
1995
1906
|
"type": "string"
|
|
1996
1907
|
},
|
|
1908
|
+
"icon": {
|
|
1909
|
+
"type": "object",
|
|
1910
|
+
"properties": {
|
|
1911
|
+
"paths": {
|
|
1912
|
+
"minItems": 1,
|
|
1913
|
+
"type": "array",
|
|
1914
|
+
"items": {
|
|
1915
|
+
"type": "string",
|
|
1916
|
+
"minLength": 1
|
|
1917
|
+
}
|
|
1918
|
+
}
|
|
1919
|
+
},
|
|
1920
|
+
"required": [
|
|
1921
|
+
"paths"
|
|
1922
|
+
],
|
|
1923
|
+
"additionalProperties": false
|
|
1924
|
+
},
|
|
1997
1925
|
"id": {
|
|
1998
1926
|
"type": "string"
|
|
1999
1927
|
},
|
|
@@ -2105,48 +2033,6 @@
|
|
|
2105
2033
|
],
|
|
2106
2034
|
"additionalProperties": false
|
|
2107
2035
|
},
|
|
2108
|
-
"skills": {
|
|
2109
|
-
"type": "object",
|
|
2110
|
-
"properties": {
|
|
2111
|
-
"items": {
|
|
2112
|
-
"type": "array",
|
|
2113
|
-
"items": {
|
|
2114
|
-
"type": "object",
|
|
2115
|
-
"properties": {
|
|
2116
|
-
"description": {
|
|
2117
|
-
"type": "string"
|
|
2118
|
-
},
|
|
2119
|
-
"name": {
|
|
2120
|
-
"type": "string"
|
|
2121
|
-
},
|
|
2122
|
-
"openHref": {
|
|
2123
|
-
"type": "string"
|
|
2124
|
-
},
|
|
2125
|
-
"relativePath": {
|
|
2126
|
-
"type": "string"
|
|
2127
|
-
},
|
|
2128
|
-
"source": {
|
|
2129
|
-
"type": "string",
|
|
2130
|
-
"enum": [
|
|
2131
|
-
"global",
|
|
2132
|
-
"local"
|
|
2133
|
-
]
|
|
2134
|
-
}
|
|
2135
|
-
},
|
|
2136
|
-
"required": [
|
|
2137
|
-
"name",
|
|
2138
|
-
"relativePath",
|
|
2139
|
-
"source"
|
|
2140
|
-
],
|
|
2141
|
-
"additionalProperties": false
|
|
2142
|
-
}
|
|
2143
|
-
}
|
|
2144
|
-
},
|
|
2145
|
-
"required": [
|
|
2146
|
-
"items"
|
|
2147
|
-
],
|
|
2148
|
-
"additionalProperties": false
|
|
2149
|
-
},
|
|
2150
2036
|
"workspace": {
|
|
2151
2037
|
"type": "object",
|
|
2152
2038
|
"properties": {
|
|
@@ -2403,6 +2289,23 @@
|
|
|
2403
2289
|
"error": {
|
|
2404
2290
|
"type": "string"
|
|
2405
2291
|
},
|
|
2292
|
+
"icon": {
|
|
2293
|
+
"type": "object",
|
|
2294
|
+
"properties": {
|
|
2295
|
+
"paths": {
|
|
2296
|
+
"minItems": 1,
|
|
2297
|
+
"type": "array",
|
|
2298
|
+
"items": {
|
|
2299
|
+
"type": "string",
|
|
2300
|
+
"minLength": 1
|
|
2301
|
+
}
|
|
2302
|
+
}
|
|
2303
|
+
},
|
|
2304
|
+
"required": [
|
|
2305
|
+
"paths"
|
|
2306
|
+
],
|
|
2307
|
+
"additionalProperties": false
|
|
2308
|
+
},
|
|
2406
2309
|
"id": {
|
|
2407
2310
|
"type": "string"
|
|
2408
2311
|
},
|
|
@@ -2514,48 +2417,6 @@
|
|
|
2514
2417
|
],
|
|
2515
2418
|
"additionalProperties": false
|
|
2516
2419
|
},
|
|
2517
|
-
"skills": {
|
|
2518
|
-
"type": "object",
|
|
2519
|
-
"properties": {
|
|
2520
|
-
"items": {
|
|
2521
|
-
"type": "array",
|
|
2522
|
-
"items": {
|
|
2523
|
-
"type": "object",
|
|
2524
|
-
"properties": {
|
|
2525
|
-
"description": {
|
|
2526
|
-
"type": "string"
|
|
2527
|
-
},
|
|
2528
|
-
"name": {
|
|
2529
|
-
"type": "string"
|
|
2530
|
-
},
|
|
2531
|
-
"openHref": {
|
|
2532
|
-
"type": "string"
|
|
2533
|
-
},
|
|
2534
|
-
"relativePath": {
|
|
2535
|
-
"type": "string"
|
|
2536
|
-
},
|
|
2537
|
-
"source": {
|
|
2538
|
-
"type": "string",
|
|
2539
|
-
"enum": [
|
|
2540
|
-
"global",
|
|
2541
|
-
"local"
|
|
2542
|
-
]
|
|
2543
|
-
}
|
|
2544
|
-
},
|
|
2545
|
-
"required": [
|
|
2546
|
-
"name",
|
|
2547
|
-
"relativePath",
|
|
2548
|
-
"source"
|
|
2549
|
-
],
|
|
2550
|
-
"additionalProperties": false
|
|
2551
|
-
}
|
|
2552
|
-
}
|
|
2553
|
-
},
|
|
2554
|
-
"required": [
|
|
2555
|
-
"items"
|
|
2556
|
-
],
|
|
2557
|
-
"additionalProperties": false
|
|
2558
|
-
},
|
|
2559
2420
|
"workspace": {
|
|
2560
2421
|
"type": "object",
|
|
2561
2422
|
"properties": {
|
|
@@ -28,13 +28,6 @@ const project = z.object({
|
|
|
28
28
|
relativePath: z.string(),
|
|
29
29
|
worktree: z.string(),
|
|
30
30
|
});
|
|
31
|
-
const skill = z.object({
|
|
32
|
-
description: z.string().optional(),
|
|
33
|
-
name: z.string(),
|
|
34
|
-
openHref: z.string().optional(),
|
|
35
|
-
relativePath: z.string(),
|
|
36
|
-
source: z.enum(["global", "local"]),
|
|
37
|
-
});
|
|
38
31
|
const session = z.object({
|
|
39
32
|
client: z.enum(["claude", "codex", "cursor", "opencode", "pi"]),
|
|
40
33
|
href: z.string().optional(),
|
|
@@ -64,6 +57,7 @@ const workspace = z.object({
|
|
|
64
57
|
const plugin = z.object({
|
|
65
58
|
count: z.number().optional(),
|
|
66
59
|
error: z.string().optional(),
|
|
60
|
+
icon: z.object({ paths: z.array(z.string().min(1)).min(1) }).optional(),
|
|
67
61
|
id: z.string(),
|
|
68
62
|
label: z.string(),
|
|
69
63
|
});
|
|
@@ -81,7 +75,6 @@ export const folderMetadataSchema = z.object({
|
|
|
81
75
|
plugins: plugins.optional(),
|
|
82
76
|
projects: items(project),
|
|
83
77
|
sessions: items(session),
|
|
84
|
-
skills: items(skill).optional(),
|
|
85
78
|
workspace: workspace.optional(),
|
|
86
79
|
});
|
|
87
80
|
const collection = coreCollectionSchema;
|
|
@@ -105,7 +98,6 @@ export const metadataSchemas = {
|
|
|
105
98
|
configWarnings: z.array(z.string()).optional(),
|
|
106
99
|
plugins: plugins.optional(),
|
|
107
100
|
}),
|
|
108
|
-
skills: z.object({ ...folder, skills: items(skill) }),
|
|
109
101
|
// Legacy selectors currently return the complete metadata payload.
|
|
110
102
|
sessions: folderMetadataSchema,
|
|
111
103
|
calendar: folderMetadataSchema,
|