kanbo-cli 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/cli-main.cjs +1322 -154
  3. package/dist/drizzle-postgres/0006_flow_rules_and_column_entries.sql +3 -0
  4. package/dist/drizzle-postgres/README.md +8 -0
  5. package/dist/drizzle-postgres/meta/0006_snapshot.json +1290 -0
  6. package/dist/drizzle-postgres/meta/_journal.json +7 -0
  7. package/dist/drizzle-sqlite/0005_flow_rules_and_column_entries.sql +3 -0
  8. package/dist/drizzle-sqlite/README.md +8 -0
  9. package/dist/drizzle-sqlite/meta/0005_snapshot.json +1097 -0
  10. package/dist/drizzle-sqlite/meta/_journal.json +7 -0
  11. package/dist/lib/{approval-BsBk2xVr.d.cts → approval-CnJJfwfi.d.mts} +30 -6
  12. package/dist/lib/{approval-LRZ6ontC.d.mts → approval-DNfUhYD5.d.cts} +30 -6
  13. package/dist/lib/{board-store-D_Mpfb84.d.mts → board-store-BjhiH9TZ.d.mts} +38 -2
  14. package/dist/lib/{board-store-Dx-mw2I6.d.cts → board-store-CsyBXBwH.d.cts} +38 -2
  15. package/dist/lib/index.cjs +9 -1
  16. package/dist/lib/index.d.cts +302 -6
  17. package/dist/lib/index.d.mts +302 -6
  18. package/dist/lib/index.mjs +2 -2
  19. package/dist/lib/{manifest-DcIMYvWk.cjs → manifest-BFI4HGPh.cjs} +1410 -225
  20. package/dist/lib/{manifest-Dmo6IlWk.mjs → manifest-DHI1fkoW.mjs} +1395 -258
  21. package/dist/lib/mcp/index.cjs +24 -4
  22. package/dist/lib/mcp/index.d.cts +19 -4
  23. package/dist/lib/mcp/index.d.mts +19 -4
  24. package/dist/lib/mcp/index.mjs +24 -4
  25. package/dist/lib/{migrate-Dca5WdYd.cjs → migrate-36aT0rV0.cjs} +17 -0
  26. package/dist/lib/{migrate-DtBeW3Fs.mjs → migrate-Bgj_aABY.mjs} +18 -1
  27. package/dist/lib/postgres/index.cjs +1 -1
  28. package/dist/lib/postgres/index.d.cts +69 -1
  29. package/dist/lib/postgres/index.d.mts +69 -1
  30. package/dist/lib/postgres/index.mjs +1 -1
  31. package/dist/lib/{roles.sql-BoOZSkBp.mjs → roles.sql-9OkYvsNM.mjs} +26 -2
  32. package/dist/lib/{roles.sql-E58x7mLS.cjs → roles.sql-BC7k_zPh.cjs} +25 -1
  33. package/dist/lib/{schema-D0MyXcej.d.cts → schema-Cwx3HosC.d.cts} +72 -0
  34. package/dist/lib/{schema-D0MyXcej.d.mts → schema-Cwx3HosC.d.mts} +72 -0
  35. package/dist/lib/sqlite/index.cjs +1 -1
  36. package/dist/lib/sqlite/index.d.cts +2 -2
  37. package/dist/lib/sqlite/index.d.mts +2 -2
  38. package/dist/lib/sqlite/index.mjs +1 -1
  39. package/dist/lib/sqlite/schema.cjs +13 -1
  40. package/dist/lib/sqlite/schema.d.cts +1 -1
  41. package/dist/lib/sqlite/schema.d.mts +1 -1
  42. package/dist/lib/sqlite/schema.mjs +13 -1
  43. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_manifest = require("../manifest-DcIMYvWk.cjs");
2
+ const require_manifest = require("../manifest-BFI4HGPh.cjs");
3
3
  const require_migrations_path = require("../migrations-path-DBCE17dT.cjs");
4
4
  let zod = require("zod");
5
5
  //#region src/mcp/http-transport.ts
@@ -42,7 +42,9 @@ const StatusSchema = zod.z.object({
42
42
  name: zod.z.string(),
43
43
  description: zod.z.string().nullable(),
44
44
  order: zod.z.number(),
45
- entryRules: zod.z.union([zod.z.string(), zod.z.array(zod.z.string())]).nullish()
45
+ entryRules: zod.z.union([zod.z.string(), zod.z.array(zod.z.string())]).nullish(),
46
+ allowedFrom: zod.z.union([zod.z.string(), zod.z.array(zod.z.string())]).nullish(),
47
+ wipLimit: zod.z.number().nullish()
46
48
  });
