bazilion 0.13.0 → 0.14.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/README.md +16 -5
- package/dist/cli.js +285 -86
- package/dist/cli.js.map +1 -1
- package/dist/daemon.js +539 -81
- package/dist/daemon.js.map +1 -1
- package/dist/web/client/assets/AgentTabs-BcmmwYJc.js +1 -0
- package/dist/web/client/assets/ConfigPage-BCLp-FUC.js +1 -0
- package/dist/web/client/assets/ConfirmDialog-BAiyYC8w.js +1 -0
- package/dist/web/client/assets/FieldRow-DsWhqiIQ.js +1 -0
- package/dist/web/client/assets/Page-NV96O47A.js +1 -0
- package/dist/web/client/assets/ProductionTeamPolicyEditor-CHBKZMpY.js +7 -0
- package/dist/web/client/assets/{ProfileCommunicationEditor-BcSf2Hao.js → ProfileCommunicationEditor-DZ8yTQvV.js} +1 -1
- package/dist/web/client/assets/SectionTabs-4kCQXuFY.js +1 -0
- package/dist/web/client/assets/TeamTabs-BfC1pfQe.js +1 -0
- package/dist/web/client/assets/{TemplatesTabs-CyDVzrOl.js → TemplatesTabs-BwsLjN0Q.js} +1 -1
- package/dist/web/client/assets/UnsavedChangesGuard-C7U9rsPw.js +1 -0
- package/dist/web/client/assets/{_id-DWTMH7Eb.js → _id-CG9YM1tY.js} +1 -1
- package/dist/web/client/assets/_id-DfzTSFBA.js +1 -0
- package/dist/web/client/assets/_id-DtHL-U-0.js +1 -0
- package/dist/web/client/assets/_id-J0kM-98d.js +1 -0
- package/dist/web/client/assets/activity-CBQGMwWo.js +1 -0
- package/dist/web/client/assets/agents-BWGBjF2Y.js +1 -0
- package/dist/web/client/assets/agents-DTY5RXgO.js +1 -0
- package/dist/web/client/assets/approvals-DwMk9S4Z.js +1 -0
- package/dist/web/client/assets/attention-7qYFtwOW.js +1 -0
- package/dist/web/client/assets/chevron-right-DK703skW.js +1 -0
- package/dist/web/client/assets/config-D59MT3Y5.js +3 -0
- package/dist/web/client/assets/{inbox-D2NypLee.js → inbox-CpKuNfOj.js} +1 -1
- package/dist/web/client/assets/index-BVfpuiby.js +52 -0
- package/dist/web/client/assets/learning-631_q6a9.js +1 -0
- package/dist/web/client/assets/login-JjfTCGIb.js +1 -0
- package/dist/web/client/assets/mcp-DHgUOUPG.js +1 -0
- package/dist/web/client/assets/members-CLCUdo-h.js +1 -0
- package/dist/web/client/assets/memory-paAiM6ix.js +1 -0
- package/dist/web/client/assets/{policy-CHM95pMU.js → policy-Fy_Wnq6p.js} +1 -1
- package/dist/web/client/assets/{preload-helper-mNuBjNXU.js → preload-helper-bztXdkDj.js} +1 -1
- package/dist/web/client/assets/routes-DciiC6QA.js +1 -0
- package/dist/web/client/assets/services-i_RmJYAO.js +1 -0
- package/dist/web/client/assets/skills-BX42OGpp.js +1 -0
- package/dist/web/client/assets/styles-B5vcgXln.css +2 -0
- package/dist/web/client/assets/{teams-Dm_huGxn.js → teams-4ySkP31k.js} +1 -1
- package/dist/web/client/assets/teams-D6nIPyC0.js +1 -0
- package/dist/web/client/assets/telegram-CphoIRWP.js +1 -0
- package/dist/web/client/assets/tokens-2j3NQudt.js +1 -0
- package/dist/web/client/assets/triggers-sDA075Nu.js +1 -0
- package/dist/web/client/assets/utils-B6KiDbIe.js +1 -0
- package/dist/web/client/assets/welcome-Do427w4M.js +1 -0
- package/dist/web/client/assets/wire-constants-B7b2CQp1.js +74 -0
- package/dist/web/client/assets/x-CbAF-3_T.js +1 -0
- package/dist/web/server/assets/{AgentTabs-aXdsiiMp.js → AgentTabs-Dq8hDM2Q.js} +9 -2
- package/dist/web/server/assets/{ChatPane-Ba5wTsVk.js → ChatPane-CgSe7tsy.js} +81 -43
- package/dist/web/server/assets/{ConfigPage-BKlh5vOU.js → ConfigPage-CiQ-gxmJ.js} +3 -2
- package/dist/web/server/assets/ConfirmDialog-C-MPYYSU.js +99 -0
- package/dist/web/server/assets/FieldRow-DCOF07kl.js +160 -0
- package/dist/web/server/assets/{Page-LENulSXY.js → Page-Bz-ydB8j.js} +4 -10
- package/dist/web/server/assets/{ProductionTeamPolicyEditor-Y4mzFFvR.js → ProductionTeamPolicyEditor-DQSdP7Yx.js} +140 -123
- package/dist/web/server/assets/{SectionTabs-BJTPr5nU.js → SectionTabs-B2Yw81XN.js} +2 -2
- package/dist/web/server/assets/{Sidebar-DsRVCszF.js → Sidebar-DKyk7oIo.js} +563 -283
- package/dist/web/server/assets/{TeamTabs-zZzbP1t_.js → TeamTabs-Co3n2exj.js} +2 -6
- package/dist/web/server/assets/{TemplatesTabs-CcRxZhJe.js → TemplatesTabs-B0fA361R.js} +1 -1
- package/dist/web/server/assets/UnsavedChangesGuard-CiStXyBI.js +40 -0
- package/dist/web/server/assets/{_id-xTD_6ApX.js → _id-BAA9KJBU.js} +1 -1
- package/dist/web/server/assets/{_id-BQ2zoMiR.js → _id-BM5m2FLT.js} +4 -4
- package/dist/web/server/assets/{_id-BENqNBfK.js → _id-BYKpT2Tu.js} +1 -2
- package/dist/web/server/assets/{_id-BreRHYV2.js → _id-BeKhPKw3.js} +350 -185
- package/dist/web/server/assets/{_id-CPIXIqyO.js → _id-BqWTB8Wl.js} +188 -86
- package/dist/web/server/assets/{_id-DkrNqqTw.js → _id-BwvCtzlD.js} +1 -1
- package/dist/web/server/assets/{_id-BZWunvy7.js → _id-DYU6uIBx.js} +0 -1
- package/dist/web/server/assets/{_id-BFELaMIN.js → _id-ndxFHx0t.js} +75 -71
- package/dist/web/server/assets/{_id-CvYqVJPU.js → _id-sNu5aXZt.js} +2 -1
- package/dist/web/server/assets/{_tanstack-start-manifest_v-COkJjXt_.js → _tanstack-start-manifest_v-DR7wyKcH.js} +113 -90
- package/dist/web/server/assets/{activity-B6N1T_5N.js → activity-BWv1goK6.js} +3 -3
- package/dist/web/server/assets/{activity-BazZNfvf.js → activity-LjpblbDL.js} +1 -1
- package/dist/web/server/assets/{agents-BpSeOA30.js → agents-BDFGrU3o.js} +1 -1
- package/dist/web/server/assets/{agents-DY630p6x.js → agents-CJk4pxKu.js} +1 -1
- package/dist/web/server/assets/{agents-wSYNPuyK.js → agents-CYw1xHoY.js} +138 -16
- package/dist/web/server/assets/{agents-DfoLnTyD.js → agents-DfNKc_Q7.js} +52 -8
- package/dist/web/server/assets/{approvals-BkUGmYU9.js → approvals-7JOoBchn.js} +1 -1
- package/dist/web/server/assets/{approvals-BYajNOdE.js → approvals-Bz123liE.js} +59 -21
- package/dist/web/server/assets/{attention-Bw_wiiqI.js → attention-B35JvhOL.js} +1 -1
- package/dist/web/server/assets/{attention-Z3bGuxOD.js → attention-C1pPWSXw.js} +3 -3
- package/dist/web/server/assets/{config-wYtIhkRm.js → config-DQ8n0AwF.js} +1 -1
- package/dist/web/server/assets/config-XSTLuRaT.js +980 -0
- package/dist/web/server/assets/{inbox-DTTfSuGU.js → inbox-RweGCV3D.js} +3 -3
- package/dist/web/server/assets/{inbox-0iiSg-Y1.js → inbox-cu3jLzNP.js} +1 -1
- package/dist/web/server/assets/{learning-DpyLNVe8.js → learning-BaKM6qaw.js} +1 -1
- package/dist/web/server/assets/{learning-fG8316uc.js → learning-CbtNlqYo.js} +76 -23
- package/dist/web/server/assets/{login-D_GDeTrB.js → login-BNj3U6ok.js} +21 -11
- package/dist/web/server/assets/{login-CrFVVUaE.js → login-Be8eP4Jp.js} +2 -2
- package/dist/web/server/assets/{mcp-BQtp2T87.js → mcp-B0goWO8Q.js} +1 -1
- package/dist/web/server/assets/mcp-CiBs8unU.js +332 -0
- package/dist/web/server/assets/members-DHYTVgwb.js +100 -0
- package/dist/web/server/assets/{members-DXu2oAS_.js → members-DiYtr-zm.js} +1 -1
- package/dist/web/server/assets/{memory-C6fX_FKI.js → memory-CkXUgf5s.js} +150 -48
- package/dist/web/server/assets/{memory-Iq2M0-Yc.js → memory-DTFEmfF3.js} +1 -1
- package/dist/web/server/assets/{policy-D7kj3Cy7.js → policy-BddK4xom.js} +1 -1
- package/dist/web/server/assets/{policy-Bg6u-rTq.js → policy-Bvvav8fh.js} +4 -4
- package/dist/web/server/assets/{router-D-6TzLRZ.js → router-M0lutIDA.js} +347 -173
- package/dist/web/server/assets/{routes-CiPfEldd.js → routes-BgHisAxH.js} +22 -5
- package/dist/web/server/assets/{routes-CNRzy79H.js → routes-COtkyZG1.js} +1 -1
- package/dist/web/server/assets/{routes-D933ngZS.js → routes-DAU2g7Uz.js} +1 -1
- package/dist/web/server/assets/services-ClyGBU7W.js +83 -0
- package/dist/web/server/assets/{services-OB4LAr2A.js → services-DgoU1udp.js} +1 -1
- package/dist/web/server/assets/{skills-Babb9jsQ.js → skills-CYih9TJw.js} +47 -6
- package/dist/web/server/assets/{skills-D5DQL8bM.js → skills-Dw3cI3si.js} +1 -1
- package/dist/web/server/assets/{start-uKQNK6if.js → start-D4Wq9iTa.js} +1 -1
- package/dist/web/server/assets/{teams-Dz6ZEMRo.js → teams-BJuoNOTB.js} +1 -1
- package/dist/web/server/assets/{teams-Bk6ZT0MD.js → teams-DF3RViAg.js} +3 -3
- package/dist/web/server/assets/{teams-DqC4wZxu.js → teams-DFnuc660.js} +1 -1
- package/dist/web/server/assets/{teams-Cc2Czynq.js → teams-TV6nbEN_.js} +101 -10
- package/dist/web/server/assets/{telegram-J4T0XhwQ.js → telegram-DbOFpTFm.js} +1 -1
- package/dist/web/server/assets/{telegram-DUbDIVGX.js → telegram-Dj4Wwhd6.js} +147 -47
- package/dist/web/server/assets/{tokens-CJM_0NDa.js → tokens-DDwtO15P.js} +88 -19
- package/dist/web/server/assets/{tokens-DO5BzNOn.js → tokens-_2hptHP6.js} +1 -1
- package/dist/web/server/assets/{triggers-BdBx-HwR.js → triggers-BvjYNmmY.js} +1 -1
- package/dist/web/server/assets/triggers-CHk9O3rU.js +367 -0
- package/dist/web/server/assets/utils-C_uf36nf.js +8 -0
- package/dist/web/server/assets/{welcome-DDB11L5j.js → welcome-B8nchXdF.js} +9 -8
- package/dist/web/server/server.js +5 -9
- package/dist/worker.js +64 -19
- package/dist/worker.js.map +1 -1
- package/package.json +3 -3
- package/dist/web/client/assets/AgentTabs-R6gSjIj3.js +0 -1
- package/dist/web/client/assets/ConfigPage-BCwfgyjD.js +0 -1
- package/dist/web/client/assets/FieldRow-avAFLgYW.js +0 -1
- package/dist/web/client/assets/Page-CwNuDhWz.js +0 -1
- package/dist/web/client/assets/ProductionTeamPolicyEditor-DdpYInwV.js +0 -7
- package/dist/web/client/assets/SectionTabs-DZzy01az.js +0 -1
- package/dist/web/client/assets/TeamTabs-Bk89JfN7.js +0 -1
- package/dist/web/client/assets/_id-CAJTTnee.js +0 -1
- package/dist/web/client/assets/_id-CN6jPaBu.js +0 -1
- package/dist/web/client/assets/_id-DGwJqqDc.js +0 -1
- package/dist/web/client/assets/activity-DK_M0-bn.js +0 -1
- package/dist/web/client/assets/agents-B-i5pASm.js +0 -1
- package/dist/web/client/assets/agents-n8U7qNxw.js +0 -1
- package/dist/web/client/assets/approvals-CmVxCy0Z.js +0 -1
- package/dist/web/client/assets/attention-F0lUQCWE.js +0 -1
- package/dist/web/client/assets/chevron-down-OndG7r1U.js +0 -1
- package/dist/web/client/assets/config-DuApZ9xS.js +0 -3
- package/dist/web/client/assets/context-C1sMnW6K.js +0 -1
- package/dist/web/client/assets/index-B3vdrEEg.js +0 -12
- package/dist/web/client/assets/learning-zYDCfVxT.js +0 -1
- package/dist/web/client/assets/login-B1Un51Zx.js +0 -1
- package/dist/web/client/assets/mcp-DSVmJBdv.js +0 -1
- package/dist/web/client/assets/members-Pl7hXJcN.js +0 -1
- package/dist/web/client/assets/memory-Co3BEaAq.js +0 -1
- package/dist/web/client/assets/plus-Dor-_wmL.js +0 -1
- package/dist/web/client/assets/routes-D29qjwG0.js +0 -1
- package/dist/web/client/assets/services-CCQ_6YWQ.js +0 -1
- package/dist/web/client/assets/skills-3xAIvzvP.js +0 -1
- package/dist/web/client/assets/styles-D6RPN7RK.css +0 -2
- package/dist/web/client/assets/teams-UGLyjHYj.js +0 -1
- package/dist/web/client/assets/telegram-3KvrJVO6.js +0 -1
- package/dist/web/client/assets/tokens-DUSFmV5_.js +0 -1
- package/dist/web/client/assets/triggers-DlQ2KF1h.js +0 -1
- package/dist/web/client/assets/welcome-DkP8qzK1.js +0 -1
- package/dist/web/client/assets/wire-constants-BhVKOCQa.js +0 -74
- package/dist/web/server/assets/FieldRow-B4eTegH9.js +0 -94
- package/dist/web/server/assets/config-DGzM28F_.js +0 -554
- package/dist/web/server/assets/context-BkDDwbby.js +0 -12
- package/dist/web/server/assets/context-DMc0KyHh.js +0 -12
- package/dist/web/server/assets/context-poimKI7w.js +0 -47
- package/dist/web/server/assets/mcp-DlgXUcAS.js +0 -261
- package/dist/web/server/assets/members-CteHKPSF.js +0 -46
- package/dist/web/server/assets/services-DJRA1A0-.js +0 -79
- package/dist/web/server/assets/triggers-B87fycBl.js +0 -216
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
import { t as Route } from "./triggers-BvjYNmmY.js";
|
|
2
|
+
import { r as PageShell } from "./Page-Bz-ydB8j.js";
|
|
3
|
+
import { t as AgentTabs } from "./AgentTabs-Dq8hDM2Q.js";
|
|
4
|
+
import { t as Button } from "./Button-Dsnw22OF.js";
|
|
5
|
+
import { t as ConfirmDialog } from "./ConfirmDialog-C-MPYYSU.js";
|
|
6
|
+
import { useState } from "react";
|
|
7
|
+
import { useRouter } from "@tanstack/react-router";
|
|
8
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
//#region src/routes/agents/$id/triggers.tsx?tsr-split=component
|
|
10
|
+
function TriggersPage() {
|
|
11
|
+
const { resolved, triggers, dispatches } = Route.useLoaderData();
|
|
12
|
+
const router = useRouter();
|
|
13
|
+
const [deleteTarget, setDeleteTarget] = useState(null);
|
|
14
|
+
const [mutationError, setMutationError] = useState(null);
|
|
15
|
+
const [busyId, setBusyId] = useState(null);
|
|
16
|
+
async function toggle(t) {
|
|
17
|
+
setBusyId(t.id);
|
|
18
|
+
setMutationError(null);
|
|
19
|
+
try {
|
|
20
|
+
const response = await fetch(`/api/triggers/${encodeURIComponent(t.id)}`, {
|
|
21
|
+
method: "PATCH",
|
|
22
|
+
headers: { "content-type": "application/json" },
|
|
23
|
+
body: JSON.stringify({ enabled: !t.enabled })
|
|
24
|
+
});
|
|
25
|
+
if (!response.ok) {
|
|
26
|
+
const body = await response.json().catch(() => null);
|
|
27
|
+
throw new Error(body?.error ?? `Could not ${t.enabled ? "disable" : "enable"} trigger`);
|
|
28
|
+
}
|
|
29
|
+
await router.invalidate();
|
|
30
|
+
} catch (error) {
|
|
31
|
+
setMutationError(error instanceof Error ? error.message : String(error));
|
|
32
|
+
} finally {
|
|
33
|
+
setBusyId(null);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async function del(id) {
|
|
37
|
+
const response = await fetch(`/api/triggers/${encodeURIComponent(id)}`, { method: "DELETE" });
|
|
38
|
+
if (!response.ok && response.status !== 204) {
|
|
39
|
+
const body = await response.json().catch(() => null);
|
|
40
|
+
throw new Error(body?.error ?? "Could not delete trigger");
|
|
41
|
+
}
|
|
42
|
+
await router.invalidate();
|
|
43
|
+
}
|
|
44
|
+
return /* @__PURE__ */ jsxs(PageShell, { children: [
|
|
45
|
+
/* @__PURE__ */ jsx("header", {
|
|
46
|
+
className: "mb-6",
|
|
47
|
+
children: /* @__PURE__ */ jsx("h1", { children: resolved.agent.name })
|
|
48
|
+
}),
|
|
49
|
+
/* @__PURE__ */ jsx(AgentTabs, {
|
|
50
|
+
agentId: resolved.agent.id,
|
|
51
|
+
active: "triggers",
|
|
52
|
+
archived: resolved.agent.status === "archived"
|
|
53
|
+
}),
|
|
54
|
+
/* @__PURE__ */ jsx(AddTriggerForm, {
|
|
55
|
+
agentId: resolved.agent.id,
|
|
56
|
+
onAdded: () => router.invalidate()
|
|
57
|
+
}),
|
|
58
|
+
mutationError && /* @__PURE__ */ jsx("p", {
|
|
59
|
+
role: "alert",
|
|
60
|
+
className: "err mt-4",
|
|
61
|
+
children: mutationError
|
|
62
|
+
}),
|
|
63
|
+
/* @__PURE__ */ jsx("h3", {
|
|
64
|
+
className: "mb-3 mt-6 font-body text-[0.85em] font-semibold uppercase tracking-wider text-mocha-light",
|
|
65
|
+
children: "Active triggers"
|
|
66
|
+
}),
|
|
67
|
+
triggers.length === 0 ? /* @__PURE__ */ jsx("p", {
|
|
68
|
+
className: "muted",
|
|
69
|
+
children: "no triggers yet — add one above."
|
|
70
|
+
}) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
|
|
71
|
+
className: "grid gap-3 md:hidden",
|
|
72
|
+
children: triggers.map((t) => {
|
|
73
|
+
const spec = t.kind === "interval" ? `every ${t.intervalSec}s` : t.cronExpr;
|
|
74
|
+
const last = t.lastFiredAt ? new Date(t.lastFiredAt).toLocaleString() : "Never";
|
|
75
|
+
return /* @__PURE__ */ jsxs("article", {
|
|
76
|
+
className: `card min-w-0 ${t.enabled ? "" : "opacity-60"}`,
|
|
77
|
+
children: [
|
|
78
|
+
/* @__PURE__ */ jsxs("div", {
|
|
79
|
+
className: "flex min-w-0 items-start justify-between gap-3",
|
|
80
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
81
|
+
className: "min-w-0",
|
|
82
|
+
children: [/* @__PURE__ */ jsx("p", {
|
|
83
|
+
className: "m-0 break-all font-mono text-xs text-muted-foreground",
|
|
84
|
+
children: t.id
|
|
85
|
+
}), /* @__PURE__ */ jsx("p", {
|
|
86
|
+
className: "mb-0 mt-1 font-medium text-foreground",
|
|
87
|
+
children: spec
|
|
88
|
+
})]
|
|
89
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
90
|
+
className: "shrink-0 rounded-sm border border-frost bg-ivory px-2 py-0.5 font-mono text-xs text-mocha",
|
|
91
|
+
children: t.kind
|
|
92
|
+
})]
|
|
93
|
+
}),
|
|
94
|
+
/* @__PURE__ */ jsx("p", {
|
|
95
|
+
className: "my-3 break-words text-sm text-foreground",
|
|
96
|
+
children: t.message
|
|
97
|
+
}),
|
|
98
|
+
/* @__PURE__ */ jsxs("p", {
|
|
99
|
+
className: "mb-3 text-xs text-muted-foreground",
|
|
100
|
+
children: ["Last fired: ", last]
|
|
101
|
+
}),
|
|
102
|
+
/* @__PURE__ */ jsxs("div", {
|
|
103
|
+
className: "flex flex-wrap gap-2",
|
|
104
|
+
children: [/* @__PURE__ */ jsx(Button, {
|
|
105
|
+
variant: "ghost",
|
|
106
|
+
disabled: busyId === t.id,
|
|
107
|
+
onClick: () => void toggle(t),
|
|
108
|
+
children: busyId === t.id ? "Working…" : t.enabled ? "Disable" : "Enable"
|
|
109
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
110
|
+
variant: "danger",
|
|
111
|
+
disabled: busyId === t.id,
|
|
112
|
+
onClick: () => {
|
|
113
|
+
setMutationError(null);
|
|
114
|
+
setDeleteTarget(t);
|
|
115
|
+
},
|
|
116
|
+
children: "Delete"
|
|
117
|
+
})]
|
|
118
|
+
})
|
|
119
|
+
]
|
|
120
|
+
}, t.id);
|
|
121
|
+
})
|
|
122
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
123
|
+
className: "hidden overflow-x-auto md:block",
|
|
124
|
+
children: /* @__PURE__ */ jsxs("table", {
|
|
125
|
+
className: "min-w-full",
|
|
126
|
+
children: [/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
|
|
127
|
+
/* @__PURE__ */ jsx("th", { children: "id" }),
|
|
128
|
+
/* @__PURE__ */ jsx("th", { children: "kind" }),
|
|
129
|
+
/* @__PURE__ */ jsx("th", { children: "spec" }),
|
|
130
|
+
/* @__PURE__ */ jsx("th", { children: "message" }),
|
|
131
|
+
/* @__PURE__ */ jsx("th", { children: "last fired" }),
|
|
132
|
+
/* @__PURE__ */ jsx("th", {})
|
|
133
|
+
] }) }), /* @__PURE__ */ jsx("tbody", { children: triggers.map((t) => {
|
|
134
|
+
const spec = t.kind === "interval" ? `every ${t.intervalSec}s` : t.cronExpr;
|
|
135
|
+
const last = t.lastFiredAt ? new Date(t.lastFiredAt).toLocaleString() : "(never)";
|
|
136
|
+
return /* @__PURE__ */ jsxs("tr", {
|
|
137
|
+
className: t.enabled ? "" : "opacity-60",
|
|
138
|
+
children: [
|
|
139
|
+
/* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsxs("code", { children: [t.id.slice(0, 8), "…"] }) }),
|
|
140
|
+
/* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx("span", {
|
|
141
|
+
className: "inline-block rounded-sm border border-frost bg-ivory px-2 py-0.5 font-mono text-[0.8em] text-mocha",
|
|
142
|
+
children: t.kind
|
|
143
|
+
}) }),
|
|
144
|
+
/* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx("code", { children: spec }) }),
|
|
145
|
+
/* @__PURE__ */ jsx("td", { children: t.message.length > 60 ? `${t.message.slice(0, 60)}…` : t.message }),
|
|
146
|
+
/* @__PURE__ */ jsx("td", {
|
|
147
|
+
className: "text-[0.82em] text-mocha-light",
|
|
148
|
+
children: last
|
|
149
|
+
}),
|
|
150
|
+
/* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsxs("div", {
|
|
151
|
+
className: "flex gap-1.5",
|
|
152
|
+
children: [/* @__PURE__ */ jsx(Button, {
|
|
153
|
+
variant: "ghost",
|
|
154
|
+
disabled: busyId === t.id,
|
|
155
|
+
onClick: () => void toggle(t),
|
|
156
|
+
children: busyId === t.id ? "working…" : t.enabled ? "disable" : "enable"
|
|
157
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
158
|
+
variant: "danger",
|
|
159
|
+
disabled: busyId === t.id,
|
|
160
|
+
onClick: () => {
|
|
161
|
+
setMutationError(null);
|
|
162
|
+
setDeleteTarget(t);
|
|
163
|
+
},
|
|
164
|
+
children: "delete"
|
|
165
|
+
})]
|
|
166
|
+
}) })
|
|
167
|
+
]
|
|
168
|
+
}, t.id);
|
|
169
|
+
}) })]
|
|
170
|
+
})
|
|
171
|
+
})] }),
|
|
172
|
+
/* @__PURE__ */ jsx("h3", {
|
|
173
|
+
className: "mb-3 mt-8 font-body text-[0.85em] font-semibold uppercase tracking-wider text-mocha-light",
|
|
174
|
+
children: "Recent dispatches"
|
|
175
|
+
}),
|
|
176
|
+
dispatches.length === 0 ? /* @__PURE__ */ jsx("p", {
|
|
177
|
+
className: "muted",
|
|
178
|
+
children: "no scheduled occurrences yet."
|
|
179
|
+
}) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
|
|
180
|
+
className: "grid gap-3 md:hidden",
|
|
181
|
+
children: dispatches.map((dispatch) => /* @__PURE__ */ jsxs("article", {
|
|
182
|
+
className: "card min-w-0",
|
|
183
|
+
children: [
|
|
184
|
+
/* @__PURE__ */ jsxs("div", {
|
|
185
|
+
className: "flex items-start justify-between gap-3",
|
|
186
|
+
children: [/* @__PURE__ */ jsx("time", {
|
|
187
|
+
className: "text-sm text-foreground",
|
|
188
|
+
children: new Date(dispatch.scheduledAt).toLocaleString()
|
|
189
|
+
}), /* @__PURE__ */ jsx("code", {
|
|
190
|
+
className: "shrink-0",
|
|
191
|
+
children: dispatch.status
|
|
192
|
+
})]
|
|
193
|
+
}),
|
|
194
|
+
/* @__PURE__ */ jsxs("p", {
|
|
195
|
+
className: "mb-0 mt-2 text-xs text-muted-foreground",
|
|
196
|
+
children: [
|
|
197
|
+
dispatch.attemptCount,
|
|
198
|
+
" attempt",
|
|
199
|
+
dispatch.attemptCount === 1 ? "" : "s"
|
|
200
|
+
]
|
|
201
|
+
}),
|
|
202
|
+
dispatch.lastError && /* @__PURE__ */ jsx("p", {
|
|
203
|
+
className: "mb-0 mt-2 break-words text-sm text-danger",
|
|
204
|
+
children: dispatch.lastError
|
|
205
|
+
})
|
|
206
|
+
]
|
|
207
|
+
}, dispatch.id))
|
|
208
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
209
|
+
className: "hidden overflow-x-auto md:block",
|
|
210
|
+
children: /* @__PURE__ */ jsxs("table", {
|
|
211
|
+
className: "min-w-full",
|
|
212
|
+
children: [/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
|
|
213
|
+
/* @__PURE__ */ jsx("th", { children: "scheduled" }),
|
|
214
|
+
/* @__PURE__ */ jsx("th", { children: "status" }),
|
|
215
|
+
/* @__PURE__ */ jsx("th", { children: "attempts" }),
|
|
216
|
+
/* @__PURE__ */ jsx("th", { children: "error" })
|
|
217
|
+
] }) }), /* @__PURE__ */ jsx("tbody", { children: dispatches.map((dispatch) => /* @__PURE__ */ jsxs("tr", { children: [
|
|
218
|
+
/* @__PURE__ */ jsx("td", {
|
|
219
|
+
className: "text-[0.82em]",
|
|
220
|
+
children: new Date(dispatch.scheduledAt).toLocaleString()
|
|
221
|
+
}),
|
|
222
|
+
/* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx("code", { children: dispatch.status }) }),
|
|
223
|
+
/* @__PURE__ */ jsx("td", { children: dispatch.attemptCount }),
|
|
224
|
+
/* @__PURE__ */ jsx("td", {
|
|
225
|
+
className: "text-[0.82em] text-mocha-light",
|
|
226
|
+
children: dispatch.lastError ?? "—"
|
|
227
|
+
})
|
|
228
|
+
] }, dispatch.id)) })]
|
|
229
|
+
})
|
|
230
|
+
})] }),
|
|
231
|
+
/* @__PURE__ */ jsx(ConfirmDialog, {
|
|
232
|
+
open: deleteTarget !== null,
|
|
233
|
+
title: `Delete ${deleteTarget?.kind ?? ""} trigger?`,
|
|
234
|
+
description: /* @__PURE__ */ jsxs("p", { children: [
|
|
235
|
+
"This permanently removes trigger",
|
|
236
|
+
" ",
|
|
237
|
+
/* @__PURE__ */ jsx("code", {
|
|
238
|
+
className: "font-mono",
|
|
239
|
+
children: deleteTarget?.id
|
|
240
|
+
}),
|
|
241
|
+
", its recorded dispatch history, and every future scheduled occurrence for ",
|
|
242
|
+
resolved.agent.name,
|
|
243
|
+
". The Agent itself is not deleted."
|
|
244
|
+
] }),
|
|
245
|
+
confirmLabel: "delete trigger and history",
|
|
246
|
+
onConfirm: async () => {
|
|
247
|
+
if (!deleteTarget) return;
|
|
248
|
+
try {
|
|
249
|
+
await del(deleteTarget.id);
|
|
250
|
+
} catch (error) {
|
|
251
|
+
setMutationError(error instanceof Error ? error.message : String(error));
|
|
252
|
+
throw error;
|
|
253
|
+
}
|
|
254
|
+
},
|
|
255
|
+
onOpenChange: (open) => {
|
|
256
|
+
if (!open) setDeleteTarget(null);
|
|
257
|
+
}
|
|
258
|
+
})
|
|
259
|
+
] });
|
|
260
|
+
}
|
|
261
|
+
function AddTriggerForm({ agentId, onAdded }) {
|
|
262
|
+
const [kind, setKind] = useState("interval");
|
|
263
|
+
const [intervalSec, setIntervalSec] = useState(300);
|
|
264
|
+
const [cronExpr, setCronExpr] = useState("");
|
|
265
|
+
const [message, setMessage] = useState("");
|
|
266
|
+
const [err, setErr] = useState(null);
|
|
267
|
+
const [submitting, setSubmitting] = useState(false);
|
|
268
|
+
async function submit(e) {
|
|
269
|
+
e.preventDefault();
|
|
270
|
+
setErr(null);
|
|
271
|
+
if (!message.trim()) {
|
|
272
|
+
setErr("message is required");
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
if (kind === "interval" && (!Number.isFinite(intervalSec) || intervalSec <= 0)) {
|
|
276
|
+
setErr("interval must be a positive number");
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
if (kind === "cron" && !cronExpr.trim()) {
|
|
280
|
+
setErr("cron expression is required");
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
setSubmitting(true);
|
|
284
|
+
try {
|
|
285
|
+
const body = {
|
|
286
|
+
kind,
|
|
287
|
+
message: message.trim()
|
|
288
|
+
};
|
|
289
|
+
if (kind === "interval") body.intervalSec = intervalSec;
|
|
290
|
+
else body.cronExpr = cronExpr.trim();
|
|
291
|
+
const res = await fetch(`/api/agents/${encodeURIComponent(agentId)}/triggers`, {
|
|
292
|
+
method: "POST",
|
|
293
|
+
headers: { "content-type": "application/json" },
|
|
294
|
+
body: JSON.stringify(body)
|
|
295
|
+
});
|
|
296
|
+
if (!res.ok) {
|
|
297
|
+
const e2 = await res.json().catch(() => null);
|
|
298
|
+
throw new Error(e2?.error ?? res.statusText);
|
|
299
|
+
}
|
|
300
|
+
setMessage("");
|
|
301
|
+
setCronExpr("");
|
|
302
|
+
setIntervalSec(300);
|
|
303
|
+
onAdded();
|
|
304
|
+
} catch (e2) {
|
|
305
|
+
setErr(e2.message);
|
|
306
|
+
} finally {
|
|
307
|
+
setSubmitting(false);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return /* @__PURE__ */ jsxs("form", {
|
|
311
|
+
className: "card",
|
|
312
|
+
onSubmit: submit,
|
|
313
|
+
children: [
|
|
314
|
+
/* @__PURE__ */ jsx("h3", { children: "Add trigger" }),
|
|
315
|
+
/* @__PURE__ */ jsxs("div", {
|
|
316
|
+
className: "mb-3 flex gap-3",
|
|
317
|
+
children: [/* @__PURE__ */ jsxs("label", {
|
|
318
|
+
className: "m-0 inline-flex cursor-pointer items-center gap-1",
|
|
319
|
+
children: [/* @__PURE__ */ jsx("input", {
|
|
320
|
+
type: "radio",
|
|
321
|
+
checked: kind === "interval",
|
|
322
|
+
onChange: () => setKind("interval")
|
|
323
|
+
}), "interval (every N seconds)"]
|
|
324
|
+
}), /* @__PURE__ */ jsxs("label", {
|
|
325
|
+
className: "m-0 inline-flex cursor-pointer items-center gap-1",
|
|
326
|
+
children: [/* @__PURE__ */ jsx("input", {
|
|
327
|
+
type: "radio",
|
|
328
|
+
checked: kind === "cron",
|
|
329
|
+
onChange: () => setKind("cron")
|
|
330
|
+
}), "cron (5-field)"]
|
|
331
|
+
})]
|
|
332
|
+
}),
|
|
333
|
+
kind === "interval" ? /* @__PURE__ */ jsxs("label", { children: ["interval (seconds)", /* @__PURE__ */ jsx("input", {
|
|
334
|
+
type: "number",
|
|
335
|
+
min: 1,
|
|
336
|
+
value: intervalSec,
|
|
337
|
+
onChange: (e) => setIntervalSec(Number(e.target.value))
|
|
338
|
+
})] }) : /* @__PURE__ */ jsxs("label", { children: ["cron expression (minute hour dom month dow)", /* @__PURE__ */ jsx("input", {
|
|
339
|
+
type: "text",
|
|
340
|
+
placeholder: "*/15 * * * *",
|
|
341
|
+
value: cronExpr,
|
|
342
|
+
onChange: (e) => setCronExpr(e.target.value)
|
|
343
|
+
})] }),
|
|
344
|
+
/* @__PURE__ */ jsxs("label", { children: ["message", /* @__PURE__ */ jsx("textarea", {
|
|
345
|
+
placeholder: "e.g. check your inbox and act on anything new",
|
|
346
|
+
value: message,
|
|
347
|
+
onChange: (e) => setMessage(e.target.value),
|
|
348
|
+
className: "font-mono text-[0.9em] min-h-[80px]"
|
|
349
|
+
})] }),
|
|
350
|
+
/* @__PURE__ */ jsxs("div", {
|
|
351
|
+
className: "mt-3 flex items-center gap-3",
|
|
352
|
+
children: [/* @__PURE__ */ jsx(Button, {
|
|
353
|
+
variant: "primary",
|
|
354
|
+
type: "submit",
|
|
355
|
+
disabled: submitting,
|
|
356
|
+
children: submitting ? "adding…" : "add"
|
|
357
|
+
}), err && /* @__PURE__ */ jsx("span", {
|
|
358
|
+
role: "alert",
|
|
359
|
+
className: "text-[0.85em] text-danger",
|
|
360
|
+
children: err
|
|
361
|
+
})]
|
|
362
|
+
})
|
|
363
|
+
]
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
//#endregion
|
|
367
|
+
export { TriggersPage as component };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as SectionCard, n as PageHeader, r as PageShell } from "./Page-
|
|
1
|
+
import { i as SectionCard, n as PageHeader, r as PageShell } from "./Page-Bz-ydB8j.js";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { ArrowRight } from "lucide-react";
|
|
4
4
|
//#region src/routes/welcome.tsx?tsr-split=component
|
|
@@ -8,18 +8,18 @@ function WelcomePage() {
|
|
|
8
8
|
children: [/* @__PURE__ */ jsx(PageHeader, {
|
|
9
9
|
eyebrow: "First run",
|
|
10
10
|
title: "Welcome to bazilion",
|
|
11
|
-
description: "
|
|
11
|
+
description: "Configure one model provider to prepare your defaults, then test it before the first conversation."
|
|
12
12
|
}), /* @__PURE__ */ jsxs(SectionCard, {
|
|
13
13
|
title: "Three steps to your first conversation",
|
|
14
14
|
children: [
|
|
15
15
|
/* @__PURE__ */ jsxs("p", {
|
|
16
16
|
className: "text-sm leading-6 text-muted-foreground",
|
|
17
17
|
children: [
|
|
18
|
-
"Before you can spawn agents, enable a provider and save at least one concrete model id.
|
|
18
|
+
"Before you can spawn agents, enable a provider and save at least one concrete model id. Bazilion then creates a ",
|
|
19
19
|
/* @__PURE__ */ jsx("code", { children: "default" }),
|
|
20
|
-
" Agent template
|
|
20
|
+
" Agent template and ",
|
|
21
21
|
/* @__PURE__ */ jsx("code", { children: "default" }),
|
|
22
|
-
"
|
|
22
|
+
" Team. Send the small connection test before relying on that model."
|
|
23
23
|
]
|
|
24
24
|
}),
|
|
25
25
|
/* @__PURE__ */ jsxs("ol", {
|
|
@@ -57,10 +57,11 @@ function WelcomePage() {
|
|
|
57
57
|
/* @__PURE__ */ jsxs(Step, {
|
|
58
58
|
n: 3,
|
|
59
59
|
children: [
|
|
60
|
-
/* @__PURE__ */ jsx("strong", { children: "
|
|
61
|
-
"
|
|
60
|
+
/* @__PURE__ */ jsx("strong", { children: "Verify and spawn." }),
|
|
61
|
+
" Send the short real-model test. When setup is configured, the page gives you a direct action to spawn the first agent from the",
|
|
62
|
+
" ",
|
|
62
63
|
/* @__PURE__ */ jsx("code", { children: "default" }),
|
|
63
|
-
"
|
|
64
|
+
" template."
|
|
64
65
|
]
|
|
65
66
|
})
|
|
66
67
|
]
|
|
@@ -3558,7 +3558,7 @@ var defaultSerovalPlugins = [
|
|
|
3558
3558
|
* the dev styles URL for route-scoped CSS collection.
|
|
3559
3559
|
*/
|
|
3560
3560
|
async function getStartManifest(matchedRoutes) {
|
|
3561
|
-
const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-
|
|
3561
|
+
const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-DR7wyKcH.js");
|
|
3562
3562
|
const startManifest = tsrStartManifest();
|
|
3563
3563
|
let routes = startManifest.routes;
|
|
3564
3564
|
routes[rootRouteId];
|
|
@@ -3586,7 +3586,7 @@ var manifest = {
|
|
|
3586
3586
|
},
|
|
3587
3587
|
"032d74b7d41c718191dbdde6b06ba44993340ce1154af1fa6723a6d4f7a7236e": {
|
|
3588
3588
|
functionName: "fetchProfile_createServerFn_handler",
|
|
3589
|
-
importer: () => import("./assets/_id-
|
|
3589
|
+
importer: () => import("./assets/_id-DYU6uIBx.js")
|
|
3590
3590
|
},
|
|
3591
3591
|
"0a6e766d2b4ea526da34cefed5342a6ecc5ff35ad1ce38fba4129b8c24d8e6e5": {
|
|
3592
3592
|
functionName: "fetchMembers_createServerFn_handler",
|
|
@@ -3602,7 +3602,7 @@ var manifest = {
|
|
|
3602
3602
|
},
|
|
3603
3603
|
"26dbbcbe40063e8aedfd343cf1dfd4dfe5589f24591c0ba35e80c611d7c57c7c": {
|
|
3604
3604
|
functionName: "fetchHomeData_createServerFn_handler",
|
|
3605
|
-
importer: () => import("./assets/routes-
|
|
3605
|
+
importer: () => import("./assets/routes-COtkyZG1.js")
|
|
3606
3606
|
},
|
|
3607
3607
|
"278849457893891c3d22806d15e11a0a42cc3630b30e9e62b74cf2d3b982ded7": {
|
|
3608
3608
|
functionName: "fetchServers_createServerFn_handler",
|
|
@@ -3660,10 +3660,6 @@ var manifest = {
|
|
|
3660
3660
|
functionName: "fetchProvidersData_createServerFn_handler",
|
|
3661
3661
|
importer: () => import("./assets/config-BMiajTZP.js")
|
|
3662
3662
|
},
|
|
3663
|
-
"b859e1340a80871c50b0d3e60bd3f3b48fe3c66b083f8ff9d5b2981720d36a81": {
|
|
3664
|
-
functionName: "fetchContext_createServerFn_handler",
|
|
3665
|
-
importer: () => import("./assets/context-DMc0KyHh.js")
|
|
3666
|
-
},
|
|
3667
3663
|
"b96a98e3ed6c8a3ab5f6a4ed8458e93da753ffd74e2912ef1724bb6e58030cb5": {
|
|
3668
3664
|
functionName: "fetchMemory_createServerFn_handler",
|
|
3669
3665
|
importer: () => import("./assets/memory-BqV-Afy1.js")
|
|
@@ -5560,8 +5556,8 @@ var getBaseManifest = getProdBaseManifest;
|
|
|
5560
5556
|
var createEarlyHintsForRequest = createEarlyHintsCollector;
|
|
5561
5557
|
async function loadEntries() {
|
|
5562
5558
|
const [routerEntry, startEntry, pluginAdapters] = await Promise.all([
|
|
5563
|
-
import("./assets/router-
|
|
5564
|
-
import("./assets/start-
|
|
5559
|
+
import("./assets/router-M0lutIDA.js"),
|
|
5560
|
+
import("./assets/start-D4Wq9iTa.js"),
|
|
5565
5561
|
import("./assets/empty-plugin-adapters-Cq4--YW-.js")
|
|
5566
5562
|
]);
|
|
5567
5563
|
return {
|
package/dist/worker.js
CHANGED
|
@@ -784,20 +784,61 @@ import {
|
|
|
784
784
|
} from "fs";
|
|
785
785
|
import { dirname as dirname2, isAbsolute, join as join12, relative, resolve as resolve3, sep as sep2 } from "path";
|
|
786
786
|
import { createStore, extractSnippet } from "@tobilu/qmd";
|
|
787
|
+
|
|
788
|
+
// ../daemon/src/lib/native-module-error.ts
|
|
789
|
+
var NODE_MODULE_ABI_MISMATCH = /was compiled against a different Node\.js version using\s+NODE_MODULE_VERSION\s+(\d+)[\s\S]*?requires\s+NODE_MODULE_VERSION\s+(\d+)/i;
|
|
790
|
+
function formatNativeModuleAbiMismatch(diagnostic, options = {}) {
|
|
791
|
+
const mismatch = NODE_MODULE_ABI_MISMATCH.exec(diagnostic);
|
|
792
|
+
if (!mismatch) return void 0;
|
|
793
|
+
const builtAbi = mismatch[1];
|
|
794
|
+
const requiredAbi = mismatch[2];
|
|
795
|
+
const rebuildCommand = /better_sqlite3\.node|better-sqlite3/i.test(diagnostic) ? "`pnpm rebuild better-sqlite3`" : "`pnpm rebuild`";
|
|
796
|
+
const subject = options.subject ?? "Bazilion";
|
|
797
|
+
return `${subject} could not load a native dependency built for Node module ABI ${builtAbi}; the current ${process.version} runtime requires ABI ${requiredAbi}. Reinstall Bazilion with this same Node.js version, then restart it. From the repository root of a source checkout, run ${rebuildCommand} (or \`pnpm install --force\`).`;
|
|
798
|
+
}
|
|
799
|
+
var NativeModuleAbiMismatchError = class extends Error {
|
|
800
|
+
code = "native_module_abi_mismatch";
|
|
801
|
+
constructor(message) {
|
|
802
|
+
super(message);
|
|
803
|
+
this.name = "NativeModuleAbiMismatchError";
|
|
804
|
+
}
|
|
805
|
+
};
|
|
806
|
+
function sanitizeNativeModuleError(error, options = {}) {
|
|
807
|
+
const diagnostic = error instanceof Error ? error.message : String(error);
|
|
808
|
+
const formatted = formatNativeModuleAbiMismatch(diagnostic, options);
|
|
809
|
+
if (!formatted) return error;
|
|
810
|
+
return new NativeModuleAbiMismatchError(formatted);
|
|
811
|
+
}
|
|
812
|
+
async function withNativeModuleErrorBoundary(operation, options = {}) {
|
|
813
|
+
try {
|
|
814
|
+
return await operation();
|
|
815
|
+
} catch (error) {
|
|
816
|
+
throw sanitizeNativeModuleError(error, options);
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
// ../daemon/src/runtime/memory/qmd.ts
|
|
787
821
|
var INDEX_FILENAME = ".qmd-index.sqlite";
|
|
788
822
|
var COLLECTION_NAME = "memory";
|
|
789
823
|
var PATTERN = "**/*.md";
|
|
824
|
+
var QMD_NATIVE_ERROR_OPTIONS = { subject: "Bazilion memory" };
|
|
790
825
|
var storeCache = /* @__PURE__ */ new Map();
|
|
791
|
-
function getStore(dir) {
|
|
826
|
+
function getStore(dir, storeFactory) {
|
|
792
827
|
let p = storeCache.get(dir);
|
|
793
828
|
if (!p) {
|
|
794
|
-
p =
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
829
|
+
p = withNativeModuleErrorBoundary(
|
|
830
|
+
() => storeFactory({
|
|
831
|
+
dbPath: join12(dir, INDEX_FILENAME),
|
|
832
|
+
config: {
|
|
833
|
+
collections: {
|
|
834
|
+
[COLLECTION_NAME]: { path: dir, pattern: PATTERN }
|
|
835
|
+
}
|
|
799
836
|
}
|
|
800
|
-
}
|
|
837
|
+
}),
|
|
838
|
+
QMD_NATIVE_ERROR_OPTIONS
|
|
839
|
+
).catch((error) => {
|
|
840
|
+
storeCache.delete(dir);
|
|
841
|
+
throw error;
|
|
801
842
|
});
|
|
802
843
|
storeCache.set(dir, p);
|
|
803
844
|
}
|
|
@@ -980,8 +1021,9 @@ function walkMd(root, dir, prefix, out) {
|
|
|
980
1021
|
}
|
|
981
1022
|
}
|
|
982
1023
|
}
|
|
983
|
-
function qmdBackend(root) {
|
|
1024
|
+
function qmdBackend(root, options = {}) {
|
|
984
1025
|
let canonicalRoot;
|
|
1026
|
+
const storeFactory = options.createStore ?? createStore;
|
|
985
1027
|
const safeRoot = () => {
|
|
986
1028
|
if (!canonicalRoot) canonicalRoot = initializeSafeRoot(root);
|
|
987
1029
|
else assertRootUnchanged(root, canonicalRoot);
|
|
@@ -991,8 +1033,8 @@ function qmdBackend(root) {
|
|
|
991
1033
|
async init() {
|
|
992
1034
|
const safe = safeRoot();
|
|
993
1035
|
assertSafeTree(safe);
|
|
994
|
-
const store = await getStore(safe);
|
|
995
|
-
await store.update();
|
|
1036
|
+
const store = await getStore(safe, storeFactory);
|
|
1037
|
+
await withNativeModuleErrorBoundary(() => store.update(), QMD_NATIVE_ERROR_OPTIONS);
|
|
996
1038
|
},
|
|
997
1039
|
async read(key) {
|
|
998
1040
|
const safe = safeRoot();
|
|
@@ -1010,19 +1052,22 @@ function qmdBackend(root) {
|
|
|
1010
1052
|
const path = safeKey(safe, key);
|
|
1011
1053
|
const stats = writeSafeFile(safe, path, content);
|
|
1012
1054
|
assertSafeTree(safe);
|
|
1013
|
-
const store = await getStore(safe);
|
|
1014
|
-
await store.update();
|
|
1055
|
+
const store = await getStore(safe, storeFactory);
|
|
1056
|
+
await withNativeModuleErrorBoundary(() => store.update(), QMD_NATIVE_ERROR_OPTIONS);
|
|
1015
1057
|
return { key, content, updatedAt: stats.mtimeMs };
|
|
1016
1058
|
},
|
|
1017
1059
|
async search(query, opts) {
|
|
1018
1060
|
const limit = opts?.limit ?? 10;
|
|
1019
1061
|
const safe = safeRoot();
|
|
1020
1062
|
assertSafeTree(safe);
|
|
1021
|
-
const store = await getStore(safe);
|
|
1022
|
-
const results = await
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1063
|
+
const store = await getStore(safe, storeFactory);
|
|
1064
|
+
const results = await withNativeModuleErrorBoundary(
|
|
1065
|
+
() => store.searchLex(query, {
|
|
1066
|
+
limit,
|
|
1067
|
+
collection: COLLECTION_NAME
|
|
1068
|
+
}),
|
|
1069
|
+
QMD_NATIVE_ERROR_OPTIONS
|
|
1070
|
+
);
|
|
1026
1071
|
const hits = [];
|
|
1027
1072
|
for (const r of results) {
|
|
1028
1073
|
const prefix = `${COLLECTION_NAME}/`;
|
|
@@ -1057,8 +1102,8 @@ function qmdBackend(root) {
|
|
|
1057
1102
|
rmSync9(path);
|
|
1058
1103
|
}
|
|
1059
1104
|
assertSafeTree(safe);
|
|
1060
|
-
const store = await getStore(safe);
|
|
1061
|
-
await store.update();
|
|
1105
|
+
const store = await getStore(safe, storeFactory);
|
|
1106
|
+
await withNativeModuleErrorBoundary(() => store.update(), QMD_NATIVE_ERROR_OPTIONS);
|
|
1062
1107
|
}
|
|
1063
1108
|
};
|
|
1064
1109
|
}
|