@dewtech/dare-cli 3.10.0 → 3.11.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/README.md +5 -1
- package/dist/__tests__/ci-pr-regression.test.d.ts +2 -0
- package/dist/__tests__/ci-pr-regression.test.d.ts.map +1 -0
- package/dist/__tests__/ci-pr-regression.test.js +76 -0
- package/dist/__tests__/ci-pr-regression.test.js.map +1 -0
- package/dist/__tests__/dashboard-front.test.d.ts +2 -0
- package/dist/__tests__/dashboard-front.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-front.test.js +37 -0
- package/dist/__tests__/dashboard-front.test.js.map +1 -0
- package/dist/__tests__/dashboard-regression.test.d.ts +2 -0
- package/dist/__tests__/dashboard-regression.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-regression.test.js +68 -0
- package/dist/__tests__/dashboard-regression.test.js.map +1 -0
- package/dist/__tests__/dynamic-dag-regression.test.d.ts +2 -0
- package/dist/__tests__/dynamic-dag-regression.test.d.ts.map +1 -0
- package/dist/__tests__/dynamic-dag-regression.test.js +464 -0
- package/dist/__tests__/dynamic-dag-regression.test.js.map +1 -0
- package/dist/__tests__/ide-command-parity.test.js +1 -0
- package/dist/__tests__/ide-command-parity.test.js.map +1 -1
- package/dist/bin/dare.js +2 -0
- package/dist/bin/dare.js.map +1 -1
- package/dist/commands/__tests__/dashboard-command.test.d.ts +2 -0
- package/dist/commands/__tests__/dashboard-command.test.d.ts.map +1 -0
- package/dist/commands/__tests__/dashboard-command.test.js +62 -0
- package/dist/commands/__tests__/dashboard-command.test.js.map +1 -0
- package/dist/commands/__tests__/gate-flags.test.d.ts +2 -0
- package/dist/commands/__tests__/gate-flags.test.d.ts.map +1 -0
- package/dist/commands/__tests__/gate-flags.test.js +58 -0
- package/dist/commands/__tests__/gate-flags.test.js.map +1 -0
- package/dist/commands/__tests__/persist-viz.test.d.ts +2 -0
- package/dist/commands/__tests__/persist-viz.test.d.ts.map +1 -0
- package/dist/commands/__tests__/persist-viz.test.js +178 -0
- package/dist/commands/__tests__/persist-viz.test.js.map +1 -0
- package/dist/commands/__tests__/refine-apply.test.d.ts +2 -0
- package/dist/commands/__tests__/refine-apply.test.d.ts.map +1 -0
- package/dist/commands/__tests__/refine-apply.test.js +118 -0
- package/dist/commands/__tests__/refine-apply.test.js.map +1 -0
- package/dist/commands/__tests__/replan-splice.test.d.ts +2 -0
- package/dist/commands/__tests__/replan-splice.test.d.ts.map +1 -0
- package/dist/commands/__tests__/replan-splice.test.js +295 -0
- package/dist/commands/__tests__/replan-splice.test.js.map +1 -0
- package/dist/commands/dag.d.ts.map +1 -1
- package/dist/commands/dag.js +2 -0
- package/dist/commands/dag.js.map +1 -1
- package/dist/commands/dashboard.d.ts +17 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +77 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/execute.d.ts.map +1 -1
- package/dist/commands/execute.js +108 -2
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/graph.d.ts.map +1 -1
- package/dist/commands/graph.js +33 -5
- package/dist/commands/graph.js.map +1 -1
- package/dist/commands/guard.d.ts.map +1 -1
- package/dist/commands/guard.js +27 -3
- package/dist/commands/guard.js.map +1 -1
- package/dist/commands/refine.d.ts +2 -0
- package/dist/commands/refine.d.ts.map +1 -1
- package/dist/commands/refine.js +71 -20
- package/dist/commands/refine.js.map +1 -1
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +36 -5
- package/dist/commands/review.js.map +1 -1
- package/dist/dag-runner/__tests__/maxdepth-config.test.d.ts +2 -0
- package/dist/dag-runner/__tests__/maxdepth-config.test.d.ts.map +1 -0
- package/dist/dag-runner/__tests__/maxdepth-config.test.js +28 -0
- package/dist/dag-runner/__tests__/maxdepth-config.test.js.map +1 -0
- package/dist/dag-runner/__tests__/sub-dag.test.d.ts +2 -0
- package/dist/dag-runner/__tests__/sub-dag.test.d.ts.map +1 -0
- package/dist/dag-runner/__tests__/sub-dag.test.js +127 -0
- package/dist/dag-runner/__tests__/sub-dag.test.js.map +1 -0
- package/dist/dag-runner/run_dag.d.ts +2 -0
- package/dist/dag-runner/run_dag.d.ts.map +1 -1
- package/dist/dag-runner/run_dag.js.map +1 -1
- package/dist/dag-runner/state-store.d.ts +2 -0
- package/dist/dag-runner/state-store.d.ts.map +1 -1
- package/dist/dag-runner/state-store.js +44 -8
- package/dist/dag-runner/state-store.js.map +1 -1
- package/dist/dag-runner/sub-dag.d.ts +23 -0
- package/dist/dag-runner/sub-dag.d.ts.map +1 -0
- package/dist/dag-runner/sub-dag.js +117 -0
- package/dist/dag-runner/sub-dag.js.map +1 -0
- package/dist/dashboard/__tests__/dashboard-routes.test.d.ts +2 -0
- package/dist/dashboard/__tests__/dashboard-routes.test.d.ts.map +1 -0
- package/dist/dashboard/__tests__/dashboard-routes.test.js +102 -0
- package/dist/dashboard/__tests__/dashboard-routes.test.js.map +1 -0
- package/dist/dashboard/routes.d.ts +8 -0
- package/dist/dashboard/routes.d.ts.map +1 -0
- package/dist/dashboard/routes.js +70 -0
- package/dist/dashboard/routes.js.map +1 -0
- package/dist/graphrag/__tests__/hybrid-integration.test.js +1 -1
- package/dist/graphrag/__tests__/hybrid-integration.test.js.map +1 -1
- package/dist/graphrag/__tests__/no-heavy-dep-in-core.test.js +2 -2
- package/dist/graphrag/__tests__/no-heavy-dep-in-core.test.js.map +1 -1
- package/dist/graphrag/embeddings.js +1 -1
- package/dist/graphrag/embeddings.js.map +1 -1
- package/dist/http/__tests__/shared-app.test.d.ts +2 -0
- package/dist/http/__tests__/shared-app.test.d.ts.map +1 -0
- package/dist/http/__tests__/shared-app.test.js +57 -0
- package/dist/http/__tests__/shared-app.test.js.map +1 -0
- package/dist/http/app.d.ts +15 -0
- package/dist/http/app.d.ts.map +1 -0
- package/dist/http/app.js +32 -0
- package/dist/http/app.js.map +1 -0
- package/dist/mcp-server/server.d.ts.map +1 -1
- package/dist/mcp-server/server.js +5 -15
- package/dist/mcp-server/server.js.map +1 -1
- package/dist/reporters/__tests__/github-reporter.test.d.ts +2 -0
- package/dist/reporters/__tests__/github-reporter.test.d.ts.map +1 -0
- package/dist/reporters/__tests__/github-reporter.test.js +93 -0
- package/dist/reporters/__tests__/github-reporter.test.js.map +1 -0
- package/dist/reporters/ci-gate.d.ts +27 -0
- package/dist/reporters/ci-gate.d.ts.map +1 -0
- package/dist/reporters/ci-gate.js +100 -0
- package/dist/reporters/ci-gate.js.map +1 -0
- package/dist/reporters/github.d.ts +36 -0
- package/dist/reporters/github.d.ts.map +1 -0
- package/dist/reporters/github.js +142 -0
- package/dist/reporters/github.js.map +1 -0
- package/dist/telemetry/__tests__/aggregator.test.d.ts +2 -0
- package/dist/telemetry/__tests__/aggregator.test.d.ts.map +1 -0
- package/dist/telemetry/__tests__/aggregator.test.js +164 -0
- package/dist/telemetry/__tests__/aggregator.test.js.map +1 -0
- package/dist/telemetry/aggregator.d.ts +43 -0
- package/dist/telemetry/aggregator.d.ts.map +1 -0
- package/dist/telemetry/aggregator.js +282 -0
- package/dist/telemetry/aggregator.js.map +1 -0
- package/dist/utils/excalidraw-renderer.d.ts.map +1 -1
- package/dist/utils/excalidraw-renderer.js +1 -0
- package/dist/utils/excalidraw-renderer.js.map +1 -1
- package/dist/utils/graph-renderer.d.ts +2 -0
- package/dist/utils/graph-renderer.d.ts.map +1 -1
- package/dist/utils/graph-renderer.js +188 -14
- package/dist/utils/graph-renderer.js.map +1 -1
- package/dist/verification/__tests__/decay-policy.test.js +1 -0
- package/dist/verification/__tests__/decay-policy.test.js.map +1 -1
- package/dist/verification/config.d.ts.map +1 -1
- package/dist/verification/config.js +2 -0
- package/dist/verification/config.js.map +1 -1
- package/dist/verification/types.d.ts +2 -0
- package/dist/verification/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/templates/.github/workflows/dare-pr.yml +26 -0
- package/templates/dashboard/app.js +184 -0
- package/templates/dashboard/index.html +63 -0
- package/templates/dashboard/style.css +134 -0
- package/templates/ide/antigravity/.agents/skills/dare-dashboard/SKILL.md +18 -0
- package/templates/ide/claude/.claude/commands/dare-dashboard.md +18 -0
- package/templates/ide/cursor/.cursor/commands/dare-dashboard.md +18 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { exitCodeForFailOn, guardResultsToFindings, parseFailOn, resolveVerdictFromCounts, violationsToFindings, } from '../../reporters/ci-gate.js';
|
|
3
|
+
describe('CI gate flags', () => {
|
|
4
|
+
it('parseFailOn_accepts_none_warn_error', () => {
|
|
5
|
+
expect(parseFailOn('none')).toBe('none');
|
|
6
|
+
expect(parseFailOn('warn')).toBe('warn');
|
|
7
|
+
expect(parseFailOn('error')).toBe('error');
|
|
8
|
+
expect(parseFailOn('invalid')).toBeNull();
|
|
9
|
+
});
|
|
10
|
+
it('fail_on_none_never_blocks', () => {
|
|
11
|
+
expect(exitCodeForFailOn('none', 'fail')).toBe(0);
|
|
12
|
+
expect(exitCodeForFailOn('none', 'warn')).toBe(0);
|
|
13
|
+
expect(exitCodeForFailOn('warn', 'warn')).toBe(1);
|
|
14
|
+
expect(exitCodeForFailOn('error', 'warn')).toBe(0);
|
|
15
|
+
expect(exitCodeForFailOn('error', 'fail')).toBe(1);
|
|
16
|
+
});
|
|
17
|
+
it('violationsToFindings_relativizes_paths', () => {
|
|
18
|
+
const cwd = 'C:\\project';
|
|
19
|
+
const violations = [
|
|
20
|
+
{
|
|
21
|
+
kind: 'todo-marker',
|
|
22
|
+
severity: 'error',
|
|
23
|
+
file: 'src/a.ts',
|
|
24
|
+
line: 3,
|
|
25
|
+
snippet: '// TODO',
|
|
26
|
+
message: 'todo found',
|
|
27
|
+
},
|
|
28
|
+
];
|
|
29
|
+
const findings = violationsToFindings(violations, cwd);
|
|
30
|
+
expect(findings[0].file).toBe('src/a.ts');
|
|
31
|
+
expect(findings[0].severity).toBe('error');
|
|
32
|
+
});
|
|
33
|
+
it('guardResultsToFindings_maps_verdicts', () => {
|
|
34
|
+
const results = [
|
|
35
|
+
{
|
|
36
|
+
artifact: 'DARE/spec.md',
|
|
37
|
+
verdict: 'FAIL',
|
|
38
|
+
findings: [
|
|
39
|
+
{
|
|
40
|
+
layer: 'scan',
|
|
41
|
+
severity: 'FAIL',
|
|
42
|
+
rule: 'secret-pattern',
|
|
43
|
+
evidence: 'possible secret in file',
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
const findings = guardResultsToFindings(results, process.cwd());
|
|
49
|
+
expect(findings).toHaveLength(1);
|
|
50
|
+
expect(findings[0].severity).toBe('error');
|
|
51
|
+
});
|
|
52
|
+
it('resolveVerdictFromCounts', () => {
|
|
53
|
+
expect(resolveVerdictFromCounts(0, 0)).toBe('pass');
|
|
54
|
+
expect(resolveVerdictFromCounts(0, 2)).toBe('warn');
|
|
55
|
+
expect(resolveVerdictFromCounts(1, 0)).toBe('fail');
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=gate-flags.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate-flags.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/gate-flags.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persist-viz.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/persist-viz.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { loadAndApplyState, saveState } from '../../dag-runner/state-store.js';
|
|
6
|
+
function stripAnsi(value) {
|
|
7
|
+
return value.replace(/\u001b\[[0-9;]*m/g, '');
|
|
8
|
+
}
|
|
9
|
+
function baseDag(tasks) {
|
|
10
|
+
return {
|
|
11
|
+
title: 'Persist Viz Fixture',
|
|
12
|
+
version: '1.0.0',
|
|
13
|
+
models: {},
|
|
14
|
+
tasks,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
describe('persist-viz', () => {
|
|
18
|
+
let projectRoot;
|
|
19
|
+
let stdout;
|
|
20
|
+
let stderr;
|
|
21
|
+
let exitCode;
|
|
22
|
+
beforeEach(async () => {
|
|
23
|
+
vi.resetModules();
|
|
24
|
+
projectRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'dare-persist-viz-'));
|
|
25
|
+
await fs.ensureDir(path.join(projectRoot, 'DARE'));
|
|
26
|
+
await fs.ensureDir(path.join(projectRoot, '.dare'));
|
|
27
|
+
stdout = '';
|
|
28
|
+
stderr = '';
|
|
29
|
+
exitCode = undefined;
|
|
30
|
+
vi.spyOn(process, 'cwd').mockReturnValue(projectRoot);
|
|
31
|
+
vi.spyOn(process, 'exit').mockImplementation((code) => {
|
|
32
|
+
exitCode = Number(code ?? 0);
|
|
33
|
+
throw new Error(`exit:${code}`);
|
|
34
|
+
});
|
|
35
|
+
vi.spyOn(console, 'log').mockImplementation((...args) => {
|
|
36
|
+
stdout += `${args.map(String).join(' ')}\n`;
|
|
37
|
+
});
|
|
38
|
+
vi.spyOn(console, 'error').mockImplementation((...args) => {
|
|
39
|
+
stderr += `${args.map(String).join(' ')}\n`;
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
afterEach(async () => {
|
|
43
|
+
vi.restoreAllMocks();
|
|
44
|
+
await fs.remove(projectRoot).catch(() => undefined);
|
|
45
|
+
});
|
|
46
|
+
async function runCommand(action) {
|
|
47
|
+
try {
|
|
48
|
+
await action();
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
if (!(err instanceof Error) || !err.message.startsWith('exit:'))
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async function writeDagYaml() {
|
|
56
|
+
await fs.writeFile(path.join(projectRoot, 'DARE', 'dare-dag.yaml'), [
|
|
57
|
+
'title: "Persist Viz Fixture"',
|
|
58
|
+
'version: "1.0.0"',
|
|
59
|
+
'models:',
|
|
60
|
+
' HIGH: claude-sonnet',
|
|
61
|
+
' MED: claude-sonnet',
|
|
62
|
+
' LOW: claude-sonnet',
|
|
63
|
+
'tasks:',
|
|
64
|
+
' - id: task-root',
|
|
65
|
+
' title: "task-root"',
|
|
66
|
+
' depends_on: []',
|
|
67
|
+
' complexity: LOW',
|
|
68
|
+
' subtask_prompt: |',
|
|
69
|
+
' root',
|
|
70
|
+
' - id: task-parent',
|
|
71
|
+
' title: "task-parent"',
|
|
72
|
+
' depends_on: [task-root]',
|
|
73
|
+
' complexity: MED',
|
|
74
|
+
' subtask_prompt: |',
|
|
75
|
+
' parent',
|
|
76
|
+
].join('\n'));
|
|
77
|
+
}
|
|
78
|
+
async function writeNestedState() {
|
|
79
|
+
await fs.writeJson(path.join(projectRoot, '.dare', 'state.json'), {
|
|
80
|
+
version: 1,
|
|
81
|
+
updatedAt: new Date().toISOString(),
|
|
82
|
+
tasks: {
|
|
83
|
+
'task-root': {
|
|
84
|
+
status: 'DONE',
|
|
85
|
+
dependsOn: [],
|
|
86
|
+
},
|
|
87
|
+
'task-parent': {
|
|
88
|
+
status: 'PENDING',
|
|
89
|
+
dependsOn: ['task-root', 'task-parent-a'],
|
|
90
|
+
},
|
|
91
|
+
'task-parent-a': {
|
|
92
|
+
status: 'RUNNING',
|
|
93
|
+
parentId: 'task-parent',
|
|
94
|
+
dependsOn: ['task-root'],
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
}, { spaces: 2 });
|
|
98
|
+
}
|
|
99
|
+
it('nesting_roundtrips_state', async () => {
|
|
100
|
+
const stateFile = path.join(projectRoot, '.dare', 'state.json');
|
|
101
|
+
const original = baseDag([
|
|
102
|
+
{
|
|
103
|
+
id: 'task-root',
|
|
104
|
+
title: 'task-root',
|
|
105
|
+
depends_on: [],
|
|
106
|
+
complexity: 'LOW',
|
|
107
|
+
subtask_prompt: 'root',
|
|
108
|
+
status: 'DONE',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
id: 'task-parent',
|
|
112
|
+
title: 'task-parent',
|
|
113
|
+
depends_on: ['task-root', 'task-parent-a'],
|
|
114
|
+
complexity: 'MED',
|
|
115
|
+
subtask_prompt: 'parent',
|
|
116
|
+
status: 'PENDING',
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
id: 'task-parent-a',
|
|
120
|
+
title: 'task-parent-a',
|
|
121
|
+
depends_on: ['task-root'],
|
|
122
|
+
__parentId: 'task-parent',
|
|
123
|
+
complexity: 'MED',
|
|
124
|
+
subtask_prompt: 'sub',
|
|
125
|
+
status: 'RUNNING',
|
|
126
|
+
},
|
|
127
|
+
]);
|
|
128
|
+
await saveState(original, stateFile);
|
|
129
|
+
const reloaded = baseDag([
|
|
130
|
+
{
|
|
131
|
+
id: 'task-root',
|
|
132
|
+
title: 'task-root',
|
|
133
|
+
depends_on: [],
|
|
134
|
+
complexity: 'LOW',
|
|
135
|
+
subtask_prompt: 'root',
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
id: 'task-parent',
|
|
139
|
+
title: 'task-parent',
|
|
140
|
+
depends_on: ['task-root'],
|
|
141
|
+
complexity: 'MED',
|
|
142
|
+
subtask_prompt: 'parent',
|
|
143
|
+
},
|
|
144
|
+
]);
|
|
145
|
+
await loadAndApplyState(reloaded, stateFile);
|
|
146
|
+
const child = reloaded.tasks.find((task) => task.id === 'task-parent-a');
|
|
147
|
+
const parent = reloaded.tasks.find((task) => task.id === 'task-parent');
|
|
148
|
+
expect(child?.__parentId).toBe('task-parent');
|
|
149
|
+
expect(child?.depends_on).toEqual(['task-root']);
|
|
150
|
+
expect(child?.status).toBe('RUNNING');
|
|
151
|
+
expect(parent?.depends_on).toEqual(['task-root', 'task-parent-a']);
|
|
152
|
+
});
|
|
153
|
+
it('status_shows_nesting', async () => {
|
|
154
|
+
await writeDagYaml();
|
|
155
|
+
await writeNestedState();
|
|
156
|
+
const execute = await import('../execute.js');
|
|
157
|
+
await runCommand(() => execute.executeCommand.parseAsync(['--status'], { from: 'user' }));
|
|
158
|
+
const output = stripAnsi(stdout);
|
|
159
|
+
expect(exitCode).toBeUndefined();
|
|
160
|
+
expect(stderr).toBe('');
|
|
161
|
+
expect(output).toContain('Sub-DAG nesting');
|
|
162
|
+
expect(output).toContain('• task-parent');
|
|
163
|
+
expect(output).toContain('- task-parent-a (RUNNING)');
|
|
164
|
+
});
|
|
165
|
+
it('viz_groups_subdag', async () => {
|
|
166
|
+
await writeDagYaml();
|
|
167
|
+
await writeNestedState();
|
|
168
|
+
const dag = await import('../dag.js');
|
|
169
|
+
await runCommand(() => dag.dagCommand.parseAsync(['viz', '--dag', 'DARE/dare-dag.yaml', '--format', 'mermaid'], { from: 'user' }));
|
|
170
|
+
const output = stripAnsi(stdout);
|
|
171
|
+
expect(exitCode).toBeUndefined();
|
|
172
|
+
expect(stderr).toBe('');
|
|
173
|
+
expect(output).toContain('subgraph subdag_task_parent');
|
|
174
|
+
expect(output).toContain('Sub-DAG: task-parent');
|
|
175
|
+
expect(output).toContain('task_parent_a');
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
//# sourceMappingURL=persist-viz.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persist-viz.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/persist-viz.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refine-apply.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/refine-apply.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { convertYamlToDag } from '../../utils/dag-converter.js';
|
|
6
|
+
describe('dare refine --split --apply', () => {
|
|
7
|
+
let projectRoot;
|
|
8
|
+
let exitCode;
|
|
9
|
+
let stderr;
|
|
10
|
+
beforeEach(async () => {
|
|
11
|
+
projectRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'dare-refine-apply-'));
|
|
12
|
+
exitCode = undefined;
|
|
13
|
+
stderr = '';
|
|
14
|
+
vi.spyOn(process, 'cwd').mockReturnValue(projectRoot);
|
|
15
|
+
vi.spyOn(process, 'exit').mockImplementation((code) => {
|
|
16
|
+
exitCode = Number(code ?? 0);
|
|
17
|
+
throw new Error(`exit:${code}`);
|
|
18
|
+
});
|
|
19
|
+
vi.spyOn(console, 'error').mockImplementation((...args) => {
|
|
20
|
+
stderr += args.map(String).join(' ') + '\n';
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
afterEach(async () => {
|
|
24
|
+
vi.restoreAllMocks();
|
|
25
|
+
await fs.remove(projectRoot).catch(() => undefined);
|
|
26
|
+
});
|
|
27
|
+
async function run(args) {
|
|
28
|
+
vi.resetModules();
|
|
29
|
+
const { refineCommand } = await import('../refine.js');
|
|
30
|
+
exitCode = undefined;
|
|
31
|
+
stderr = '';
|
|
32
|
+
try {
|
|
33
|
+
await refineCommand.parseAsync(['node', 'refine', ...args]);
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
if (!(err instanceof Error) || !err.message.startsWith('exit:'))
|
|
37
|
+
throw err;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async function seedProject(maxDepth = 2) {
|
|
41
|
+
await fs.ensureDir(path.join(projectRoot, 'DARE', 'EXECUTION'));
|
|
42
|
+
await fs.writeJson(path.join(projectRoot, 'dare.config.json'), {
|
|
43
|
+
verification: { loop: { maxDepth } },
|
|
44
|
+
});
|
|
45
|
+
await fs.writeFile(path.join(projectRoot, 'DARE', 'dare-dag.yaml'), [
|
|
46
|
+
'title: "Refine Apply"',
|
|
47
|
+
'version: "1.0.0"',
|
|
48
|
+
'models:',
|
|
49
|
+
' cursor: { HIGH: h, MED: m, LOW: l }',
|
|
50
|
+
'tasks:',
|
|
51
|
+
' - id: task-root',
|
|
52
|
+
' title: "root"',
|
|
53
|
+
' depends_on: []',
|
|
54
|
+
' complexity: LOW',
|
|
55
|
+
' subtask_prompt: |',
|
|
56
|
+
' root',
|
|
57
|
+
'',
|
|
58
|
+
' - id: task-100',
|
|
59
|
+
' title: "parent"',
|
|
60
|
+
' depends_on: [task-root]',
|
|
61
|
+
' complexity: MED',
|
|
62
|
+
' spec_file: EXECUTION/task-100.md',
|
|
63
|
+
' subtask_prompt: |',
|
|
64
|
+
' parent',
|
|
65
|
+
'',
|
|
66
|
+
].join('\n'));
|
|
67
|
+
await fs.writeFile(path.join(projectRoot, 'DARE', 'EXECUTION', 'task-100.md'), [
|
|
68
|
+
'# Task task-100',
|
|
69
|
+
'',
|
|
70
|
+
'| Ação | Caminho |',
|
|
71
|
+
'|------|---------|',
|
|
72
|
+
'| CRIAR | `src/auth/login.ts` |',
|
|
73
|
+
'| CRIAR | `tests/auth/login.test.ts` |',
|
|
74
|
+
].join('\n'));
|
|
75
|
+
}
|
|
76
|
+
it('apply_injects_subdag', async () => {
|
|
77
|
+
await seedProject();
|
|
78
|
+
await run(['task-100', '--split', '--apply']);
|
|
79
|
+
expect(exitCode).toBe(0);
|
|
80
|
+
const dag = convertYamlToDag(await fs.readFile(path.join(projectRoot, 'DARE', 'dare-dag.yaml'), 'utf-8'));
|
|
81
|
+
const parent = dag.tasks.find((task) => task.id === 'task-100');
|
|
82
|
+
const first = dag.tasks.find((task) => task.id === 'task-100a');
|
|
83
|
+
const second = dag.tasks.find((task) => task.id === 'task-100b');
|
|
84
|
+
expect(parent?.depends_on).toEqual(['task-root', 'task-100a', 'task-100b']);
|
|
85
|
+
expect(first?.spec_file).toBe('EXECUTION/task-100a.md');
|
|
86
|
+
expect(first?.depends_on).toEqual(['task-root']);
|
|
87
|
+
expect(second?.depends_on).toEqual(['task-100a']);
|
|
88
|
+
const state = await fs.readJson(path.join(projectRoot, '.dare', 'state.json'));
|
|
89
|
+
expect(state.tasks['task-100a'].status).toBe('PENDING');
|
|
90
|
+
expect(state.tasks['task-100b'].status).toBe('PENDING');
|
|
91
|
+
});
|
|
92
|
+
it('apply_is_idempotent', async () => {
|
|
93
|
+
await seedProject();
|
|
94
|
+
await run(['task-100', '--split', '--apply']);
|
|
95
|
+
expect(exitCode).toBe(0);
|
|
96
|
+
await run(['task-100', '--split', '--apply']);
|
|
97
|
+
expect(exitCode).toBe(0);
|
|
98
|
+
const dag = convertYamlToDag(await fs.readFile(path.join(projectRoot, 'DARE', 'dare-dag.yaml'), 'utf-8'));
|
|
99
|
+
const inserted = dag.tasks.filter((task) => /^task-100[a-z]$/.test(task.id));
|
|
100
|
+
const parent = dag.tasks.find((task) => task.id === 'task-100');
|
|
101
|
+
expect(inserted.map((task) => task.id)).toEqual(['task-100a', 'task-100b']);
|
|
102
|
+
expect(parent?.depends_on).toEqual(['task-root', 'task-100a', 'task-100b']);
|
|
103
|
+
});
|
|
104
|
+
it('apply_without_split_errors', async () => {
|
|
105
|
+
await run(['task-100', '--apply']);
|
|
106
|
+
expect(exitCode).toBe(1);
|
|
107
|
+
expect(stderr).toContain('--apply exige --split');
|
|
108
|
+
});
|
|
109
|
+
it('respects_maxDepth', async () => {
|
|
110
|
+
await seedProject(0);
|
|
111
|
+
await run(['task-100', '--split', '--apply']);
|
|
112
|
+
expect(exitCode).toBe(1);
|
|
113
|
+
expect(stderr).toContain('exceeds maxDepth 0');
|
|
114
|
+
const dag = convertYamlToDag(await fs.readFile(path.join(projectRoot, 'DARE', 'dare-dag.yaml'), 'utf-8'));
|
|
115
|
+
expect(dag.tasks.some((task) => task.id === 'task-100a')).toBe(false);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=refine-apply.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refine-apply.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/refine-apply.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replan-splice.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/replan-splice.test.ts"],"names":[],"mappings":""}
|