opencode-swarm-plugin 0.30.3 → 0.30.5

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/bin/swarm.ts CHANGED
@@ -1709,7 +1709,8 @@ async function setup() {
1709
1709
 
1710
1710
  try {
1711
1711
  // Get swarm-mail database for this project
1712
- const targetDb = await getSwarmMail(cwd);
1712
+ const swarmMail = await getSwarmMail(cwd);
1713
+ const targetDb = await swarmMail.getDatabase(cwd);
1713
1714
  migrateSpinner.message("Migrating memories...");
1714
1715
 
1715
1716
  // Run migration with progress updates
@@ -1888,9 +1889,43 @@ async function setup() {
1888
1889
  process.exit(0);
1889
1890
  }
1890
1891
 
1892
+ // Lite model selection for simple tasks (docs, tests)
1893
+ const liteModel = await p.select({
1894
+ message: "Select lite model (for docs, tests, simple edits):",
1895
+ options: [
1896
+ {
1897
+ value: "anthropic/claude-haiku-4-5",
1898
+ label: "Claude Haiku 4.5",
1899
+ hint: "Fast and cost-effective (recommended)",
1900
+ },
1901
+ {
1902
+ value: "anthropic/claude-sonnet-4-5",
1903
+ label: "Claude Sonnet 4.5",
1904
+ hint: "More capable, slower",
1905
+ },
1906
+ {
1907
+ value: "openai/gpt-4o-mini",
1908
+ label: "GPT-4o Mini",
1909
+ hint: "Fast and cheap",
1910
+ },
1911
+ {
1912
+ value: "google/gemini-2.0-flash",
1913
+ label: "Gemini 2.0 Flash",
1914
+ hint: "Fast and capable",
1915
+ },
1916
+ ],
1917
+ initialValue: "anthropic/claude-haiku-4-5",
1918
+ });
1919
+
1920
+ if (p.isCancel(liteModel)) {
1921
+ p.cancel("Setup cancelled");
1922
+ process.exit(0);
1923
+ }
1924
+
1891
1925
  p.log.success("Selected models:");
1892
1926
  p.log.message(dim(` Coordinator: ${coordinatorModel}`));
1893
1927
  p.log.message(dim(` Worker: ${workerModel}`));
1928
+ p.log.message(dim(` Lite: ${liteModel}`));
1894
1929
 
1895
1930
  p.log.step("Setting up OpenCode integration...");
1896
1931
 
@@ -0,0 +1,386 @@
1
+ import { z } from "zod";
2
+ import { type BeadsAdapter } from "swarm-mail";
3
+ /**
4
+ * Set the working directory for all beads commands.
5
+ * Call this from the plugin initialization with the project directory.
6
+ *
7
+ * @param directory - Absolute path to the project directory
8
+ */
9
+ export declare function setBeadsWorkingDirectory(directory: string): void;
10
+ /**
11
+ * Get the current working directory for beads commands.
12
+ * Returns the configured directory or process.cwd() as fallback.
13
+ */
14
+ export declare function getBeadsWorkingDirectory(): string;
15
+ /**
16
+ * Custom error for bead operations
17
+ */
18
+ export declare class BeadError extends Error {
19
+ readonly command: string;
20
+ readonly exitCode?: number | undefined;
21
+ readonly stderr?: string | undefined;
22
+ constructor(message: string, command: string, exitCode?: number | undefined, stderr?: string | undefined);
23
+ }
24
+ /**
25
+ * Custom error for validation failures
26
+ */
27
+ export declare class BeadValidationError extends Error {
28
+ readonly zodError: z.ZodError;
29
+ constructor(message: string, zodError: z.ZodError);
30
+ }
31
+ /**
32
+ * Get or create a BeadsAdapter instance for a project
33
+ * Exported for testing - allows tests to verify state directly
34
+ *
35
+ * On first initialization, checks for .beads/issues.jsonl and imports
36
+ * historical beads if the database is empty.
37
+ */
38
+ export declare function getBeadsAdapter(projectKey: string): Promise<BeadsAdapter>;
39
+ /**
40
+ * Create a new bead with type-safe validation
41
+ */
42
+ export declare const beads_create: {
43
+ description: string;
44
+ args: {
45
+ title: z.ZodString;
46
+ type: z.ZodOptional<z.ZodEnum<{
47
+ bug: "bug";
48
+ feature: "feature";
49
+ task: "task";
50
+ epic: "epic";
51
+ chore: "chore";
52
+ }>>;
53
+ priority: z.ZodOptional<z.ZodNumber>;
54
+ description: z.ZodOptional<z.ZodString>;
55
+ parent_id: z.ZodOptional<z.ZodString>;
56
+ };
57
+ execute(args: {
58
+ title: string;
59
+ type?: "bug" | "feature" | "task" | "epic" | "chore" | undefined;
60
+ priority?: number | undefined;
61
+ description?: string | undefined;
62
+ parent_id?: string | undefined;
63
+ }, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
64
+ };
65
+ /**
66
+ * Create an epic with subtasks in one atomic operation
67
+ */
68
+ export declare const beads_create_epic: {
69
+ description: string;
70
+ args: {
71
+ epic_title: z.ZodString;
72
+ epic_description: z.ZodOptional<z.ZodString>;
73
+ epic_id: z.ZodOptional<z.ZodString>;
74
+ subtasks: z.ZodArray<z.ZodObject<{
75
+ title: z.ZodString;
76
+ priority: z.ZodOptional<z.ZodNumber>;
77
+ files: z.ZodOptional<z.ZodArray<z.ZodString>>;
78
+ id_suffix: z.ZodOptional<z.ZodString>;
79
+ }, z.core.$strip>>;
80
+ strategy: z.ZodOptional<z.ZodEnum<{
81
+ "file-based": "file-based";
82
+ "feature-based": "feature-based";
83
+ "risk-based": "risk-based";
84
+ }>>;
85
+ task: z.ZodOptional<z.ZodString>;
86
+ project_key: z.ZodOptional<z.ZodString>;
87
+ recovery_context: z.ZodOptional<z.ZodObject<{
88
+ shared_context: z.ZodOptional<z.ZodString>;
89
+ skills_to_load: z.ZodOptional<z.ZodArray<z.ZodString>>;
90
+ coordinator_notes: z.ZodOptional<z.ZodString>;
91
+ }, z.core.$strip>>;
92
+ };
93
+ execute(args: {
94
+ epic_title: string;
95
+ subtasks: {
96
+ title: string;
97
+ priority?: number | undefined;
98
+ files?: string[] | undefined;
99
+ id_suffix?: string | undefined;
100
+ }[];
101
+ epic_description?: string | undefined;
102
+ epic_id?: string | undefined;
103
+ strategy?: "file-based" | "feature-based" | "risk-based" | undefined;
104
+ task?: string | undefined;
105
+ project_key?: string | undefined;
106
+ recovery_context?: {
107
+ shared_context?: string | undefined;
108
+ skills_to_load?: string[] | undefined;
109
+ coordinator_notes?: string | undefined;
110
+ } | undefined;
111
+ }, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
112
+ };
113
+ /**
114
+ * Query beads with filters
115
+ */
116
+ export declare const beads_query: {
117
+ description: string;
118
+ args: {
119
+ status: z.ZodOptional<z.ZodEnum<{
120
+ open: "open";
121
+ in_progress: "in_progress";
122
+ blocked: "blocked";
123
+ closed: "closed";
124
+ }>>;
125
+ type: z.ZodOptional<z.ZodEnum<{
126
+ bug: "bug";
127
+ feature: "feature";
128
+ task: "task";
129
+ epic: "epic";
130
+ chore: "chore";
131
+ }>>;
132
+ ready: z.ZodOptional<z.ZodBoolean>;
133
+ limit: z.ZodOptional<z.ZodNumber>;
134
+ };
135
+ execute(args: {
136
+ status?: "open" | "in_progress" | "blocked" | "closed" | undefined;
137
+ type?: "bug" | "feature" | "task" | "epic" | "chore" | undefined;
138
+ ready?: boolean | undefined;
139
+ limit?: number | undefined;
140
+ }, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
141
+ };
142
+ /**
143
+ * Update a bead's status or description
144
+ */
145
+ export declare const beads_update: {
146
+ description: string;
147
+ args: {
148
+ id: z.ZodString;
149
+ status: z.ZodOptional<z.ZodEnum<{
150
+ open: "open";
151
+ in_progress: "in_progress";
152
+ blocked: "blocked";
153
+ closed: "closed";
154
+ }>>;
155
+ description: z.ZodOptional<z.ZodString>;
156
+ priority: z.ZodOptional<z.ZodNumber>;
157
+ };
158
+ execute(args: {
159
+ id: string;
160
+ status?: "open" | "in_progress" | "blocked" | "closed" | undefined;
161
+ description?: string | undefined;
162
+ priority?: number | undefined;
163
+ }, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
164
+ };
165
+ /**
166
+ * Close a bead with reason
167
+ */
168
+ export declare const beads_close: {
169
+ description: string;
170
+ args: {
171
+ id: z.ZodString;
172
+ reason: z.ZodString;
173
+ };
174
+ execute(args: {
175
+ id: string;
176
+ reason: string;
177
+ }, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
178
+ };
179
+ /**
180
+ * Mark a bead as in-progress
181
+ */
182
+ export declare const beads_start: {
183
+ description: string;
184
+ args: {
185
+ id: z.ZodString;
186
+ };
187
+ execute(args: {
188
+ id: string;
189
+ }, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
190
+ };
191
+ /**
192
+ * Get the next ready bead
193
+ */
194
+ export declare const beads_ready: {
195
+ description: string;
196
+ args: {};
197
+ execute(args: Record<string, never>, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
198
+ };
199
+ /**
200
+ * Sync beads to git and push
201
+ */
202
+ export declare const beads_sync: {
203
+ description: string;
204
+ args: {
205
+ auto_pull: z.ZodOptional<z.ZodBoolean>;
206
+ };
207
+ execute(args: {
208
+ auto_pull?: boolean | undefined;
209
+ }, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
210
+ };
211
+ /**
212
+ * Link a bead to an Agent Mail thread
213
+ */
214
+ export declare const beads_link_thread: {
215
+ description: string;
216
+ args: {
217
+ bead_id: z.ZodString;
218
+ thread_id: z.ZodString;
219
+ };
220
+ execute(args: {
221
+ bead_id: string;
222
+ thread_id: string;
223
+ }, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
224
+ };
225
+ export declare const beadsTools: {
226
+ beads_create: {
227
+ description: string;
228
+ args: {
229
+ title: z.ZodString;
230
+ type: z.ZodOptional<z.ZodEnum<{
231
+ bug: "bug";
232
+ feature: "feature";
233
+ task: "task";
234
+ epic: "epic";
235
+ chore: "chore";
236
+ }>>;
237
+ priority: z.ZodOptional<z.ZodNumber>;
238
+ description: z.ZodOptional<z.ZodString>;
239
+ parent_id: z.ZodOptional<z.ZodString>;
240
+ };
241
+ execute(args: {
242
+ title: string;
243
+ type?: "bug" | "feature" | "task" | "epic" | "chore" | undefined;
244
+ priority?: number | undefined;
245
+ description?: string | undefined;
246
+ parent_id?: string | undefined;
247
+ }, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
248
+ };
249
+ beads_create_epic: {
250
+ description: string;
251
+ args: {
252
+ epic_title: z.ZodString;
253
+ epic_description: z.ZodOptional<z.ZodString>;
254
+ epic_id: z.ZodOptional<z.ZodString>;
255
+ subtasks: z.ZodArray<z.ZodObject<{
256
+ title: z.ZodString;
257
+ priority: z.ZodOptional<z.ZodNumber>;
258
+ files: z.ZodOptional<z.ZodArray<z.ZodString>>;
259
+ id_suffix: z.ZodOptional<z.ZodString>;
260
+ }, z.core.$strip>>;
261
+ strategy: z.ZodOptional<z.ZodEnum<{
262
+ "file-based": "file-based";
263
+ "feature-based": "feature-based";
264
+ "risk-based": "risk-based";
265
+ }>>;
266
+ task: z.ZodOptional<z.ZodString>;
267
+ project_key: z.ZodOptional<z.ZodString>;
268
+ recovery_context: z.ZodOptional<z.ZodObject<{
269
+ shared_context: z.ZodOptional<z.ZodString>;
270
+ skills_to_load: z.ZodOptional<z.ZodArray<z.ZodString>>;
271
+ coordinator_notes: z.ZodOptional<z.ZodString>;
272
+ }, z.core.$strip>>;
273
+ };
274
+ execute(args: {
275
+ epic_title: string;
276
+ subtasks: {
277
+ title: string;
278
+ priority?: number | undefined;
279
+ files?: string[] | undefined;
280
+ id_suffix?: string | undefined;
281
+ }[];
282
+ epic_description?: string | undefined;
283
+ epic_id?: string | undefined;
284
+ strategy?: "file-based" | "feature-based" | "risk-based" | undefined;
285
+ task?: string | undefined;
286
+ project_key?: string | undefined;
287
+ recovery_context?: {
288
+ shared_context?: string | undefined;
289
+ skills_to_load?: string[] | undefined;
290
+ coordinator_notes?: string | undefined;
291
+ } | undefined;
292
+ }, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
293
+ };
294
+ beads_query: {
295
+ description: string;
296
+ args: {
297
+ status: z.ZodOptional<z.ZodEnum<{
298
+ open: "open";
299
+ in_progress: "in_progress";
300
+ blocked: "blocked";
301
+ closed: "closed";
302
+ }>>;
303
+ type: z.ZodOptional<z.ZodEnum<{
304
+ bug: "bug";
305
+ feature: "feature";
306
+ task: "task";
307
+ epic: "epic";
308
+ chore: "chore";
309
+ }>>;
310
+ ready: z.ZodOptional<z.ZodBoolean>;
311
+ limit: z.ZodOptional<z.ZodNumber>;
312
+ };
313
+ execute(args: {
314
+ status?: "open" | "in_progress" | "blocked" | "closed" | undefined;
315
+ type?: "bug" | "feature" | "task" | "epic" | "chore" | undefined;
316
+ ready?: boolean | undefined;
317
+ limit?: number | undefined;
318
+ }, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
319
+ };
320
+ beads_update: {
321
+ description: string;
322
+ args: {
323
+ id: z.ZodString;
324
+ status: z.ZodOptional<z.ZodEnum<{
325
+ open: "open";
326
+ in_progress: "in_progress";
327
+ blocked: "blocked";
328
+ closed: "closed";
329
+ }>>;
330
+ description: z.ZodOptional<z.ZodString>;
331
+ priority: z.ZodOptional<z.ZodNumber>;
332
+ };
333
+ execute(args: {
334
+ id: string;
335
+ status?: "open" | "in_progress" | "blocked" | "closed" | undefined;
336
+ description?: string | undefined;
337
+ priority?: number | undefined;
338
+ }, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
339
+ };
340
+ beads_close: {
341
+ description: string;
342
+ args: {
343
+ id: z.ZodString;
344
+ reason: z.ZodString;
345
+ };
346
+ execute(args: {
347
+ id: string;
348
+ reason: string;
349
+ }, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
350
+ };
351
+ beads_start: {
352
+ description: string;
353
+ args: {
354
+ id: z.ZodString;
355
+ };
356
+ execute(args: {
357
+ id: string;
358
+ }, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
359
+ };
360
+ beads_ready: {
361
+ description: string;
362
+ args: {};
363
+ execute(args: Record<string, never>, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
364
+ };
365
+ beads_sync: {
366
+ description: string;
367
+ args: {
368
+ auto_pull: z.ZodOptional<z.ZodBoolean>;
369
+ };
370
+ execute(args: {
371
+ auto_pull?: boolean | undefined;
372
+ }, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
373
+ };
374
+ beads_link_thread: {
375
+ description: string;
376
+ args: {
377
+ bead_id: z.ZodString;
378
+ thread_id: z.ZodString;
379
+ };
380
+ execute(args: {
381
+ bead_id: string;
382
+ thread_id: string;
383
+ }, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
384
+ };
385
+ };
386
+ //# sourceMappingURL=beads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beads.d.ts","sourceRoot":"","sources":["../src/beads.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAIL,KAAK,YAAY,EAGlB,MAAM,YAAY,CAAC;AAepB;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEhE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAuCD;;GAEG;AACH,qBAAa,SAAU,SAAQ,KAAK;aAGhB,OAAO,EAAE,MAAM;aACf,QAAQ,CAAC,EAAE,MAAM;aACjB,MAAM,CAAC,EAAE,MAAM;gBAH/B,OAAO,EAAE,MAAM,EACC,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,YAAA,EACjB,MAAM,CAAC,EAAE,MAAM,YAAA;CAKlC;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;aAG1B,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBADpC,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,CAAC,CAAC,QAAQ;CAKvC;AAYD;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAiB/E;AA+ED;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;CA+CvB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgJ5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;CAiDtB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;CA+DvB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;CA6BtB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;CA4BtB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW;;;;CAwBtB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;CAqIrB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;CA8C5B,CAAC;AAMH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUtB,CAAC"}
package/dist/index.js CHANGED
@@ -16973,7 +16973,7 @@ WD9f
16973
16973
 
16974
16974
  // ../../node_modules/.bun/ioredis@5.8.2/node_modules/ioredis/built/utils/index.js
16975
16975
  var require_utils2 = __commonJS((exports) => {
16976
- var __dirname = "/home/runner/work/swarm-tools/swarm-tools/node_modules/.bun/ioredis@5.8.2/node_modules/ioredis/built/utils";
16976
+ var __dirname = "/Users/joel/Code/joelhooks/opencode-swarm-plugin/node_modules/.bun/ioredis@5.8.2/node_modules/ioredis/built/utils";
16977
16977
  Object.defineProperty(exports, "__esModule", { value: true });
16978
16978
  exports.noop = exports.defaults = exports.Debug = exports.getPackageMeta = exports.zipMap = exports.CONNECTION_CLOSED_ERROR_MSG = exports.shuffle = exports.sample = exports.resolveTLSProfile = exports.parseURL = exports.optimizeErrorStack = exports.toArg = exports.convertMapToArray = exports.convertObjectToArray = exports.timeout = exports.packObject = exports.isInt = exports.wrapMultiResult = exports.convertBufferToString = undefined;
16979
16979
  var fs_1 = __require("fs");
@@ -17203,7 +17203,7 @@ var require_utils2 = __commonJS((exports) => {
17203
17203
 
17204
17204
  // ../../node_modules/.bun/ioredis@5.8.2/node_modules/ioredis/built/Command.js
17205
17205
  var require_Command = __commonJS((exports) => {
17206
- var __dirname = "/home/runner/work/swarm-tools/swarm-tools/node_modules/.bun/ioredis@5.8.2/node_modules/ioredis/built";
17206
+ var __dirname = "/Users/joel/Code/joelhooks/opencode-swarm-plugin/node_modules/.bun/ioredis@5.8.2/node_modules/ioredis/built";
17207
17207
  Object.defineProperty(exports, "__esModule", { value: true });
17208
17208
  var commands_1 = require_built();
17209
17209
  var calculateSlot = require_lib();
package/dist/plugin.js CHANGED
@@ -16973,7 +16973,7 @@ WD9f
16973
16973
 
16974
16974
  // ../../node_modules/.bun/ioredis@5.8.2/node_modules/ioredis/built/utils/index.js
16975
16975
  var require_utils2 = __commonJS((exports) => {
16976
- var __dirname = "/home/runner/work/swarm-tools/swarm-tools/node_modules/.bun/ioredis@5.8.2/node_modules/ioredis/built/utils";
16976
+ var __dirname = "/Users/joel/Code/joelhooks/opencode-swarm-plugin/node_modules/.bun/ioredis@5.8.2/node_modules/ioredis/built/utils";
16977
16977
  Object.defineProperty(exports, "__esModule", { value: true });
16978
16978
  exports.noop = exports.defaults = exports.Debug = exports.getPackageMeta = exports.zipMap = exports.CONNECTION_CLOSED_ERROR_MSG = exports.shuffle = exports.sample = exports.resolveTLSProfile = exports.parseURL = exports.optimizeErrorStack = exports.toArg = exports.convertMapToArray = exports.convertObjectToArray = exports.timeout = exports.packObject = exports.isInt = exports.wrapMultiResult = exports.convertBufferToString = undefined;
16979
16979
  var fs_1 = __require("fs");
@@ -17203,7 +17203,7 @@ var require_utils2 = __commonJS((exports) => {
17203
17203
 
17204
17204
  // ../../node_modules/.bun/ioredis@5.8.2/node_modules/ioredis/built/Command.js
17205
17205
  var require_Command = __commonJS((exports) => {
17206
- var __dirname = "/home/runner/work/swarm-tools/swarm-tools/node_modules/.bun/ioredis@5.8.2/node_modules/ioredis/built";
17206
+ var __dirname = "/Users/joel/Code/joelhooks/opencode-swarm-plugin/node_modules/.bun/ioredis@5.8.2/node_modules/ioredis/built";
17207
17207
  Object.defineProperty(exports, "__esModule", { value: true });
17208
17208
  var commands_1 = require_built();
17209
17209
  var calculateSlot = require_lib();