daedalus-cli 1.80.0 → 1.82.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 (64) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/agents/orchestrator.js +1 -1
  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/model.js +1 -1
  40. package/dist/tools/daedalus-spinner.test.d.ts +2 -0
  41. package/dist/tools/daedalus-spinner.test.d.ts.map +1 -0
  42. package/dist/tools/daedalus-spinner.test.js +75 -0
  43. package/dist/tools/daedalus-spinner.test.js.map +1 -0
  44. package/dist/tools/deps.d.ts +22 -0
  45. package/dist/tools/deps.d.ts.map +1 -0
  46. package/dist/tools/deps.js +70 -0
  47. package/dist/tools/deps.js.map +1 -0
  48. package/dist/tools/logger.d.ts +19 -0
  49. package/dist/tools/logger.d.ts.map +1 -0
  50. package/dist/tools/logger.js +30 -0
  51. package/dist/tools/logger.js.map +1 -0
  52. package/dist/tools/logger.test.d.ts +2 -0
  53. package/dist/tools/logger.test.d.ts.map +1 -0
  54. package/dist/tools/logger.test.js +59 -0
  55. package/dist/tools/logger.test.js.map +1 -0
  56. package/dist/tools/repl.d.ts +24 -0
  57. package/dist/tools/repl.d.ts.map +1 -0
  58. package/dist/tools/repl.js +170 -0
  59. package/dist/tools/repl.js.map +1 -0
  60. package/dist/tools/telemetry.d.ts +24 -0
  61. package/dist/tools/telemetry.d.ts.map +1 -0
  62. package/dist/tools/telemetry.js +55 -0
  63. package/dist/tools/telemetry.js.map +1 -0
  64. package/package.json +5 -2
@@ -0,0 +1,49 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { validateConfig, ConfigValidationError } from './validate.js';
3
+ import { DEFAULT_CONFIG } from './index.js';
4
+ describe('validateConfig', () => {
5
+ it('accepts a valid default config', () => {
6
+ const result = validateConfig(DEFAULT_CONFIG);
7
+ expect(result).toBeDefined();
8
+ expect(result.version).toBe(1);
9
+ });
10
+ it('rejects null config', () => {
11
+ expect(() => validateConfig(null)).toThrow(ConfigValidationError);
12
+ expect(() => validateConfig(null)).toThrow('Config must be a non-null object');
13
+ });
14
+ it('rejects non-object config', () => {
15
+ expect(() => validateConfig('string')).toThrow(ConfigValidationError);
16
+ expect(() => validateConfig([])).toThrow(ConfigValidationError);
17
+ expect(() => validateConfig(123)).toThrow(ConfigValidationError);
18
+ });
19
+ it('rejects invalid router strategy', () => {
20
+ expect(() => validateConfig({
21
+ router: { strategy: 'invalid', chain: [] },
22
+ })).toThrow(ConfigValidationError);
23
+ });
24
+ it('rejects invalid endpoint format', () => {
25
+ expect(() => validateConfig({
26
+ router: {
27
+ strategy: 'priority',
28
+ chain: [{ name: 'test', endpoint: 'not-a-url', model: 'auto', priority: 1, enabled: true }],
29
+ },
30
+ })).toThrow(ConfigValidationError);
31
+ });
32
+ it('rejects negative priority', () => {
33
+ expect(() => validateConfig({
34
+ router: {
35
+ strategy: 'priority',
36
+ chain: [{ name: 'test', endpoint: 'http://localhost:1234/v1', model: 'auto', priority: -1, enabled: true }],
37
+ },
38
+ })).toThrow(ConfigValidationError);
39
+ });
40
+ it('accepts minimal valid config', () => {
41
+ const result = validateConfig({
42
+ router: { strategy: 'priority', chain: [] },
43
+ });
44
+ expect(result.version).toBe(1);
45
+ expect(result.router.healthCheckInterval).toBe(30000);
46
+ expect(result.indexing.enabled).toBe(true);
47
+ });
48
+ });
49
+ //# sourceMappingURL=validate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.test.js","sourceRoot":"","sources":["../../src/config/validate.test.ts"],"names":[],"mappings":"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"}
package/dist/model.js CHANGED
@@ -142,7 +142,7 @@ export function createModelFunctions(deps) {
142
142
  console.log(pc.dim('\n [STOP] Stopped'));
143
143
  return { content: lastContent, toolCalls: [] };
144
144
  }