47
49
  const CommentSchema = zod.z.object({
48
50
  id: zod.z.string(),
@@ -117,7 +119,8 @@ const FieldChangeSchema = zod.z.object({
117
119
  function createHttpTransport(input) {
118
120
  const { request } = input;
119
121
  async function readColumns() {
120
- return zod.z.array(StatusSchema).parse(await request("GET", `/issues/statuses?workspaceId=${encodeURIComponent(input.workspaceId())}`)).map(require_manifest.projectKanboColumn);
122
+ const statuses = zod.z.array(StatusSchema).parse(await request("GET", `/issues/statuses?workspaceId=${encodeURIComponent(input.workspaceId())}`));
123
+ return statuses.map((status) => require_manifest.projectKanboColumn(status, statuses));
121
124
  }
122
125
  /**
123
126
  * One card as a tool prints it. The response carries the column as a foreign
@@ -293,7 +296,24 @@ function createHttpTransport(input) {
293
296
  runFinish: async ({ run, state, errorText }) => require_manifest.projectKanboRun(RunSchema.parse(await request("PATCH", `/issues/runs/${encodeURIComponent(run)}`, {
294
297
  state,
295
298
  ...errorText !== void 0 ? { errorText } : {}
296
- })))
299
+ }))),
300
+ cardClaim: async ({ card, agent }) => {
301
+ const answer = zod.z.object({
302
+ card: IssueSchema,
303
+ run: RunSchema,
304
+ column: StatusSchema
305
+ }).parse(await request("POST", "/issues/claim", {
306
+ workspaceId: input.workspaceId(),
307
+ ...card !== void 0 ? { issueId: card } : {},
308
+ ...agent !== void 0 ? { agentName: agent } : {}
309
+ }));
310
+ const columns = await readColumns();
311
+ return {
312
+ card: require_manifest.projectKanboCard(answer.card, columns),
313
+ run: require_manifest.projectKanboRun(answer.run),
314
+ column: columns.find((column) => column.id === answer.column.id) ?? require_manifest.projectKanboColumn(answer.column, columns)
315
+ };
316
+ }
297
317
  };
298
318
  }
299
319
  /**
@@ -1,5 +1,5 @@
1
- import { s as IssueRun, t as Issue } from "../schema-D0MyXcej.cjs";
2
- import { _ as EntryRule, d as KANBO_TOOL_CLI_EQUIVALENTS, f as KANBO_TOOL_NAMES, i as IssueActorKind, m as KanboToolName, p as KanboToolCliEquivalent, r as CardLastComment } from "../approval-BsBk2xVr.cjs";
1
+ import { s as IssueRun, t as Issue } from "../schema-Cwx3HosC.cjs";
2
+ import { _ as EntryRule, d as KANBO_TOOL_CLI_EQUIVALENTS, f as KANBO_TOOL_NAMES, i as IssueActorKind, m as KanboToolName, p as KanboToolCliEquivalent, r as CardLastComment } from "../approval-DNfUhYD5.cjs";
3
3
  import { z } from "zod";
4
4
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
5
  import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
@@ -148,6 +148,10 @@ interface KanboColumnResult {
148
148
  order: number;
149
149
  /** What a card must satisfy before an agent may move it here; empty for nothing. */
150
150
  entryRules: EntryRule[];
151
+ /** The slugs of the columns a card may enter this one from, in board order; `null` for any column, `[]` for none — only a person puts a card here. */
152
+ allowedFrom: string[] | null;
153
+ /** The most cards the column holds; `null` for no limit. */
154
+ wipLimit: number | null;
151
155
  }
152
156
  /**
153
157
  * A milestone read as a sprint, as `kanbo_sprints` hands it to an agent: its
@@ -230,6 +234,12 @@ interface KanboRunStartInput {
230
234
  /** Where the agent's own log of this run lives: `claude:<id>` or `codex:<id>` (ruling 7-1). */
231
235
  session?: string;
232
236
  }
237
+ /** What `kanbo_card_claim` hands back: the card where it now is, the run it started, and the column it went to. */
238
+ interface KanboClaimResult {
239
+ card: KanboCardResult;
240
+ run: KanboRunResult;
241
+ column: KanboColumnResult;
242
+ }
233
243
  /** How `kanbo_run_finish` says a run ended. */
234
244
  interface KanboRunFinishInput {
235
245
  run: string;
@@ -295,6 +305,11 @@ interface KanboToolTransport {
295
305
  }) => Promise<KanboCardResult>;
296
306
  runStart: (input: KanboRunStartInput) => Promise<KanboRunResult>;
297
307
  runFinish: (input: KanboRunFinishInput) => Promise<KanboRunResult>;
308
+ /** Take a card — `card`, or the first ready one — starting a run named `agent` (the transport's own name for the caller when absent) and moving it into work. */
309
+ cardClaim: (input: {
310
+ card?: string;
311
+ agent?: string;
312
+ }) => Promise<KanboClaimResult>;
298
313
  }
299
314
  /**
300
315
  * A card as either transport already has it: the row's own fields with the
@@ -447,7 +462,7 @@ interface KanboTool {
447
462
  /**
448
463
  * Every tool the board has, in the order it declares them.
449
464
  *
450
- * The list is the board's, not a server's: the same sixteen are registered
465
+ * The list is the board's, not a server's: the same seventeen are registered
451
466
  * whether they run against a server or against the board directly, and the
452
467
  * only thing a host decides is which of them it publishes.
453
468
  */
@@ -499,4 +514,4 @@ export declare function registerKanboTools(server: McpServer, transport: KanboTo
499
514
  */
500
515
  export declare function createKanboMcpServer(transport: KanboToolTransport, options: KanboToolOptions): McpServer;
501
516
  //#endregion
502
- export { KANBO_TOOL_CLI_EQUIVALENTS, KANBO_TOOL_NAMES, type KanboActiveRunResult, type KanboCardCommentResult, type KanboCardCreateInput, type KanboCardDetailResult, type KanboCardFacts, type KanboCardInclude, type KanboCardPage, type KanboCardQuery, type KanboCardResult, type KanboCardUpdateInput, type KanboColumnResult, type KanboCommentResult, type KanboFieldChangeResult, type KanboHttpRequest, type KanboHttpTransportInput, type KanboPullRequestResult, type KanboReadyPage, type KanboRunFinishInput, type KanboRunResult, type KanboRunStartInput, type KanboSprintResult, type KanboTool, type KanboToolCliEquivalent, type KanboToolName, type KanboToolOptions, type KanboToolRegistration, type KanboToolResult, type KanboToolTransport };
517
+ export { KANBO_TOOL_CLI_EQUIVALENTS, KANBO_TOOL_NAMES, type KanboActiveRunResult, type KanboCardCommentResult, type KanboCardCreateInput, type KanboCardDetailResult, type KanboCardFacts, type KanboCardInclude, type KanboCardPage, type KanboCardQuery, type KanboCardResult, type KanboCardUpdateInput, type KanboClaimResult, type KanboColumnResult, type KanboCommentResult, type KanboFieldChangeResult, type KanboHttpRequest, type KanboHttpTransportInput, type KanboPullRequestResult, type KanboReadyPage, type KanboRunFinishInput, type KanboRunResult, type KanboRunStartInput, type KanboSprintResult, type KanboTool, type KanboToolCliEquivalent, type KanboToolName, type KanboToolOptions, type KanboToolRegistration, type KanboToolResult, type KanboToolTransport };
@@ -1,5 +1,5 @@
1
- import { s as IssueRun, t as Issue } from "../schema-D0MyXcej.mjs";
2
- import { _ as EntryRule, d as KANBO_TOOL_CLI_EQUIVALENTS, f as KANBO_TOOL_NAMES, i as IssueActorKind, m as KanboToolName, p as KanboToolCliEquivalent, r as CardLastComment } from "../approval-LRZ6ontC.mjs";
1
+ import { s as IssueRun, t as Issue } from "../schema-Cwx3HosC.mjs";
2
+ import { _ as EntryRule, d as KANBO_TOOL_CLI_EQUIVALENTS, f as KANBO_TOOL_NAMES, i as IssueActorKind, m as KanboToolName, p as KanboToolCliEquivalent, r as CardLastComment } from "../approval-CnJJfwfi.mjs";
3
3
  import { z } from "zod";
4
4
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
5
  import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
@@ -148,6 +148,10 @@ interface KanboColumnResult {
148
148
  order: number;
149
149
  /** What a card must satisfy before an agent may move it here; empty for nothing. */
150
150
  entryRules: EntryRule[];
151
+ /** The slugs of the columns a card may enter this one from, in board order; `null` for any column, `[]` for none — only a person puts a card here. */
152
+ allowedFrom: string[] | null;
153
+ /** The most cards the column holds; `null` for no limit. */
154
+ wipLimit: number | null;
151
155
  }
152
156
  /**
153
157
  * A milestone read as a sprint, as `kanbo_sprints` hands it to an agent: its
@@ -230,6 +234,12 @@ interface KanboRunStartInput {
230
234
  /** Where the agent's own log of this run lives: `claude:<id>` or `codex:<id>` (ruling 7-1). */
231
235
  session?: string;
232
236
  }
237
+ /** What `kanbo_card_claim` hands back: the card where it now is, the run it started, and the column it went to. */
238
+ interface KanboClaimResult {
239
+ card: KanboCardResult;
240
+ run: KanboRunResult;
241
+ column: KanboColumnResult;
242
+ }
233
243
  /** How `kanbo_run_finish` says a run ended. */
234
244
  interface KanboRunFinishInput {
235
245
  run: string;
@@ -295,6 +305,11 @@ interface KanboToolTransport {
295
305
  }) => Promise<KanboCardResult>;
296
306
  runStart: (input: KanboRunStartInput) => Promise<KanboRunResult>;
297
307
  runFinish: (input: KanboRunFinishInput) => Promise<KanboRunResult>;
308
+ /** Take a card — `card`, or the first ready one — starting a run named `agent` (the transport's own name for the caller when absent) and moving it into work. */
309
+ cardClaim: (input: {
310
+ card?: string;
311
+ agent?: string;
312
+ }) => Promise<KanboClaimResult>;
298
313
  }
299
314
  /**
300
315
  * A card as either transport already has it: the row's own fields with the
@@ -447,7 +462,7 @@ interface KanboTool {
447
462
  /**
448
463
  * Every tool the board has, in the order it declares them.
449
464
  *
450
- * The list is the board's, not a server's: the same sixteen are registered
465
+ * The list is the board's, not a server's: the same seventeen are registered
451
466
  * whether they run against a server or against the board directly, and the
452
467
  * only thing a host decides is which of them it publishes.
453
468
  */
@@ -499,4 +514,4 @@ export declare function registerKanboTools(server: McpServer, transport: KanboTo
499
514
  */
500
515
  export declare function createKanboMcpServer(transport: KanboToolTransport, options: KanboToolOptions): McpServer;
501
516
  //#endregion
502
- export { KANBO_TOOL_CLI_EQUIVALENTS, KANBO_TOOL_NAMES, type KanboActiveRunResult, type KanboCardCommentResult, type KanboCardCreateInput, type KanboCardDetailResult, type KanboCardFacts, type KanboCardInclude, type KanboCardPage, type KanboCardQuery, type KanboCardResult, type KanboCardUpdateInput, type KanboColumnResult, type KanboCommentResult, type KanboFieldChangeResult, type KanboHttpRequest, type KanboHttpTransportInput, type KanboPullRequestResult, type KanboReadyPage, type KanboRunFinishInput, type KanboRunResult, type KanboRunStartInput, type KanboSprintResult, type KanboTool, type KanboToolCliEquivalent, type KanboToolName, type KanboToolOptions, type KanboToolRegistration, type KanboToolResult, type KanboToolTransport };
517
+ export { KANBO_TOOL_CLI_EQUIVALENTS, KANBO_TOOL_NAMES, type KanboActiveRunResult, type KanboCardCommentResult, type KanboCardCreateInput, type KanboCardDetailResult, type KanboCardFacts, type KanboCardInclude, type KanboCardPage, type KanboCardQuery, type KanboCardResult, type KanboCardUpdateInput, type KanboClaimResult, type KanboColumnResult, type KanboCommentResult, type KanboFieldChangeResult, type KanboHttpRequest, type KanboHttpTransportInput, type KanboPullRequestResult, type KanboReadyPage, type KanboRunFinishInput, type KanboRunResult, type KanboRunStartInput, type KanboSprintResult, type KanboTool, type KanboToolCliEquivalent, type KanboToolName, type KanboToolOptions, type KanboToolRegistration, type KanboToolResult, type KanboToolTransport };
@@ -1,4 +1,4 @@
1
- import { A as projectKanboSprint, C as pageOf, D as projectKanboFieldChange, E as projectKanboColumn, O as projectKanboPullRequest, S as matchesKanboCardQuery, T as projectKanboCardComment, b as DEFAULT_KANBO_COMMENT_LIMIT, c as registerKanboTools, d as KANBO_MCP_INSTRUCTIONS, f as KANBO_CAPABILITIES_MARKDOWN_RESOURCE_URI, i as KANBO_TOOL_NAMES, it as normalizeStatusName, j as projectKanboSubCard, k as projectKanboRun, l as KANBO_TOOLS, m as registerKanboCapabilitiesResources, o as KANBO_MCP_SERVER_NAME, p as KANBO_CAPABILITIES_RESOURCE_URI, r as KANBO_TOOL_CLI_EQUIVALENTS, s as createKanboMcpServer, st as previewComment, u as buildKanboTools, w as projectKanboCard, x as KANBO_CARD_INCLUDES, y as DEFAULT_KANBO_CARD_INCLUDES } from "../manifest-Dmo6IlWk.mjs";
1
+ import { A as projectKanboSprint, C as pageOf, D as projectKanboFieldChange, E as projectKanboColumn, O as projectKanboPullRequest, S as matchesKanboCardQuery, T as projectKanboCardComment, b as DEFAULT_KANBO_COMMENT_LIMIT, c as registerKanboTools, d as KANBO_MCP_INSTRUCTIONS, f as KANBO_CAPABILITIES_MARKDOWN_RESOURCE_URI, ht as previewComment, i as KANBO_TOOL_NAMES, j as projectKanboSubCard, k as projectKanboRun, l as KANBO_TOOLS, m as registerKanboCapabilitiesResources, o as KANBO_MCP_SERVER_NAME, p as KANBO_CAPABILITIES_RESOURCE_URI, pt as normalizeStatusName, r as KANBO_TOOL_CLI_EQUIVALENTS, s as createKanboMcpServer, u as buildKanboTools, w as projectKanboCard, x as KANBO_CARD_INCLUDES, y as DEFAULT_KANBO_CARD_INCLUDES } from "../manifest-DHI1fkoW.mjs";
2
2
  import { a as BoardError } from "../migrations-path-ClaYRNwk.mjs";
3
3
  import { z } from "zod";
4
4
  //#region src/mcp/http-transport.ts
@@ -41,7 +41,9 @@ const StatusSchema = z.object({
41
41
  name: z.string(),
42
42
  description: z.string().nullable(),
43
43
  order: z.number(),
44
- entryRules: z.union([z.string(), z.array(z.string())]).nullish()
44
+ entryRules: z.union([z.string(), z.array(z.string())]).nullish(),
45
+ allowedFrom: z.union([z.string(), z.array(z.string())]).nullish(),
46
+ wipLimit: z.number().nullish()
45
47
  });
46
48
  const CommentSchema = z.object({
47
49
  id: z.string(),
@@ -116,7 +118,8 @@ const FieldChangeSchema = z.object({
116
118
  function createHttpTransport(input) {
117
119
  const { request } = input;
118
120
  async function readColumns() {
119
- return z.array(StatusSchema).parse(await request("GET", `/issues/statuses?workspaceId=${encodeURIComponent(input.workspaceId())}`)).map(projectKanboColumn);
121
+ const statuses = z.array(StatusSchema).parse(await request("GET", `/issues/statuses?workspaceId=${encodeURIComponent(input.workspaceId())}`));
122
+ return statuses.map((status) => projectKanboColumn(status, statuses));
120
123
  }
121
124
  /**
122
125
  * One card as a tool prints it. The response carries the column as a foreign
@@ -292,7 +295,24 @@ function createHttpTransport(input) {
292
295
  runFinish: async ({ run, state, errorText }) => projectKanboRun(RunSchema.parse(await request("PATCH", `/issues/runs/${encodeURIComponent(run)}`, {
293
296
  state,
294
297
  ...errorText !== void 0 ? { errorText } : {}
295
- })))
298
+ }))),
299
+ cardClaim: async ({ card, agent }) => {
300
+ const answer = z.object({
301
+ card: IssueSchema,
302
+ run: RunSchema,
303
+ column: StatusSchema
304
+ }).parse(await request("POST", "/issues/claim", {
305
+ workspaceId: input.workspaceId(),
306
+ ...card !== void 0 ? { issueId: card } : {},
307
+ ...agent !== void 0 ? { agentName: agent } : {}
308
+ }));
309
+ const columns = await readColumns();
310
+ return {
311
+ card: projectKanboCard(answer.card, columns),
312
+ run: projectKanboRun(answer.run),
313
+ column: columns.find((column) => column.id === answer.column.id) ?? projectKanboColumn(answer.column, columns)
314
+ };
315
+ }
296
316
  };
297
317
  }
298
318
  /**
@@ -306,6 +306,7 @@ function createSqliteBoardStoreCore(resolveDatabase) {
306
306
  }).from(require_sqlite_schema.issues).where((0, drizzle_orm.and)((0, drizzle_orm.eq)(require_sqlite_schema.issues.workspaceId, workspaceId), (0, drizzle_orm.isNotNull)(require_sqlite_schema.issues.milestoneId))).groupBy(require_sqlite_schema.issues.milestoneId, require_sqlite_schema.issues.statusId).all(),
307
307
  listByIds: (issueIds) => resolveDatabase().select().from(require_sqlite_schema.issues).where((0, drizzle_orm.inArray)(require_sqlite_schema.issues.id, issueIds)).all(),
308
308
  findById: (issueId) => resolveDatabase().select().from(require_sqlite_schema.issues).where((0, drizzle_orm.eq)(require_sqlite_schema.issues.id, issueId)).get() ?? null,
309
+ lockById: (issueId) => resolveDatabase().select().from(require_sqlite_schema.issues).where((0, drizzle_orm.eq)(require_sqlite_schema.issues.id, issueId)).get() ?? null,
309
310
  findInWorkspace: (workspaceId, issueId) => resolveDatabase().select().from(require_sqlite_schema.issues).where((0, drizzle_orm.and)((0, drizzle_orm.eq)(require_sqlite_schema.issues.id, issueId), (0, drizzle_orm.eq)(require_sqlite_schema.issues.workspaceId, workspaceId))).get() ?? null,
310
311
  findByNumber: (workspaceId, number) => resolveDatabase().select().from(require_sqlite_schema.issues).where((0, drizzle_orm.and)((0, drizzle_orm.eq)(require_sqlite_schema.issues.workspaceId, workspaceId), (0, drizzle_orm.eq)(require_sqlite_schema.issues.number, number))).get() ?? null,
311
312
  maxNumber: (workspaceId) => {
@@ -342,6 +343,10 @@ function createSqliteBoardStoreCore(resolveDatabase) {
342
343
  },
343
344
  comments: {
344
345
  listByIssue: (issueId) => resolveDatabase().select().from(require_sqlite_schema.issueComments).where((0, drizzle_orm.eq)(require_sqlite_schema.issueComments.issueId, issueId)).orderBy((0, drizzle_orm.asc)(require_sqlite_schema.issueComments.createdAt), COMMENT_INSERTION_ORDER).all(),
346
+ listByWorkspaces: (workspaceIds, authorKinds) => {
347
+ if (workspaceIds.length === 0 || authorKinds.length === 0) return [];
348
+ return resolveDatabase().select((0, drizzle_orm.getTableColumns)(require_sqlite_schema.issueComments)).from(require_sqlite_schema.issueComments).innerJoin(require_sqlite_schema.issues, (0, drizzle_orm.eq)(require_sqlite_schema.issues.id, require_sqlite_schema.issueComments.issueId)).where((0, drizzle_orm.and)((0, drizzle_orm.inArray)(require_sqlite_schema.issues.workspaceId, [...workspaceIds]), (0, drizzle_orm.inArray)(require_sqlite_schema.issueComments.authorKind, [...authorKinds]))).orderBy((0, drizzle_orm.asc)(require_sqlite_schema.issueComments.createdAt), COMMENT_INSERTION_ORDER).all();
349
+ },
345
350
  listLatestByIssues: (issueIds, authorKinds) => {
346
351
  if (issueIds.length === 0 || authorKinds?.length === 0) return [];
347
352
  const database = resolveDatabase();
@@ -371,6 +376,10 @@ function createSqliteBoardStoreCore(resolveDatabase) {
371
376
  listByIssue: (issueId) => resolveDatabase().select().from(require_sqlite_schema.issueRuns).where((0, drizzle_orm.eq)(require_sqlite_schema.issueRuns.issueId, issueId)).orderBy((0, drizzle_orm.asc)(require_sqlite_schema.issueRuns.startedAt), RUN_INSERTION_ORDER).all(),
372
377
  listRunning: (issueId) => resolveDatabase().select().from(require_sqlite_schema.issueRuns).where((0, drizzle_orm.and)((0, drizzle_orm.eq)(require_sqlite_schema.issueRuns.issueId, issueId), (0, drizzle_orm.eq)(require_sqlite_schema.issueRuns.state, "running"))).orderBy((0, drizzle_orm.asc)(require_sqlite_schema.issueRuns.startedAt), RUN_INSERTION_ORDER).all(),
373
378
  listRunningWithSession: () => resolveDatabase().select().from(require_sqlite_schema.issueRuns).where((0, drizzle_orm.and)((0, drizzle_orm.eq)(require_sqlite_schema.issueRuns.state, "running"), (0, drizzle_orm.isNotNull)(require_sqlite_schema.issueRuns.chatSessionId))).orderBy((0, drizzle_orm.asc)(require_sqlite_schema.issueRuns.startedAt), RUN_INSERTION_ORDER).all(),
379
+ listByWorkspaces: (workspaceIds) => {
380
+ if (workspaceIds.length === 0) return [];
381
+ return resolveDatabase().select((0, drizzle_orm.getTableColumns)(require_sqlite_schema.issueRuns)).from(require_sqlite_schema.issueRuns).innerJoin(require_sqlite_schema.issues, (0, drizzle_orm.eq)(require_sqlite_schema.issues.id, require_sqlite_schema.issueRuns.issueId)).where((0, drizzle_orm.inArray)(require_sqlite_schema.issues.workspaceId, [...workspaceIds])).orderBy((0, drizzle_orm.asc)(require_sqlite_schema.issueRuns.startedAt), RUN_INSERTION_ORDER).all();
382
+ },
374
383
  findById: (runId) => resolveDatabase().select().from(require_sqlite_schema.issueRuns).where((0, drizzle_orm.eq)(require_sqlite_schema.issueRuns.id, runId)).get() ?? null,
375
384
  findByChatSessionId: (chatSessionId) => resolveDatabase().select().from(require_sqlite_schema.issueRuns).where((0, drizzle_orm.eq)(require_sqlite_schema.issueRuns.chatSessionId, chatSessionId)).orderBy((0, drizzle_orm.desc)(require_sqlite_schema.issueRuns.startedAt), drizzle_orm.sql`${require_sqlite_schema.issueRuns}.rowid desc`).get() ?? null,
376
385
  countByIssue: (issueId) => {
@@ -403,6 +412,10 @@ function createSqliteBoardStoreCore(resolveDatabase) {
403
412
  fieldChanges: {
404
413
  listByIssue: (issueId) => resolveDatabase().select().from(require_sqlite_schema.issueFieldChanges).where((0, drizzle_orm.eq)(require_sqlite_schema.issueFieldChanges.issueId, issueId)).orderBy((0, drizzle_orm.asc)(require_sqlite_schema.issueFieldChanges.createdAt), FIELD_CHANGE_INSERTION_ORDER).all(),
405
414
  listByIssueField: (issueId, field) => resolveDatabase().select().from(require_sqlite_schema.issueFieldChanges).where((0, drizzle_orm.and)((0, drizzle_orm.eq)(require_sqlite_schema.issueFieldChanges.issueId, issueId), (0, drizzle_orm.eq)(require_sqlite_schema.issueFieldChanges.field, field))).orderBy((0, drizzle_orm.asc)(require_sqlite_schema.issueFieldChanges.createdAt), FIELD_CHANGE_INSERTION_ORDER).all(),
415
+ listByFieldSince: (field, query) => query.workspaceIds.length === 0 ? [] : resolveDatabase().select({
416
+ ...(0, drizzle_orm.getTableColumns)(require_sqlite_schema.issueFieldChanges),
417
+ workspaceId: require_sqlite_schema.issues.workspaceId
418
+ }).from(require_sqlite_schema.issueFieldChanges).innerJoin(require_sqlite_schema.issues, (0, drizzle_orm.eq)(require_sqlite_schema.issues.id, require_sqlite_schema.issueFieldChanges.issueId)).where((0, drizzle_orm.and)((0, drizzle_orm.eq)(require_sqlite_schema.issueFieldChanges.field, field), (0, drizzle_orm.isNotNull)(require_sqlite_schema.issueFieldChanges.toValue), (0, drizzle_orm.gte)(require_sqlite_schema.issueFieldChanges.createdAt, query.since), query.until === void 0 ? void 0 : (0, drizzle_orm.lte)(require_sqlite_schema.issueFieldChanges.createdAt, query.until), (0, drizzle_orm.inArray)(require_sqlite_schema.issues.workspaceId, [...query.workspaceIds]))).orderBy((0, drizzle_orm.asc)(require_sqlite_schema.issueFieldChanges.createdAt), (0, drizzle_orm.asc)(require_sqlite_schema.issueFieldChanges.id)).limit(query.limit ?? Number.MAX_SAFE_INTEGER).all(),
406
419
  create: (values) => {
407
420
  resolveDatabase().insert(require_sqlite_schema.issueFieldChanges).values(values).run();
408
421
  }
@@ -483,6 +496,7 @@ function createSqliteBoardStore(options) {
483
496
  countByMilestone: async (workspaceId) => core.issues.countByMilestone(workspaceId),
484
497
  listByIds: async (issueIds) => core.issues.listByIds(issueIds),
485
498
  findById: async (issueId) => core.issues.findById(issueId),
499
+ lockById: async (issueId) => core.issues.lockById(issueId),
486
500
  findInWorkspace: async (workspaceId, issueId) => core.issues.findInWorkspace(workspaceId, issueId),
487
501
  findByNumber: async (workspaceId, number) => core.issues.findByNumber(workspaceId, number),
488
502
  maxNumber: async (workspaceId) => core.issues.maxNumber(workspaceId),
@@ -498,6 +512,7 @@ function createSqliteBoardStore(options) {
498
512
  comments: {
499
513
  listByIssue: async (issueId) => core.comments.listByIssue(issueId),
500
514
  listLatestByIssues: async (issueIds, authorKinds) => core.comments.listLatestByIssues(issueIds, authorKinds),
515
+ listByWorkspaces: async (workspaceIds, authorKinds) => core.comments.listByWorkspaces(workspaceIds, authorKinds),
501
516
  findById: async (commentId) => core.comments.findById(commentId),
502
517
  findByDedupeKey: async (issueId, dedupeKey) => core.comments.findByDedupeKey(issueId, dedupeKey),
503
518
  listByDedupeKeyPrefix: async (issueId, prefix) => core.comments.listByDedupeKeyPrefix(issueId, prefix),
@@ -509,6 +524,7 @@ function createSqliteBoardStore(options) {
509
524
  listByIssue: async (issueId) => core.runs.listByIssue(issueId),
510
525
  listRunning: async (issueId) => core.runs.listRunning(issueId),
511
526
  listRunningWithSession: async () => core.runs.listRunningWithSession(),
527
+ listByWorkspaces: async (workspaceIds) => core.runs.listByWorkspaces(workspaceIds),
512
528
  findById: async (runId) => core.runs.findById(runId),
513
529
  findByChatSessionId: async (chatSessionId) => core.runs.findByChatSessionId(chatSessionId),
514
530
  countByIssue: async (issueId) => core.runs.countByIssue(issueId),
@@ -528,6 +544,7 @@ function createSqliteBoardStore(options) {
528
544
  fieldChanges: {
529
545
  listByIssue: async (issueId) => core.fieldChanges.listByIssue(issueId),
530
546
  listByIssueField: async (issueId, field) => core.fieldChanges.listByIssueField(issueId, field),
547
+ listByFieldSince: async (field, query) => core.fieldChanges.listByFieldSince(field, query),
531
548
  create: async (values) => core.fieldChanges.create(values)
532
549
  },
533
550
  pullRequests: {
@@ -1,7 +1,7 @@
1
1
  import { a as BoardError, i as BOARD_TABLES_ADDED_WITHIN_EPOCH, n as resolveBoardMigrationsPath, t as hasMigrationJournal } from "./migrations-path-ClaYRNwk.mjs";
2
2
  import { boardSqliteSchema, issueComments, issueFieldChanges, issueMilestones, issuePullRequests, issueRelations, issueRuns, issueStatuses, issues, kanbanMeta } from "./sqlite/schema.mjs";
3
3
  import { createRequire } from "node:module";
4
- import { and, asc, desc, eq, getTableColumns, gte, inArray, isNotNull, isNull, or, sql } from "drizzle-orm";
4
+ import { and, asc, desc, eq, getTableColumns, gte, inArray, isNotNull, isNull, lte, or, sql } from "drizzle-orm";
5
5
  import { getTableConfig } from "drizzle-orm/sqlite-core";
6
6
  import { dirname } from "node:path";
7
7
  import { fileURLToPath } from "node:url";
@@ -306,6 +306,7 @@ function createSqliteBoardStoreCore(resolveDatabase) {
306
306
  }).from(issues).where(and(eq(issues.workspaceId, workspaceId), isNotNull(issues.milestoneId))).groupBy(issues.milestoneId, issues.statusId).all(),
307
307
  listByIds: (issueIds) => resolveDatabase().select().from(issues).where(inArray(issues.id, issueIds)).all(),
308
308
  findById: (issueId) => resolveDatabase().select().from(issues).where(eq(issues.id, issueId)).get() ?? null,
309
+ lockById: (issueId) => resolveDatabase().select().from(issues).where(eq(issues.id, issueId)).get() ?? null,
309
310
  findInWorkspace: (workspaceId, issueId) => resolveDatabase().select().from(issues).where(and(eq(issues.id, issueId), eq(issues.workspaceId, workspaceId))).get() ?? null,
310
311
  findByNumber: (workspaceId, number) => resolveDatabase().select().from(issues).where(and(eq(issues.workspaceId, workspaceId), eq(issues.number, number))).get() ?? null,
311
312
  maxNumber: (workspaceId) => {
@@ -342,6 +343,10 @@ function createSqliteBoardStoreCore(resolveDatabase) {
342
343
  },
343
344
  comments: {
344
345
  listByIssue: (issueId) => resolveDatabase().select().from(issueComments).where(eq(issueComments.issueId, issueId)).orderBy(asc(issueComments.createdAt), COMMENT_INSERTION_ORDER).all(),
346
+ listByWorkspaces: (workspaceIds, authorKinds) => {
347
+ if (workspaceIds.length === 0 || authorKinds.length === 0) return [];
348
+ return resolveDatabase().select(getTableColumns(issueComments)).from(issueComments).innerJoin(issues, eq(issues.id, issueComments.issueId)).where(and(inArray(issues.workspaceId, [...workspaceIds]), inArray(issueComments.authorKind, [...authorKinds]))).orderBy(asc(issueComments.createdAt), COMMENT_INSERTION_ORDER).all();
349
+ },
345
350
  listLatestByIssues: (issueIds, authorKinds) => {
346
351
  if (issueIds.length === 0 || authorKinds?.length === 0) return [];
347
352
  const database = resolveDatabase();
@@ -371,6 +376,10 @@ function createSqliteBoardStoreCore(resolveDatabase) {
371
376
  listByIssue: (issueId) => resolveDatabase().select().from(issueRuns).where(eq(issueRuns.issueId, issueId)).orderBy(asc(issueRuns.startedAt), RUN_INSERTION_ORDER).all(),
372
377
  listRunning: (issueId) => resolveDatabase().select().from(issueRuns).where(and(eq(issueRuns.issueId, issueId), eq(issueRuns.state, "running"))).orderBy(asc(issueRuns.startedAt), RUN_INSERTION_ORDER).all(),
373
378
  listRunningWithSession: () => resolveDatabase().select().from(issueRuns).where(and(eq(issueRuns.state, "running"), isNotNull(issueRuns.chatSessionId))).orderBy(asc(issueRuns.startedAt), RUN_INSERTION_ORDER).all(),
379
+ listByWorkspaces: (workspaceIds) => {
380
+ if (workspaceIds.length === 0) return [];
381
+ return resolveDatabase().select(getTableColumns(issueRuns)).from(issueRuns).innerJoin(issues, eq(issues.id, issueRuns.issueId)).where(inArray(issues.workspaceId, [...workspaceIds])).orderBy(asc(issueRuns.startedAt), RUN_INSERTION_ORDER).all();
382
+ },
374
383
  findById: (runId) => resolveDatabase().select().from(issueRuns).where(eq(issueRuns.id, runId)).get() ?? null,
375
384
  findByChatSessionId: (chatSessionId) => resolveDatabase().select().from(issueRuns).where(eq(issueRuns.chatSessionId, chatSessionId)).orderBy(desc(issueRuns.startedAt), sql`${issueRuns}.rowid desc`).get() ?? null,
376
385
  countByIssue: (issueId) => {
@@ -403,6 +412,10 @@ function createSqliteBoardStoreCore(resolveDatabase) {
403
412
  fieldChanges: {
404
413
  listByIssue: (issueId) => resolveDatabase().select().from(issueFieldChanges).where(eq(issueFieldChanges.issueId, issueId)).orderBy(asc(issueFieldChanges.createdAt), FIELD_CHANGE_INSERTION_ORDER).all(),
405
414
  listByIssueField: (issueId, field) => resolveDatabase().select().from(issueFieldChanges).where(and(eq(issueFieldChanges.issueId, issueId), eq(issueFieldChanges.field, field))).orderBy(asc(issueFieldChanges.createdAt), FIELD_CHANGE_INSERTION_ORDER).all(),
415
+ listByFieldSince: (field, query) => query.workspaceIds.length === 0 ? [] : resolveDatabase().select({
416
+ ...getTableColumns(issueFieldChanges),
417
+ workspaceId: issues.workspaceId
418
+ }).from(issueFieldChanges).innerJoin(issues, eq(issues.id, issueFieldChanges.issueId)).where(and(eq(issueFieldChanges.field, field), isNotNull(issueFieldChanges.toValue), gte(issueFieldChanges.createdAt, query.since), query.until === void 0 ? void 0 : lte(issueFieldChanges.createdAt, query.until), inArray(issues.workspaceId, [...query.workspaceIds]))).orderBy(asc(issueFieldChanges.createdAt), asc(issueFieldChanges.id)).limit(query.limit ?? Number.MAX_SAFE_INTEGER).all(),
406
419
  create: (values) => {
407
420
  resolveDatabase().insert(issueFieldChanges).values(values).run();
408
421
  }
@@ -483,6 +496,7 @@ function createSqliteBoardStore(options) {
483
496
  countByMilestone: async (workspaceId) => core.issues.countByMilestone(workspaceId),
484
497
  listByIds: async (issueIds) => core.issues.listByIds(issueIds),
485
498
  findById: async (issueId) => core.issues.findById(issueId),
499
+ lockById: async (issueId) => core.issues.lockById(issueId),
486
500
  findInWorkspace: async (workspaceId, issueId) => core.issues.findInWorkspace(workspaceId, issueId),
487
501
  findByNumber: async (workspaceId, number) => core.issues.findByNumber(workspaceId, number),
488
502
  maxNumber: async (workspaceId) => core.issues.maxNumber(workspaceId),
@@ -498,6 +512,7 @@ function createSqliteBoardStore(options) {
498
512
  comments: {
499
513
  listByIssue: async (issueId) => core.comments.listByIssue(issueId),
500
514
  listLatestByIssues: async (issueIds, authorKinds) => core.comments.listLatestByIssues(issueIds, authorKinds),
515
+ listByWorkspaces: async (workspaceIds, authorKinds) => core.comments.listByWorkspaces(workspaceIds, authorKinds),
501
516
  findById: async (commentId) => core.comments.findById(commentId),
502
517
  findByDedupeKey: async (issueId, dedupeKey) => core.comments.findByDedupeKey(issueId, dedupeKey),
503
518
  listByDedupeKeyPrefix: async (issueId, prefix) => core.comments.listByDedupeKeyPrefix(issueId, prefix),
@@ -509,6 +524,7 @@ function createSqliteBoardStore(options) {
509
524
  listByIssue: async (issueId) => core.runs.listByIssue(issueId),
510
525
  listRunning: async (issueId) => core.runs.listRunning(issueId),
511
526
  listRunningWithSession: async () => core.runs.listRunningWithSession(),
527
+ listByWorkspaces: async (workspaceIds) => core.runs.listByWorkspaces(workspaceIds),
512
528
  findById: async (runId) => core.runs.findById(runId),
513
529
  findByChatSessionId: async (chatSessionId) => core.runs.findByChatSessionId(chatSessionId),
514
530
  countByIssue: async (issueId) => core.runs.countByIssue(issueId),
@@ -528,6 +544,7 @@ function createSqliteBoardStore(options) {
528
544
  fieldChanges: {
529
545
  listByIssue: async (issueId) => core.fieldChanges.listByIssue(issueId),
530
546
  listByIssueField: async (issueId, field) => core.fieldChanges.listByIssueField(issueId, field),
547
+ listByFieldSince: async (field, query) => core.fieldChanges.listByFieldSince(field, query),
531
548
  create: async (values) => core.fieldChanges.create(values)
532
549
  },
533
550
  pullRequests: {
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_migrations_path = require("../migrations-path-DBCE17dT.cjs");
3
- const require_roles_sql = require("../roles.sql-E58x7mLS.cjs");
3
+ const require_roles_sql = require("../roles.sql-BC7k_zPh.cjs");
4
4
  let drizzle_orm = require("drizzle-orm");
5
5
  let drizzle_orm_postgres_js_migrator = require("drizzle-orm/postgres-js/migrator");
6
6
  let drizzle_orm_pglite_migrator = require("drizzle-orm/pglite/migrator");
@@ -1,4 +1,4 @@
1
- import { c as BoardStore } from "../board-store-Dx-mw2I6.cjs";
1
+ import { l as BoardStore } from "../board-store-CsyBXBwH.cjs";
2
2
  import { t as BOARD_SCHEMA_EPOCH } from "../schema-epoch-ZyumVL_A.cjs";
3
3
  import { PgDatabase, PgQueryResultHKT } from "drizzle-orm/pg-core";
4
4
  import { PgliteDatabase } from "drizzle-orm/pglite";
@@ -297,6 +297,40 @@ export declare const issueStatuses: import("drizzle-orm/pg-core").PgTableWithCol
297
297
  identity: undefined;
298
298
  generated: undefined;
299
299
  }, {}, {}>;
300
+ allowedFrom: import("drizzle-orm/pg-core").PgColumn<{
301
+ name: "allowed_from";
302
+ tableName: "issue_statuses";
303
+ dataType: "string";
304
+ columnType: "PgText";
305
+ data: string;
306
+ driverParam: string;
307
+ notNull: false;
308
+ hasDefault: false;
309
+ isPrimaryKey: false;
310
+ isAutoincrement: false;
311
+ hasRuntimeDefault: false;
312
+ enumValues: [string, ...string[]];
313
+ baseColumn: never;
314
+ identity: undefined;
315
+ generated: undefined;
316
+ }, {}, {}>;
317
+ wipLimit: import("drizzle-orm/pg-core").PgColumn<{
318
+ name: "wip_limit";
319
+ tableName: "issue_statuses";
320
+ dataType: "number";
321
+ columnType: "PgInteger";
322
+ data: number;
323
+ driverParam: string | number;
324
+ notNull: false;
325
+ hasDefault: false;
326
+ isPrimaryKey: false;
327
+ isAutoincrement: false;
328
+ hasRuntimeDefault: false;
329
+ enumValues: undefined;
330
+ baseColumn: never;
331
+ identity: undefined;
332
+ generated: undefined;
333
+ }, {}, {}>;
300
334
  };
301
335
  dialect: 'pg';
302
336
  }>;
@@ -1840,6 +1874,40 @@ export declare const boardPostgresSchema: {
1840
1874
  identity: undefined;
1841
1875
  generated: undefined;
1842
1876
  }, {}, {}>;
1877
+ allowedFrom: import("drizzle-orm/pg-core").PgColumn<{
1878
+ name: "allowed_from";
1879
+ tableName: "issue_statuses";
1880
+ dataType: "string";
1881
+ columnType: "PgText";
1882
+ data: string;
1883
+ driverParam: string;
1884
+ notNull: false;
1885
+ hasDefault: false;
1886
+ isPrimaryKey: false;
1887
+ isAutoincrement: false;
1888
+ hasRuntimeDefault: false;
1889
+ enumValues: [string, ...string[]];
1890
+ baseColumn: never;
1891
+ identity: undefined;
1892
+ generated: undefined;
1893
+ }, {}, {}>;
1894
+ wipLimit: import("drizzle-orm/pg-core").PgColumn<{
1895
+ name: "wip_limit";
1896
+ tableName: "issue_statuses";
1897
+ dataType: "number";
1898
+ columnType: "PgInteger";
1899
+ data: number;
1900
+ driverParam: string | number;
1901
+ notNull: false;
1902
+ hasDefault: false;
1903
+ isPrimaryKey: false;
1904
+ isAutoincrement: false;
1905
+ hasRuntimeDefault: false;
1906
+ enumValues: undefined;
1907
+ baseColumn: never;
1908
+ identity: undefined;
1909
+ generated: undefined;
1910
+ }, {}, {}>;
1843
1911
  };
1844
1912
  dialect: 'pg';
1845
1913
  }>;
@@ -1,4 +1,4 @@
1
- import { c as BoardStore } from "../board-store-D_Mpfb84.mjs";
1
+ import { l as BoardStore } from "../board-store-BjhiH9TZ.mjs";
2
2
  import { t as BOARD_SCHEMA_EPOCH } from "../schema-epoch-ZyumVL_A.mjs";
3
3
  import { PgDatabase, PgQueryResultHKT } from "drizzle-orm/pg-core";
4
4
  import { PostgresJsDatabase } from "drizzle-orm/postgres-js";
@@ -297,6 +297,40 @@ export declare const issueStatuses: import("drizzle-orm/pg-core").PgTableWithCol
297
297
  identity: undefined;
298
298
  generated: undefined;
299
299
  }, {}, {}>;
300
+ allowedFrom: import("drizzle-orm/pg-core").PgColumn<{
301
+ name: "allowed_from";
302
+ tableName: "issue_statuses";
303
+ dataType: "string";
304
+ columnType: "PgText";
305
+ data: string;
306
+ driverParam: string;
307
+ notNull: false;
308
+ hasDefault: false;
309
+ isPrimaryKey: false;
310
+ isAutoincrement: false;
311
+ hasRuntimeDefault: false;
312
+ enumValues: [string, ...string[]];
313
+ baseColumn: never;
314
+ identity: undefined;
315
+ generated: undefined;
316
+ }, {}, {}>;
317
+ wipLimit: import("drizzle-orm/pg-core").PgColumn<{
318
+ name: "wip_limit";
319
+ tableName: "issue_statuses";
320
+ dataType: "number";
321
+ columnType: "PgInteger";
322
+ data: number;
323
+ driverParam: string | number;
324
+ notNull: false;
325
+ hasDefault: false;
326
+ isPrimaryKey: false;
327
+ isAutoincrement: false;
328
+ hasRuntimeDefault: false;
329
+ enumValues: undefined;
330
+ baseColumn: never;
331
+ identity: undefined;
332
+ generated: undefined;
333
+ }, {}, {}>;
300
334
  };
301
335
  dialect: 'pg';
302
336
  }>;
@@ -1840,6 +1874,40 @@ export declare const boardPostgresSchema: {
1840
1874
  identity: undefined;
1841
1875
  generated: undefined;
1842
1876
  }, {}, {}>;
1877
+ allowedFrom: import("drizzle-orm/pg-core").PgColumn<{
1878
+ name: "allowed_from";
1879
+ tableName: "issue_statuses";
1880
+ dataType: "string";
1881
+ columnType: "PgText";
1882
+ data: string;
1883
+ driverParam: string;
1884
+ notNull: false;
1885
+ hasDefault: false;
1886
+ isPrimaryKey: false;
1887
+ isAutoincrement: false;
1888
+ hasRuntimeDefault: false;
1889
+ enumValues: [string, ...string[]];
1890
+ baseColumn: never;
1891
+ identity: undefined;
1892
+ generated: undefined;
1893
+ }, {}, {}>;
1894
+ wipLimit: import("drizzle-orm/pg-core").PgColumn<{
1895
+ name: "wip_limit";
1896
+ tableName: "issue_statuses";
1897
+ dataType: "number";
1898
+ columnType: "PgInteger";
1899
+ data: number;
1900
+ driverParam: string | number;
1901
+ notNull: false;
1902
+ hasDefault: false;
1903
+ isPrimaryKey: false;
1904
+ isAutoincrement: false;
1905
+ hasRuntimeDefault: false;
1906
+ enumValues: undefined;
1907
+ baseColumn: never;
1908
+ identity: undefined;
1909
+ generated: undefined;
1910
+ }, {}, {}>;
1843
1911
  };
1844
1912
  dialect: 'pg';
1845
1913
  }>;
@@ -1,5 +1,5 @@
1
1
  import { r as BOARD_SCHEMA_EPOCH } from "../migrations-path-ClaYRNwk.mjs";
2
- import { _ as issueStatuses, a as BOARD_REFUSAL_ERRCODE, c as getBoardMigrationsPath, d as boardPostgresSchema, f as issueComments, g as issueRuns, h as issueRelations, i as BOARD_PERSON_ROLE, l as createPostgresBoardStore, m as issueMilestones, n as AGENT_WAITING_REFUSAL, o as BOARD_ROLE_SQL, p as issueFieldChanges, r as BOARD_AGENT_ROLE, s as assertBoardSchema, t as AGENT_APPROVAL_COMMENT_REFUSAL, u as BOARD_POSTGRES_TABLES, v as issues, y as kanbanMeta } from "../roles.sql-BoOZSkBp.mjs";
2
+ import { _ as issueStatuses, a as BOARD_REFUSAL_ERRCODE, c as getBoardMigrationsPath, d as boardPostgresSchema, f as issueComments, g as issueRuns, h as issueRelations, i as BOARD_PERSON_ROLE, l as createPostgresBoardStore, m as issueMilestones, n as AGENT_WAITING_REFUSAL, o as BOARD_ROLE_SQL, p as issueFieldChanges, r as BOARD_AGENT_ROLE, s as assertBoardSchema, t as AGENT_APPROVAL_COMMENT_REFUSAL, u as BOARD_POSTGRES_TABLES, v as issues, y as kanbanMeta } from "../roles.sql-9OkYvsNM.mjs";
3
3
  import { entityKind } from "drizzle-orm";
4
4
  import { migrate } from "drizzle-orm/postgres-js/migrator";
5
5
  import { migrate as migrate$1 } from "drizzle-orm/pglite/migrator";