@dewtech/dare-cli 3.8.2 → 3.9.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.
Files changed (140) hide show
  1. package/README.md +18 -0
  2. package/dist/__tests__/ide-command-parity.test.js +1 -0
  3. package/dist/__tests__/ide-command-parity.test.js.map +1 -1
  4. package/dist/__tests__/secure-executor-regression.test.d.ts +2 -0
  5. package/dist/__tests__/secure-executor-regression.test.d.ts.map +1 -0
  6. package/dist/__tests__/secure-executor-regression.test.js +294 -0
  7. package/dist/__tests__/secure-executor-regression.test.js.map +1 -0
  8. package/dist/agent/__tests__/budget.test.d.ts +2 -0
  9. package/dist/agent/__tests__/budget.test.d.ts.map +1 -0
  10. package/dist/agent/__tests__/budget.test.js +36 -0
  11. package/dist/agent/__tests__/budget.test.js.map +1 -0
  12. package/dist/agent/__tests__/claude-driver.test.d.ts +2 -0
  13. package/dist/agent/__tests__/claude-driver.test.d.ts.map +1 -0
  14. package/dist/agent/__tests__/claude-driver.test.js +88 -0
  15. package/dist/agent/__tests__/claude-driver.test.js.map +1 -0
  16. package/dist/agent/__tests__/cost-telemetry.test.d.ts +2 -0
  17. package/dist/agent/__tests__/cost-telemetry.test.d.ts.map +1 -0
  18. package/dist/agent/__tests__/cost-telemetry.test.js +61 -0
  19. package/dist/agent/__tests__/cost-telemetry.test.js.map +1 -0
  20. package/dist/agent/__tests__/driver.types.test.d.ts +2 -0
  21. package/dist/agent/__tests__/driver.types.test.d.ts.map +1 -0
  22. package/dist/agent/__tests__/driver.types.test.js +33 -0
  23. package/dist/agent/__tests__/driver.types.test.js.map +1 -0
  24. package/dist/agent/__tests__/mock-driver.test.d.ts +2 -0
  25. package/dist/agent/__tests__/mock-driver.test.d.ts.map +1 -0
  26. package/dist/agent/__tests__/mock-driver.test.js +100 -0
  27. package/dist/agent/__tests__/mock-driver.test.js.map +1 -0
  28. package/dist/agent/__tests__/no-llm-in-core.test.d.ts +2 -0
  29. package/dist/agent/__tests__/no-llm-in-core.test.d.ts.map +1 -0
  30. package/dist/agent/__tests__/no-llm-in-core.test.js +46 -0
  31. package/dist/agent/__tests__/no-llm-in-core.test.js.map +1 -0
  32. package/dist/agent/budget.d.ts +15 -0
  33. package/dist/agent/budget.d.ts.map +1 -0
  34. package/dist/agent/budget.js +23 -0
  35. package/dist/agent/budget.js.map +1 -0
  36. package/dist/agent/driver.d.ts +46 -0
  37. package/dist/agent/driver.d.ts.map +1 -0
  38. package/dist/agent/driver.js +2 -0
  39. package/dist/agent/driver.js.map +1 -0
  40. package/dist/agent/drivers/claude.d.ts +43 -0
  41. package/dist/agent/drivers/claude.d.ts.map +1 -0
  42. package/dist/agent/drivers/claude.js +134 -0
  43. package/dist/agent/drivers/claude.js.map +1 -0
  44. package/dist/agent/drivers/mock.d.ts +3 -0
  45. package/dist/agent/drivers/mock.d.ts.map +1 -0
  46. package/dist/agent/drivers/mock.js +56 -0
  47. package/dist/agent/drivers/mock.js.map +1 -0
  48. package/dist/agent/drivers/noop.d.ts +3 -0
  49. package/dist/agent/drivers/noop.d.ts.map +1 -0
  50. package/dist/agent/drivers/noop.js +13 -0
  51. package/dist/agent/drivers/noop.js.map +1 -0
  52. package/dist/agent/telemetry.d.ts +4 -0
  53. package/dist/agent/telemetry.d.ts.map +1 -0
  54. package/dist/agent/telemetry.js +25 -0
  55. package/dist/agent/telemetry.js.map +1 -0
  56. package/dist/bin/dare.js +2 -0
  57. package/dist/bin/dare.js.map +1 -1
  58. package/dist/commands/__tests__/execute-agent.test.d.ts +2 -0
  59. package/dist/commands/__tests__/execute-agent.test.d.ts.map +1 -0
  60. package/dist/commands/__tests__/execute-agent.test.js +191 -0
  61. package/dist/commands/__tests__/execute-agent.test.js.map +1 -0
  62. package/dist/commands/__tests__/require-approval.test.d.ts +2 -0
  63. package/dist/commands/__tests__/require-approval.test.d.ts.map +1 -0
  64. package/dist/commands/__tests__/require-approval.test.js +158 -0
  65. package/dist/commands/__tests__/require-approval.test.js.map +1 -0
  66. package/dist/commands/execute.d.ts +68 -0
  67. package/dist/commands/execute.d.ts.map +1 -1
  68. package/dist/commands/execute.js +558 -2
  69. package/dist/commands/execute.js.map +1 -1
  70. package/dist/commands/guard.d.ts +13 -0
  71. package/dist/commands/guard.d.ts.map +1 -0
  72. package/dist/commands/guard.js +338 -0
  73. package/dist/commands/guard.js.map +1 -0
  74. package/dist/guard/__tests__/boundary.test.d.ts +2 -0
  75. package/dist/guard/__tests__/boundary.test.d.ts.map +1 -0
  76. package/dist/guard/__tests__/boundary.test.js +37 -0
  77. package/dist/guard/__tests__/boundary.test.js.map +1 -0
  78. package/dist/guard/__tests__/guard-command.test.d.ts +2 -0
  79. package/dist/guard/__tests__/guard-command.test.d.ts.map +1 -0
  80. package/dist/guard/__tests__/guard-command.test.js +88 -0
  81. package/dist/guard/__tests__/guard-command.test.js.map +1 -0
  82. package/dist/guard/__tests__/guard-config.test.d.ts +2 -0
  83. package/dist/guard/__tests__/guard-config.test.d.ts.map +1 -0
  84. package/dist/guard/__tests__/guard-config.test.js +34 -0
  85. package/dist/guard/__tests__/guard-config.test.js.map +1 -0
  86. package/dist/guard/__tests__/guard-integration.test.d.ts +2 -0
  87. package/dist/guard/__tests__/guard-integration.test.d.ts.map +1 -0
  88. package/dist/guard/__tests__/guard-integration.test.js +218 -0
  89. package/dist/guard/__tests__/guard-integration.test.js.map +1 -0
  90. package/dist/guard/__tests__/guard-types.test.d.ts +2 -0
  91. package/dist/guard/__tests__/guard-types.test.d.ts.map +1 -0
  92. package/dist/guard/__tests__/guard-types.test.js +28 -0
  93. package/dist/guard/__tests__/guard-types.test.js.map +1 -0
  94. package/dist/guard/__tests__/provenance.test.d.ts +2 -0
  95. package/dist/guard/__tests__/provenance.test.d.ts.map +1 -0
  96. package/dist/guard/__tests__/provenance.test.js +80 -0
  97. package/dist/guard/__tests__/provenance.test.js.map +1 -0
  98. package/dist/guard/__tests__/scan.test.d.ts +2 -0
  99. package/dist/guard/__tests__/scan.test.d.ts.map +1 -0
  100. package/dist/guard/__tests__/scan.test.js +62 -0
  101. package/dist/guard/__tests__/scan.test.js.map +1 -0
  102. package/dist/guard/__tests__/unicode.test.d.ts +2 -0
  103. package/dist/guard/__tests__/unicode.test.d.ts.map +1 -0
  104. package/dist/guard/__tests__/unicode.test.js +75 -0
  105. package/dist/guard/__tests__/unicode.test.js.map +1 -0
  106. package/dist/guard/boundary.d.ts +9 -0
  107. package/dist/guard/boundary.d.ts.map +1 -0
  108. package/dist/guard/boundary.js +17 -0
  109. package/dist/guard/boundary.js.map +1 -0
  110. package/dist/guard/config.d.ts +60 -0
  111. package/dist/guard/config.d.ts.map +1 -0
  112. package/dist/guard/config.js +64 -0
  113. package/dist/guard/config.js.map +1 -0
  114. package/dist/guard/pipeline.d.ts +13 -0
  115. package/dist/guard/pipeline.d.ts.map +1 -0
  116. package/dist/guard/pipeline.js +120 -0
  117. package/dist/guard/pipeline.js.map +1 -0
  118. package/dist/guard/provenance.d.ts +18 -0
  119. package/dist/guard/provenance.d.ts.map +1 -0
  120. package/dist/guard/provenance.js +108 -0
  121. package/dist/guard/provenance.js.map +1 -0
  122. package/dist/guard/scan.d.ts +6 -0
  123. package/dist/guard/scan.d.ts.map +1 -0
  124. package/dist/guard/scan.js +84 -0
  125. package/dist/guard/scan.js.map +1 -0
  126. package/dist/guard/types.d.ts +28 -0
  127. package/dist/guard/types.d.ts.map +1 -0
  128. package/dist/guard/types.js +2 -0
  129. package/dist/guard/types.js.map +1 -0
  130. package/dist/guard/unicode.d.ts +8 -0
  131. package/dist/guard/unicode.d.ts.map +1 -0
  132. package/dist/guard/unicode.js +126 -0
  133. package/dist/guard/unicode.js.map +1 -0
  134. package/dist/utils/project-generator.d.ts.map +1 -1
  135. package/dist/utils/project-generator.js +2 -0
  136. package/dist/utils/project-generator.js.map +1 -1
  137. package/package.json +4 -1
  138. package/templates/ide/antigravity/.agents/skills/dare-guard/SKILL.md +16 -0
  139. package/templates/ide/claude/.claude/commands/dare-guard.md +16 -0
  140. package/templates/ide/cursor/.cursor/commands/dare-guard.md +16 -0