145
- const spinner = new DaedalusSpinner({ text: 'Daedalus thinking', color: (s) => pc.cyan(s) });
145
+ const spinner = new DaedalusSpinner({ text: 'Daedalus thinking', color: (s) => pc.blue(s) });
146
146
  spinner.start();
147
147
  let fullContent = '';
148
148
  const toolCallMap = new Map();
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=daedalus-spinner.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daedalus-spinner.test.d.ts","sourceRoot":"","sources":["../../src/tools/daedalus-spinner.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import { DaedalusSpinner } from './daedalus-spinner.js';
3
+ describe('DaedalusSpinner', () => {
4
+ let spinner;
5
+ let stdoutWriteSpy;
6
+ beforeEach(() => {
7
+ // Mock stdout.write and isTTY
8
+ stdoutWriteSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
9
+ Object.defineProperty(process.stdout, 'isTTY', {
10
+ value: true,
11
+ writable: true,
12
+ });
13
+ // Reset global state
14
+ globalThis.isTui = false;
15
+ globalThis.tuiLogBox = undefined;
16
+ globalThis.tuiScreen = undefined;
17
+ spinner = new DaedalusSpinner();
18
+ });
19
+ afterEach(() => {
20
+ stdoutWriteSpy.mockRestore();
21
+ });
22
+ it('creates a spinner with default options', () => {
23
+ expect(spinner).toBeInstanceOf(DaedalusSpinner);
24
+ expect(spinner).toHaveProperty('frames', DaedalusSpinner.GEAR_FRAMES);
25
+ expect(spinner).toHaveProperty('interval', 100);
26
+ expect(spinner).toHaveProperty('text', 'Daedalus thinking');
27
+ });
28
+ it('creates a spinner with custom options', () => {
29
+ const customSpinner = new DaedalusSpinner({
30
+ text: 'Custom text',
31
+ frames: DaedalusSpinner.MAZE_FRAMES,
32
+ interval: 200,
33
+ });
34
+ expect(customSpinner).toHaveProperty('text', 'Custom text');
35
+ expect(customSpinner).toHaveProperty('frames', DaedalusSpinner.MAZE_FRAMES);
36
+ expect(customSpinner).toHaveProperty('interval', 200);
37
+ });
38
+ it('starts the spinner', () => {
39
+ spinner.start();
40
+ expect(spinner).toHaveProperty('running', true);
41
+ });
42
+ it('does not start if already running', () => {
43
+ spinner.start();
44
+ const initialRunning = spinner['running'];
45
+ spinner.start();
46
+ expect(spinner).toHaveProperty('running', initialRunning);
47
+ });
48
+ it('stops the spinner', () => {
49
+ spinner.start();
50
+ spinner.stop();
51
+ expect(spinner).toHaveProperty('running', false);
52
+ });
53
+ it('succeeds and stops with success message', () => {
54
+ spinner.start();
55
+ spinner.succeed('Operation completed');
56
+ expect(spinner).toHaveProperty('running', false);
57
+ expect(stdoutWriteSpy).toHaveBeenCalledWith('\x1b[32m\u2714\x1b[0m Operation completed\n');
58
+ });
59
+ it('fails and stops with error message', () => {
60
+ spinner.start();
61
+ spinner.fail('Operation failed');
62
+ expect(spinner).toHaveProperty('running', false);
63
+ expect(stdoutWriteSpy).toHaveBeenCalledWith('\x1b[31m\u2718\x1b[0m Operation failed\n');
64
+ });
65
+ it('updates text correctly', () => {
66
+ spinner.updateText('New text');
67
+ expect(spinner).toHaveProperty('text', 'New text');
68
+ });
69
+ it('handles TUI mode correctly', () => {
70
+ globalThis.isTui = true;
71
+ spinner.start();
72
+ expect(stdoutWriteSpy).not.toHaveBeenCalled();
73
+ });
74
+ });
75
+ //# sourceMappingURL=daedalus-spinner.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daedalus-spinner.test.js","sourceRoot":"","sources":["../../src/tools/daedalus-spinner.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { Logger } from './logger.js';
2
+ export declare class MissingDependencyError extends Error {
3
+ dependency?: string | undefined;
4
+ constructor(message: string, dependency?: string | undefined);
5
+ }
6
+ /**
7
+ * Checks if a command is available in the system PATH
8
+ */
9
+ export declare function checkCommand(command: string, logger?: Logger): Promise<boolean>;
10
+ /**
11
+ * Ensures a required dependency is available, throwing if not found
12
+ */
13
+ export declare function ensureCommand(command: string, logger?: Logger): Promise<void>;
14
+ /**
15
+ * Checks multiple dependencies and returns any that are missing
16
+ */
17
+ export declare function checkDependencies(commands: string[], logger?: Logger): Promise<string[]>;
18
+ /**
19
+ * Provides a friendly error message when a dependency is missing
20
+ */
21
+ export declare function getDependencyHelp(command: string): string;
22
+ //# sourceMappingURL=deps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../src/tools/deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,qBAAa,sBAAuB,SAAQ,KAAK;IACX,UAAU,CAAC,EAAE,MAAM;gBAA3C,OAAO,EAAE,MAAM,EAAS,UAAU,CAAC,EAAE,MAAM,YAAA;CAIxD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBrF;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOzD"}
@@ -0,0 +1,70 @@
1
+ import * as child from 'child_process';
2
+ export class MissingDependencyError extends Error {
3
+ dependency;
4
+ constructor(message, dependency) {
5
+ super(message);
6
+ this.dependency = dependency;
7
+ this.name = 'MissingDependencyError';
8
+ }
9
+ }
10
+ /**
11
+ * Checks if a command is available in the system PATH
12
+ */
13
+ export async function checkCommand(command, logger) {
14
+ try {
15
+ // On Windows, we need to handle .exe extensions
16
+ const platform = process.platform;
17
+ const commandsToTry = [command];
18
+ if (platform === 'win32') {
19
+ commandsToTry.push(`${command}.exe`);
20
+ }
21
+ for (const cmd of commandsToTry) {
22
+ await new Promise((resolve) => {
23
+ child.exec(cmd + ' --version', (err) => {
24
+ resolve(err ? false : true);
25
+ });
26
+ });
27
+ }
28
+ return true;
29
+ }
30
+ catch {
31
+ if (logger) {
32
+ logger.debug(`Command '${command}' not found or failed version check`);
33
+ }
34
+ return false;
35
+ }
36
+ }
37
+ /**
38
+ * Ensures a required dependency is available, throwing if not found
39
+ */
40
+ export async function ensureCommand(command, logger) {
41
+ const available = await checkCommand(command, logger);
42
+ if (!available) {
43
+ throw new MissingDependencyError(`Required command '${command}' is not available in your PATH.\nPlease install ${command} and ensure it's accessible from the command line.`, command);
44
+ }
45
+ }
46
+ /**
47
+ * Checks multiple dependencies and returns any that are missing
48
+ */
49
+ export async function checkDependencies(commands, logger) {
50
+ const missing = [];
51
+ for (const cmd of commands) {
52
+ const available = await checkCommand(cmd, logger);
53
+ if (!available) {
54
+ missing.push(cmd);
55
+ }
56
+ }
57
+ return missing;
58
+ }
59
+ /**
60
+ * Provides a friendly error message when a dependency is missing
61
+ */
62
+ export function getDependencyHelp(command) {
63
+ const helpMap = {
64
+ git: 'Install Git from https://git-scm.com/',
65
+ node: 'Node.js is required. Download from https://nodejs.org/',
66
+ npm: 'npm comes with Node.js. Install Node.js first.',
67
+ };
68
+ return helpMap[command] || `Please install ${command}.`;
69
+ }
70
+ //# sourceMappingURL=deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/tools/deps.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,eAAe,CAAC;AAGvC,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IACX;IAApC,YAAY,OAAe,EAAS,UAAmB;QACrD,KAAK,CAAC,OAAO,CAAC,CAAC;QADmB,eAAU,GAAV,UAAU,CAAS;QAErD,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAe,EAAE,MAAe;IACjE,IAAI,CAAC;QACH,gDAAgD;QAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,MAAM,aAAa,GAAG,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,GAAG,OAAO,MAAM,CAAC,CAAC;QACvC,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC5B,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE;oBACrC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC9B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,YAAY,OAAO,qCAAqC,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,MAAe;IAEf,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACtD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,sBAAsB,CAC9B,qBAAqB,OAAO,oDAAoD,OAAO,oDAAoD,EAC3I,OAAO,CACR,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAkB,EAClB,MAAe;IAEf,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,OAAO,GAA2B;QACtC,GAAG,EAAE,uCAAuC;QAC5C,IAAI,EAAE,wDAAwD;QAC9D,GAAG,EAAE,gDAAgD;KACtD,CAAC;IACF,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,kBAAkB,OAAO,GAAG,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { type DaedalusConfig } from '../config/index.js';
2
+ export interface Logger {
3
+ log(...args: any[]): void;
4
+ error(...args: any[]): void;
5
+ debug(...args: any[]): void;
6
+ }
7
+ export declare class ConsoleLogger implements Logger {
8
+ log(...args: any[]): void;
9
+ error(...args: any[]): void;
10
+ debug(...args: any[]): void;
11
+ }
12
+ export declare class SilentLogger implements Logger {
13
+ log(...args: any[]): void;
14
+ error(...args: any[]): void;
15
+ debug(...args: any[]): void;
16
+ }
17
+ export declare function createLogger(useColors?: boolean, silent?: boolean): Logger;
18
+ export declare function configureLogger(config: DaedalusConfig): Logger;
19
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/tools/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,MAAM,WAAW,MAAM;IACrB,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;CAC7B;AAED,qBAAa,aAAc,YAAW,MAAM;IAC1C,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAIzB,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAI3B,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;CAK5B;AAED,qBAAa,YAAa,YAAW,MAAM;IACzC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IACzB,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAC3B,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;CAC5B;AAED,wBAAgB,YAAY,CAAC,SAAS,UAAO,EAAE,MAAM,UAAQ,GAAG,MAAM,CAKrE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAI9D"}
@@ -0,0 +1,30 @@
1
+ export class ConsoleLogger {
2
+ log(...args) {
3
+ console.log(...args);
4
+ }
5
+ error(...args) {
6
+ console.error(...args);
7
+ }
8
+ debug(...args) {
9
+ if (process.env.DAedalus_DEBUG === 'true') {
10
+ console.log('[DEBUG]', ...args);
11
+ }
12
+ }
13
+ }
14
+ export class SilentLogger {
15
+ log(...args) { }
16
+ error(...args) { }
17
+ debug(...args) { }
18
+ }
19
+ export function createLogger(useColors = true, silent = false) {
20
+ if (silent) {
21
+ return new SilentLogger();
22
+ }
23
+ return new ConsoleLogger();
24
+ }
25
+ export function configureLogger(config) {
26
+ const { tui = false } = config.ui || {};
27
+ const silent = config.ui?.tui === true;
28
+ return createLogger(!silent, silent);
29
+ }
30
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/tools/logger.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,aAAa;IACxB,GAAG,CAAC,GAAG,IAAW;QAChB,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,GAAG,IAAW;QAClB,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,GAAG,IAAW;QAClB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,YAAY;IACvB,GAAG,CAAC,GAAG,IAAW,IAAS,CAAC;IAC5B,KAAK,CAAC,GAAG,IAAW,IAAS,CAAC;IAC9B,KAAK,CAAC,GAAG,IAAW,IAAS,CAAC;CAC/B;AAED,MAAM,UAAU,YAAY,CAAC,SAAS,GAAG,IAAI,EAAE,MAAM,GAAG,KAAK;IAC3D,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,IAAI,YAAY,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO,IAAI,aAAa,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,MAAM,EAAE,GAAG,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,KAAK,IAAI,CAAC;IACvC,OAAO,YAAY,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=logger.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.test.d.ts","sourceRoot":"","sources":["../../src/tools/logger.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { ConsoleLogger, SilentLogger, createLogger, configureLogger } from './logger.js';
3
+ describe('Logger', () => {
4
+ it('creates a ConsoleLogger that logs to console', () => {
5
+ const logger = new ConsoleLogger();
6
+ const logSpy = vi.spyOn(console, 'log');
7
+ logger.log('test message');
8
+ expect(logSpy).toHaveBeenCalledWith('test message');
9
+ });
10
+ it('creates a ConsoleLogger that errors to console.error', () => {
11
+ const logger = new ConsoleLogger();
12
+ const errorSpy = vi.spyOn(console, 'error');
13
+ logger.error('test error');
14
+ expect(errorSpy).toHaveBeenCalledWith('test error');
15
+ });
16
+ it('ConsoleLogger debug only logs when DAedalus_DEBUG is true', () => {
17
+ const originalDebug = process.env.DAedalus_DEBUG;
18
+ // Test with debug enabled
19
+ process.env.DAedalus_DEBUG = 'true';
20
+ const logger = new ConsoleLogger();
21
+ const debugSpy = vi.spyOn(console, 'log');
22
+ logger.debug('debug message');
23
+ expect(debugSpy).toHaveBeenCalledWith('[DEBUG]', 'debug message');
24
+ // Test with debug disabled (restore original)
25
+ process.env.DAedalus_DEBUG = originalDebug;
26
+ debugSpy.mockClear();
27
+ logger.debug('should not appear');
28
+ expect(debugSpy).not.toHaveBeenCalled();
29
+ });
30
+ it('creates a SilentLogger that does nothing', () => {
31
+ const logger = new SilentLogger();
32
+ const logSpy = vi.spyOn(console, 'log');
33
+ const errorSpy = vi.spyOn(console, 'error');
34
+ logger.log('this should not be logged');
35
+ logger.error('this should not be logged');
36
+ logger.debug('this should not be logged');
37
+ expect(logSpy).not.toHaveBeenCalled();
38
+ expect(errorSpy).not.toHaveBeenCalled();
39
+ });
40
+ it('createLogger returns SilentLogger when silent=true', () => {
41
+ const logger = createLogger(true, true);
42
+ expect(logger instanceof SilentLogger).toBe(true);
43
+ });
44
+ it('createLogger returns ConsoleLogger when silent=false', () => {
45
+ const logger = createLogger(false, false);
46
+ expect(logger instanceof ConsoleLogger).toBe(true);
47
+ });
48
+ it('configureLogger creates SilentLogger when tui=true', () => {
49
+ const config = { ui: { tui: true } };
50
+ const logger = configureLogger(config);
51
+ expect(logger instanceof SilentLogger).toBe(true);
52
+ });
53
+ it('configureLogger creates ConsoleLogger when tui=false', () => {
54
+ const config = { ui: { tui: false } };
55
+ const logger = configureLogger(config);
56
+ expect(logger instanceof ConsoleLogger).toBe(true);
57
+ });
58
+ });
59
+ //# sourceMappingURL=logger.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../../src/tools/logger.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEzF,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC3B,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAEjD,0BAA0B;QAC1B,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC9B,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QAElE,8CAA8C;QAC9C,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,aAAa,CAAC;QAC3C,QAAQ,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAClC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACtC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,YAAY,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,YAAY,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,eAAe,CAAC,MAAa,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,YAAY,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,eAAe,CAAC,MAAa,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,YAAY,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ export declare class REPL {
2
+ private rl;
3
+ private context;
4
+ private logger;
5
+ constructor(projectRoot?: string);
6
+ private setupCommands;
7
+ private executeCommand;
8
+ private showHelp;
9
+ private showLast;
10
+ private editFile;
11
+ private detectEditor;
12
+ private listActiveFiles;
13
+ private clearScreen;
14
+ private showHistory;
15
+ private showContext;
16
+ prompt(): void;
17
+ close(): void;
18
+ }
19
+ /**
20
+ * Starts the interactive REPL environment
21
+ */
22
+ export declare function startRepl(projectRoot?: string): REPL;
23
+ export default startRepl;
24
+ //# sourceMappingURL=repl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/tools/repl.ts"],"names":[],"mappings":"AAYA,qBAAa,IAAI;IACf,OAAO,CAAC,EAAE,CAAqB;IAC/B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAAC;gBAEH,WAAW,GAAE,MAAsB;IAiB/C,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,cAAc;IAgCtB,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,QAAQ;IAuBhB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,WAAW;IAYZ,MAAM,IAAI,IAAI;IAId,KAAK,IAAI,IAAI;CAGrB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,GAAE,MAAsB,GAAG,IAAI,CAKnE;AAGD,eAAe,SAAS,CAAC"}
@@ -0,0 +1,170 @@
1
+ import path from 'path';
2
+ import readline from 'readline';
3
+ import { createLogger } from './logger.js';
4
+ export class REPL {
5
+ rl;
6
+ context;
7
+ logger;
8
+ constructor(projectRoot = process.cwd()) {
9
+ this.context = {
10
+ history: [],
11
+ activeFiles: new Set(),
12
+ };
13
+ this.logger = createLogger();
14
+ this.rl = readline.createInterface({
15
+ input: process.stdin,
16
+ output: process.stdout,
17
+ prompt: 'daedalus> ',
18
+ });
19
+ this.setupCommands();
20
+ this.prompt();
21
+ }
22
+ setupCommands() {
23
+ this.rl.on('line', (input) => {
24
+ const trimmed = input.trim();
25
+ if (!trimmed)
26
+ return;
27
+ // Add to history
28
+ this.context.history.push(trimmed);
29
+ if (this.context.history.length > 50) {
30
+ this.context.history.shift();
31
+ }
32
+ this.context.lastCommand = trimmed;
33
+ this.executeCommand(trimmed);
34
+ }).on('close', () => {
35
+ this.logger.log('REPL session ended.');
36
+ process.exit(0);
37
+ });
38
+ }
39
+ executeCommand(command) {
40
+ const parts = command.split(' ');
41
+ const cmd = parts[0].toLowerCase();
42
+ const args = parts.slice(1);
43
+ switch (cmd) {
44
+ case 'help':
45
+ this.showHelp();
46
+ break;
47
+ case 'last':
48
+ this.showLast();
49
+ break;
50
+ case 'edit':
51
+ this.editFile(args[0]);
52
+ break;
53
+ case 'files':
54
+ this.listActiveFiles();
55
+ break;
56
+ case 'clear':
57
+ this.clearScreen();
58
+ break;
59
+ case 'history':
60
+ this.showHistory();
61
+ break;
62
+ case 'context':
63
+ this.showContext();
64
+ break;
65
+ default:
66
+ this.logger.error(`Unknown command: ${command}. Type 'help' for available commands.`);
67
+ }
68
+ }
69
+ showHelp() {
70
+ this.logger.log('Available commands:');
71
+ this.logger.log(' help - Show this help message');
72
+ this.logger.log(' last - Show last edited file and command');
73
+ this.logger.log(' edit <file> - Open the specified file in your editor');
74
+ this.logger.log(' files - List active files in context');
75
+ this.logger.log(' clear - Clear screen');
76
+ this.logger.log(' history - Show command history');
77
+ this.logger.log(' context - Show current context');
78
+ this.logger.log(' exit - Exit REPL');
79
+ }
80
+ showLast() {
81
+ if (this.context.lastFile) {
82
+ this.logger.log(`Last edited file: ${this.context.lastFile}`);
83
+ }
84
+ if (this.context.lastCommand) {
85
+ this.logger.log(`Last command: ${this.context.lastCommand}`);
86
+ }
87
+ }
88
+ editFile(filePath) {
89
+ if (!filePath) {
90
+ this.logger.error('Please specify a file path: edit <file>');
91
+ return;
92
+ }
93
+ const absolutePath = path.resolve(filePath);
94
+ this.context.lastFile = filePath;
95
+ this.context.activeFiles.add(filePath);
96
+ this.logger.log(`Opening ${filePath} in editor...`);
97
+ // Try to detect common editors and open them
98
+ const editor = this.detectEditor();
99
+ if (editor) {
100
+ this.logger.log(`Using editor: ${editor}`);
101
+ // In a real implementation, you would spawn the editor here
102
+ // For now, we just log what would happen
103
+ }
104
+ else {
105
+ this.logger.log('Could not detect editor. Please open the file manually.');
106
+ }
107
+ }
108
+ detectEditor() {
109
+ // Simple editor detection (would be more comprehensive in production)
110
+ const editors = ['code', 'vim', 'nano', 'notepad++'];
111
+ for (const editor of editors) {
112
+ // This would check if editor is in PATH
113
+ // For demo purposes, we'll just return a placeholder
114
+ }
115
+ return 'code'; // VS Code as default assumption
116
+ }
117
+ listActiveFiles() {
118
+ if (this.context.activeFiles.size === 0) {
119
+ this.logger.log('No active files.');
120
+ return;
121
+ }
122
+ this.logger.log('Active files:');
123
+ for (const file of this.context.activeFiles) {
124
+ this.logger.log(` - ${file}`);
125
+ }
126
+ }
127
+ clearScreen() {
128
+ process.stdout.write('\x1b[2J\x1b[0f'); // ANSI clear screen
129
+ this.logger.log('Screen cleared.');
130
+ }
131
+ showHistory() {
132
+ if (this.context.history.length === 0) {
133
+ this.logger.log('No command history.');
134
+ return;
135
+ }
136
+ this.logger.log('Command history:');
137
+ this.context.history.forEach((cmd, idx) => {
138
+ this.logger.log(` ${idx + 1}. ${cmd}`);
139
+ });
140
+ }
141
+ showContext() {
142
+ this.logger.log('=== REPL Context ===');
143
+ this.logger.log(`History size: ${this.context.history.length}`);
144
+ this.logger.log(`Active files: ${this.context.activeFiles.size}`);
145
+ if (this.context.lastFile) {
146
+ this.logger.log(`Last file: ${this.context.lastFile}`);
147
+ }
148
+ if (this.context.lastCommand) {
149
+ this.logger.log(`Last command: ${this.context.lastCommand}`);
150
+ }
151
+ }
152
+ prompt() {
153
+ this.rl.prompt();
154
+ }
155
+ close() {
156
+ this.rl.close();
157
+ }
158
+ }
159
+ /**
160
+ * Starts the interactive REPL environment
161
+ */
162
+ export function startRepl(projectRoot = process.cwd()) {
163
+ const repl = new REPL(projectRoot);
164
+ const logger = createLogger();
165
+ logger.log('Daedalus REPL started. Type "help" for available commands.');
166
+ return repl;
167
+ }
168
+ // Export for direct use
169
+ export default startRepl;
170
+ //# sourceMappingURL=repl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.js","sourceRoot":"","sources":["../../src/tools/repl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { Logger } from './logger.js';
2
+ export interface Timer {
3
+ start(): void;
4
+ stop(): number;
5
+ reset(): void;
6
+ }
7
+ export declare class ExecutionTimer implements Timer {
8
+ private startTime?;
9
+ private elapsed;
10
+ private readonly logger;
11
+ constructor(logger: Logger);
12
+ start(): void;
13
+ stop(): number;
14
+ reset(): void;
15
+ }
16
+ /**
17
+ * Wraps an async function and logs its execution time
18
+ */
19
+ export declare function timed<T>(fn: () => Promise<T>, label: string, logger: Logger): Promise<T>;
20
+ /**
21
+ * Wraps a synchronous function and logs its execution time
22
+ */
23
+ export declare function timedSync<T>(fn: () => T, label: string, logger: Logger): T;
24
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/tools/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,WAAW,KAAK;IACpB,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,MAAM,CAAC;IACf,KAAK,IAAI,IAAI,CAAC;CACf;AAED,qBAAa,cAAe,YAAW,KAAK;IAC1C,OAAO,CAAC,SAAS,CAAC,CAAmB;IACrC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,MAAM;IAI1B,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,MAAM;IAWd,KAAK,IAAI,IAAI;CAId;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,CAAC,EAC3B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,CAAC,CAAC,CASZ;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EACzB,EAAE,EAAE,MAAM,CAAC,EACX,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,CAAC,CASH"}