daedalus-cli 3.2.1 → 3.3.1

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 (51) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/formatting.d.ts +1 -1
  3. package/dist/formatting.d.ts.map +1 -1
  4. package/dist/formatting.js +7 -4
  5. package/dist/formatting.js.map +1 -1
  6. package/dist/formatting.test.js +33 -2
  7. package/dist/formatting.test.js.map +1 -1
  8. package/dist/model.d.ts.map +1 -1
  9. package/dist/model.js +62 -17
  10. package/dist/model.js.map +1 -1
  11. package/dist/model.test.js +195 -1
  12. package/dist/model.test.js.map +1 -1
  13. package/dist/router/index.d.ts.map +1 -1
  14. package/dist/router/index.js +2 -0
  15. package/dist/router/index.js.map +1 -1
  16. package/dist/router/index.test.js +64 -0
  17. package/dist/router/index.test.js.map +1 -1
  18. package/dist/router/types.d.ts +5 -0
  19. package/dist/router/types.d.ts.map +1 -1
  20. package/dist/system-prompt.d.ts +1 -1
  21. package/dist/system-prompt.d.ts.map +1 -1
  22. package/dist/system-prompt.js +1 -0
  23. package/dist/system-prompt.js.map +1 -1
  24. package/dist/tools/builtin/files.d.ts.map +1 -1
  25. package/dist/tools/builtin/files.js +22 -3
  26. package/dist/tools/builtin/files.js.map +1 -1
  27. package/dist/tools/builtin/files.test.js +52 -0
  28. package/dist/tools/builtin/files.test.js.map +1 -1
  29. package/dist/tools/builtin/patch-utils.d.ts.map +1 -1
  30. package/dist/tools/builtin/patch-utils.js +2 -0
  31. package/dist/tools/builtin/patch-utils.js.map +1 -1
  32. package/dist/tools/builtin/terminal.d.ts.map +1 -1
  33. package/dist/tools/builtin/terminal.js +70 -23
  34. package/dist/tools/builtin/terminal.js.map +1 -1
  35. package/dist/tools/builtin/terminal.test.js +68 -0
  36. package/dist/tools/builtin/terminal.test.js.map +1 -1
  37. package/dist/tools/daedalus-spinner.d.ts +4 -0
  38. package/dist/tools/daedalus-spinner.d.ts.map +1 -1
  39. package/dist/tools/daedalus-spinner.js +32 -7
  40. package/dist/tools/daedalus-spinner.js.map +1 -1
  41. package/dist/tools/daedalus-spinner.test.js +5 -2
  42. package/dist/tools/daedalus-spinner.test.js.map +1 -1
  43. package/dist/tools/git-checkpoint.d.ts +8 -0
  44. package/dist/tools/git-checkpoint.d.ts.map +1 -0
  45. package/dist/tools/git-checkpoint.js +62 -0
  46. package/dist/tools/git-checkpoint.js.map +1 -0
  47. package/dist/tools/git-checkpoint.test.d.ts +2 -0
  48. package/dist/tools/git-checkpoint.test.d.ts.map +1 -0
  49. package/dist/tools/git-checkpoint.test.js +82 -0
  50. package/dist/tools/git-checkpoint.test.js.map +1 -0
  51. package/package.json +1 -1
