bosun 0.40.1 → 0.40.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bosun",
3
- "version": "0.40.1",
3
+ "version": "0.40.2",
4
4
  "description": "Bosun Autonomous Engineering — manages AI agent executors with failover, extremely powerful workflow builder, and a massive amount of included default workflow templates for autonomous engineering, creates PRs via Vibe-Kanban API, and sends Telegram notifications. Supports N executors with weighted distribution, multi-repo projects, and auto-setup.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -278,6 +278,7 @@ const repoRoot = resolveRepoRoot();
278
278
  const uiRootPreferred = resolve(__dirname, "..", "ui");
279
279
  const uiRootFallback = resolve(__dirname, "..", "site", "ui");
280
280
  const uiRoot = existsSync(uiRootPreferred) ? uiRootPreferred : uiRootFallback;
281
+ const sharedLibRoot = resolve(__dirname, "..", "lib");
281
282
  const libraryInitAttemptedRoots = new Set();
282
283
  const MAX_VISION_FRAME_BYTES = Math.max(
283
284
  128_000,
@@ -14739,9 +14740,14 @@ async function handleStatic(req, res, url) {
14739
14740
  return;
14740
14741
  }
14741
14742
  const pathname = rawPathname === "/" ? "/index.html" : rawPathname;
14742
- const filePath = resolve(uiRoot, `.${pathname}`);
14743
-
14744
- if (!filePath.startsWith(uiRoot)) {
14743
+ const isSharedLibRequest = pathname === "/lib" || pathname.startsWith("/lib/");
14744
+ const staticRoot = isSharedLibRequest ? sharedLibRoot : uiRoot;
14745
+ const staticPathname = isSharedLibRequest
14746
+ ? pathname.slice(4) || "/"
14747
+ : pathname;
14748
+ const filePath = resolve(staticRoot, `.${staticPathname}`);
14749
+
14750
+ if (!filePath.startsWith(staticRoot)) {
14745
14751
  textResponse(res, 403, "Forbidden");
14746
14752
  return;
14747
14753
  }
package/ui/tabs/tasks.js CHANGED
@@ -450,6 +450,8 @@ function normalizeSprintOptions(raw) {
450
450
  label: toText(entry.label || entry.title || entry.name, id),
451
451
  status: toText(entry.status),
452
452
  goal: toText(entry.goal),
453
+ executionMode: toText(entry.executionMode || entry.taskOrderMode || entry.sprintOrderMode || "parallel", "parallel"),
454
+ taskOrderMode: toText(entry.taskOrderMode || entry.executionMode || entry.sprintOrderMode || "parallel", "parallel"),
453
455
  };
454
456
  })
455
457
  .filter(Boolean);
@@ -3555,7 +3557,7 @@ export function TasksTab() {
3555
3557
  const nextGlobalGraph = normalizeDagGraph(globalSource, "DAG of DAGs");
3556
3558
 
3557
3559
  const sprintMetaEntry = sprintOptions.find((entry) => entry.id === resolvedSprint) || null;
3558
- setDagSprintOrderMode(toText(sprintMetaEntry?.sprintOrderMode || "parallel", "parallel"));
3560
+ setDagSprintOrderMode(toText(sprintMetaEntry?.executionMode || sprintMetaEntry?.taskOrderMode || sprintMetaEntry?.sprintOrderMode || "parallel", "parallel"));
3559
3561
  setDagSprints(sprintOptions);
3560
3562
  setDagSprintGraph(nextSprintGraph);
3561
3563
  setDagGlobalGraph(nextGlobalGraph);
@@ -3912,7 +3914,7 @@ export function TasksTab() {
3912
3914
  try {
3913
3915
  await apiFetch(`/api/tasks/sprints/${encodeURIComponent(dagSelectedSprint)}`, {
3914
3916
  method: "PATCH",
3915
- body: JSON.stringify({ sprintOrderMode: nextMode }),
3917
+ body: JSON.stringify({ executionMode: nextMode, taskOrderMode: nextMode, sprintOrderMode: nextMode }),
3916
3918
  });
3917
3919
  showToast("Sprint execution mode updated", "success");
3918
3920
  await loadDagViews();