@@ -0,0 +1,25 @@
1
+ function resolveTaskNodeId(taskId) {
2
+ return taskId.startsWith('task:') ? taskId : `task:${taskId}`;
3
+ }
4
+ export function recordCostTelemetry(graph, taskId, total, attempts) {
5
+ const canonicalTaskId = resolveTaskNodeId(taskId);
6
+ const node = graph.getNode(canonicalTaskId) ?? graph.getNode(taskId);
7
+ if (!node)
8
+ return;
9
+ graph.addNode({
10
+ ...node,
11
+ metadata: {
12
+ ...node.metadata,
13
+ inputTokens: total.inputTokens,
14
+ outputTokens: total.outputTokens,
15
+ costUsd: total.costUsd,
16
+ model: total.model,
17
+ attempts,
18
+ },
19
+ });
20
+ const pendingFlush = graph.flush?.();
21
+ if (pendingFlush) {
22
+ void pendingFlush.catch(() => undefined);
23
+ }
24
+ }
25
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/agent/telemetry.ts"],"names":[],"mappings":"AAGA,SAAS,iBAAiB,CAAC,MAAc;IACvC,OAAO,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,MAAM,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAAqB,EACrB,MAAc,EACd,KAAiB,EACjB,QAAgB;IAEhB,MAAM,eAAe,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrE,IAAI,CAAC,IAAI;QAAE,OAAO;IAElB,KAAK,CAAC,OAAO,CAAC;QACZ,GAAG,IAAI;QACP,QAAQ,EAAE;YACR,GAAG,IAAI,CAAC,QAAQ;YAChB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,QAAQ;SACT;KACF,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IACrC,IAAI,YAAY,EAAE,CAAC;QACjB,KAAK,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC"}
package/dist/bin/dare.js CHANGED
@@ -21,6 +21,7 @@ import { benchCommand } from '../commands/bench.js';
21
21
  import { steeringCommand } from '../commands/steering.js';
