daedalus-cli 3.64.0 → 3.65.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 (59) hide show
  1. package/AGENTS.md +2 -1
  2. package/CHANGELOG.md +14 -0
  3. package/dist/agents/loop.d.ts.map +1 -1
  4. package/dist/agents/loop.js +4 -1
  5. package/dist/agents/loop.js.map +1 -1
  6. package/dist/agents/turn-guards.d.ts +41 -0
  7. package/dist/agents/turn-guards.d.ts.map +1 -0
  8. package/dist/agents/turn-guards.js +325 -0
  9. package/dist/agents/turn-guards.js.map +1 -0
  10. package/dist/agents/turn-guards.test.d.ts +2 -0
  11. package/dist/agents/turn-guards.test.d.ts.map +1 -0
  12. package/dist/agents/turn-guards.test.js +123 -0
  13. package/dist/agents/turn-guards.test.js.map +1 -0
  14. package/dist/commands/agents.d.ts +5 -28
  15. package/dist/commands/agents.d.ts.map +1 -1
  16. package/dist/commands/agents.js +11 -1021
  17. package/dist/commands/agents.js.map +1 -1
  18. package/dist/commands/autopilot.d.ts +30 -0
  19. package/dist/commands/autopilot.d.ts.map +1 -0
  20. package/dist/commands/autopilot.js +372 -0
  21. package/dist/commands/autopilot.js.map +1 -0
  22. package/dist/commands/context.d.ts.map +1 -1
  23. package/dist/commands/context.js +3 -1
  24. package/dist/commands/context.js.map +1 -1
  25. package/dist/commands/hunt.d.ts +3 -0
  26. package/dist/commands/hunt.d.ts.map +1 -0
  27. package/dist/commands/hunt.js +181 -0
  28. package/dist/commands/hunt.js.map +1 -0
  29. package/dist/commands/mcp.d.ts +3 -0
  30. package/dist/commands/mcp.d.ts.map +1 -0
  31. package/dist/commands/mcp.js +339 -0
  32. package/dist/commands/mcp.js.map +1 -0
  33. package/dist/commands/onboard.d.ts +3 -0
  34. package/dist/commands/onboard.d.ts.map +1 -0
  35. package/dist/commands/onboard.js +109 -0
  36. package/dist/commands/onboard.js.map +1 -0
  37. package/dist/indexing/watcher.js +1 -1
  38. package/dist/indexing/watcher.js.map +1 -1
  39. package/dist/indexing/watcher.test.js +53 -16
  40. package/dist/indexing/watcher.test.js.map +1 -1
  41. package/dist/model.d.ts.map +1 -1
  42. package/dist/model.js +32 -426
  43. package/dist/model.js.map +1 -1
  44. package/dist/session/manager.d.ts +2 -2
  45. package/dist/session/manager.d.ts.map +1 -1
  46. package/dist/session/manager.js +9 -6
  47. package/dist/session/manager.js.map +1 -1
  48. package/dist/session/manager.test.js +5 -0
  49. package/dist/session/manager.test.js.map +1 -1
  50. package/dist/session/sqlite.d.ts +4 -0
  51. package/dist/session/sqlite.d.ts.map +1 -1
  52. package/dist/session/sqlite.js +17 -0
  53. package/dist/session/sqlite.js.map +1 -1
  54. package/dist/session/sqlite.test.js +10 -1
  55. package/dist/session/sqlite.test.js.map +1 -1
  56. package/dist/tools/repl.d.ts.map +1 -1
  57. package/dist/tools/repl.js +3 -1
  58. package/dist/tools/repl.js.map +1 -1
  59. package/package.json +1 -1
