daedalus-cli 1.81.0 → 1.83.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 (63) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +9 -3
  3. package/dist/bot/commands.d.ts +3 -0
  4. package/dist/bot/commands.d.ts.map +1 -0
  5. package/dist/bot/commands.js +99 -0
  6. package/dist/bot/commands.js.map +1 -0
  7. package/dist/bot/handlers.d.ts +4 -0
  8. package/dist/bot/handlers.d.ts.map +1 -0
  9. package/dist/bot/handlers.js +651 -0
  10. package/dist/bot/handlers.js.map +1 -0
  11. package/dist/bot/index.d.ts +2 -0
  12. package/dist/bot/index.d.ts.map +1 -0
  13. package/dist/bot/index.js +43 -0
  14. package/dist/bot/index.js.map +1 -0
  15. package/dist/bot/prompt.d.ts +2 -0
  16. package/dist/bot/prompt.d.ts.map +1 -0
  17. package/dist/bot/prompt.js +40 -0
  18. package/dist/bot/prompt.js.map +1 -0
  19. package/dist/bot/responses.d.ts +8 -0
  20. package/dist/bot/responses.d.ts.map +1 -0
  21. package/dist/bot/responses.js +60 -0
  22. package/dist/bot/responses.js.map +1 -0
  23. package/dist/config/hello.d.ts +2 -0
  24. package/dist/config/hello.d.ts.map +1 -0
  25. package/dist/config/hello.js +3 -0
  26. package/dist/config/hello.js.map +1 -0
  27. package/dist/config/index.d.ts +13 -12
  28. package/dist/config/index.d.ts.map +1 -1
  29. package/dist/config/index.js +6 -4
  30. package/dist/config/index.js.map +1 -1
  31. package/dist/config/validate.d.ts +8 -0
  32. package/dist/config/validate.d.ts.map +1 -0
  33. package/dist/config/validate.js +49 -0
  34. package/dist/config/validate.js.map +1 -0
  35. package/dist/config/validate.test.d.ts +2 -0
  36. package/dist/config/validate.test.d.ts.map +1 -0
  37. package/dist/config/validate.test.js +49 -0
  38. package/dist/config/validate.test.js.map +1 -0
  39. package/dist/tools/daedalus-spinner.test.d.ts +2 -0
  40. package/dist/tools/daedalus-spinner.test.d.ts.map +1 -0
  41. package/dist/tools/daedalus-spinner.test.js +75 -0
  42. package/dist/tools/daedalus-spinner.test.js.map +1 -0
  43. package/dist/tools/deps.d.ts +22 -0
  44. package/dist/tools/deps.d.ts.map +1 -0
  45. package/dist/tools/deps.js +70 -0
  46. package/dist/tools/deps.js.map +1 -0
  47. package/dist/tools/logger.d.ts +19 -0
  48. package/dist/tools/logger.d.ts.map +1 -0
  49. package/dist/tools/logger.js +30 -0
  50. package/dist/tools/logger.js.map +1 -0
  51. package/dist/tools/logger.test.d.ts +2 -0
  52. package/dist/tools/logger.test.d.ts.map +1 -0
  53. package/dist/tools/logger.test.js +59 -0
  54. package/dist/tools/logger.test.js.map +1 -0
  55. package/dist/tools/repl.d.ts +24 -0
  56. package/dist/tools/repl.d.ts.map +1 -0
  57. package/dist/tools/repl.js +170 -0
  58. package/dist/tools/repl.js.map +1 -0
  59. package/dist/tools/telemetry.d.ts +24 -0
  60. package/dist/tools/telemetry.d.ts.map +1 -0
  61. package/dist/tools/telemetry.js +55 -0
  62. package/dist/tools/telemetry.js.map +1 -0
  63. package/package.json +5 -2
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # [1.83.0](https://github.com/bgill55/daedalus/compare/v1.82.0...v1.83.0) (2026-07-27)
2
+
3
+
4
+ ### Features
5
+
6
+ * complete three development sprints ([ac39f32](https://github.com/bgill55/daedalus/commit/ac39f32808f62c75b73df1c63b7f377db26f3875))
7
+
8
+ # [1.82.0](https://github.com/bgill55/daedalus/compare/v1.81.0...v1.82.0) (2026-07-27)
9
+
10
+
11
+ ### Features
12
+
13
+ * complete three development sprints ([79cc161](https://github.com/bgill55/daedalus/commit/79cc161758b33571db8563abe4d79cbb6675e3f6))
14
+
1
15
  # [1.81.0](https://github.com/bgill55/daedalus/compare/v1.80.0...v1.81.0) (2026-07-27)
2
16
 
3
17
 
package/README.md CHANGED
@@ -109,6 +109,10 @@ AI assistance without:
109
109
  - **Web** — DuckDuckGo search and URL fetching (no API key needed)
110
110
  - **Image Generation** — local Stable Diffusion WebUI integration with automatic zero-config Pollinations AI fallback (`/image` command & `generate_image` tool) for generating UI assets, logos, and graphics without requiring an API key
111
111
  - **Codebase** — index, find, definitions, references
112
+ - **Logger** — unified `src/tools/logger.ts` with `ConsoleLogger` and `SilentLogger` for configurable output
113
+ - **REPL** — persistent context REPL (`src/tools/repl.ts`) for interactive experimentation
114
+ - **Telemetry** — lightweight performance timing utilities (`src/tools/telemetry.ts`)
115
+ - **Dependency fallback** — `src/tools/deps.ts` to verify required commands and provide helpful install guidance
112
116
 
113
117
  ### Commands
114
118
 
@@ -246,9 +250,11 @@ For in-depth explanations, configuration options, and hardware optimization tips
246
250
  ```bash
247
251
  npm run dev # hot-reload
248
252
  npm run build # compile TypeScript
249
- npm test # vitest (270+ tests)
253
+ npm test # vitest (470+ tests)
250
254
  npm run lint # eslint (flat config)
251
255
  npx tsc --noEmit # type check
256
+ npm run audit # full CI pipeline (lint + build + test + config validation)
257
+ npm run docs # generate Typedoc HTML documentation
252
258
  ```
253
259
 
254
260
  ### Architecture
@@ -260,11 +266,11 @@ npx tsc --noEmit # type check
260
266
  ```
261
267
  src/
262
268
  ├── index.ts CLI entry, REPL, command dispatch
263
- ├── config/ Zod-schema validated config
269
+ ├── config/ Zod-schema validated config (+ validate.ts)
264
270
  ├── router/ Model routing, health checks, rate limiter
265
271
  ├── session/ SQLite sessions, project memory, JSONL export
266
272
  ├── agents/ Multi-agent orchestration (planner, coder, et al.)
267
- ├── tools/ 16 built-in tools + MCP transport
273
+ ├── tools/ Logger, REPL, telemetry, deps fallback, spinner
268
274
  ├── indexing/ FTS5 codebase indexing
269
275
  └── onboarding/ Setup wizard
270
276
  ```
@@ -0,0 +1,3 @@
1
+ export declare const slashCommands: import("discord.js").SlashCommandOptionsOnlyBuilder[];
2
+ export declare function registerSlashCommands(clientId: string, token: string, guildId?: string): Promise<void>;
3
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/bot/commands.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,uDAuFzB,CAAC;AAEF,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,iBAc5F"}
@@ -0,0 +1,99 @@
1
+ import { SlashCommandBuilder, REST, Routes } from 'discord.js';
2
+ export const slashCommands = [
3
+ new SlashCommandBuilder()
4
+ .setName('ask')
5
+ .setDescription('Ask Daedalus AI a technical or coding question')
6
+ .addStringOption(option => option.setName('question')
7
+ .setDescription('Your question for Daedalus')
8
+ .setRequired(true)),
9
+ new SlashCommandBuilder()
10
+ .setName('roast')
11
+ .setDescription('Ask Daedalus to roast a code snippet, tech stack, or topic')
12
+ .addStringOption(option => option.setName('topic')
13
+ .setDescription('What or who should Daedalus roast?')
14
+ .setRequired(false)),
15
+ new SlashCommandBuilder()
16
+ .setName('excuse')
17
+ .setDescription('Generate an bulletproof developer excuse for a broken build'),
18
+ new SlashCommandBuilder()
19
+ .setName('existential')
20
+ .setDescription('Listen to Daedalus contemplate its AI existence inside a Discord process'),
21
+ new SlashCommandBuilder()
22
+ .setName('coffee')
23
+ .setDescription('Request a virtual cup of caffeinated encouragement'),
24
+ new SlashCommandBuilder()
25
+ .setName('docs')
26
+ .setDescription('Get quick links for Daedalus documentation & resources'),
27
+ new SlashCommandBuilder()
28
+ .setName('youtube')
29
+ .setDescription('Get link to WeightnSee YouTube channel'),
30
+ new SlashCommandBuilder()
31
+ .setName('guides')
32
+ .setDescription('Get link to WeightnSee Guides repository and documentation site'),
33
+ new SlashCommandBuilder()
34
+ .setName('stats')
35
+ .setDescription('Display real-time Daedalus session analytics and router status'),
36
+ new SlashCommandBuilder()
37
+ .setName('roles')
38
+ .setDescription('Post the interactive self-serve role selector in the channel'),
39
+ new SlashCommandBuilder()
40
+ .setName('ticket')
41
+ .setDescription('Post the interactive support ticket portal in the channel'),
42
+ new SlashCommandBuilder()
43
+ .setName('purge')
44
+ .setDescription('Bulk purge recent messages from this channel (Admin only)')
45
+ .addIntegerOption(option => option.setName('amount')
46
+ .setDescription('Number of messages to delete (1-99)')
47
+ .setRequired(true)),
48
+ new SlashCommandBuilder()
49
+ .setName('status')
50
+ .setDescription('Check Daedalus LLM router and bot operational status'),
51
+ new SlashCommandBuilder()
52
+ .setName('tip')
53
+ .setDescription('Get a sharp coding tip that might actually be useful'),
54
+ new SlashCommandBuilder()
55
+ .setName('commit')
56
+ .setDescription('Generate an absurdly realistic git commit message'),
57
+ new SlashCommandBuilder()
58
+ .setName('horoscope')
59
+ .setDescription('Your daily developer horoscope — probably bad news'),
60
+ new SlashCommandBuilder()
61
+ .setName('recipe')
62
+ .setDescription('Quick answer for "how do I X in Y"')
63
+ .addStringOption(option => option.setName('goal')
64
+ .setDescription('What do you want to do?')
65
+ .setRequired(true)),
66
+ new SlashCommandBuilder()
67
+ .setName('quote')
68
+ .setDescription('A programming quote. Or a Daedalus-ism. Same thing.'),
69
+ new SlashCommandBuilder()
70
+ .setName('blame')
71
+ .setDescription('Find out who broke the build (according to Daedalus)'),
72
+ new SlashCommandBuilder()
73
+ .setName('standup')
74
+ .setDescription('Generate a passive-aggressive daily standup update'),
75
+ new SlashCommandBuilder()
76
+ .setName('predict')
77
+ .setDescription('Daedalus predicts when your build will fail next'),
78
+ new SlashCommandBuilder()
79
+ .setName('techsupport')
80
+ .setDescription('The most unhelpful tech support you will ever receive'),
81
+ ];
82
+ export async function registerSlashCommands(clientId, token, guildId) {
83
+ const rest = new REST({ version: '10' }).setToken(token);
84
+ try {
85
+ const body = slashCommands.map(cmd => cmd.toJSON());
86
+ if (guildId) {
87
+ await rest.put(Routes.applicationGuildCommands(clientId, guildId), { body });
88
+ console.log(`Successfully registered ${body.length} slash commands to guild ${guildId}`);
89
+ }
90
+ else {
91
+ await rest.put(Routes.applicationCommands(clientId), { body });
92
+ console.log(`Successfully registered ${body.length} global slash commands`);
93
+ }
94
+ }
95
+ catch (err) {
96
+ console.error('Error registering slash commands:', err instanceof Error ? err.message : String(err));
97
+ }
98
+ }
99
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/bot/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,KAAK,CAAC;SACd,cAAc,CAAC,gDAAgD,CAAC;SAChE,eAAe,CAAC,MAAM,CAAC,EAAE,CACxB,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;SACvB,cAAc,CAAC,4BAA4B,CAAC;SAC5C,WAAW,CAAC,IAAI,CAAC,CACrB;IACH,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,OAAO,CAAC;SAChB,cAAc,CAAC,4DAA4D,CAAC;SAC5E,eAAe,CAAC,MAAM,CAAC,EAAE,CACxB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;SACpB,cAAc,CAAC,oCAAoC,CAAC;SACpD,WAAW,CAAC,KAAK,CAAC,CACtB;IACH,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,QAAQ,CAAC;SACjB,cAAc,CAAC,6DAA6D,CAAC;IAChF,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,aAAa,CAAC;SACtB,cAAc,CAAC,0EAA0E,CAAC;IAC7F,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,QAAQ,CAAC;SACjB,cAAc,CAAC,oDAAoD,CAAC;IACvE,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,MAAM,CAAC;SACf,cAAc,CAAC,wDAAwD,CAAC;IAC3E,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,SAAS,CAAC;SAClB,cAAc,CAAC,wCAAwC,CAAC;IAC3D,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,QAAQ,CAAC;SACjB,cAAc,CAAC,iEAAiE,CAAC;IACpF,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,OAAO,CAAC;SAChB,cAAc,CAAC,gEAAgE,CAAC;IACnF,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,OAAO,CAAC;SAChB,cAAc,CAAC,8DAA8D,CAAC;IACjF,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,QAAQ,CAAC;SACjB,cAAc,CAAC,2DAA2D,CAAC;IAC9E,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,OAAO,CAAC;SAChB,cAAc,CAAC,2DAA2D,CAAC;SAC3E,gBAAgB,CAAC,MAAM,CAAC,EAAE,CACzB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;SACrB,cAAc,CAAC,qCAAqC,CAAC;SACrD,WAAW,CAAC,IAAI,CAAC,CACrB;IACH,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,QAAQ,CAAC;SACjB,cAAc,CAAC,sDAAsD,CAAC;IACzE,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,KAAK,CAAC;SACd,cAAc,CAAC,sDAAsD,CAAC;IACzE,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,QAAQ,CAAC;SACjB,cAAc,CAAC,mDAAmD,CAAC;IACtE,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,WAAW,CAAC;SACpB,cAAc,CAAC,oDAAoD,CAAC;IACvE,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,QAAQ,CAAC;SACjB,cAAc,CAAC,oCAAoC,CAAC;SACpD,eAAe,CAAC,MAAM,CAAC,EAAE,CACxB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACnB,cAAc,CAAC,yBAAyB,CAAC;SACzC,WAAW,CAAC,IAAI,CAAC,CACrB;IACH,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,OAAO,CAAC;SAChB,cAAc,CAAC,qDAAqD,CAAC;IACxE,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,OAAO,CAAC;SAChB,cAAc,CAAC,sDAAsD,CAAC;IACzE,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,SAAS,CAAC;SAClB,cAAc,CAAC,oDAAoD,CAAC;IACvE,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,SAAS,CAAC;SAClB,cAAc,CAAC,kDAAkD,CAAC;IACrE,IAAI,mBAAmB,EAAE;SACtB,OAAO,CAAC,aAAa,CAAC;SACtB,cAAc,CAAC,uDAAuD,CAAC;CAC3E,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,QAAgB,EAAE,KAAa,EAAE,OAAgB;IAC3F,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACpD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,wBAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,CAAC,MAAM,4BAA4B,OAAO,EAAE,CAAC,CAAC;QAC3F,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,CAAC,MAAM,wBAAwB,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACvG,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Client } from 'discord.js';
2
+ import type { LocalRouter } from '../router/index.js';
3
+ export declare function attachListeners(c: Client, router: LocalRouter, token: string): void;
4
+ //# sourceMappingURL=handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/bot/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAUP,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAsGtD,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,QA2nB5E"}