22
22
  import { hooksCommand } from '../commands/hooks.js';
23
23
  import { patternsCommand } from '../commands/patterns.js';
24
+ import { guardCommand } from '../commands/guard.js';
24
25
  import { skillCommand } from '../skills/index.js';
25
26
  import { welcomeCommand } from '../commands/welcome.js';
26
27
  import { printBanner } from '../utils/banner.js';
@@ -52,6 +53,7 @@ program.addCommand(benchCommand);
52
53
  program.addCommand(steeringCommand);
53
54
  program.addCommand(hooksCommand);
54
55
  program.addCommand(patternsCommand);
56
+ program.addCommand(guardCommand);
55
57
  program.addCommand(skillCommand);
56
58
  program.addCommand(welcomeCommand);
57
59
  // Show banner + help when invoked with no subcommand
@@ -1 +1 @@
1
- {"version":3,"file":"dare.js","sourceRoot":"","sources":["../../src/bin/dare.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAEzE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,mGAAmG,CAAC;KAChH,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;AAEtD,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AAEnC,qDAAqD;AACrD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,WAAW,EAAE,CAAC;IACd,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC;KAAM,CAAC;IACN,yDAAyD;IACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,gDAAgD;QAChD,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,WAAW,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"dare.js","sourceRoot":"","sources":["../../src/bin/dare.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=execute-agent.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute-agent.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/execute-agent.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,191 @@
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
+ describe('dare execute --agent', () => {
6
+ let projectRoot;
7
+ let exitCode;
8
+ let stdout;
9
+ let stderr;
10
+ beforeEach(async () => {
11
+ vi.resetModules();
12
+ projectRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'dare-exec-agent-'));
13
+ await fs.ensureDir(path.join(projectRoot, 'DARE'));
14
+ await fs.writeJson(path.join(projectRoot, 'dare.config.json'), {}, { spaces: 2 });
15
+ vi.spyOn(process, 'cwd').mockReturnValue(projectRoot);
16
+ exitCode = undefined;
17
+ stdout = '';
18
+ stderr = '';
19
+ vi.spyOn(process, 'exit').mockImplementation((code) => {
20
+ exitCode = code;
21
+ throw new Error(`exit:${code}`);
22
+ });
23
+ vi.spyOn(console, 'log').mockImplementation((...args) => {
24
+ stdout += args.map(String).join(' ') + '\n';
25
+ });
26
+ vi.spyOn(console, 'error').mockImplementation((...args) => {
27
+ stderr += args.map(String).join(' ') + '\n';
28
+ });
29
+ });
30
+ afterEach(async () => {
31
+ const execute = await import('../execute.js');
32
+ execute.setResolveDriverForTests(null);
33
+ execute.setPreflightGuardForTests(null);
34
+ execute.setRankApprovalForTests(null);
35
+ const claude = await import('../../agent/drivers/claude.js');
36
+ claude.setClaudeSdkImporterForTests(null);
37
+ vi.restoreAllMocks();
38
+ await fs.remove(projectRoot).catch(() => undefined);
39
+ });
40
+ async function loadExecute() {
41
+ return import('../execute.js');
42
+ }
43
+ async function run(execute, args) {
44
+ try {
45
+ await execute.executeCommand.parseAsync(args, { from: 'user' });
46
+ }
47
+ catch (err) {
48
+ if (!(err instanceof Error) || !err.message.startsWith('exit:'))
49
+ throw err;
50
+ }
51
+ }
52
+ async function writeDag(tasks) {
53
+ const lines = [
54
+ 'title: "Agent Fixture"',
55
+ 'version: "1.0.0"',
56
+ 'models:',
57
+ ' HIGH: claude-sonnet',
58
+ ' MED: claude-sonnet',
59
+ ' LOW: claude-sonnet',
60
+ 'tasks:',
61
+ ];
62
+ for (const task of tasks) {
63
+ const dependsOn = task.dependsOn ?? [];
64
+ lines.push(` - id: ${task.id}`);
65
+ lines.push(` title: "${task.id}"`);
66
+ lines.push(dependsOn.length === 0
67
+ ? ' depends_on: []'
68
+ : ` depends_on: [${dependsOn.join(', ')}]`);
69
+ lines.push(' complexity: LOW');
70
+ lines.push(' subtask_prompt: |');
71
+ lines.push(` ${task.prompt ?? `execute ${task.id}`}`);
72
+ }
73
+ await fs.writeFile(path.join(projectRoot, 'DARE', 'dare-dag.yaml'), `${lines.join('\n')}\n`);
74
+ }
75
+ it('dry_run_drives_dag_to_done', async () => {
76
+ await writeDag([
77
+ { id: 'task-a' },
78
+ { id: 'task-b', dependsOn: ['task-a'] },
79
+ ]);
80
+ const execute = await loadExecute();
81
+ await run(execute, ['--agent', '--dry-run', '--require-approval', 'none', '--no-graph']);
82
+ const state = (await fs.readJson(path.join(projectRoot, '.dare', 'state.json')));
83
+ expect(state.tasks['task-a']?.status).toBe('DONE');
84
+ expect(state.tasks['task-b']?.status).toBe('DONE');
85
+ expect(exitCode).toBeUndefined();
86
+ expect(stderr).toBe('');
87
+ });
88
+ it('reuses_decideNextAction', async () => {
89
+ await writeDag([{ id: 'task-fail' }]);
90
+ await fs.ensureDir(path.join(projectRoot, '.dare'));
91
+ await fs.writeJson(path.join(projectRoot, '.dare', 'state.json'), {
92
+ version: 1,
93
+ updatedAt: new Date().toISOString(),
94
+ tasks: {
95
+ 'task-fail': {
96
+ status: 'PENDING',
97
+ attempts: [
98
+ {
99
+ n: 1,
100
+ at: '2026-01-01T00:00:00.000Z',
101
+ passed: false,
102
+ failureSignature: 'deadbeef',
103
+ failedAspect: 'test',
104
+ },
105
+ {
106
+ n: 2,
107
+ at: '2026-01-01T00:01:00.000Z',
108
+ passed: false,
109
+ failureSignature: 'deadbeef',
110
+ failedAspect: 'test',
111
+ },
112
+ ],
113
+ },
114
+ },
115
+ }, { spaces: 2 });
116
+ const policy = await import('../../verification/decay/policy.js');
117
+ const decideSpy = vi.spyOn(policy, 'decideNextAction');
118
+ const execute = await loadExecute();
119
+ execute.setResolveDriverForTests(async () => ({
120
+ id: 'test-failing-driver',
121
+ requiresNetwork: false,
122
+ async run(input) {
123
+ return {
124
+ status: 'failed',
125
+ worktree: input.worktree,
126
+ summary: 'candidate failed',
127
+ usage: { inputTokens: 0, outputTokens: 0, costUsd: 0, model: 'test' },
128
+ failureSignature: 'deadbeef',
129
+ };
130
+ },
131
+ }));
132
+ await run(execute, ['--agent', '--dry-run', '--require-approval', 'none', '--no-graph']);
133
+ const state = (await fs.readJson(path.join(projectRoot, '.dare', 'state.json')));
134
+ expect(decideSpy).toHaveBeenCalled();
135
+ expect(state.tasks['task-fail']?.error).toContain('FRESH_START');
136
+ expect(exitCode).toBe(1);
137
+ });
138
+ it('best_of_n_counts_all_in_budget', async () => {
139
+ await writeDag([{ id: 'task-budget' }]);
140
+ const execute = await loadExecute();
141
+ execute.setResolveDriverForTests(async () => ({
142
+ id: 'budget-driver',
143
+ requiresNetwork: false,
144
+ async run(input) {
145
+ return {
146
+ status: 'implemented',
147
+ worktree: input.worktree,
148
+ summary: 'ok',
149
+ usage: { inputTokens: 10, outputTokens: 0, costUsd: 0.01, model: 'test' },
150
+ };
151
+ },
152
+ }));
153
+ await run(execute, [
154
+ '--agent',
155
+ '--dry-run',
156
+ '--best-of',
157
+ '3',
158
+ '--require-approval',
159
+ 'none',
160
+ '--no-graph',
161
+ ]);
162
+ const state = (await fs.readJson(path.join(projectRoot, '.dare', 'state.json')));
163
+ expect(state.tasks['task-budget']?.status).toBe('DONE');
164
+ expect(state.tasks['task-budget']?.tokens).toBe(30);
165
+ expect(exitCode).toBeUndefined();
166
+ });
167
+ it('missing_sdk_exits_1', async () => {
168
+ await writeDag([{ id: 'task-sdk' }]);
169
+ const claude = await import('../../agent/drivers/claude.js');
170
+ claude.setClaudeSdkImporterForTests(async () => {
171
+ throw new Error('sdk missing');
172
+ });
173
+ const execute = await loadExecute();
174
+ await run(execute, ['--agent', '--require-approval', 'none', '--no-graph']);
175
+ expect(exitCode).toBe(1);
176
+ expect(stderr).toContain("Optional dependency '@anthropic-ai/sdk' not installed");
177
+ });
178
+ it('guard_fail_blocks_task', async () => {
179
+ await writeDag([{ id: 'task-guard' }]);
180
+ const execute = await loadExecute();
181
+ execute.setPreflightGuardForTests(async () => ({
182
+ verdict: 'FAIL',
183
+ artifacts: [],
184
+ reason: 'blocked by guard stub',
185
+ }));
186
+ await run(execute, ['--agent', '--dry-run', '--require-approval', 'none', '--no-graph']);
187
+ expect(exitCode).toBe(6);
188
+ expect(stdout).not.toContain('DONE');
189
+ });
190
+ });
191
+ //# sourceMappingURL=execute-agent.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute-agent.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/execute-agent.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=require-approval.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-approval.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/require-approval.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,158 @@
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
+ describe('dare execute --agent --require-approval', () => {
6
+ let projectRoot;
7
+ let exitCode;
8
+ let stdout;
9
+ let stderr;
10
+ let originalStdoutIsTTY;
11
+ let originalStdinIsTTY;
12
+ beforeEach(async () => {
13
+ vi.resetModules();
14
+ projectRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'dare-require-approval-'));
15
+ await fs.ensureDir(path.join(projectRoot, 'DARE'));
16
+ await fs.writeJson(path.join(projectRoot, 'dare.config.json'), {}, { spaces: 2 });
17
+ vi.spyOn(process, 'cwd').mockReturnValue(projectRoot);
18
+ originalStdoutIsTTY = process.stdout.isTTY;
19
+ originalStdinIsTTY = process.stdin.isTTY;
20
+ exitCode = undefined;
21
+ stdout = '';
22
+ stderr = '';
23
+ vi.spyOn(process, 'exit').mockImplementation((code) => {
24
+ exitCode = code;
25
+ throw new Error(`exit:${code}`);
26
+ });
27
+ vi.spyOn(console, 'log').mockImplementation((...args) => {
28
+ stdout += args.map(String).join(' ') + '\n';
29
+ });
30
+ vi.spyOn(console, 'error').mockImplementation((...args) => {
31
+ stderr += args.map(String).join(' ') + '\n';
32
+ });
33
+ });
34
+ afterEach(async () => {
35
+ const execute = await import('../execute.js');
36
+ execute.setResolveDriverForTests(null);
37
+ execute.setPreflightGuardForTests(null);
38
+ execute.setRankApprovalForTests(null);
39
+ Object.defineProperty(process.stdout, 'isTTY', {
40
+ value: originalStdoutIsTTY,
41
+ writable: true,
42
+ configurable: true,
43
+ });
44
+ Object.defineProperty(process.stdin, 'isTTY', {
45
+ value: originalStdinIsTTY,
46
+ writable: true,
47
+ configurable: true,
48
+ });
49
+ vi.restoreAllMocks();
50
+ await fs.remove(projectRoot).catch(() => undefined);
51
+ });
52
+ function setTty(stdin, stdout = stdin) {
53
+ Object.defineProperty(process.stdin, 'isTTY', {
54
+ value: stdin,
55
+ writable: true,
56
+ configurable: true,
57
+ });
58
+ Object.defineProperty(process.stdout, 'isTTY', {
59
+ value: stdout,
60
+ writable: true,
61
+ configurable: true,
62
+ });
63
+ }
64
+ async function loadExecute() {
65
+ return import('../execute.js');
66
+ }
67
+ async function run(execute, args) {
68
+ try {
69
+ await execute.executeCommand.parseAsync(args, { from: 'user' });
70
+ }
71
+ catch (err) {
72
+ if (!(err instanceof Error) || !err.message.startsWith('exit:'))
73
+ throw err;
74
+ }
75
+ }
76
+ async function writeDag(tasks) {
77
+ const lines = [
78
+ 'title: "Approval Fixture"',
79
+ 'version: "1.0.0"',
80
+ 'models:',
81
+ ' HIGH: claude-sonnet',
82
+ ' MED: claude-sonnet',
83
+ ' LOW: claude-sonnet',
84
+ 'tasks:',
85
+ ];
86
+ for (const task of tasks) {
87
+ const dependsOn = task.dependsOn ?? [];
88
+ lines.push(` - id: ${task.id}`);
89
+ lines.push(` title: "${task.id}"`);
90
+ lines.push(dependsOn.length === 0
91
+ ? ' depends_on: []'
92
+ : ` depends_on: [${dependsOn.join(', ')}]`);
93
+ lines.push(' complexity: LOW');
94
+ lines.push(' subtask_prompt: |');
95
+ lines.push(` execute ${task.id}`);
96
+ }
97
+ await fs.writeFile(path.join(projectRoot, 'DARE', 'dare-dag.yaml'), `${lines.join('\n')}\n`);
98
+ }
99
+ it('rank_pauses_between_ranks', async () => {
100
+ setTty(true);
101
+ await writeDag([
102
+ { id: 'task-a' },
103
+ { id: 'task-b', dependsOn: ['task-a'] },
104
+ ]);
105
+ const execute = await loadExecute();
106
+ const approvalCalls = [];
107
+ execute.setRankApprovalForTests(async (rank) => {
108
+ approvalCalls.push(rank);
109
+ return true;
110
+ });
111
+ await run(execute, ['--agent', '--dry-run', '--require-approval', 'rank', '--no-graph']);
112
+ expect(approvalCalls).toEqual([0, 1]);
113
+ expect(exitCode).toBeUndefined();
114
+ expect(stderr).toBe('');
115
+ });
116
+ it('none_does_not_prompt', async () => {
117
+ setTty(false);
118
+ await writeDag([
119
+ { id: 'task-a' },
120
+ { id: 'task-b', dependsOn: ['task-a'] },
121
+ ]);
122
+ const execute = await loadExecute();
123
+ const approvalSpy = vi.fn(async () => true);
124
+ execute.setRankApprovalForTests(approvalSpy);
125
+ await run(execute, ['--agent', '--dry-run', '--require-approval', 'none', '--no-graph']);
126
+ expect(approvalSpy).not.toHaveBeenCalled();
127
+ expect(exitCode).toBeUndefined();
128
+ expect(stderr).toBe('');
129
+ });
130
+ it('decline_preserves_pending', async () => {
131
+ setTty(true);
132
+ await writeDag([
133
+ { id: 'task-a' },
134
+ { id: 'task-b', dependsOn: ['task-a'] },
135
+ ]);
136
+ const execute = await loadExecute();
137
+ let approvalCount = 0;
138
+ execute.setRankApprovalForTests(async () => {
139
+ approvalCount += 1;
140
+ return approvalCount === 1;
141
+ });
142
+ await run(execute, ['--agent', '--dry-run', '--require-approval', 'rank', '--no-graph']);
143
+ const state = (await fs.readJson(path.join(projectRoot, '.dare', 'state.json')));
144
+ expect(state.tasks['task-a']?.status).toBe('DONE');
145
+ expect(state.tasks['task-b']?.status).toBe('PENDING');
146
+ expect(stdout).toContain('paused by approval policy');
147
+ expect(exitCode).toBeUndefined();
148
+ });
149
+ it('non_interactive_rank_requires_none', async () => {
150
+ setTty(false);
151
+ await writeDag([{ id: 'task-a' }]);
152
+ const execute = await loadExecute();
153
+ await run(execute, ['--agent', '--dry-run', '--require-approval', 'rank', '--no-graph']);
154
+ expect(exitCode).toBe(1);
155
+ expect(stderr).toContain("--require-approval none");
156
+ });
157
+ });
158
+ //# sourceMappingURL=require-approval.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-approval.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/require-approval.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,71 @@
1
1
  import { Command } from 'commander';