@@ -0,0 +1,123 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { checkTurnCompletionGuards } from './turn-guards.js';
3
+ import { ClaimLedger } from './completion-guard.js';
4
+ import { ReadStallDetector, DivergenceDetector } from './loop-guards.js';
5
+ function createMockContext(overrides = {}) {
6
+ const toolContext = {
7
+ sessionId: 'test_session',
8
+ projectRoot: '/test/project',
9
+ projectHash: 'hash123',
10
+ activeFiles: new Map(),
11
+ agentRole: 'orchestrator',
12
+ abortSignal: new AbortController().signal,
13
+ firedCompletionGuards: new Set(),
14
+ };
15
+ const defaultCtx = {
16
+ cleanContent: 'Everything looks great and all functions work properly.',
17
+ fullContent: 'Everything looks great and all functions work properly.',
18
+ userTask: 'implement feature X',
19
+ messages: [],
20
+ toolContext,
21
+ router: {
22
+ chat: {
23
+ completions: {
24
+ create: vi.fn(),
25
+ },
26
+ },
27
+ },
28
+ config: {},
29
+ claimLedger: new ClaimLedger(),
30
+ readStall: new ReadStallDetector(),
31
+ divergence: new DivergenceDetector(),
32
+ readLines: vi.fn().mockReturnValue(['line1', 'line2']),
33
+ fileExists: vi.fn().mockReturnValue(true),
34
+ verifyBreakerTrippedThisTurn: false,
35
+ verifyBreakerTrippedLastTurn: false,
36
+ totalCompletionTokens: 100,
37
+ escalationCount: 0,
38
+ ...overrides,
39
+ };
40
+ return defaultCtx;
41
+ }
42
+ describe('checkTurnCompletionGuards', () => {
43
+ it('passes when response has no claims or violations', async () => {
44
+ const ctx = createMockContext({
45
+ cleanContent: 'Here is an explanation of how JavaScript event loop works.',
46
+ fullContent: 'Here is an explanation of how JavaScript event loop works.',
47
+ });
48
+ const result = await checkTurnCompletionGuards(ctx);
49
+ expect(result.status).toBe('pass');
50
+ });
51
+ it('triggers divergence check when assistant emits duplicate output', async () => {
52
+ const divergence = new DivergenceDetector();
53
+ const cleanContent = 'This is a long assistant response that provides detailed explanations of how the subsystem works in practice. This text is long enough to exceed 40 characters.';
54
+ divergence.register(cleanContent); // 1st
55
+ divergence.register(cleanContent); // 2nd repeat
56
+ const ctx = createMockContext({
57
+ cleanContent,
58
+ fullContent: cleanContent,
59
+ divergence,
60
+ });
61
+ const result = await checkTurnCompletionGuards(ctx);
62
+ expect(result.status).toBe('halt');
63
+ if (result.status === 'halt') {
64
+ expect(result.content).toContain('[SELF-CORRECT]');
65
+ expect(result.maxTurnsCause).toContain('repetition guard tripped');
66
+ }
67
+ });
68
+ it('flags ungrounded claim when agent makes claims about uninspected file', async () => {
69
+ const claimLedger = new ClaimLedger();
70
+ const cleanContent = 'I checked src/uninspected.ts and found that path is unused.';
71
+ const messages = [];
72
+ const ctx = createMockContext({
73
+ cleanContent,
74
+ fullContent: cleanContent,
75
+ claimLedger,
76
+ messages,
77
+ });
78
+ const result = await checkTurnCompletionGuards(ctx);
79
+ expect(result.status).toBe('continue');
80
+ expect(messages.some((m) => typeof m.content === 'string' && m.content.includes('[SYSTEM WARNING]'))).toBe(true);
81
+ });
82
+ it('flags fabricated test count when test count is asserted without test run', async () => {
83
+ const messages = [];
84
+ const cleanContent = 'All tests passed: 42 tests passing.';
85
+ const ctx = createMockContext({
86
+ cleanContent,
87
+ fullContent: cleanContent,
88
+ messages,
89
+ });
90
+ ctx.toolContext.lastVerifyPassCount = undefined;
91
+ const result = await checkTurnCompletionGuards(ctx);
92
+ expect(result.status).toBe('continue');
93
+ expect(messages.some((m) => typeof m.content === 'string' && m.content.includes('npm test'))).toBe(true);
94
+ });
95
+ it('halts when review is produced with zero file observations', async () => {
96
+ const claimLedger = new ClaimLedger();
97
+ const cleanContent = `## Executive Summary of the Architecture and Tech Stack
98
+ 1. The project uses Clean Architecture and modular boundaries.
99
+ 2. The codebase implements solid separation of concerns across multiple layers.
100
+
101
+ ### Key Features & Project Structure
102
+ - Subsystem coordination and multi-agent loops are present.
103
+ - Memory management persistence engine with SQLite backend.
104
+
105
+ ### Top Recommendations
106
+ - Add additional end-to-end integration tests for error boundaries.
107
+ - Ensure all modules have comprehensive documentation and type annotations.
108
+ This review covers all the main parts of the system thoroughly.`;
109
+ const ctx = createMockContext({
110
+ userTask: 'review this codebase',
111
+ cleanContent,
112
+ fullContent: cleanContent,
113
+ claimLedger,
114
+ });
115
+ const result = await checkTurnCompletionGuards(ctx);
116
+ expect(result.status).toBe('halt');
117
+ if (result.status === 'halt') {
118
+ expect(result.content).toContain('[SELF-CORRECT]');
119
+ expect(result.maxTurnsCause).toContain('review-without-inspection guard');
120
+ }
121
+ });
122
+ });
123
+ //# sourceMappingURL=turn-guards.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-guards.test.js","sourceRoot":"","sources":["../../src/agents/turn-guards.test.ts"],"names":[],"mappings":"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"}
@@ -1,32 +1,9 @@
1
1
  import type { Command } from './types.js';
