@runeya/runeya 2.0.23 → 2.0.24

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/index.js CHANGED
@@ -201,7 +201,7 @@ function listenWithRetry(server, port, host, wss, maxRetries = 20, delay = 500)
201
201
  });
202
202
  }
203
203
  async function main() {
204
- const { createLocalServer, pullEnv, PullEnvError } = await import("./src-3TOPUVAK.js");
204
+ const { createLocalServer, pullEnv, PullEnvError } = await import("./src-EGBDYHL5.js");
205
205
  if (isPullEnv) {
206
206
  if (!serviceArg) {
207
207
  console.error("Error: --service (-s) is required with --pull-env");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@runeya/runeya",
3
- "version": "2.0.23",
3
+ "version": "2.0.24",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "runeya": "./index.js"
@@ -5671,6 +5671,119 @@ var KanbanStore = class {
5671
5671
  var kanbanStore = new KanbanStore();
5672
5672
 
5673
5673
  // ../server/src/services/kanban-commands.ts
5674
+ async function executeKanbanCommands(boardId, cardId, commands, conversationId) {
5675
+ if (commands.length === 0) return;
5676
+ let board = await kanbanStore.get(boardId);
5677
+ if (!board) {
5678
+ console.warn(`[kanban-commands] Board ${boardId} not found, skipping ${commands.length} command(s)`);
5679
+ return;
5680
+ }
5681
+ const cardExistsInBoard = () => board.columns.some((col) => col.cards.some((c) => c.id === cardId));
5682
+ if (!cardExistsInBoard()) {
5683
+ for (let attempt = 1; attempt <= 5; attempt++) {
5684
+ console.warn(`[kanban-commands] Card ${cardId} not found in board, retry ${attempt}/5...`);
5685
+ await new Promise((r) => setTimeout(r, 500 * attempt));
5686
+ board = await kanbanStore.get(boardId);
5687
+ if (!board) return;
5688
+ if (cardExistsInBoard()) break;
5689
+ }
5690
+ if (!cardExistsInBoard()) {
5691
+ console.error(`[kanban-commands] Card ${cardId} still not found after retries, skipping ${commands.length} command(s)`);
5692
+ return;
5693
+ }
5694
+ }
5695
+ for (const cmd of commands) {
5696
+ if (cmd.type === "move_card" && cmd.columnTitle) {
5697
+ const moved = moveCard(board, cardId, cmd.columnTitle);
5698
+ if (!moved) console.warn(`[kanban-commands] move_card failed: card=${cardId} target="${cmd.columnTitle}"`);
5699
+ } else if (cmd.type === "add_comment" && cmd.comment) {
5700
+ addComment(board, cardId, cmd.comment, conversationId);
5701
+ } else if (cmd.type === "add_card" && cmd.columnTitle && cmd.cardTitle) {
5702
+ addCardToColumn(board, cmd.columnTitle, cmd.cardTitle, cmd.cardContent);
5703
+ }
5704
+ }
5705
+ await kanbanStore.update({ id: board.id, columns: board.columns });
5706
+ }
5707
+ async function executeKanbanBoardCommands(boardId, commands) {
5708
+ if (commands.length === 0) return;
5709
+ const board = await kanbanStore.get(boardId);
5710
+ if (!board) return;
5711
+ for (const cmd of commands) {
5712
+ if (cmd.type === "add_card" && cmd.columnTitle && cmd.cardTitle) {
5713
+ addCardToColumn(board, cmd.columnTitle, cmd.cardTitle, cmd.cardContent);
5714
+ }
5715
+ }
5716
+ await kanbanStore.update({ id: board.id, columns: board.columns });
5717
+ }
5718
+ function moveCard(board, cardId, targetColTitle) {
5719
+ let sourceCol = "";
5720
+ let card = null;
5721
+ let sourceColIdx = -1;
5722
+ let cardIdx = -1;
5723
+ for (let ci = 0; ci < board.columns.length; ci++) {
5724
+ const col = board.columns[ci];
5725
+ const idx = col.cards.findIndex((c) => c.id === cardId);
5726
+ if (idx !== -1) {
5727
+ sourceCol = col.title;
5728
+ card = col.cards[idx];
5729
+ sourceColIdx = ci;
5730
+ cardIdx = idx;
5731
+ break;
5732
+ }
5733
+ }
5734
+ if (!card || sourceColIdx === -1) return false;
5735
+ const targetCol = board.columns.find(
5736
+ (c) => c.title.toLowerCase() === targetColTitle.toLowerCase()
5737
+ );
5738
+ if (!targetCol) {
5739
+ console.warn(`[kanban-commands] Target column "${targetColTitle}" not found. Available: ${board.columns.map((c) => c.title).join(", ")}`);
5740
+ return false;
5741
+ }
5742
+ if (targetCol.id === board.columns[sourceColIdx].id) return true;
5743
+ board.columns[sourceColIdx].cards.splice(cardIdx, 1);
5744
+ card.order = targetCol.cards.length;
5745
+ card.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
5746
+ card.history = [...card.history ?? [], {
5747
+ type: "moved",
5748
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
5749
+ detail: `"${sourceCol}" \u2192 "${targetCol.title}"`,
5750
+ author: "ai"
5751
+ }];
5752
+ targetCol.cards.push(card);
5753
+ return true;
5754
+ }
5755
+ function addCardToColumn(board, columnTitle, cardTitle, cardContent) {
5756
+ const col = board.columns.find((c) => c.title.toLowerCase() === columnTitle.toLowerCase());
5757
+ if (!col) return;
5758
+ const now = (/* @__PURE__ */ new Date()).toISOString();
5759
+ const card = {
5760
+ id: randomUUID5(),
5761
+ title: cardTitle,
5762
+ markdown: cardContent ?? "",
5763
+ images: [],
5764
+ order: col.cards.length,
5765
+ history: [{ type: "created", timestamp: now, detail: `AI \u2014 In column "${col.title}"` }],
5766
+ createdAt: now,
5767
+ updatedAt: now
5768
+ };
5769
+ col.cards.push(card);
5770
+ }
5771
+ function addComment(board, cardId, comment, conversationId) {
5772
+ for (const col of board.columns) {
5773
+ const card = col.cards.find((c) => c.id === cardId);
5774
+ if (card) {
5775
+ card.history = [...card.history ?? [], {
5776
+ type: "comment",
5777
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
5778
+ detail: comment,
5779
+ author: "ai",
5780
+ ...conversationId ? { conversationId } : {}
5781
+ }];
5782
+ card.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
5783
+ return;
5784
+ }
5785
+ }
5786
+ }
5674
5787
  function generateKanbanSystemPrompt(board, cardId) {
5675
5788
  let currentColTitle = "";
5676
5789
  let card = null;
@@ -10701,16 +10814,52 @@ var kanbanQueueRouter = router({
10701
10814
  })
10702
10815
  });
10703
10816
 
10704
- // ../server/src/trpc/routers/terminal.ts
10817
+ // ../server/src/trpc/routers/kanban.ts
10705
10818
  import { z as z20 } from "zod";
10819
+ var kanbanRouter = router({
10820
+ moveCard: protectedProcedure.input(z20.object({
10821
+ boardId: z20.string().max(128),
10822
+ cardId: z20.string().max(128),
10823
+ targetColumn: z20.string().max(256)
10824
+ })).mutation(async ({ input }) => {
10825
+ await executeKanbanCommands(input.boardId, input.cardId, [
10826
+ { type: "move_card", columnTitle: input.targetColumn }
10827
+ ]);
10828
+ return { ok: true };
10829
+ }),
10830
+ addComment: protectedProcedure.input(z20.object({
10831
+ boardId: z20.string().max(128),
10832
+ cardId: z20.string().max(128),
10833
+ comment: z20.string().max(2e4)
10834
+ })).mutation(async ({ input }) => {
10835
+ await executeKanbanCommands(input.boardId, input.cardId, [
10836
+ { type: "add_comment", comment: input.comment }
10837
+ ]);
10838
+ return { ok: true };
10839
+ }),
10840
+ addCard: protectedProcedure.input(z20.object({
10841
+ boardId: z20.string().max(128),
10842
+ column: z20.string().max(256),
10843
+ title: z20.string().max(512),
10844
+ content: z20.string().max(2e4).optional()
10845
+ })).mutation(async ({ input }) => {
10846
+ await executeKanbanBoardCommands(input.boardId, [
10847
+ { type: "add_card", columnTitle: input.column, cardTitle: input.title, cardContent: input.content }
10848
+ ]);
10849
+ return { ok: true };
10850
+ })
10851
+ });
10852
+
10853
+ // ../server/src/trpc/routers/terminal.ts
10854
+ import { z as z21 } from "zod";
10706
10855
  import { TRPCError as TRPCError17 } from "@trpc/server";
10707
10856
  var terminalRouter = router({
10708
10857
  /** Create a PTY shell session on the target agent */
10709
- create: protectedProcedure.input(z20.object({
10710
- agentId: z20.string().max(128),
10711
- cwd: z20.string().max(512).optional(),
10712
- cols: z20.number().int().min(1).max(512).optional(),
10713
- rows: z20.number().int().min(1).max(256).optional()
10858
+ create: protectedProcedure.input(z21.object({
10859
+ agentId: z21.string().max(128),
10860
+ cwd: z21.string().max(512).optional(),
10861
+ cols: z21.number().int().min(1).max(512).optional(),
10862
+ rows: z21.number().int().min(1).max(256).optional()
10714
10863
  })).mutation(async ({ input }) => {
10715
10864
  const result = await agentManager.agentMutation(
10716
10865
  input.agentId,
@@ -10720,10 +10869,10 @@ var terminalRouter = router({
10720
10869
  return result;
10721
10870
  }),
10722
10871
  /** Send keystrokes / data to a PTY session */
10723
- write: protectedProcedure.input(z20.object({
10724
- agentId: z20.string().max(128),
10725
- sessionId: z20.string().max(128),
10726
- data: z20.string().max(65536)
10872
+ write: protectedProcedure.input(z21.object({
10873
+ agentId: z21.string().max(128),
10874
+ sessionId: z21.string().max(128),
10875
+ data: z21.string().max(65536)
10727
10876
  })).mutation(async ({ input }) => {
10728
10877
  await agentManager.agentMutation(
10729
10878
  input.agentId,
@@ -10733,11 +10882,11 @@ var terminalRouter = router({
10733
10882
  return { ok: true };
10734
10883
  }),
10735
10884
  /** Resize the PTY */
10736
- resize: protectedProcedure.input(z20.object({
10737
- agentId: z20.string().max(128),
10738
- sessionId: z20.string().max(128),
10739
- cols: z20.number().int().min(1).max(512),
10740
- rows: z20.number().int().min(1).max(256)
10885
+ resize: protectedProcedure.input(z21.object({
10886
+ agentId: z21.string().max(128),
10887
+ sessionId: z21.string().max(128),
10888
+ cols: z21.number().int().min(1).max(512),
10889
+ rows: z21.number().int().min(1).max(256)
10741
10890
  })).mutation(async ({ input }) => {
10742
10891
  await agentManager.agentMutation(
10743
10892
  input.agentId,
@@ -10747,9 +10896,9 @@ var terminalRouter = router({
10747
10896
  return { ok: true };
10748
10897
  }),
10749
10898
  /** Destroy a PTY session */
10750
- destroy: protectedProcedure.input(z20.object({
10751
- agentId: z20.string().max(128),
10752
- sessionId: z20.string().max(128)
10899
+ destroy: protectedProcedure.input(z21.object({
10900
+ agentId: z21.string().max(128),
10901
+ sessionId: z21.string().max(128)
10753
10902
  })).mutation(async ({ input }) => {
10754
10903
  await agentManager.agentMutation(
10755
10904
  input.agentId,
@@ -10759,9 +10908,9 @@ var terminalRouter = router({
10759
10908
  return { ok: true };
10760
10909
  }),
10761
10910
  /** Stream PTY output — proxied via AgentWSBridge dynamic subscription */
10762
- onData: protectedProcedure.input(z20.object({
10763
- agentId: z20.string().max(128),
10764
- sessionId: z20.string().max(128)
10911
+ onData: protectedProcedure.input(z21.object({
10912
+ agentId: z21.string().max(128),
10913
+ sessionId: z21.string().max(128)
10765
10914
  })).subscription(async function* ({ input }) {
10766
10915
  const queue = [];
10767
10916
  let resolve6 = null;
@@ -10810,11 +10959,11 @@ var terminalRouter = router({
10810
10959
  });
10811
10960
 
10812
10961
  // ../server/src/trpc/routers/utility.ts
10813
- import { z as z21 } from "zod";
10962
+ import { z as z22 } from "zod";
10814
10963
  var MAX_WAIT_MS = 5 * 60 * 1e3;
10815
10964
  var utilityRouter = router({
10816
- wait: protectedProcedure.input(z21.object({
10817
- ms: z21.number().int().min(0).max(MAX_WAIT_MS)
10965
+ wait: protectedProcedure.input(z22.object({
10966
+ ms: z22.number().int().min(0).max(MAX_WAIT_MS)
10818
10967
  })).mutation(async ({ input }) => {
10819
10968
  await new Promise((resolve6) => setTimeout(resolve6, input.ms));
10820
10969
  return { waited: input.ms };
@@ -10822,15 +10971,15 @@ var utilityRouter = router({
10822
10971
  });
10823
10972
 
10824
10973
  // ../server/src/trpc/routers/wiki.ts
10825
- import { z as z22 } from "zod";
10974
+ import { z as z23 } from "zod";
10826
10975
  import { TRPCError as TRPCError18 } from "@trpc/server";
10827
10976
  import { readFile as readFile13, readdir as readdir5, stat as stat3, realpath, writeFile as writeFile11, mkdir as mkdir14, rename as rename10, rm as rm2 } from "fs/promises";
10828
10977
  import { resolve as resolvePath, join as join16, relative, sep as sep3, dirname as dirname3 } from "path";
10829
- var SCOPE_SCHEMA = z22.union([
10830
- z22.literal("global"),
10831
- z22.string().regex(/^service:[A-Za-z0-9_-]{1,128}$/, "Invalid service scope")
10978
+ var SCOPE_SCHEMA = z23.union([
10979
+ z23.literal("global"),
10980
+ z23.string().regex(/^service:[A-Za-z0-9_-]{1,128}$/, "Invalid service scope")
10832
10981
  ]);
10833
- var REL_PATH_SCHEMA = z22.string().min(1).max(512).regex(/^[A-Za-z0-9_./-]+$/).refine((p) => !p.includes("..") && !p.startsWith("/"), {
10982
+ var REL_PATH_SCHEMA = z23.string().min(1).max(512).regex(/^[A-Za-z0-9_./-]+$/).refine((p) => !p.includes("..") && !p.startsWith("/"), {
10834
10983
  message: "Path must be a relative path without traversal"
10835
10984
  });
10836
10985
  var MAX_FILES = 500;
@@ -10850,9 +10999,9 @@ var IGNORED_DIRS = /* @__PURE__ */ new Set([
10850
10999
  "target",
10851
11000
  "out"
10852
11001
  ]);
10853
- var DocsEntrySchema = z22.lazy(() => z22.union([
10854
- z22.object({ type: z22.literal("file"), name: z22.string(), path: z22.string() }),
10855
- z22.object({ type: z22.literal("dir"), name: z22.string(), path: z22.string(), children: z22.array(DocsEntrySchema) })
11002
+ var DocsEntrySchema = z23.lazy(() => z23.union([
11003
+ z23.object({ type: z23.literal("file"), name: z23.string(), path: z23.string() }),
11004
+ z23.object({ type: z23.literal("dir"), name: z23.string(), path: z23.string(), children: z23.array(DocsEntrySchema) })
10856
11005
  ]));
10857
11006
  async function resolveScope(scope) {
10858
11007
  if (scope === "global") {
@@ -10942,7 +11091,7 @@ async function resolveSafeLocal(root, relPath, requireExist) {
10942
11091
  return resolvePath(realParent, target.slice(parent.length).replace(/^[\\/]+/, ""));
10943
11092
  }
10944
11093
  var wikiRouter = router({
10945
- list: protectedProcedure.input(z22.object({ scope: SCOPE_SCHEMA })).output(z22.object({ root: z22.string(), entries: z22.array(DocsEntrySchema), truncated: z22.boolean() })).query(async ({ input }) => {
11094
+ list: protectedProcedure.input(z23.object({ scope: SCOPE_SCHEMA })).output(z23.object({ root: z23.string(), entries: z23.array(DocsEntrySchema), truncated: z23.boolean() })).query(async ({ input }) => {
10946
11095
  const target = await resolveScope(input.scope);
10947
11096
  if (target.mode === "agent") {
10948
11097
  return agentManager.agentQuery(target.agentId, "wiki.listRepoMarkdown", { cwd: target.cwd });
@@ -10951,7 +11100,7 @@ var wikiRouter = router({
10951
11100
  const entries = await walkLocal(target.root, target.root, 0, counter);
10952
11101
  return { root: target.root, entries, truncated: counter.n >= MAX_FILES };
10953
11102
  }),
10954
- read: protectedProcedure.input(z22.object({ scope: SCOPE_SCHEMA, path: REL_PATH_SCHEMA })).output(z22.object({ path: z22.string(), content: z22.string() })).query(async ({ input }) => {
11103
+ read: protectedProcedure.input(z23.object({ scope: SCOPE_SCHEMA, path: REL_PATH_SCHEMA })).output(z23.object({ path: z23.string(), content: z23.string() })).query(async ({ input }) => {
10955
11104
  if (!/\.(md|markdown)$/i.test(input.path)) {
10956
11105
  throw new TRPCError18({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
10957
11106
  }
@@ -10966,7 +11115,7 @@ var wikiRouter = router({
10966
11115
  const content = await readFile13(file, "utf-8");
10967
11116
  return { path: input.path, content };
10968
11117
  }),
10969
- write: protectedProcedure.input(z22.object({ scope: SCOPE_SCHEMA, path: REL_PATH_SCHEMA, content: z22.string().max(5e6) })).mutation(async ({ input }) => {
11118
+ write: protectedProcedure.input(z23.object({ scope: SCOPE_SCHEMA, path: REL_PATH_SCHEMA, content: z23.string().max(5e6) })).mutation(async ({ input }) => {
10970
11119
  if (!/\.(md|markdown)$/i.test(input.path)) {
10971
11120
  throw new TRPCError18({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
10972
11121
  }
@@ -10979,7 +11128,7 @@ var wikiRouter = router({
10979
11128
  await writeFile11(file, input.content, "utf-8");
10980
11129
  return { path: input.path, ok: true };
10981
11130
  }),
10982
- createFile: protectedProcedure.input(z22.object({ scope: SCOPE_SCHEMA, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
11131
+ createFile: protectedProcedure.input(z23.object({ scope: SCOPE_SCHEMA, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
10983
11132
  if (!/\.(md|markdown)$/i.test(input.path)) {
10984
11133
  throw new TRPCError18({ code: "BAD_REQUEST", message: "Seuls les .md/.markdown sont autoris\xE9s" });
10985
11134
  }
@@ -10998,7 +11147,7 @@ var wikiRouter = router({
10998
11147
  await writeFile11(file, "", "utf-8");
10999
11148
  return { path: input.path, ok: true };
11000
11149
  }),
11001
- createDir: protectedProcedure.input(z22.object({ scope: SCOPE_SCHEMA, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
11150
+ createDir: protectedProcedure.input(z23.object({ scope: SCOPE_SCHEMA, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
11002
11151
  const target = await resolveScope(input.scope);
11003
11152
  if (target.mode === "agent") {
11004
11153
  return agentManager.agentMutation(target.agentId, "wiki.createDir", { cwd: target.cwd, path: input.path });
@@ -11007,7 +11156,7 @@ var wikiRouter = router({
11007
11156
  await mkdir14(dir, { recursive: true });
11008
11157
  return { path: input.path, ok: true };
11009
11158
  }),
11010
- rename: protectedProcedure.input(z22.object({ scope: SCOPE_SCHEMA, fromPath: REL_PATH_SCHEMA, toPath: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
11159
+ rename: protectedProcedure.input(z23.object({ scope: SCOPE_SCHEMA, fromPath: REL_PATH_SCHEMA, toPath: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
11011
11160
  const target = await resolveScope(input.scope);
11012
11161
  if (target.mode === "agent") {
11013
11162
  return agentManager.agentMutation(target.agentId, "wiki.renamePath", { cwd: target.cwd, fromPath: input.fromPath, toPath: input.toPath });
@@ -11024,7 +11173,7 @@ var wikiRouter = router({
11024
11173
  await rename10(from, to);
11025
11174
  return { fromPath: input.fromPath, toPath: input.toPath, ok: true };
11026
11175
  }),
11027
- ensureRoot: protectedProcedure.input(z22.object({ scope: SCOPE_SCHEMA })).mutation(async ({ input }) => {
11176
+ ensureRoot: protectedProcedure.input(z23.object({ scope: SCOPE_SCHEMA })).mutation(async ({ input }) => {
11028
11177
  if (input.scope === "global") {
11029
11178
  await resolveScope("global");
11030
11179
  return { ok: true };
@@ -11037,7 +11186,7 @@ var wikiRouter = router({
11037
11186
  const cwd = (service.docsPath?.trim() || service.cwd || ".").toString();
11038
11187
  return agentManager.agentMutation(agentId, "wiki.ensureRoot", { cwd });
11039
11188
  }),
11040
- delete: protectedProcedure.input(z22.object({ scope: SCOPE_SCHEMA, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
11189
+ delete: protectedProcedure.input(z23.object({ scope: SCOPE_SCHEMA, path: REL_PATH_SCHEMA })).mutation(async ({ input }) => {
11041
11190
  const target = await resolveScope(input.scope);
11042
11191
  if (target.mode === "agent") {
11043
11192
  return agentManager.agentMutation(target.agentId, "wiki.deletePath", { cwd: target.cwd, path: input.path });
@@ -11058,7 +11207,7 @@ var configRouter = router({
11058
11207
  });
11059
11208
 
11060
11209
  // ../server/src/trpc/routers/cloud-sync.ts
11061
- import { z as z23 } from "zod";
11210
+ import { z as z24 } from "zod";
11062
11211
  import { TRPCError as TRPCError19 } from "@trpc/server";
11063
11212
 
11064
11213
  // ../server/src/services/cloud-sync-store.ts
@@ -11682,9 +11831,9 @@ var cloudSyncRouter = router({
11682
11831
  * to sync a project whose secrets will not open.
11683
11832
  */
11684
11833
  link: protectedProcedure.input(
11685
- z23.object({
11686
- orgId: z23.string().min(1).max(128),
11687
- cloudUrl: z23.string().url().max(2048)
11834
+ z24.object({
11835
+ orgId: z24.string().min(1).max(128),
11836
+ cloudUrl: z24.string().url().max(2048)
11688
11837
  })
11689
11838
  ).mutation(async ({ input }) => {
11690
11839
  await reconcileOrgCanary(input.orgId);
@@ -11693,7 +11842,7 @@ var cloudSyncRouter = router({
11693
11842
  return { success: true };
11694
11843
  }),
11695
11844
  /** Stop syncing an org and forget its token. */
11696
- unlink: protectedProcedure.input(z23.object({ orgId: z23.string().min(1).max(128) })).mutation(async ({ input }) => {
11845
+ unlink: protectedProcedure.input(z24.object({ orgId: z24.string().min(1).max(128) })).mutation(async ({ input }) => {
11697
11846
  cloudSyncBridge.disconnect(input.orgId);
11698
11847
  await cloudSyncStore.remove(input.orgId);
11699
11848
  return { success: true };
@@ -11731,6 +11880,7 @@ var appRouter = router({
11731
11880
  git: gitRouter,
11732
11881
  debug: debugRouter,
11733
11882
  kanbanQueue: kanbanQueueRouter,
11883
+ kanban: kanbanRouter,
11734
11884
  terminal: terminalRouter,
11735
11885
  utility: utilityRouter,
11736
11886
  wiki: wikiRouter,
@@ -13811,4 +13961,4 @@ export {
13811
13961
  createLocalServer,
13812
13962
  pullEnv
13813
13963
  };
13814
- //# sourceMappingURL=src-3TOPUVAK.js.map
13964
+ //# sourceMappingURL=src-EGBDYHL5.js.map