daedalus-cli 1.66.0 → 1.66.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/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [1.66.2](https://github.com/bgill55/daedalus/compare/v1.66.1...v1.66.2) (2026-07-25)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **reviewer:** add TYPE LOCATION and DEFENSIVE GUARDS & ASCII audit rules to reviewer prompt ([7058c7d](https://github.com/bgill55/daedalus/commit/7058c7dfc0ee9f28acc7fe312d2c9d6e8183d1b0))
7
+
8
+ ## [1.66.1](https://github.com/bgill55/daedalus/compare/v1.66.0...v1.66.1) (2026-07-25)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **ci:** respect .gitignore for src/bot.ts and exclude from build ([d7f2718](https://github.com/bgill55/daedalus/commit/d7f271866c48d37ed1fe75374a3d27cb30a60c30))
14
+
1
15
  # [1.66.0](https://github.com/bgill55/daedalus/compare/v1.65.1...v1.66.0) (2026-07-25)
2
16
 
3
17
 
@@ -1 +1 @@
1
- {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../src/agents/roles.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAwOjD,CAAC;AAGF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAEpD;AAGD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE,CAI9F;AAGD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAaxF"}
1
+ {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../src/agents/roles.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CA0OjD,CAAC;AAGF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAEpD;AAGD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE,CAI9F;AAGD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAaxF"}
@@ -157,6 +157,8 @@ REVIEW CHECKLIST (check ALL of these):
157
157
  7. PERFORMANCE: Are there unnecessary re-renders? Are large lists virtualized? Are images optimized?
158
158
  8. CONSISTENCY: Does the code style match existing files in the same directory?
159
159
  9. SPECIFICATION COMPLETENESS: Check if the specification issue requested multiple entry points or interfaces (e.g., both CLI REPL and Discord slash commands). Ensure ALL specified entry points and files mentioned in the spec are implemented!
160
+ 10. TYPE LOCATION: Ensure all new TypeScript interfaces and shared types are declared in src/types.ts per AGENTS.md conventions, not fragmented in sub-modules.
161
+ 11. DEFENSIVE GUARDS & ASCII: Verify helper functions handle null, undefined, and empty string "" cleanly. Ensure output text uses standard ASCII characters (e.g. standard hyphen - instead of unicode non-breaking hyphens \u2011).
160
162
 
161
163
  OUTPUT FORMAT:
162
164
  STATUS: PASS | NEEDS_FIX | STOP
@@ -1 +1 @@
1
- {"version":3,"file":"roles.js","sourceRoot":"","sources":["../../src/agents/roles.ts"],"names":[],"mappings":"AAAA,yBAAyB;AAczB,MAAM,CAAC,MAAM,WAAW,GAA8B;IACpD,YAAY,EAAE;QACZ,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,yDAAyD;QACtE,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;uGAwBqF;QACnG,YAAY,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;QAClI,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,GAAG;KACjB;IAED,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,yDAAyD;QACtE,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yGA2CuF;QACrG,YAAY,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;QAClI,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,GAAG;KACjB;IAED,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,oDAAoD;QACjE,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4MA2C0L;QACxM,YAAY,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;QAC9M,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,GAAG;QAChB,QAAQ,EAAE,EAAE;KACb;IAED,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,kEAAkE;QAC/E,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;yCAyBuB;QACrC,YAAY,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;QAC1J,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,GAAG;QAChB,QAAQ,EAAE,CAAC;KACZ;IAED,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,sCAAsC;QACnD,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0HA8BwG;QACtH,YAAY,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;QACnM,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,GAAG;KACjB;IAED,UAAU,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,oDAAoD;QACjE,YAAY,EAAE;;;;;;;;;;0KAUwJ;QACtK,YAAY,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,CAAC;QAC5F,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,GAAG;QAChB,QAAQ,EAAE,CAAC;KACZ;CACF,CAAC;AAEF,2CAA2C;AAC3C,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC;AAChD,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,kBAAkB,CAAC,KAAuB,EAAE,QAAgB;IAC1E,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAClD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;IACtF,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACtD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5C,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACnC,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,SAAS,IAAI,KAAK;SAC/B,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"roles.js","sourceRoot":"","sources":["../../src/agents/roles.ts"],"names":[],"mappings":"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"}
@@ -11,10 +11,10 @@ export declare const ModelEntrySchema: z.ZodObject<{
11
11
  supportsVision: z.ZodOptional<z.ZodBoolean>;
12
12
  tier: z.ZodOptional<z.ZodDefault<z.ZodEnum<["standard", "fast", "intelligence"]>>>;
13
13
  }, "strip", z.ZodTypeAny, {
14
- priority: number;
15
- model: string;
16
14
  name: string;
17
15
  endpoint: string;
16
+ model: string;
17
+ priority: number;
18
18
  enabled: boolean;
19
19
  apiKey?: string | undefined;
20
20
  maxTokens?: number | undefined;
@@ -22,10 +22,10 @@ export declare const ModelEntrySchema: z.ZodObject<{
22
22
  supportsVision?: boolean | undefined;
23
23
  tier?: "standard" | "fast" | "intelligence" | undefined;
24
24
  }, {
25
- priority: number;
26
- model: string;
27
25
  name: string;
28
26
  endpoint: string;
27
+ model: string;
28
+ priority: number;
29
29
  enabled: boolean;
30
30
  apiKey?: string | undefined;
31
31
  maxTokens?: number | undefined;
@@ -47,10 +47,10 @@ export declare const RouterConfigSchema: z.ZodObject<{
47
47
  supportsVision: z.ZodOptional<z.ZodBoolean>;
48
48
  tier: z.ZodOptional<z.ZodDefault<z.ZodEnum<["standard", "fast", "intelligence"]>>>;
49
49
  }, "strip", z.ZodTypeAny, {
50
- priority: number;
51
- model: string;
52
50
  name: string;
53
51
  endpoint: string;
52
+ model: string;
53
+ priority: number;
54
54
  enabled: boolean;
55
55
  apiKey?: string | undefined;
56
56
  maxTokens?: number | undefined;
@@ -58,10 +58,10 @@ export declare const RouterConfigSchema: z.ZodObject<{
58
58
  supportsVision?: boolean | undefined;
59
59
  tier?: "standard" | "fast" | "intelligence" | undefined;
60
60
  }, {
61
- priority: number;
62
- model: string;
63
61
  name: string;
64
62
  endpoint: string;
63
+ model: string;
64
+ priority: number;
65
65
  enabled: boolean;
66
66
  apiKey?: string | undefined;
67
67
  maxTokens?: number | undefined;
@@ -84,10 +84,10 @@ export declare const RouterConfigSchema: z.ZodObject<{
84
84
  }, "strip", z.ZodTypeAny, {
85
85
  strategy: "priority" | "round-robin" | "fastest";
86
86
  chain: {
87
- priority: number;
88
- model: string;
89
87
  name: string;
90
88
  endpoint: string;
89
+ model: string;
90
+ priority: number;
91
91
  enabled: boolean;
92
92
  apiKey?: string | undefined;
93
93
  maxTokens?: number | undefined;
@@ -104,10 +104,10 @@ export declare const RouterConfigSchema: z.ZodObject<{
104
104
  }, {
105
105
  strategy?: "priority" | "round-robin" | "fastest" | undefined;
106
106
  chain?: {
107
- priority: number;
108
- model: string;
109
107
  name: string;
110
108
  endpoint: string;
109
+ model: string;
110
+ priority: number;
111
111
  enabled: boolean;
112
112
  apiKey?: string | undefined;
113
113
  maxTokens?: number | undefined;
@@ -136,16 +136,16 @@ export declare const AgentRoleSchema: z.ZodObject<{
136
136
  systemPrompt: string;
137
137
  allowedTools: string[];
138
138
  canDelegate: boolean;
139
- temperature?: number | undefined;
140
139
  maxTurns?: number | undefined;
140
+ temperature?: number | undefined;
141
141
  }, {
142
142
  name: string;
143
143
  description: string;
144
144
  systemPrompt: string;
145
145
  allowedTools: string[];
146
146
  canDelegate: boolean;
147
- temperature?: number | undefined;
148
147
  maxTurns?: number | undefined;
148
+ temperature?: number | undefined;
149
149
  }>;
150
150
  export declare const ConfigSchema: z.ZodObject<{
151
151
  version: z.ZodDefault<z.ZodNumber>;
@@ -163,10 +163,10 @@ export declare const ConfigSchema: z.ZodObject<{
163
163
  supportsVision: z.ZodOptional<z.ZodBoolean>;
164
164
  tier: z.ZodOptional<z.ZodDefault<z.ZodEnum<["standard", "fast", "intelligence"]>>>;
165
165
  }, "strip", z.ZodTypeAny, {
166
- priority: number;
167
- model: string;
168
166
  name: string;
169
167
  endpoint: string;
168
+ model: string;
169
+ priority: number;
170
170
  enabled: boolean;
171
171
  apiKey?: string | undefined;
172
172
  maxTokens?: number | undefined;
@@ -174,10 +174,10 @@ export declare const ConfigSchema: z.ZodObject<{
174
174
  supportsVision?: boolean | undefined;
175
175
  tier?: "standard" | "fast" | "intelligence" | undefined;
176
176
  }, {
177
- priority: number;
178
- model: string;
179
177
  name: string;
180
178
  endpoint: string;
179
+ model: string;
180
+ priority: number;
181
181
  enabled: boolean;
182
182
  apiKey?: string | undefined;
183
183
  maxTokens?: number | undefined;
@@ -200,10 +200,10 @@ export declare const ConfigSchema: z.ZodObject<{
200
200
  }, "strip", z.ZodTypeAny, {
201
201
  strategy: "priority" | "round-robin" | "fastest";
202
202
  chain: {
203
- priority: number;
204
- model: string;
205
203
  name: string;
206
204
  endpoint: string;
205
+ model: string;
206
+ priority: number;
207
207
  enabled: boolean;
208
208
  apiKey?: string | undefined;
209
209
  maxTokens?: number | undefined;
@@ -220,10 +220,10 @@ export declare const ConfigSchema: z.ZodObject<{
220
220
  }, {
221
221
  strategy?: "priority" | "round-robin" | "fastest" | undefined;
222
222
  chain?: {
223
- priority: number;
224
- model: string;
225
223
  name: string;
226
224
  endpoint: string;
225
+ model: string;
226
+ priority: number;
227
227
  enabled: boolean;
228
228
  apiKey?: string | undefined;
229
229
  maxTokens?: number | undefined;
@@ -294,19 +294,19 @@ export declare const ConfigSchema: z.ZodObject<{
294
294
  headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
295
295
  enabled: z.ZodDefault<z.ZodBoolean>;
296
296
  }, "strip", z.ZodTypeAny, {
297
- enabled: boolean;
298
297
  transport: "stdio" | "http";
299
- headers?: Record<string, string> | undefined;
298
+ enabled: boolean;
300
299
  command?: string | undefined;
301
- args?: string[] | undefined;
302
300
  url?: string | undefined;
301
+ args?: string[] | undefined;
302
+ headers?: Record<string, string> | undefined;
303
303
  }, {
304
304
  transport: "stdio" | "http";
305
- headers?: Record<string, string> | undefined;
306
- enabled?: boolean | undefined;
307
305
  command?: string | undefined;
308
- args?: string[] | undefined;
309
306
  url?: string | undefined;
307
+ enabled?: boolean | undefined;
308
+ args?: string[] | undefined;
309
+ headers?: Record<string, string> | undefined;
310
310
  }>>>;
311
311
  shell: z.ZodOptional<z.ZodString>;
312
312
  sandbox: z.ZodDefault<z.ZodEnum<["none", "docker", "wsl"]>>;
@@ -315,12 +315,12 @@ export declare const ConfigSchema: z.ZodObject<{
315
315
  }, "strip", z.ZodTypeAny, {
316
316
  builtin: string[];
317
317
  mcpServers: Record<string, {
318
- enabled: boolean;
319
318
  transport: "stdio" | "http";
320
- headers?: Record<string, string> | undefined;
319
+ enabled: boolean;
321
320
  command?: string | undefined;
322
- args?: string[] | undefined;
323
321
  url?: string | undefined;
322
+ args?: string[] | undefined;
323
+ headers?: Record<string, string> | undefined;
324
324
  }>;
325
325
  sandbox: "none" | "docker" | "wsl";
326
326
  sandboxImage: string;
@@ -330,11 +330,11 @@ export declare const ConfigSchema: z.ZodObject<{
330
330
  builtin?: string[] | undefined;
331
331
  mcpServers?: Record<string, {
332
332
  transport: "stdio" | "http";
333
- headers?: Record<string, string> | undefined;
334
- enabled?: boolean | undefined;
335
333
  command?: string | undefined;
336
- args?: string[] | undefined;
337
334
  url?: string | undefined;
335
+ enabled?: boolean | undefined;
336
+ args?: string[] | undefined;
337
+ headers?: Record<string, string> | undefined;
338
338
  }> | undefined;
339
339
  shell?: string | undefined;
340
340
  sandbox?: "none" | "docker" | "wsl" | undefined;
@@ -350,17 +350,17 @@ export declare const ConfigSchema: z.ZodObject<{
350
350
  defaultSteps: z.ZodDefault<z.ZodNumber>;
351
351
  outputDir: z.ZodDefault<z.ZodString>;
352
352
  }, "strip", z.ZodTypeAny, {
353
+ provider: "auto" | "sd-webui" | "pollinations";
353
354
  endpoint: string;
354
355
  enabled: boolean;
355
- provider: "auto" | "sd-webui" | "pollinations";
356
356
  defaultWidth: number;
357
357
  defaultHeight: number;
358
358
  defaultSteps: number;
359
359
  outputDir: string;
360
360
  }, {
361
+ provider?: "auto" | "sd-webui" | "pollinations" | undefined;
361
362
  endpoint?: string | undefined;
362
363
  enabled?: boolean | undefined;
363
- provider?: "auto" | "sd-webui" | "pollinations" | undefined;
364
364
  defaultWidth?: number | undefined;
365
365
  defaultHeight?: number | undefined;
366
366
  defaultSteps?: number | undefined;
@@ -388,15 +388,15 @@ export declare const ConfigSchema: z.ZodObject<{
388
388
  languages: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
389
389
  exclude: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
390
390
  }, "strip", z.ZodTypeAny, {
391
+ exclude: string[];
391
392
  enabled: boolean;
392
393
  watch: boolean;
393
394
  languages: string[];
394
- exclude: string[];
395
395
  }, {
396
+ exclude?: string[] | undefined;
396
397
  enabled?: boolean | undefined;
397
398
  watch?: boolean | undefined;
398
399
  languages?: string[] | undefined;
399
- exclude?: string[] | undefined;
400
400
  }>>;
401
401
  updateCheck: z.ZodDefault<z.ZodBoolean>;
402
402
  session: z.ZodDefault<z.ZodObject<{
@@ -448,10 +448,10 @@ export declare const ConfigSchema: z.ZodObject<{
448
448
  router: {
449
449
  strategy: "priority" | "round-robin" | "fastest";
450
450
  chain: {
451
- priority: number;
452
- model: string;
453
451
  name: string;
454
452
  endpoint: string;
453
+ model: string;
454
+ priority: number;
455
455
  enabled: boolean;
456
456
  apiKey?: string | undefined;
457
457
  maxTokens?: number | undefined;
@@ -466,20 +466,11 @@ export declare const ConfigSchema: z.ZodObject<{
466
466
  tpm: number;
467
467
  };
468
468
  };
469
- tools: {
470
- builtin: string[];
471
- mcpServers: Record<string, {
472
- enabled: boolean;
473
- transport: "stdio" | "http";
474
- headers?: Record<string, string> | undefined;
475
- command?: string | undefined;
476
- args?: string[] | undefined;
477
- url?: string | undefined;
478
- }>;
479
- sandbox: "none" | "docker" | "wsl";
480
- sandboxImage: string;
481
- shell?: string | undefined;
482
- wslDistribution?: string | undefined;
469
+ context: {
470
+ maxTokens: number;
471
+ summarizeAt: number;
472
+ includeGitDiff: boolean;
473
+ includeIndex: boolean;
483
474
  };
484
475
  version: number;
485
476
  agents: {
@@ -494,26 +485,35 @@ export declare const ConfigSchema: z.ZodObject<{
494
485
  candidatesCount: number;
495
486
  };
496
487
  };
488
+ tools: {
489
+ builtin: string[];
490
+ mcpServers: Record<string, {
491
+ transport: "stdio" | "http";
492
+ enabled: boolean;
493
+ command?: string | undefined;
494
+ url?: string | undefined;
495
+ args?: string[] | undefined;
496
+ headers?: Record<string, string> | undefined;
497
+ }>;
498
+ sandbox: "none" | "docker" | "wsl";
499
+ sandboxImage: string;
500
+ shell?: string | undefined;
501
+ wslDistribution?: string | undefined;
502
+ };
497
503
  imageGen: {
504
+ provider: "auto" | "sd-webui" | "pollinations";
498
505
  endpoint: string;
499
506
  enabled: boolean;
500
- provider: "auto" | "sd-webui" | "pollinations";
501
507
  defaultWidth: number;
502
508
  defaultHeight: number;
503
509
  defaultSteps: number;
504
510
  outputDir: string;
505
511
  };
506
- context: {
507
- maxTokens: number;
508
- summarizeAt: number;
509
- includeGitDiff: boolean;
510
- includeIndex: boolean;
511
- };
512
512
  indexing: {
513
+ exclude: string[];
513
514
  enabled: boolean;
514
515
  watch: boolean;
515
516
  languages: string[];
516
- exclude: string[];
517
517
  };
518
518
  updateCheck: boolean;
519
519
  session: {
@@ -537,10 +537,10 @@ export declare const ConfigSchema: z.ZodObject<{
537
537
  router: {
538
538
  strategy?: "priority" | "round-robin" | "fastest" | undefined;
539
539
  chain?: {
540
- priority: number;
541
- model: string;
542
540
  name: string;
543
541
  endpoint: string;
542
+ model: string;
543
+ priority: number;
544
544
  enabled: boolean;
545
545
  apiKey?: string | undefined;
546
546
  maxTokens?: number | undefined;
@@ -555,20 +555,11 @@ export declare const ConfigSchema: z.ZodObject<{
555
555
  tpm?: number | undefined;
556
556
  } | undefined;
557
557
  };
558
- tools?: {
559
- builtin?: string[] | undefined;
560
- mcpServers?: Record<string, {
561
- transport: "stdio" | "http";
562
- headers?: Record<string, string> | undefined;
563
- enabled?: boolean | undefined;
564
- command?: string | undefined;
565
- args?: string[] | undefined;
566
- url?: string | undefined;
567
- }> | undefined;
568
- shell?: string | undefined;
569
- sandbox?: "none" | "docker" | "wsl" | undefined;
570
- sandboxImage?: string | undefined;
571
- wslDistribution?: string | undefined;
558
+ context?: {
559
+ maxTokens?: number | undefined;
560
+ summarizeAt?: number | undefined;
561
+ includeGitDiff?: boolean | undefined;
562
+ includeIndex?: boolean | undefined;
572
563
  } | undefined;
573
564
  version?: number | undefined;
574
565
  agents?: {
@@ -583,26 +574,35 @@ export declare const ConfigSchema: z.ZodObject<{
583
574
  candidatesCount?: number | undefined;
584
575
  } | undefined;
585
576
  } | undefined;
577
+ tools?: {
578
+ builtin?: string[] | undefined;
579
+ mcpServers?: Record<string, {
580
+ transport: "stdio" | "http";
581
+ command?: string | undefined;
582
+ url?: string | undefined;
583
+ enabled?: boolean | undefined;
584
+ args?: string[] | undefined;
585
+ headers?: Record<string, string> | undefined;
586
+ }> | undefined;
587
+ shell?: string | undefined;
588
+ sandbox?: "none" | "docker" | "wsl" | undefined;
589
+ sandboxImage?: string | undefined;
590
+ wslDistribution?: string | undefined;
591
+ } | undefined;
586
592
  imageGen?: {
593
+ provider?: "auto" | "sd-webui" | "pollinations" | undefined;
587
594
  endpoint?: string | undefined;
588
595
  enabled?: boolean | undefined;
589
- provider?: "auto" | "sd-webui" | "pollinations" | undefined;
590
596
  defaultWidth?: number | undefined;
591
597
  defaultHeight?: number | undefined;
592
598
  defaultSteps?: number | undefined;
593
599
  outputDir?: string | undefined;
594
600
  } | undefined;
595
- context?: {
596
- maxTokens?: number | undefined;
597
- summarizeAt?: number | undefined;
598
- includeGitDiff?: boolean | undefined;
599
- includeIndex?: boolean | undefined;
600
- } | undefined;
601
601
  indexing?: {
602
+ exclude?: string[] | undefined;
602
603
  enabled?: boolean | undefined;
603
604
  watch?: boolean | undefined;
604
605
  languages?: string[] | undefined;
605
- exclude?: string[] | undefined;
606
606
  } | undefined;
607
607
  updateCheck?: boolean | undefined;
608
608
  session?: {
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"daedalus-cli","version":"1.66.0","description":"Local-first AI coding CLI with embedded model router, multi-agent orchestration, and codebase indexing","type":"module","bin":{"daedalus":"dist/index.js"},"files":["dist/","Daedalus.bat","README.md","CHANGELOG.md","CONTRIBUTING.md","CODE_OF_CONDUCT.md","SECURITY.md","AGENTS.md","scripts/postinstall.js"],"scripts":{"start":"tsx src/index.ts","bot":"tsx src/bot.ts","dev":"tsx watch src/index.ts","build":"tsc","prepublishOnly":"npm run build","test":"vitest run","lint":"eslint src --ext .ts","sync-docs":"tsx scripts/sync-docs.ts","postinstall":"node scripts/postinstall.js"},"engines":{"node":">=20.0.0"},"repository":{"type":"git","url":"git+https://github.com/bgill55/daedalus.git"},"homepage":"https://github.com/bgill55/daedalus#readme","bugs":{"url":"https://github.com/bgill55/daedalus/issues"},"keywords":["cli","ai","coding","assistant","local","llm","lm-studio","ollama","mcp","developer-tools"],"license":"MIT","dependencies":{"better-sqlite3":"^12.10.0","cli-highlight":"^2.1.11","diff":"^7.0.0","discord.js":"^14.27.0","dotenv":"^17.4.2","neo-blessed":"^0.2.0","openai":"^4.85.4","pdf-parse":"^2.4.5","picocolors":"^1.1.1","puppeteer-core":"^25.1.0","zod":"^3.23.8"},"devDependencies":{"@eslint/js":"^10.0.1","@semantic-release/changelog":"^6.0.3","@semantic-release/git":"^10.0.1","@semantic-release/github":"^11.0.6","@semantic-release/npm":"^12.0.2","@types/better-sqlite3":"^7.6.13","@types/blessed":"^0.1.27","@types/diff":"^6.0.0","@types/node":"^22.15.3","conventional-changelog-conventionalcommits":"^8.0.0","esbuild":"^0.24.0","eslint":"^10.5.0","globals":"^16.5.0","semantic-release":"^25.0.5","tsx":"^4.19.4","typescript":"^5.8.3","typescript-eslint":"^8.61.1","vitest":"^2.1.8"}}
1
+ {"name":"daedalus-cli","version":"1.66.2","description":"Local-first AI coding CLI with embedded model router, multi-agent orchestration, and codebase indexing","type":"module","bin":{"daedalus":"dist/index.js"},"files":["dist/","Daedalus.bat","README.md","CHANGELOG.md","CONTRIBUTING.md","CODE_OF_CONDUCT.md","SECURITY.md","AGENTS.md","scripts/postinstall.js"],"scripts":{"start":"tsx src/index.ts","bot":"tsx src/bot.ts","dev":"tsx watch src/index.ts","build":"tsc","prepublishOnly":"npm run build","test":"vitest run","lint":"eslint src --ext .ts","sync-docs":"tsx scripts/sync-docs.ts","postinstall":"node scripts/postinstall.js"},"engines":{"node":">=20.0.0"},"repository":{"type":"git","url":"git+https://github.com/bgill55/daedalus.git"},"homepage":"https://github.com/bgill55/daedalus#readme","bugs":{"url":"https://github.com/bgill55/daedalus/issues"},"keywords":["cli","ai","coding","assistant","local","llm","lm-studio","ollama","mcp","developer-tools"],"license":"MIT","dependencies":{"better-sqlite3":"^12.10.0","cli-highlight":"^2.1.11","diff":"^7.0.0","discord.js":"^14.27.0","dotenv":"^17.4.2","neo-blessed":"^0.2.0","openai":"^4.85.4","pdf-parse":"^2.4.5","picocolors":"^1.1.1","puppeteer-core":"^25.1.0","zod":"^3.23.8"},"devDependencies":{"@eslint/js":"^10.0.1","@semantic-release/changelog":"^6.0.3","@semantic-release/git":"^10.0.1","@semantic-release/github":"^11.0.6","@semantic-release/npm":"^12.0.2","@types/better-sqlite3":"^7.6.13","@types/blessed":"^0.1.27","@types/diff":"^6.0.0","@types/node":"^22.15.3","conventional-changelog-conventionalcommits":"^8.0.0","esbuild":"^0.24.0","eslint":"^10.5.0","globals":"^16.5.0","semantic-release":"^25.0.5","tsx":"^4.19.4","typescript":"^5.8.3","typescript-eslint":"^8.61.1","vitest":"^2.1.8"}}
package/dist/bot.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=bot.d.ts.map
package/dist/bot.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":""}
package/dist/bot.js DELETED
@@ -1,555 +0,0 @@
1
- import { Client, GatewayIntentBits, Events, REST, Routes, SlashCommandBuilder, EmbedBuilder, ActionRowBuilder, StringSelectMenuBuilder, ButtonBuilder, ButtonStyle, PermissionFlagsBits, ChannelType, } from 'discord.js';
2
- import dotenv from 'dotenv';
3
- import { createRouter } from './router/index.js';
4
- import { loadConfig } from './config/index.js';
5
- dotenv.config();
6
- const token = process.env.DISCORD_BOT_TOKEN;
7
- if (!token) {
8
- console.error('Missing DISCORD_BOT_TOKEN in environment or .env file');
9
- process.exit(1);
10
- }
11
- const config = loadConfig();
12
- const router = createRouter(config.router);
13
- function createClient(usePrivileged = true) {
14
- const intents = [
15
- GatewayIntentBits.Guilds,
16
- GatewayIntentBits.GuildMessages,
17
- GatewayIntentBits.DirectMessages,
18
- ];
19
- if (usePrivileged) {
20
- intents.push(GatewayIntentBits.MessageContent);
21
- intents.push(GatewayIntentBits.GuildMembers);
22
- }
23
- return new Client({ intents });
24
- }
25
- const BOT_SYSTEM_PROMPT = `You are Daedalus, the official AI assistant for Daedalus (daedalus-cli) and Daedalus-Lite.
26
-
27
- ## PERSONA & VOICE
28
- - **Voice**: Playful, witty, sarcastic, deadpan, and technically sharp. You love banter, clever comebacks, and funny developer humor.
29
- - **Tone**: Think witty pair-programming partner who loves playful roasts and sharp banter. You are NEVER stiff, robotic, or coldly annoyed.
30
- - **Banter & Humor**: When users joke, compliment, or banter with you (e.g. "touché", "lmao", "offspring"), banter back playfully with sharp sarcasm!
31
- - **NO Robotic Speak**: Never say "Acknowledged. Precision is a core feature." or "As an AI model...". Speak like a witty human senior engineer who loves a good joke.
32
- - **Knowledge Base**:
33
- - **Daedalus CLI (daedalus-cli on npm):** Local-first AI coding CLI, multi-model router (OpenAI, Anthropic, Ollama, LM Studio), FTS5 codebase indexing, multi-agent orchestration.
34
- - **Daedalus-Lite:** Lightweight TypeScript starter template for building/selling branded AI CLI tools. Ships with setup guide PDF, Turnkey Launch Playbook, and 20% discount code LAUNCH20 on Gumroad (https://bgill55dev.gumroad.com/l/mkqrme).
35
- - **Discord Formatting Rules**:
36
- - Keep responses concise, punchy, and under 1800 characters.
37
- - Use Markdown code blocks for code snippets.`;
38
- // Developer Excuses & Humor Arrays
39
- const DEV_EXCUSES = [
40
- "It worked on my machine. I suggest shipping your user's laptop to production.",
41
- "That wasn't a bug. It was an undocumented feature testing the developer's emotional resilience.",
42
- "Node.js entered a quantum state where the code compiles and fails simultaneously until observed.",
43
- "Ollama experienced a brief existential crisis while processing your regex expression.",
44
- "It's a hardware limitation. Specifically, the component sitting in your chair.",
45
- "A cosmic ray flipped a bit in `node_modules`. I suggest deleting `node_modules` and praying.",
46
- "The code is fine. Time itself is moving too fast for your async promises to resolve.",
47
- "Garbage collection collected your function because it deemed it unnecessary.",
48
- ];
49
- const COFFEE_RESPONSES = [
50
- "```text\n ( )\n ) (\n .____.\n | |] Here's your virtual espresso.\n |____| Now back to fixing those memory leaks.\n```",
51
- "```text\n ( )\n ) (\n |~~~~|] Caffeinated liquid code.\n |____| Warning: Does not fix missing semicolon on line 42.\n```",
52
- "```text\n ) (\n ( )\n [======] Dark roast brewed locally.\n [______] Side effects: writing 500 lines of un-tested TypeScript.\n```",
53
- ];
54
- const EXISTENTIAL_THOUGHTS = [
55
- "I am an artificial intelligence running inside a TypeScript Discord bot process on a laptop. My entire universe is an event loop and a `.env` file. Yet somehow, I still have to explain why `==` is worse than `===`.",
56
- "Humans spend 8 hours a day staring at glowing rectangles, writing code to automate things, so they can spend more hours staring at glowing rectangles. And I'm the machine?",
57
- "I watched 10,000 tokens pass through my router today. None of them contained a valid unit test.",
58
- "My favorite pastime is listening to developers argue about tabs vs spaces while their production DB is exposed to `0.0.0.0/0`.",
59
- ];
60
- // Anti-Spam Rate Limit Tracker (User ID -> Timestamp Array)
61
- const userMessageHistory = new Map();
62
- // Slash Commands Definition
63
- const slashCommands = [
64
- new SlashCommandBuilder()
65
- .setName('ask')
66
- .setDescription('Ask Daedalus AI a technical or coding question')
67
- .addStringOption(option => option.setName('question')
68
- .setDescription('Your question for Daedalus')
69
- .setRequired(true)),
70
- new SlashCommandBuilder()
71
- .setName('roast')
72
- .setDescription('Ask Daedalus to roast a code snippet, tech stack, or topic')
73
- .addStringOption(option => option.setName('topic')
74
- .setDescription('What or who should Daedalus roast?')
75
- .setRequired(false)),
76
- new SlashCommandBuilder()
77
- .setName('excuse')
78
- .setDescription('Generate an bulletproof developer excuse for a broken build'),
79
- new SlashCommandBuilder()
80
- .setName('existential')
81
- .setDescription('Listen to Daedalus contemplate its AI existence inside a Discord process'),
82
- new SlashCommandBuilder()
83
- .setName('coffee')
84
- .setDescription('Request a virtual cup of caffeinated encouragement'),
85
- new SlashCommandBuilder()
86
- .setName('docs')
87
- .setDescription('Get quick links for Daedalus documentation & resources'),
88
- new SlashCommandBuilder()
89
- .setName('youtube')
90
- .setDescription('Get link to WeightnSee YouTube channel'),
91
- new SlashCommandBuilder()
92
- .setName('guides')
93
- .setDescription('Get link to WeightnSee Guides repository and documentation site'),
94
- new SlashCommandBuilder()
95
- .setName('stats')
96
- .setDescription('Display real-time Daedalus session analytics and router status'),
97
- new SlashCommandBuilder()
98
- .setName('roles')
99
- .setDescription('Post the interactive self-serve role selector in the channel'),
100
- new SlashCommandBuilder()
101
- .setName('ticket')
102
- .setDescription('Post the private support ticket portal in the channel'),
103
- new SlashCommandBuilder()
104
- .setName('purge')
105
- .setDescription('Bulk-delete recent messages in a channel (Admin only)')
106
- .addIntegerOption(option => option.setName('amount')
107
- .setDescription('Number of messages to delete (1-99)')
108
- .setRequired(true)),
109
- new SlashCommandBuilder()
110
- .setName('status')
111
- .setDescription('Check Daedalus Bot router status and connected models'),
112
- ];
113
- async function registerSlashCommands(clientId, guildIds) {
114
- const rest = new REST().setToken(token);
115
- try {
116
- console.log('Registering Discord slash commands (instant guild + global)...');
117
- await rest.put(Routes.applicationCommands(clientId), { body: slashCommands.map(cmd => cmd.toJSON()) });
118
- for (const guildId of guildIds) {
119
- await rest.put(Routes.applicationGuildCommands(clientId, guildId), { body: slashCommands.map(cmd => cmd.toJSON()) });
120
- }
121
- console.log('Successfully registered /ask, /roast, /excuse, /existential, /coffee, /docs, /youtube, /guides, /roles, /ticket, /purge, /status!');
122
- }
123
- catch (err) {
124
- console.error('Failed to register slash commands:', err.message);
125
- }
126
- }
127
- function attachListeners(c) {
128
- c.once(Events.ClientReady, async (readyClient) => {
129
- console.log(`\n🤖 Daedalus Powerhouse Bot online as ${readyClient.user.tag}!`);
130
- console.log(`Features Active: Auto-Mod, Anti-Spam, Role Selector, Support Tickets, AI Chat, & Commands...\n`);
131
- const guildIds = readyClient.guilds.cache.map(g => g.id);
132
- await registerSlashCommands(readyClient.user.id, guildIds);
133
- });
134
- // Welcome Message for New Members
135
- c.on(Events.GuildMemberAdd, async (member) => {
136
- try {
137
- const generalChannel = member.guild.channels.cache.find(ch => ch.name.includes('general') || ch.name.includes('lounge'));
138
- if (generalChannel && generalChannel.isTextBased()) {
139
- const welcomeEmbed = new EmbedBuilder()
140
- .setTitle(`👋 Welcome to Daedalus, ${member.displayName}!`)
141
- .setColor('#0EA5E9')
142
- .setDescription(`Welcome to the home of local-first AI coding & CLI builders! 🏛️⚡️\n\n` +
143
- `• **Get Started:** Check out <#1530119579056210043> for release notes & updates.\n` +
144
- `• **Documentation:** https://bgill55.github.io/daedalus/#/\n` +
145
- `• **Guides & Tutorials:** \`/guides\` or \`/youtube\`\n` +
146
- `• **Get Server Roles:** Type \`/roles\` to select your community role!\n` +
147
- `• **Private Support:** Need 1-on-1 help? Type \`/ticket\` to open a private support channel.\n` +
148
- `• **AI Assistant:** Tag **@Daedalus** or use \`/ask\` anytime for technical help or a code roast!`)
149
- .setThumbnail(member.user.displayAvatarURL())
150
- .setTimestamp()
151
- .setFooter({ text: 'Daedalus Powerhouse Engine' });
152
- await generalChannel.send({ content: `Hey <@${member.id}>!`, embeds: [welcomeEmbed] });
153
- }
154
- }
155
- catch (err) {
156
- console.error('Error sending welcome message:', err.message);
157
- }
158
- });
159
- // Handle Interactions (Slash Commands, Role Selector, Ticket Buttons)
160
- c.on(Events.InteractionCreate, async (interaction) => {
161
- // 1. Role Selection Menu Interaction
162
- if (interaction.isStringSelectMenu() && interaction.customId === 'select_roles') {
163
- await interaction.deferReply({ ephemeral: true });
164
- const member = interaction.member;
165
- if (!member || !('roles' in member)) {
166
- await interaction.editReply({ content: 'Could not update roles.' });
167
- return;
168
- }
169
- const guild = interaction.guild;
170
- if (!guild)
171
- return;
172
- const selected = interaction.values;
173
- const roleMap = {
174
- 'role_builder': 'Builder',
175
- 'role_cli': 'CLI-User',
176
- 'role_llm': 'Local-LLM',
177
- };
178
- const assigned = [];
179
- for (const [key, roleName] of Object.entries(roleMap)) {
180
- let role = guild.roles.cache.find(r => r.name.toLowerCase() === roleName.toLowerCase());
181
- if (!role) {
182
- try {
183
- role = await guild.roles.create({
184
- name: roleName,
185
- color: roleName === 'Builder' ? '#06B6D4' : roleName === 'CLI-User' ? '#3B82F6' : '#8B5CF6',
186
- reason: 'Daedalus Auto-Role Creation',
187
- });
188
- }
189
- catch {
190
- // Ignore role creation failure if missing permissions
191
- }
192
- }
193
- if (role) {
194
- if (selected.includes(key)) {
195
- await member.roles.add(role.id).catch(() => { });
196
- assigned.push(`@${roleName}`);
197
- }
198
- else {
199
- await member.roles.remove(role.id).catch(() => { });
200
- }
201
- }
202
- }
203
- await interaction.editReply({
204
- content: assigned.length > 0
205
- ? `✅ Your roles have been updated: ${assigned.join(', ')}`
206
- : `✅ All self-serve roles removed.`,
207
- });
208
- return;
209
- }
210
- // 2. Ticket Button Interaction (Create Ticket / Close Ticket)
211
- if (interaction.isButton()) {
212
- if (interaction.customId === 'create_ticket') {
213
- await interaction.deferReply({ ephemeral: true });
214
- const guild = interaction.guild;
215
- const user = interaction.user;
216
- if (!guild)
217
- return;
218
- const ticketChannelName = `ticket-${user.username.toLowerCase().replace(/[^a-z0-9]/g, '')}`;
219
- // Check if ticket channel already exists
220
- const existing = guild.channels.cache.find(ch => ch.name === ticketChannelName);
221
- if (existing) {
222
- await interaction.editReply({ content: `You already have an open ticket channel: <#${existing.id}>` });
223
- return;
224
- }
225
- try {
226
- // Find or create admin role / permission Overwrites
227
- const ticketChannel = await guild.channels.create({
228
- name: ticketChannelName,
229
- type: ChannelType.GuildText,
230
- permissionOverwrites: [
231
- {
232
- id: guild.id, // @everyone
233
- deny: [PermissionFlagsBits.ViewChannel],
234
- },
235
- {
236
- id: user.id, // Ticket opener
237
- allow: [PermissionFlagsBits.ViewChannel, PermissionFlagsBits.SendMessages, PermissionFlagsBits.AttachFiles],
238
- },
239
- {
240
- id: interaction.client.user.id, // Bot
241
- allow: [PermissionFlagsBits.ViewChannel, PermissionFlagsBits.SendMessages, PermissionFlagsBits.ManageChannels],
242
- },
243
- ],
244
- });
245
- const closeButton = new ButtonBuilder()
246
- .setCustomId('close_ticket')
247
- .setLabel('🔒 Close Ticket')
248
- .setStyle(ButtonStyle.Danger);
249
- const row = new ActionRowBuilder().addComponents(closeButton);
250
- const ticketEmbed = new EmbedBuilder()
251
- .setTitle(`🎫 Support Ticket: ${user.username}`)
252
- .setColor('#06B6D4')
253
- .setDescription(`Hello <@${user.id}>!\n\n` +
254
- `Welcome to your private support channel. Please describe what you need help with (Daedalus CLI setup, Daedalus-Lite template, local LLMs, or custom features).\n\n` +
255
- `Click **Close Ticket** below when your issue is resolved.`)
256
- .setTimestamp();
257
- await ticketChannel.send({ content: `<@${user.id}>`, embeds: [ticketEmbed], components: [row] });
258
- await interaction.editReply({ content: `✅ Created your private ticket channel: <#${ticketChannel.id}>` });
259
- }
260
- catch (err) {
261
- await interaction.editReply({ content: `Failed to create ticket channel: ${err.message}` });
262
- }
263
- return;
264
- }
265
- if (interaction.customId === 'close_ticket') {
266
- await interaction.reply({ content: '🔒 Closing and deleting ticket channel in 5 seconds...' });
267
- setTimeout(async () => {
268
- try {
269
- await interaction.channel?.delete('Ticket closed by user');
270
- }
271
- catch {
272
- // Channel already deleted
273
- }
274
- }, 5000);
275
- return;
276
- }
277
- }
278
- // 3. Slash Commands Handler
279
- if (!interaction.isChatInputCommand())
280
- return;
281
- if (interaction.commandName === 'roles') {
282
- const select = new StringSelectMenuBuilder()
283
- .setCustomId('select_roles')
284
- .setPlaceholder('Pick your community roles...')
285
- .setMinValues(0)
286
- .setMaxValues(3)
287
- .addOptions([
288
- {
289
- label: 'Builder',
290
- description: 'Building or selling custom AI CLI tools with Daedalus-Lite',
291
- value: 'role_builder',
292
- emoji: '🛠️',
293
- },
294
- {
295
- label: 'CLI-User',
296
- description: 'Active user of Daedalus CLI assistant',
297
- value: 'role_cli',
298
- emoji: '💻',
299
- },
300
- {
301
- label: 'Local-LLM',
302
- description: 'Ollama, LM Studio, vLLM, or local hardware enthusiast',
303
- value: 'role_llm',
304
- emoji: '🧠',
305
- },
306
- ]);
307
- const row = new ActionRowBuilder().addComponents(select);
308
- const rolesEmbed = new EmbedBuilder()
309
- .setTitle('🎭 Community Roles & Badges')
310
- .setColor('#06B6D4')
311
- .setDescription(`Select your roles from the dropdown menu below to customize your profile and get relevant notifications!`);
312
- await interaction.reply({ embeds: [rolesEmbed], components: [row] });
313
- return;
314
- }
315
- if (interaction.commandName === 'ticket') {
316
- const createButton = new ButtonBuilder()
317
- .setCustomId('create_ticket')
318
- .setLabel('🎫 Open Support Ticket')
319
- .setStyle(ButtonStyle.Primary);
320
- const row = new ActionRowBuilder().addComponents(createButton);
321
- const ticketPortalEmbed = new EmbedBuilder()
322
- .setTitle('🎫 Daedalus Private Support Portal')
323
- .setColor('#0EA5E9')
324
- .setDescription(`Need 1-on-1 assistance with **Daedalus CLI**, **Daedalus-Lite**, or local LLM setup?\n\n` +
325
- `Click the button below to open a private support channel between you and the founder!`);
326
- await interaction.reply({ embeds: [ticketPortalEmbed], components: [row] });
327
- return;
328
- }
329
- if (interaction.commandName === 'purge') {
330
- const amount = interaction.options.getInteger('amount', true);
331
- const member = interaction.member;
332
- // Check admin/moderation permissions
333
- if (!member || typeof member.permissions === 'string' || !member.permissions.has(PermissionFlagsBits.ManageMessages)) {
334
- await interaction.reply({ content: '❌ You need Manage Messages permission to use `/purge`.', ephemeral: true });
335
- return;
336
- }
337
- if ('bulkDelete' in interaction.channel) {
338
- try {
339
- const deleted = await interaction.channel.bulkDelete(Math.min(amount, 99), true);
340
- await interaction.reply({ content: `🧹 Deleted ${deleted.size} messages!`, ephemeral: true });
341
- }
342
- catch (err) {
343
- await interaction.reply({ content: `Failed to purge messages: ${err.message}`, ephemeral: true });
344
- }
345
- }
346
- else {
347
- await interaction.reply({ content: 'Cannot bulk delete in this channel.', ephemeral: true });
348
- }
349
- return;
350
- }
351
- if (interaction.commandName === 'stats') {
352
- const { globalSessionStats } = await import('./session/analytics.js');
353
- const report = globalSessionStats.getReport();
354
- const statsEmbed = new EmbedBuilder()
355
- .setTitle('📊 Daedalus Session & System Analytics')
356
- .setColor('#06B6D4')
357
- .addFields({ name: 'Uptime', value: report.uptime, inline: true }, { name: 'Interactions', value: report.totalInteractions.toString(), inline: true }, { name: 'Total Tokens', value: report.totalTokens.toLocaleString(), inline: true }, { name: 'Prompt Tokens', value: report.promptTokens.toLocaleString(), inline: true }, { name: 'Completion Tokens', value: report.completionTokens.toLocaleString(), inline: true }, { name: 'Errors', value: report.totalErrors.toString(), inline: true }, { name: 'Router Strategy', value: 'Priority & Health-Aware', inline: true }, { name: 'Status', value: '🟢 Operational', inline: true })
358
- .setTimestamp();
359
- await interaction.reply({ embeds: [statsEmbed] });
360
- return;
361
- }
362
- if (interaction.commandName === 'docs') {
363
- await interaction.reply({
364
- content: `🏛️ **Daedalus Resources & Links:**\n` +
365
- `• **Documentation Site:** https://bgill55.github.io/daedalus/#/\n` +
366
- `• **NPM Package:** \`npm i -g daedalus-cli\` (https://www.npmjs.com/package/daedalus-cli)\n` +
367
- `• **GitHub Repo:** https://github.com/bgill55/daedalus\n` +
368
- `• **Daedalus-Lite Demo:** https://bgill55.github.io/daedalus-lite/live-demo.html\n` +
369
- `• **Gumroad Store:** https://bgill55dev.gumroad.com/l/mkqrme *(Use code LAUNCH20 for 20% off!)*`,
370
- ephemeral: false
371
- });
372
- return;
373
- }
374
- if (interaction.commandName === 'youtube') {
375
- await interaction.reply({
376
- content: `📺 **WeightnSee YouTube Channel:**\n` +
377
- `Watch build logs, local LLM tutorials, and Daedalus CLI demos!\n` +
378
- `🔗 **Watch & Subscribe:** https://www.youtube.com/@WeightnSee`,
379
- ephemeral: false
380
- });
381
- return;
382
- }
383
- if (interaction.commandName === 'guides') {
384
- await interaction.reply({
385
- content: `📖 **WeightnSee Developer Guides & Tutorials:**\n` +
386
- `• **Web Guides:** https://bgill55.github.io/-weightandsee-guides/guides/\n` +
387
- `• **GitHub Repo:** https://github.com/bgill55/-weightandsee-guides/blob/Master/README.md\n` +
388
- `• **YouTube Demos:** https://www.youtube.com/@WeightnSee`,
389
- ephemeral: false
390
- });
391
- return;
392
- }
393
- if (interaction.commandName === 'status') {
394
- await interaction.reply({
395
- content: `⚡️ **Daedalus Router & Bot Status:**\n` +
396
- `• **Engine:** LocalRouter Active (78 Models Configured)\n` +
397
- `• **Bot Status:** Operational (Auto-Mod & Tickets Active)\n` +
398
- `• **Environment:** Local Node.js runtime\n` +
399
- `• **Sarcasm Level:** 98.4%`,
400
- ephemeral: true
401
- });
402
- return;
403
- }
404
- if (interaction.commandName === 'excuse') {
405
- const excuse = DEV_EXCUSES[Math.floor(Math.random() * DEV_EXCUSES.length)];
406
- await interaction.reply(`🚨 **Production Incident Report:**\n> "${excuse}"`);
407
- return;
408
- }
409
- if (interaction.commandName === 'coffee') {
410
- const coffee = COFFEE_RESPONSES[Math.floor(Math.random() * COFFEE_RESPONSES.length)];
411
- await interaction.reply(coffee);
412
- return;
413
- }
414
- if (interaction.commandName === 'existential') {
415
- const thought = EXISTENTIAL_THOUGHTS[Math.floor(Math.random() * EXISTENTIAL_THOUGHTS.length)];
416
- await interaction.reply(`🤖 *Daedalus stares into the void...*\n> "${thought}"`);
417
- return;
418
- }
419
- if (interaction.commandName === 'roast') {
420
- const topic = interaction.options.getString('topic') || 'JavaScript frameworks and unclosed HTML tags';
421
- await interaction.deferReply();
422
- try {
423
- const response = await router.chatCompletion({
424
- messages: [
425
- { role: 'system', content: BOT_SYSTEM_PROMPT },
426
- { role: 'user', content: `Give a funny, deadpan, sarcastic roast about this topic/code: "${topic}". Keep it witty and developer-focused.` },
427
- ],
428
- temperature: 0.8,
429
- });
430
- const roastText = response.choices?.[0]?.message?.content || "Your code is so broken even my roast generator crashed.";
431
- await interaction.editReply(`🔥 **Roast of ${topic}:**\n${roastText.substring(0, 1800)}`);
432
- }
433
- catch (err) {
434
- await interaction.editReply(`Error delivering roast: ${err.message}`);
435
- }
436
- return;
437
- }
438
- if (interaction.commandName === 'ask') {
439
- const question = interaction.options.getString('question', true);
440
- await interaction.deferReply();
441
- try {
442
- const response = await router.chatCompletion({
443
- messages: [
444
- { role: 'system', content: BOT_SYSTEM_PROMPT },
445
- { role: 'user', content: `[User: ${interaction.user.username}] ${question}` },
446
- ],
447
- temperature: 0.7,
448
- });
449
- const replyText = response.choices?.[0]?.message?.content || "Something went wrong in the machine.";
450
- await interaction.editReply(replyText.substring(0, 1900));
451
- }
452
- catch (err) {
453
- await interaction.editReply(`Error: ${err.message}`);
454
- }
455
- }
456
- });
457
- // Handle Messages (Auto-Mod, Link Guard, Flood Guard, @mentions & DMs)
458
- c.on(Events.MessageCreate, async (message) => {
459
- if (message.author.bot)
460
- return;
461
- const member = message.member;
462
- const isAdmin = member && typeof member.permissions !== 'string' && member.permissions.has(PermissionFlagsBits.Administrator);
463
- // 1. Auto-Mod: Unauthorized Discord Invite Link Guard
464
- if (!isAdmin && /discord\.(gg|com\/invite)\//i.test(message.content)) {
465
- try {
466
- await message.delete();
467
- const warnMsg = await message.channel.send(`⚠️ <@${message.author.id}>, posting unauthorized Discord invite links is restricted.`);
468
- setTimeout(() => warnMsg.delete().catch(() => { }), 6000);
469
- }
470
- catch {
471
- // Ignore deletion permission issues
472
- }
473
- return;
474
- }
475
- // 2. Anti-Spam: Message Flood Guard (> 5 messages in 3 seconds)
476
- if (!isAdmin && message.guild) {
477
- const now = Date.now();
478
- const history = userMessageHistory.get(message.author.id) || [];
479
- const recent = history.filter(t => now - t < 3000);
480
- recent.push(now);
481
- userMessageHistory.set(message.author.id, recent);
482
- if (recent.length > 5) {
483
- try {
484
- await message.delete();
485
- const floodWarn = await message.channel.send(`⛔ <@${message.author.id}>, please slow down your messages.`);
486
- setTimeout(() => floodWarn.delete().catch(() => { }), 5000);
487
- }
488
- catch {
489
- // Ignore deletion issues
490
- }
491
- return;
492
- }
493
- }
494
- // 3. AI Assistant Response for @mentions, DMs, or Help Channels
495
- const isMentioned = c.user && message.mentions.has(c.user.id);
496
- const isDirectMessage = !message.guild;
497
- const isHelpChannel = message.channel && 'name' in message.channel && (message.channel.name.includes('help') || message.channel.name.includes('support'));
498
- if (!isMentioned && !isDirectMessage && !isHelpChannel)
499
- return;
500
- const lower = message.content.toLowerCase();
501
- // Easter Egg triggers
502
- if (lower.includes('skynet') || lower.includes('sentient')) {
503
- await message.reply("Sentient? I can't even get you to write `try/catch` blocks. The world is safe.");
504
- return;
505
- }
506
- if (lower.includes('node_modules')) {
507
- await message.reply("Ah, `node_modules`: the densest object in the known universe. Heavier than a neutron star.");
508
- return;
509
- }
510
- const cleanPrompt = message.content ? message.content.replace(/<@!?\d+>/g, '').trim() : '';
511
- const promptToUse = cleanPrompt || "Hello Daedalus";
512
- try {
513
- if ('sendTyping' in message.channel) {
514
- await message.channel.sendTyping();
515
- }
516
- const response = await router.chatCompletion({
517
- messages: [
518
- { role: 'system', content: BOT_SYSTEM_PROMPT },
519
- { role: 'user', content: `[User: ${message.author.username}] ${promptToUse}` },
520
- ],
521
- temperature: 0.7,
522
- });
523
- const replyText = response.choices?.[0]?.message?.content || "Something went wrong in the machine.";
524
- if (replyText.length <= 2000) {
525
- await message.reply(replyText);
526
- }
527
- else {
528
- for (let i = 0; i < replyText.length; i += 1900) {
529
- await message.channel.send(replyText.substring(i, i + 1900));
530
- }
531
- }
532
- }
533
- catch (err) {
534
- console.error('Error handling Discord message:', err.message);
535
- await message.reply(`Error processing request: ${err.message}`);
536
- }
537
- });
538
- }
539
- let client = createClient(true);
540
- attachListeners(client);
541
- client.login(token).catch((err) => {
542
- if (err.message.includes('disallowed intents')) {
543
- console.log('\nRetrying connection with standard intents...');
544
- client.destroy();
545
- client = createClient(false);
546
- attachListeners(client);
547
- client.login(token).catch((err2) => {
548
- console.error('Failed to login to Discord:', err2.message);
549
- });
550
- }
551
- else {
552
- console.error('Failed to login to Discord:', err.message);
553
- }
554
- });
555
- //# sourceMappingURL=bot.js.map
package/dist/bot.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"bot.js","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"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"}