2
- /**
3
- * Normalize a raw /autopilot argument into a clean feature description.
4
- * Strips a leading slash-command token (e.g. if the user re-pastes
5
- * "/autopilot ...") so it never leaks into the orchestration goal, branch
6
- * slug, or delegated sub-task text. Returns '' for empty/whitespace input.
7
- */
8
- export declare function normalizeAutopilotIdea(raw: string): string;
9
- export declare function runAutopilotVerify(cwd: string): Promise<{
10
- ok: boolean;
11
- detail: string;
12
- }>;
13
- interface AutopilotManifest {
14
- feature: string;
15
- branch: string;
16
- remote: string | null;
17
- mode: 'git' | 'local-only' | 'non-git';
18
- outcome: 'committed' | 'committed-local' | 'pr-opened' | 'stopped-verify' | 'stopped-error' | 'no-changes';
19
- tasksPlanned: number;
20
- tasksDone: number;
21
- filesChanged: string[];
22
- testResult: {
23
- ok: boolean;
24
- detail: string;
25
- } | null;
26
- finishedAt: string;
27
- }
28
- declare function writeAutopilotManifest(m: AutopilotManifest): void;
29
- export { writeAutopilotManifest };
2
+ import { autopilotCommand, normalizeAutopilotIdea, runAutopilotVerify, writeAutopilotManifest, type AutopilotManifest } from './autopilot.js';
3
+ import { mcpCommand } from './mcp.js';
4
+ import { huntCommand } from './hunt.js';
5
+ import { onboardCommand } from './onboard.js';
6
+ export { normalizeAutopilotIdea, runAutopilotVerify, writeAutopilotManifest, autopilotCommand, mcpCommand, huntCommand, onboardCommand, };
30
7
  export type { AutopilotManifest };
31
8
  export declare const agentCommands: Command[];
32
9
  //# sourceMappingURL=agents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1D;AA0DD,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAgD9F;AAMD,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,KAAK,GAAG,YAAY,GAAG,SAAS,CAAC;IACvC,OAAO,EAAE,WAAW,GAAG,iBAAiB,GAAG,WAAW,GAAG,gBAAgB,GAAG,eAAe,GAAG,YAAY,CAAC;IAC3G,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACnD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,iBAAS,sBAAsB,CAAC,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAU1D;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAClC,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC,eAAO,MAAM,aAAa,EAAE,OAAO,EAqzClC,CAAA"}
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,EACtB,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,cAAc,GACf,CAAC;AACF,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC,eAAO,MAAM,aAAa,EAAE,OAAO,EAwblC,CAAC"}