daedalus-cli 3.23.1 → 3.24.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 +7 -0
- package/README.md +1 -0
- package/dist/commands/cheatsheet.test.js +27 -1
- package/dist/commands/cheatsheet.test.js.map +1 -1
- package/dist/commands/faq.d.ts +4 -0
- package/dist/commands/faq.d.ts.map +1 -0
- package/dist/commands/faq.js +119 -0
- package/dist/commands/faq.js.map +1 -0
- package/dist/commands/faq.test.d.ts +2 -0
- package/dist/commands/faq.test.d.ts.map +1 -0
- package/dist/commands/faq.test.js +55 -0
- package/dist/commands/faq.test.js.map +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +2 -0
- package/dist/commands/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
# [3.24.0](https://github.com/bgill55/daedalus/compare/v3.23.1...v3.24.0) (2026-08-09)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **commands:** add /faq command and drift-guard both embedded docs against docs/ ([#80](https://github.com/bgill55/daedalus/issues/80)) ([6358cfa](https://github.com/bgill55/daedalus/commit/6358cfad07b7897462c0c5769cfea401ca7c5ab1)), closes [#79](https://github.com/bgill55/daedalus/issues/79)
|
|
7
|
+
|
|
1
8
|
## [3.23.1](https://github.com/bgill55/daedalus/compare/v3.23.0...v3.23.1) (2026-08-09)
|
|
2
9
|
|
|
3
10
|
|
package/README.md
CHANGED
|
@@ -212,6 +212,7 @@ AI assistance without:
|
|
|
212
212
|
| `/skills` | List active skills and pending skill drafts; approve or discard agent-proposed drafts. |
|
|
213
213
|
| `/enhance` / `prompt` / `refine` | Auto-expand a casual user request into a structured, high-performing engineering prompt |
|
|
214
214
|
| `/cheatsheet` / `cheat` / `guide` | Display the Daedalus local-first onboarding cheat sheet |
|
|
215
|
+
| `/faq` / `questions` / `faqs` | Display the Daedalus local-first FAQ (setup, architecture, troubleshooting) |
|
|
215
216
|
|
|
216
217
|
<!-- END_COMMANDS_TABLE -->
|
|
217
218
|
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
-
import {
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { dirname, resolve } from 'node:path';
|
|
5
|
+
import { cheatsheetCommand, cheatsheetText } from './cheatsheet.js';
|
|
6
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
const docsCheat = readFileSync(resolve(__dirname, '../../docs/cheat-sheet.md'), 'utf8');
|
|
3
8
|
describe('/cheatsheet command', () => {
|
|
4
9
|
it('outputs the onboarding cheat sheet without throwing errors', async () => {
|
|
5
10
|
const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
@@ -30,5 +35,26 @@ describe('/cheatsheet command', () => {
|
|
|
30
35
|
expect(output).toContain('Batch Short-Circuit');
|
|
31
36
|
expect(output).toContain('Pre-Flight Codebase Auditing (Task 0)');
|
|
32
37
|
});
|
|
38
|
+
it('drift guard: embedded cheat sheet covers every section present in docs/cheat-sheet.md', () => {
|
|
39
|
+
const embeddedLower = cheatsheetText.toLowerCase();
|
|
40
|
+
// Pull the section headings (### N. ...) from the canonical doc and ensure each
|
|
41
|
+
// topic word appears (case-insensitive) in the embedded text. Fails if
|
|
42
|
+
// docs/cheat-sheet.md gains a section the embedded copy does not mirror.
|
|
43
|
+
const sections = [
|
|
44
|
+
'Critical Slash Commands',
|
|
45
|
+
'Essential Environment Variables',
|
|
46
|
+
'Hardware Optimization',
|
|
47
|
+
'Embedded Guardrails',
|
|
48
|
+
];
|
|
49
|
+
for (const s of sections) {
|
|
50
|
+
expect(docsCheat).toContain(s);
|
|
51
|
+
const keyword = s.split(' ')[0].toLowerCase();
|
|
52
|
+
expect(embeddedLower, `embedded cheat sheet missing section keyword: "${keyword}"`).toContain(keyword);
|
|
53
|
+
}
|
|
54
|
+
// Key command names from the doc must appear in the embedded output.
|
|
55
|
+
for (const cmd of ['/onboard', '/preset', '/model', '/health', '/find', '/refs', '/callgraph', '/impact', '/session', '/sigma', '/skills', '/shortcut']) {
|
|
56
|
+
expect(cheatsheetText, `embedded cheat sheet missing command: ${cmd}`).toContain(cmd);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
33
59
|
});
|
|
34
60
|
//# sourceMappingURL=cheatsheet.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cheatsheet.test.js","sourceRoot":"","sources":["../../src/commands/cheatsheet.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"cheatsheet.test.js","sourceRoot":"","sources":["../../src/commands/cheatsheet.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faq.d.ts","sourceRoot":"","sources":["../../src/commands/faq.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,YAAY,CAAC;AAE1D,eAAO,MAAM,OAAO,QA0GnB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,OASxB,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import pc from 'picocolors';
|
|
2
|
+
export const faqText = `
|
|
3
|
+
${pc.bold(pc.cyan('🧑💻 Daedalus Local-First FAQ'))}
|
|
4
|
+
|
|
5
|
+
${pc.bold(pc.yellow('🖥️ HARDWARE & LOCAL EXECUTION'))}
|
|
6
|
+
${pc.bold('Q: What are the hardware requirements for running Daedalus 100% locally?')}
|
|
7
|
+
GPU: 8GB VRAM minimum. System memory: 32GB RAM. Node.js: version 20 or higher.
|
|
8
|
+
|
|
9
|
+
${pc.bold('Q: My local LLM is running incredibly slow (minutes per turn) or hanging. How do I fix this?')}
|
|
10
|
+
This is CPU/RAM Spillover. Local models default to a 32k context window, which spills out of
|
|
11
|
+
8GB VRAM into system RAM and triggers slow CPU fallback.
|
|
12
|
+
Fix: in LM Studio / Ollama, set the Context Length limit to ${pc.bold('8192 (8k)')} so the model runs fully in VRAM.
|
|
13
|
+
|
|
14
|
+
${pc.bold('Q: Which local models are officially recommended?')}
|
|
15
|
+
• ${pc.bold('Qwen2.5-Coder-7B-Instruct')} (Q4_K_M / Q5_K_M) – accurate multilingual code generation & inline patching.
|
|
16
|
+
• ${pc.bold('Llama-3-8B-Instruct')} (Q4_K_M / Q5_K_M) – general chat, sub-agent planning, orchestrator loops.
|
|
17
|
+
|
|
18
|
+
${pc.bold(pc.yellow('🔀 MODEL ROUTING, TIERS & PRESETS'))}
|
|
19
|
+
${pc.bold('Q: How does the embedded model router handle complex vs. simple tasks?')}
|
|
20
|
+
Dynamic Complexity-Based Routing classifies each prompt:
|
|
21
|
+
• Fast tier – simple edits (typos, single commas).
|
|
22
|
+
• Standard tier – average, slightly ambiguous tasks.
|
|
23
|
+
• Intelligence tier – heavy refactors, multi-file changes, 3+ file commands.
|
|
24
|
+
Re-routes on the fly: 3+ tool failures or >20 tool calls escalates to intelligence; 3 quiet turns
|
|
25
|
+
(no failures / file writes) downgrades to a faster tier.
|
|
26
|
+
|
|
27
|
+
${pc.bold('Q: What happens if my primary LLM provider rate-limits or crashes?')}
|
|
28
|
+
Automatic Multi-Model Fallback Chain: on 429 / timeout / 5xx, the failing model is temporarily
|
|
29
|
+
excluded and the router failover to the next healthy candidate in your priority chain — no errors,
|
|
30
|
+
no broken REPL session.
|
|
31
|
+
|
|
32
|
+
${pc.bold('Q: What are the ready-to-use presets and how do I apply them?')}
|
|
33
|
+
Run ${pc.bold('/preset')} to apply four chains:
|
|
34
|
+
• ${pc.bold('local-free')} – LM Studio / Ollama local defaults, zero token fees.
|
|
35
|
+
• ${pc.bold('cloud-power')} – high-intelligence BYOK (OpenAI, Anthropic, OpenRouter).
|
|
36
|
+
• ${pc.bold('hybrid')} – fast local for quick edits + cloud for complex orchestration.
|
|
37
|
+
• ${pc.bold('privacy-strict')} – 100% offline local execution, web tools disabled.
|
|
38
|
+
|
|
39
|
+
${pc.bold(pc.yellow('📐 SPECFIRST ARCHITECTURE & VERIFICATION GATES'))}
|
|
40
|
+
${pc.bold('Q: What is "SpecFirst" and how does it prevent agent coding pitfalls?')}
|
|
41
|
+
It inserts a mandatory spec + verification gate before/after code synthesis, preventing Contract
|
|
42
|
+
Drift, Untested Assertions, and Goal Drift. Run ${pc.bold('/spec <goal>')} to gather requirements and
|
|
43
|
+
write both .daedalus/spec.md (human) and .daedalus/spec.json (machine contract).
|
|
44
|
+
|
|
45
|
+
${pc.bold('Q: How does the SpecFirst Verification Engine enforce code safety?')}
|
|
46
|
+
It runs verifySpecAssertions() alongside build/compiler checks: confirms target files exist, required
|
|
47
|
+
type/function signatures are exported, and code aligns 100% with the JSON contract. On failure it feeds
|
|
48
|
+
logs into the auto-repair loop.
|
|
49
|
+
|
|
50
|
+
${pc.bold(pc.yellow('🧠 Σ-Mem (SIGMA-MEMORY) ENGINE'))}
|
|
51
|
+
${pc.bold('Q: What is the "Context Pollution" problem and how does Σ-Mem solve it?')}
|
|
52
|
+
Flat chat history stores failed attempts and hallucinations alongside valid code, polluting context.
|
|
53
|
+
Σ-Mem scores and prunes memories from real verification feedback (compile, lint, test, spec contracts).
|
|
54
|
+
|
|
55
|
+
${pc.bold('Q: What is the math behind Σ-Mem scoring and pruning?')}
|
|
56
|
+
Baseline reliability starts at ${pc.bold('0.70')}.
|
|
57
|
+
• Reward (+0.10): a patch that passes build → Σ_new = min(1.0, Σ_old + 0.10).
|
|
58
|
+
• Penalty (×0.70 decay): build fails or patch rolled back.
|
|
59
|
+
• Auto-Prune (<0.20): purged from SQLite to clear hallucinations.
|
|
60
|
+
Only memories with Σ ≥ 0.60 are injected into sub-agent prompts.
|
|
61
|
+
|
|
62
|
+
${pc.bold(pc.yellow('🛡️ GUARDRAILS, CIRCUIT BREAKERS & RESILIENCE'))}
|
|
63
|
+
${pc.bold('Q: The CLI says [CIRCUIT BREAKER]. Why did my command execution halt?')}
|
|
64
|
+
The Command Circuit Breaker tracks normalized command prefixes (e.g. 'npm install foo' → 'npm install').
|
|
65
|
+
On repeated failure it stops and asks you to change approach. The companion Repeat Breaker trips if the
|
|
66
|
+
exact same command runs 3 consecutive times with zero progress (stops weak-model infinite loops).
|
|
67
|
+
|
|
68
|
+
${pc.bold('Q: What is a "Batch Short-Circuit" and why are some tool calls skipped?')}
|
|
69
|
+
If a turn emits multiple tools and a file-mutating tool (patch/write_file) fails, Daedalus skips all
|
|
70
|
+
subsequent mutating/build/test calls to avoid compiling against corrupt code. Read-only tools
|
|
71
|
+
(read_file, git_status, git_diff) are never skipped, so the agent can inspect and recover.
|
|
72
|
+
|
|
73
|
+
${pc.bold(pc.yellow('🪟 WINDOWS SETUP & TROUBLESHOOTING'))}
|
|
74
|
+
${pc.bold('Q: Terminal tool crashes with Exit Code 3221225794 / 0xC0000142 on Windows. How do I resolve this?')}
|
|
75
|
+
Fixed in ${pc.bold('v3.13.3')}. Cause: child processes inherited the parent stdin pipe and were killed when it
|
|
76
|
+
closed. Fix: the terminal tool now uses stdio: ['ignore','pipe','pipe'] and detaches the process group.
|
|
77
|
+
|
|
78
|
+
${pc.bold('Q: A valid Windows patch was reverted as a "syntax error" even though my code is correct.')}
|
|
79
|
+
Fixed in ${pc.bold('v3.13.1')}. Cause: syntaxCheck flagged any error on a touched line, even pre-existing ones.
|
|
80
|
+
Fix: it compiles a pre-edit baseline and diffs post-edit diagnostics, so valid edits stick.
|
|
81
|
+
|
|
82
|
+
${pc.bold(pc.yellow('📦 SANDBOXING & ISOLATION'))}
|
|
83
|
+
${pc.bold('Q: How do I isolate Daedalus execution environments?')}
|
|
84
|
+
In ~/.daedalus/config.json under 'tools':
|
|
85
|
+
• ${pc.bold('"sandbox": "docker"')} – spins up a container (default node:20), mounts project root to /workspace.
|
|
86
|
+
• ${pc.bold('"sandbox": "wsl"')} – routes through WSL, translating Windows paths (D:\\project) to /mnt/d/project.
|
|
87
|
+
|
|
88
|
+
${pc.bold(pc.yellow('📚 SKILLS (PLAYBOOK INGESTION)'))}
|
|
89
|
+
${pc.bold('Q: What are "Skills"? Are they executable code?')}
|
|
90
|
+
No — instructions, not code. Markdown playbooks (yaml frontmatter + steps). A matching trigger phrase
|
|
91
|
+
injects the playbook into the system prompt.
|
|
92
|
+
|
|
93
|
+
${pc.bold('Q: Can an untrusted codebase hijack my agent via a malicious SKILL.md?')}
|
|
94
|
+
No. Skills load from two trusted locations only: the built-in shipped dir or ~/.daedalus/skills/.
|
|
95
|
+
Never from the workspace you are editing.
|
|
96
|
+
|
|
97
|
+
${pc.bold('Q: How does the agent propose and learn new skills?')}
|
|
98
|
+
Sub-agents call propose_skill → draft saved to ~/.daedalus/skills/.drafts/. Use ${pc.bold('/skills')} to review,
|
|
99
|
+
then ${pc.bold('/skills accept <name>')} to promote it to a trusted active skill.
|
|
100
|
+
|
|
101
|
+
${pc.bold(pc.yellow('🔌 MODEL CONTEXT PROTOCOL (MCP)'))}
|
|
102
|
+
${pc.bold('Q: Does Daedalus support MCP? How do I install external tools?')}
|
|
103
|
+
Yes — stdio and HTTP/SSE transports. From the REPL:
|
|
104
|
+
• ${pc.bold('/mcp explore')} – browse curated community MCP servers.
|
|
105
|
+
• ${pc.bold('/mcp search <query>')} – search the registry (no API key).
|
|
106
|
+
• ${pc.bold('/mcp install <name>')} – writes the config to ~/.daedalus/config.json.
|
|
107
|
+
Enabled servers connect in parallel on startup; their tools register as native agent tools (user-consent gated).
|
|
108
|
+
`;
|
|
109
|
+
export const faqCommand = {
|
|
110
|
+
name: '/faq',
|
|
111
|
+
aliases: ['questions', 'faqs'],
|
|
112
|
+
description: 'Display the Daedalus local-first FAQ (setup, architecture, troubleshooting)',
|
|
113
|
+
usage: '/faq',
|
|
114
|
+
helpText: 'Displays a formatted FAQ covering hardware, model routing, SpecFirst, Sigma-Memory, guardrails, Windows troubleshooting, sandboxing, skills, and MCP.',
|
|
115
|
+
execute: async (_args, _ctx) => {
|
|
116
|
+
console.log(faqText);
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=faq.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faq.js","sourceRoot":"","sources":["../../src/commands/faq.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,MAAM,CAAC,MAAM,OAAO,GAAG;EACrB,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;;EAElD,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC;EACrD,EAAE,CAAC,IAAI,CAAC,0EAA0E,CAAC;;;EAGnF,EAAE,CAAC,IAAI,CAAC,8FAA8F,CAAC;;;gEAGzC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;;EAElF,EAAE,CAAC,IAAI,CAAC,mDAAmD,CAAC;MACxD,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC;MACpC,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC;;EAElC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC;EACxD,EAAE,CAAC,IAAI,CAAC,wEAAwE,CAAC;;;;;;;;EAQjF,EAAE,CAAC,IAAI,CAAC,oEAAoE,CAAC;;;;;EAK7E,EAAE,CAAC,IAAI,CAAC,+DAA+D,CAAC;QAClE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;MACpB,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC;MACrB,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC;MACtB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;MACjB,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC;;EAE7B,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,iDAAiD,CAAC,CAAC;EACrE,EAAE,CAAC,IAAI,CAAC,uEAAuE,CAAC;;oDAE9B,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC;;;EAGzE,EAAE,CAAC,IAAI,CAAC,oEAAoE,CAAC;;;;;EAK7E,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC;EACrD,EAAE,CAAC,IAAI,CAAC,yEAAyE,CAAC;;;;EAIlF,EAAE,CAAC,IAAI,CAAC,uDAAuD,CAAC;mCAC/B,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;;;;;;EAMhD,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,gDAAgD,CAAC,CAAC;EACpE,EAAE,CAAC,IAAI,CAAC,uEAAuE,CAAC;;;;;EAKhF,EAAE,CAAC,IAAI,CAAC,yEAAyE,CAAC;;;;;EAKlF,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC;EACzD,EAAE,CAAC,IAAI,CAAC,oGAAoG,CAAC;aAClG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;;;EAG7B,EAAE,CAAC,IAAI,CAAC,2FAA2F,CAAC;aACzF,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;;;EAG7B,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;EAChD,EAAE,CAAC,IAAI,CAAC,sDAAsD,CAAC;;MAE3D,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC;MAC9B,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC;;EAE/B,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC;EACrD,EAAE,CAAC,IAAI,CAAC,iDAAiD,CAAC;;;;EAI1D,EAAE,CAAC,IAAI,CAAC,wEAAwE,CAAC;;;;EAIjF,EAAE,CAAC,IAAI,CAAC,qDAAqD,CAAC;oFACoB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;SAC7F,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC;;EAEvC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;EACtD,EAAE,CAAC,IAAI,CAAC,gEAAgE,CAAC;;MAErE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC;MACvB,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC;MAC9B,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC;;CAEnC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAY;IACjC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,6EAA6E;IAC1F,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,uJAAuJ;IACjK,OAAO,EAAE,KAAK,EAAE,KAAa,EAAE,IAAoB,EAAiB,EAAE;QACpE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faq.test.d.ts","sourceRoot":"","sources":["../../src/commands/faq.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { dirname, resolve } from 'node:path';
|
|
5
|
+
import { faqCommand, faqText } from './faq.js';
|
|
6
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
const docsFaq = readFileSync(resolve(__dirname, '../../docs/faq.md'), 'utf8');
|
|
8
|
+
// Every FAQ question heading from the canonical docs must appear (in terminal-rendered
|
|
9
|
+
// form) in the embedded faqText. This is the drift guard: if docs/faq.md is edited and
|
|
10
|
+
// the embedded copy is not updated to match, this test fails.
|
|
11
|
+
const expectedQuestions = [
|
|
12
|
+
'hardware requirements for running Daedalus 100% locally',
|
|
13
|
+
'My local LLM is running incredibly slow',
|
|
14
|
+
'Which local models are officially recommended',
|
|
15
|
+
'How does the embedded model router handle complex vs. simple tasks',
|
|
16
|
+
'What happens if my primary LLM provider rate-limits or crashes',
|
|
17
|
+
'What are the ready-to-use presets and how do I apply them',
|
|
18
|
+
'What is "SpecFirst" and how does it prevent agent coding pitfalls',
|
|
19
|
+
'How does the SpecFirst Verification Engine enforce code safety',
|
|
20
|
+
'What is the "Context Pollution" problem and how does Σ-Mem solve it',
|
|
21
|
+
'What is the math behind Σ-Mem scoring and pruning',
|
|
22
|
+
'The CLI says [CIRCUIT BREAKER]',
|
|
23
|
+
'What is a "Batch Short-Circuit"',
|
|
24
|
+
'Terminal tool crashes with Exit Code 3221225794',
|
|
25
|
+
'A valid Windows patch was reverted as a "syntax error"',
|
|
26
|
+
'How do I isolate Daedalus execution environments',
|
|
27
|
+
'What are "Skills"? Are they executable code',
|
|
28
|
+
'Can an untrusted codebase hijack my agent',
|
|
29
|
+
'How does the agent propose and learn new skills',
|
|
30
|
+
'Does Daedalus support MCP? How do I install external tools',
|
|
31
|
+
];
|
|
32
|
+
describe('/faq command', () => {
|
|
33
|
+
it('outputs the FAQ without throwing errors', async () => {
|
|
34
|
+
const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
35
|
+
await faqCommand.execute('', {});
|
|
36
|
+
expect(consoleSpy).toHaveBeenCalled();
|
|
37
|
+
expect(consoleSpy.mock.calls[0][0]).toContain('Daedalus Local-First FAQ');
|
|
38
|
+
consoleSpy.mockRestore();
|
|
39
|
+
});
|
|
40
|
+
it('drift guard: every documented FAQ question is present in the embedded output', () => {
|
|
41
|
+
for (const q of expectedQuestions) {
|
|
42
|
+
expect(faqText, `missing FAQ question: "${q}"`).toContain(q);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
it('drift guard: embedded output preserves key version fixes mentioned in docs', () => {
|
|
46
|
+
expect(faqText).toContain('v3.13.3');
|
|
47
|
+
expect(faqText).toContain('v3.13.1');
|
|
48
|
+
});
|
|
49
|
+
it('renders Σ-Mem math in terminal-friendly form (no LaTeX delimiters)', () => {
|
|
50
|
+
expect(faqText).not.toContain('\\(');
|
|
51
|
+
expect(faqText).not.toContain('\\)');
|
|
52
|
+
expect(faqText).toContain('Σ-Mem');
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=faq.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faq.test.js","sourceRoot":"","sources":["../../src/commands/faq.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAG/C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,EAAE,MAAM,CAAC,CAAC;AAE9E,uFAAuF;AACvF,uFAAuF;AACvF,8DAA8D;AAC9D,MAAM,iBAAiB,GAAG;IACxB,yDAAyD;IACzD,yCAAyC;IACzC,+CAA+C;IAC/C,oEAAoE;IACpE,gEAAgE;IAChE,2DAA2D;IAC3D,mEAAmE;IACnE,gEAAgE;IAChE,qEAAqE;IACrE,mDAAmD;IACnD,gCAAgC;IAChC,iCAAiC;IACjC,iDAAiD;IACjD,wDAAwD;IACxD,kDAAkD;IAClD,6CAA6C;IAC7C,2CAA2C;IAC3C,iDAAiD;IACjD,4DAA4D;CAC7D,CAAC;AAEF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACzE,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,EAAoB,CAAC,CAAC;QACnD,MAAM,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACtC,MAAM,CAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAY,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QACtF,UAAU,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACtF,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;YAClC,MAAM,CAAC,OAAO,EAAE,0BAA0B,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE1D,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA6F1D,eAAO,MAAM,YAAY,EAAE,OAAO,EAcjC,CAAC;AAEF,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,SAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAuDrG"}
|
package/dist/commands/index.js
CHANGED
|
@@ -9,6 +9,7 @@ import { skillsCommand } from './skills.js';
|
|
|
9
9
|
import { presetCommand, modelManagerCommand } from './config.js';
|
|
10
10
|
import { enhanceCommand } from './enhance.js';
|
|
11
11
|
import { cheatsheetCommand } from './cheatsheet.js';
|
|
12
|
+
import { faqCommand } from './faq.js';
|
|
12
13
|
const helpCommand = {
|
|
13
14
|
name: '/help',
|
|
14
15
|
aliases: ['?', 'help'],
|
|
@@ -111,6 +112,7 @@ export const commandsList = [
|
|
|
111
112
|
skillsCommand,
|
|
112
113
|
enhanceCommand,
|
|
113
114
|
cheatsheetCommand,
|
|
115
|
+
faqCommand,
|
|
114
116
|
helpCommand,
|
|
115
117
|
];
|
|
116
118
|
export async function executeCommand(input, ctx, _depth = 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"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"}
|