2
+ import { type DagTask } from '../dag-runner/run_dag.js';
3
+ import type { AgentDriver } from '../agent/driver.js';
4
+ import { type GuardConfig } from '../guard/config.js';
5
+ import type { GuardedArtifact } from '../guard/types.js';
6
+ /**
7
+ * `dare execute` — orchestrate DAG execution.
8
+ *
9
+ * The DARE CLI **does not** invoke any LLM API. Execution happens inside the
10
+ * IDE the user is already authenticated in (Cursor / Antigravity / Claude
11
+ * Code). This command is a coordinator the IDE agent calls into:
12
+ *
13
+ * dare execute --next → print next executable tasks + prompts
14
+ * dare execute --complete <id> --output … → mark a task DONE, ingest into graph
15
+ * dare execute --fail <id> --reason … → mark a task FAILED + cascade-skip
16
+ * dare execute --status → render canvas + summary
17
+ * dare execute --reset <id> → re-open a task (PENDING) for retry
18
+ *
19
+ * No flags = `--status`.
20
+ */
21
+ interface ExecuteOptions {
22
+ dag: string;
23
+ agent: boolean;
24
+ next: boolean;
25
+ status: boolean;
26
+ watch: boolean;
27
+ complete?: string;
28
+ fail?: string;
29
+ reset?: string;
30
+ output?: string;
31
+ reason?: string;
32
+ tokens?: string;
33
+ duration?: string;
34
+ noGraph: boolean;
35
+ parallelHint: boolean;
36
+ verify?: boolean;
37
+ noVerify?: boolean;
38
+ fullMutation?: boolean;
39
+ verdictJson?: boolean;
40
+ bestOf?: string;
41
+ policy?: string;
42
+ prerank?: boolean;
43
+ formal?: boolean;
44
+ noFormal?: boolean;
45
+ formalBackend?: string;
46
+ budgetTokens?: string;
47
+ requireApproval?: string;
48
+ onFail?: string;
49
+ dryRun?: boolean;
50
+ }
2
51
  export declare const executeCommand: Command;