@@ -0,0 +1,82 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import fs from 'fs';
3
+ import os from 'os';
4
+ import path from 'path';
5
+ import { execSync } from 'child_process';
6
+ import { createGitCheckpoint, restoreGitCheckpoint } from './git-checkpoint.js';
7
+ vi.mock('../config/index.js', () => ({
8
+ loadConfig: vi.fn(),
9
+ }));
10
+ import { loadConfig } from '../config/index.js';
11
+ function makeTmpDir() {
12
+ return fs.mkdtempSync(path.join(os.tmpdir(), 'daedalus-git-checkpoint-'));
13
+ }
14
+ function git(dir, ...args) {
15
+ return execSync(['git', ...args].join(' '), { cwd: dir, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] }).trim();
16
+ }
17
+ function initRepo(dir) {
18
+ fs.mkdirSync(dir, { recursive: true });
19
+ git(dir, 'init');
20
+ git(dir, 'config', 'user.email', 'test@daedalus.local');
21
+ git(dir, 'config', 'user.name', 'Daedalus Test');
22
+ git(dir, 'config', 'core.autocrlf', 'false');
23
+ }
24
+ describe('git-checkpoint', () => {
25
+ let tmpDir;
26
+ beforeEach(() => {
27
+ tmpDir = makeTmpDir();
28
+ loadConfig.mockReturnValue({ safety: { protectGit: true } });
29
+ });
30
+ afterEach(() => {
31
+ fs.rmSync(tmpDir, { recursive: true, force: true });
32
+ });
33
+ it('creates a checkpoint and restores a later modification', () => {
34
+ initRepo(tmpDir);
35
+ const file = path.join(tmpDir, 'a.txt');
36
+ const other = path.join(tmpDir, 'b.txt');
37
+ fs.writeFileSync(file, 'v1\n');
38
+ fs.writeFileSync(other, 'v1\n');
39
+ git(tmpDir, 'add', '.');
40
+ git(tmpDir, 'commit', '-m', 'init');
41
+ fs.writeFileSync(other, 'v2\n');
42
+ const cp = createGitCheckpoint(tmpDir);
43
+ expect(cp.ok).toBe(true);
44
+ expect(cp.hash).toBeTruthy();
45
+ fs.writeFileSync(file, 'v2\n');
46
+ const restored = restoreGitCheckpoint(tmpDir, cp.hash);
47
+ expect(restored).toBe(true);
48
+ expect(fs.readFileSync(file, 'utf8')).toBe('v1\n');
49
+ expect(fs.readFileSync(other, 'utf8')).toBe('v2\n');
50
+ });
51
+ it('returns not-a-git-repo for a plain temp dir', () => {
52
+ const cp = createGitCheckpoint(tmpDir);
53
+ expect(cp.ok).toBe(false);
54
+ expect(cp.reason).toBe('not a git repo');
55
+ });
56
+ it('returns git-protection-disabled when protectGit is false', () => {
57
+ initRepo(tmpDir);
58
+ loadConfig.mockReturnValue({ safety: { protectGit: false } });
59
+ const cp = createGitCheckpoint(tmpDir);
60
+ expect(cp.ok).toBe(false);
61
+ expect(cp.reason).toBe('git protection disabled');
62
+ });
63
+ it('returns no-changes when the working tree is clean', () => {
64
+ initRepo(tmpDir);
65
+ const file = path.join(tmpDir, 'a.txt');
66
+ fs.writeFileSync(file, 'v1\n');
67
+ git(tmpDir, 'add', '.');
68
+ git(tmpDir, 'commit', '-m', 'init');
69
+ const cp = createGitCheckpoint(tmpDir);
70
+ expect(cp.ok).toBe(false);
71
+ expect(cp.reason).toBe('no changes to snapshot');
72
+ });
73
+ it('returns false from restore for an invalid hash', () => {
74
+ initRepo(tmpDir);
75
+ const file = path.join(tmpDir, 'a.txt');
76
+ fs.writeFileSync(file, 'v1\n');
77
+ git(tmpDir, 'add', '.');
78
+ git(tmpDir, 'commit', '-m', 'init');
79
+ expect(restoreGitCheckpoint(tmpDir, 'deadbeef00000000000000000000000000000000')).toBe(false);
80
+ });
81
+ });
82
+ //# sourceMappingURL=git-checkpoint.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-checkpoint.test.js","sourceRoot":"","sources":["../../src/tools/git-checkpoint.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "daedalus-cli",
3
- "version": "3.2.1",
3
+ "version": "3.3.1",
4
4
  "description": "Local-first AI coding CLI with embedded model router, multi-agent orchestration, and codebase indexing",
5
5
  "type": "module",
6
6
  "bin": {