daedalus-cli 1.72.0 → 1.74.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.
- package/CHANGELOG.md +19 -0
- package/README.md +2 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +180 -0
- package/dist/commands.js.map +1 -1
- package/dist/config/stack.d.ts.map +1 -1
- package/dist/config/stack.js +4 -2
- package/dist/config/stack.js.map +1 -1
- package/dist/config/stack.test.js +2 -2
- package/dist/config/stack.test.js.map +1 -1
- package/dist/config/systemInfo.d.ts +15 -0
- package/dist/config/systemInfo.d.ts.map +1 -0
- package/dist/config/systemInfo.js +49 -0
- package/dist/config/systemInfo.js.map +1 -0
- package/dist/config/systemInfo.test.d.ts +2 -0
- package/dist/config/systemInfo.test.d.ts.map +1 -0
- package/dist/config/systemInfo.test.js +34 -0
- package/dist/config/systemInfo.test.js.map +1 -0
- package/dist/session/branching.d.ts +19 -0
- package/dist/session/branching.d.ts.map +1 -0
- package/dist/session/branching.js +159 -0
- package/dist/session/branching.js.map +1 -0
- package/dist/session/branching.test.d.ts +2 -0
- package/dist/session/branching.test.d.ts.map +1 -0
- package/dist/session/branching.test.js +89 -0
- package/dist/session/branching.test.js.map +1 -0
- package/dist/session/gitMerger.d.ts +7 -0
- package/dist/session/gitMerger.d.ts.map +1 -0
- package/dist/session/gitMerger.js +32 -0
- package/dist/session/gitMerger.js.map +1 -0
- package/dist/session/manager.d.ts +2 -0
- package/dist/session/manager.d.ts.map +1 -1
- package/dist/session/manager.js +6 -0
- package/dist/session/manager.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
# [1.74.0](https://github.com/bgill55/daedalus/compare/v1.73.0...v1.74.0) (2026-07-26)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **config:** add OS & System Diagnostics Awareness module and system prompt headers ([daf9147](https://github.com/bgill55/daedalus/commit/daf914787d08a21fad9a4d8d570d87db14ae3066))
|
|
7
|
+
|
|
8
|
+
# [1.73.0](https://github.com/bgill55/daedalus/compare/v1.72.0...v1.73.0) (2026-07-26)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **tsc:** add public db getter to SessionManager and pass loaded session object to initializeSessionState ([176b703](https://github.com/bgill55/daedalus/commit/176b70387ca82e6e242261b54b0a5e4a5c9b4afa))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Features
|
|
17
|
+
|
|
18
|
+
* **session:** implement Chat-History Branching system (/session branch, checkout, list, merge) ([1658410](https://github.com/bgill55/daedalus/commit/1658410b19f1de1c7129ef13952bdcb4be19733d))
|
|
19
|
+
|
|
1
20
|
# [1.72.0](https://github.com/bgill55/daedalus/compare/v1.71.2...v1.72.0) (2026-07-26)
|
|
2
21
|
|
|
3
22
|
|
package/README.md
CHANGED
|
@@ -160,7 +160,7 @@ AI assistance without:
|
|
|
160
160
|
| `/convention [text]` | Add a project convention to memory |
|
|
161
161
|
| `/memory` | View project memory (facts & conventions) |
|
|
162
162
|
| `/extract` | Manually extract facts from session |
|
|
163
|
-
| `/session [name]` | Manage chat sessions
|
|
163
|
+
| `/session [name]` | Manage chat sessions & branches: /session <list|load|new|branch|checkout|merge|export> |
|
|
164
164
|
|
|
165
165
|
### Context & CLI Utilities
|
|
166
166
|
|
|
@@ -183,6 +183,7 @@ AI assistance without:
|
|
|
183
183
|
|
|
184
184
|
| Command | Description |
|
|
185
185
|
|---------|-------------|
|
|
186
|
+
| `/lite` | Show Daedalus Lite documentation |
|
|
186
187
|
| `/stats` / `stats` | Display session analytics, token usage, index count, and router status |
|
|
187
188
|
| `/onboard` | First-time setup — discover local models, configure, and test |
|
|
188
189
|
| `/tui` | Toggle the Terminal User Interface (TUI) dashboard |
|
package/dist/commands.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAGA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAKhC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAGA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAKhC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAgBtD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,yBAAyB,EAAE,MAAM,MAAM,CAAC;IACxC,kBAAkB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,QAAQ,EAAE,CAAA;KAAE,CAAC,CAAC;IACvH,qBAAqB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACtF,EAAE,EAAE,QAAQ,CAAC,SAAS,CAAC;IACvB,sBAAsB,EAAE,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,WAAW,EAAE,CAAC;QAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,KAAK,EAAE,UAAU,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IAC7I,gBAAgB,EAAE,MAAM,MAAM,CAAC;IAC/B,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,cAAc,EAAE,MAAM,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;CACzE;AAED,eAAO,MAAM,YAAY,EAAE,OAAO,EA85EjC,CAAC;AAEF,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAqCzF"}
|
package/dist/commands.js
CHANGED
|
@@ -11,6 +11,7 @@ import { printUserTurn, turnSeparator } from './formatting.js';
|
|
|
11
11
|
import { getClipboardText, getClipboardImage } from './clipboard.js';
|
|
12
12
|
import { spawnBackgroundAgent } from './agents/background.js';
|
|
13
13
|
import { handleSpecCommand } from './agents/loop.js';
|
|
14
|
+
import { createSessionBranch, checkoutSessionBranch, listSessionBranches, mergeSessionBranch, } from './session/branching.js';
|
|
14
15
|
export const commandsList = [
|
|
15
16
|
{
|
|
16
17
|
name: '/add',
|
|
@@ -594,6 +595,185 @@ export const commandsList = [
|
|
|
594
595
|
console.log(pc.green('[OK] Coding style saved. It will be injected into every session.'));
|
|
595
596
|
}
|
|
596
597
|
},
|
|
598
|
+
{
|
|
599
|
+
name: '/lite',
|
|
600
|
+
description: 'Show Daedalus Lite documentation',
|
|
601
|
+
usage: '/lite',
|
|
602
|
+
helpText: 'Display link to Daedalus Lite documentation for building your own version of Daedalus',
|
|
603
|
+
execute: async (_args, _ctx) => {
|
|
604
|
+
console.log(pc.bold('\n--- Daedalus Lite Documentation ---'));
|
|
605
|
+
console.log(pc.gray(' Build your own version of Daedalus:'));
|
|
606
|
+
console.log(pc.cyan(' https://bgill55.github.io/daedalus-lite/'));
|
|
607
|
+
console.log(pc.bold('----------------------------------'));
|
|
608
|
+
}
|
|
609
|
+
},
|
|
610
|
+
{
|
|
611
|
+
name: '/session',
|
|
612
|
+
description: 'Manage chat sessions & branches: /session <list|load|new|branch|checkout|merge|export>',
|
|
613
|
+
usage: '/session <list|load|new|delete|export|branch|checkout|merge|branches> [args]',
|
|
614
|
+
helpText: 'Manage, snapshot, branch, load, save, and export conversation sessions.\n\nSubcommands:\n list List all saved sessions for current project\n load <id> Load a saved session by ID\n new [title] Start a new conversation session\n delete <id> Delete a saved session by ID\n export [filepath] Export the current session transcript to Markdown\n search <query> Search past sessions for keyword\n rename <title> Rename the active session\n branch <name> Create a new session branch snapshot from current state\n checkout <name> Switch active REPL session context to an existing branch\n branches Display hierarchical tree of session branches\n merge <name> Merge code patches & trajectory turns from branch into current session',
|
|
615
|
+
execute: async (args, ctx) => {
|
|
616
|
+
const parts = args.trim().split(/\s+/);
|
|
617
|
+
const subcommand = parts[0]?.toLowerCase();
|
|
618
|
+
const subcommandArg = parts.slice(1).join(' ').trim();
|
|
619
|
+
const db = ctx.sessionManager.db;
|
|
620
|
+
const sessionDir = path.join(ctx.configDir, 'sessions');
|
|
621
|
+
const workspaceRoot = process.cwd();
|
|
622
|
+
const currentSessionId = ctx.toolContext.sessionId || 'default';
|
|
623
|
+
if (subcommand === 'branch') {
|
|
624
|
+
if (!subcommandArg) {
|
|
625
|
+
console.log(pc.red('[WARN] Usage: /session branch <name>'));
|
|
626
|
+
return;
|
|
627
|
+
}
|
|
628
|
+
try {
|
|
629
|
+
const branch = createSessionBranch(db, currentSessionId, subcommandArg, workspaceRoot, sessionDir);
|
|
630
|
+
console.log(pc.green(`[OK] Created session branch '${branch.name}' (id: ${branch.id.slice(0, 8)}) at step ${branch.branch_point_step}.`));
|
|
631
|
+
}
|
|
632
|
+
catch (err) {
|
|
633
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
634
|
+
console.log(pc.red(`[ERROR] ${msg}`));
|
|
635
|
+
}
|
|
636
|
+
return;
|
|
637
|
+
}
|
|
638
|
+
if (subcommand === 'checkout') {
|
|
639
|
+
if (!subcommandArg) {
|
|
640
|
+
console.log(pc.red('[WARN] Usage: /session checkout <name>'));
|
|
641
|
+
return;
|
|
642
|
+
}
|
|
643
|
+
try {
|
|
644
|
+
const branch = checkoutSessionBranch(db, subcommandArg);
|
|
645
|
+
ctx.toolContext.sessionId = branch.id;
|
|
646
|
+
console.log(pc.green(`[OK] Switched session context to '${branch.name}' [id: ${branch.id.slice(0, 8)}].`));
|
|
647
|
+
}
|
|
648
|
+
catch (err) {
|
|
649
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
650
|
+
console.log(pc.red(`[ERROR] ${msg}`));
|
|
651
|
+
}
|
|
652
|
+
return;
|
|
653
|
+
}
|
|
654
|
+
if (subcommand === 'branches') {
|
|
655
|
+
const treeStr = listSessionBranches(db);
|
|
656
|
+
console.log(pc.bold('\n--- Session Branches ---'));
|
|
657
|
+
console.log(treeStr);
|
|
658
|
+
console.log(pc.bold('------------------------\n'));
|
|
659
|
+
return;
|
|
660
|
+
}
|
|
661
|
+
if (subcommand === 'merge') {
|
|
662
|
+
if (!subcommandArg) {
|
|
663
|
+
console.log(pc.red('[WARN] Usage: /session merge <name>'));
|
|
664
|
+
return;
|
|
665
|
+
}
|
|
666
|
+
try {
|
|
667
|
+
const result = await mergeSessionBranch(db, subcommandArg, workspaceRoot, sessionDir);
|
|
668
|
+
if (result.success) {
|
|
669
|
+
console.log(pc.green(`[OK] ${result.message}`));
|
|
670
|
+
}
|
|
671
|
+
else {
|
|
672
|
+
console.log(pc.red(`[ERROR] ${result.message}`));
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
catch (err) {
|
|
676
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
677
|
+
console.log(pc.red(`[ERROR] ${msg}`));
|
|
678
|
+
}
|
|
679
|
+
return;
|
|
680
|
+
}
|
|
681
|
+
if (!subcommand || subcommand === 'list') {
|
|
682
|
+
const sessions = ctx.sessionManager.getSessionsForProject();
|
|
683
|
+
console.log(pc.bold('\n--- Past Sessions ---'));
|
|
684
|
+
if (sessions.length === 0) {
|
|
685
|
+
console.log(pc.gray(' No past sessions found.'));
|
|
686
|
+
}
|
|
687
|
+
else {
|
|
688
|
+
sessions.forEach((s) => {
|
|
689
|
+
const currentTag = s.id === ctx.sessionManager.sessionId ? pc.green(' (current)') : '';
|
|
690
|
+
const dateStr = new Date(s.updated_at).toLocaleString();
|
|
691
|
+
console.log(` • ${pc.cyan(s.id)}${currentTag}`);
|
|
692
|
+
console.log(` Title: ${pc.white(s.title)}`);
|
|
693
|
+
console.log(` Updated: ${pc.dim(dateStr)}`);
|
|
694
|
+
});
|
|
695
|
+
}
|
|
696
|
+
console.log(pc.bold('---------------------\n'));
|
|
697
|
+
console.log(pc.gray('Use `/session load <id>` to resume a past session.'));
|
|
698
|
+
console.log(pc.gray('Use `/session new [title]` to start a new session.'));
|
|
699
|
+
console.log(pc.gray('Use `/session branch <name>` to snapshot & branch current session.'));
|
|
700
|
+
console.log(pc.gray('Use `/session checkout <name>` to switch to a branch.'));
|
|
701
|
+
console.log(pc.gray('Use `/session merge <name>` to merge branch edits.'));
|
|
702
|
+
console.log(pc.gray('Use `/session delete <id>` to delete a session.'));
|
|
703
|
+
console.log(pc.gray('Use `/session export [path]` to export session transcript.'));
|
|
704
|
+
return;
|
|
705
|
+
}
|
|
706
|
+
if (subcommand === 'load') {
|
|
707
|
+
if (!subcommandArg) {
|
|
708
|
+
console.log(pc.red('Usage: /session load <id>'));
|
|
709
|
+
return;
|
|
710
|
+
}
|
|
711
|
+
ctx.sessionManager.saveSessionState(ctx.messages, ctx.activeFiles, getSessionTodos(ctx.toolContext.sessionId));
|
|
712
|
+
const sessions = ctx.sessionManager.getSessionsForProject();
|
|
713
|
+
const target = sessions.find((s) => s.id === subcommandArg || s.id.startsWith(subcommandArg));
|
|
714
|
+
if (!target) {
|
|
715
|
+
console.log(pc.red(`Session not found: ${subcommandArg}`));
|
|
716
|
+
return;
|
|
717
|
+
}
|
|
718
|
+
const loaded = ctx.sessionManager.startSession(target.id, target.title);
|
|
719
|
+
ctx.initializeSessionState(loaded);
|
|
720
|
+
console.log(pc.green(`[OK] Loaded session: ${target.title} (${target.id})`));
|
|
721
|
+
return;
|
|
722
|
+
}
|
|
723
|
+
if (subcommand === 'new') {
|
|
724
|
+
ctx.sessionManager.saveSessionState(ctx.messages, ctx.activeFiles, getSessionTodos(ctx.toolContext.sessionId));
|
|
725
|
+
const newTitle = subcommandArg || `Session ${new Date().toLocaleDateString()}`;
|
|
726
|
+
const loaded = ctx.sessionManager.startSession(undefined, newTitle);
|
|
727
|
+
ctx.initializeSessionState(loaded);
|
|
728
|
+
console.log(pc.green(`[OK] Started new session: ${newTitle}`));
|
|
729
|
+
return;
|
|
730
|
+
}
|
|
731
|
+
if (subcommand === 'delete') {
|
|
732
|
+
if (!subcommandArg) {
|
|
733
|
+
console.log(pc.red('Usage: /session delete <id>'));
|
|
734
|
+
return;
|
|
735
|
+
}
|
|
736
|
+
ctx.sessionManager.deleteSession(subcommandArg);
|
|
737
|
+
console.log(pc.green(`[OK] Deleted session: ${subcommandArg}`));
|
|
738
|
+
return;
|
|
739
|
+
}
|
|
740
|
+
if (subcommand === 'export') {
|
|
741
|
+
const defaultPath = `session-export-${Date.now()}.md`;
|
|
742
|
+
const exportPath = subcommandArg || defaultPath;
|
|
743
|
+
const lines = [];
|
|
744
|
+
lines.push(`# Session Transcript - ${new Date().toLocaleString()}\n`);
|
|
745
|
+
ctx.messages.forEach((m) => {
|
|
746
|
+
if (m.role === 'system')
|
|
747
|
+
return;
|
|
748
|
+
lines.push(`### ${m.role.toUpperCase()}\n${m.content}\n`);
|
|
749
|
+
});
|
|
750
|
+
fs.writeFileSync(exportPath, lines.join('\n'), 'utf8');
|
|
751
|
+
console.log(pc.green(`[OK] Session transcript exported to ${exportPath}`));
|
|
752
|
+
return;
|
|
753
|
+
}
|
|
754
|
+
if (subcommand === 'search') {
|
|
755
|
+
if (!subcommandArg) {
|
|
756
|
+
console.log(pc.red('Usage: /session search <query>'));
|
|
757
|
+
return;
|
|
758
|
+
}
|
|
759
|
+
const query = subcommandArg.toLowerCase();
|
|
760
|
+
const sessions = ctx.sessionManager.getSessionsForProject();
|
|
761
|
+
const matches = sessions.filter((s) => s.title.toLowerCase().includes(query) || s.id.toLowerCase().includes(query));
|
|
762
|
+
console.log(pc.bold(`\n--- Search Results for "${query}" ---`));
|
|
763
|
+
if (matches.length === 0) {
|
|
764
|
+
console.log(pc.gray(' No matching sessions found.'));
|
|
765
|
+
}
|
|
766
|
+
else {
|
|
767
|
+
matches.forEach((s) => {
|
|
768
|
+
console.log(` • ${pc.cyan(s.id)} - ${pc.white(s.title)}`);
|
|
769
|
+
});
|
|
770
|
+
}
|
|
771
|
+
console.log(pc.bold('------------------------------------\n'));
|
|
772
|
+
return;
|
|
773
|
+
}
|
|
774
|
+
console.log(pc.yellow('[INFO] Usage: /session <list|load|new|delete|export|branch|checkout|branches|merge> [args]'));
|
|
775
|
+
}
|
|
776
|
+
},
|
|
597
777
|
{
|
|
598
778
|
name: '/undo',
|
|
599
779
|
description: 'Undo file edits (usage: /undo [count|list])',
|