52
+ interface AgentRuntimeConfig {
53
+ readonly model: string;
54
+ readonly apiKeyEnv?: string;
55
+ readonly maxTokens?: number;
56
+ readonly guard: GuardConfig;
57
+ }
58
+ interface PreflightGuardResult {
59
+ readonly verdict: 'PASS' | 'WARN' | 'FAIL';
60
+ readonly artifacts: ReadonlyArray<GuardedArtifact>;
61
+ readonly reason?: string;
62
+ }
63
+ type PreflightGuardFn = (task: DagTask, guardConfig: GuardConfig) => Promise<PreflightGuardResult>;
64
+ type ResolveDriverFn = (args: ExecuteOptions, config: AgentRuntimeConfig) => Promise<AgentDriver>;
65
+ type RankApprovalFn = (rank: number, tasks: ReadonlyArray<DagTask>) => Promise<boolean>;
66
+ export declare function setPreflightGuardForTests(fn: PreflightGuardFn | null): void;
67
+ export declare function setResolveDriverForTests(fn: ResolveDriverFn | null): void;
68
+ export declare function setRankApprovalForTests(fn: RankApprovalFn | null): void;
69
+ export declare function resolveDriver(args: ExecuteOptions, config: AgentRuntimeConfig): Promise<AgentDriver>;
70
+ export {};
3
71
  //# sourceMappingURL=execute.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8FpC,eAAO,MAAM,cAAc,SA4DvB,CAAC"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"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"}