@ronkovic/aad 0.3.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/LICENSE +21 -0
- package/README.md +312 -0
- package/bin/aad.js +2 -0
- package/package.json +78 -0
- package/src/__tests__/e2e/pipeline-e2e.test.ts +279 -0
- package/src/__tests__/e2e/resume-e2e.test.ts +200 -0
- package/src/__tests__/integration/cli-smoke.test.ts +175 -0
- package/src/__tests__/integration/pipeline.test.ts +346 -0
- package/src/bun-imports.d.ts +14 -0
- package/src/main.ts +52 -0
- package/src/modules/claude-provider/__tests__/claude-cli.adapter.test.ts +277 -0
- package/src/modules/claude-provider/__tests__/claude-sdk-real-env.test.ts +127 -0
- package/src/modules/claude-provider/__tests__/claude-sdk.adapter.test.ts +347 -0
- package/src/modules/claude-provider/__tests__/effort-strategy.test.ts +212 -0
- package/src/modules/claude-provider/__tests__/provider-registry.test.ts +251 -0
- package/src/modules/claude-provider/__tests__/retry.test.ts +201 -0
- package/src/modules/claude-provider/claude-cli.adapter.ts +156 -0
- package/src/modules/claude-provider/claude-provider.port.ts +35 -0
- package/src/modules/claude-provider/claude-sdk.adapter.ts +217 -0
- package/src/modules/claude-provider/effort-strategy.ts +94 -0
- package/src/modules/claude-provider/index.ts +32 -0
- package/src/modules/claude-provider/provider-registry.ts +92 -0
- package/src/modules/claude-provider/retry.ts +81 -0
- package/src/modules/cli/__tests__/app.test.ts +160 -0
- package/src/modules/cli/__tests__/cleanup.test.ts +111 -0
- package/src/modules/cli/__tests__/commands.test.ts +186 -0
- package/src/modules/cli/__tests__/output.test.ts +329 -0
- package/src/modules/cli/__tests__/resume.test.ts +324 -0
- package/src/modules/cli/__tests__/run.test.ts +168 -0
- package/src/modules/cli/__tests__/shutdown.test.ts +168 -0
- package/src/modules/cli/__tests__/status.test.ts +144 -0
- package/src/modules/cli/app.ts +241 -0
- package/src/modules/cli/commands/cleanup.ts +120 -0
- package/src/modules/cli/commands/resume.ts +156 -0
- package/src/modules/cli/commands/run.ts +322 -0
- package/src/modules/cli/commands/status.ts +101 -0
- package/src/modules/cli/index.ts +29 -0
- package/src/modules/cli/output.ts +256 -0
- package/src/modules/cli/shutdown.ts +122 -0
- package/src/modules/dashboard/__tests__/api-routes.test.ts +204 -0
- package/src/modules/dashboard/__tests__/file-watcher.test.ts +34 -0
- package/src/modules/dashboard/__tests__/server.test.ts +120 -0
- package/src/modules/dashboard/__tests__/sse-broadcaster.test.ts +163 -0
- package/src/modules/dashboard/__tests__/sse-routes.test.ts +58 -0
- package/src/modules/dashboard/__tests__/state-aggregator.test.ts +330 -0
- package/src/modules/dashboard/index.ts +8 -0
- package/src/modules/dashboard/routes/api.ts +84 -0
- package/src/modules/dashboard/routes/sse.ts +37 -0
- package/src/modules/dashboard/server.ts +111 -0
- package/src/modules/dashboard/services/file-watcher.ts +36 -0
- package/src/modules/dashboard/services/sse-broadcaster.ts +81 -0
- package/src/modules/dashboard/services/state-aggregator.ts +132 -0
- package/src/modules/dashboard/ui/dashboard.html +405 -0
- package/src/modules/git-workspace/__tests__/branch-manager.test.ts +335 -0
- package/src/modules/git-workspace/__tests__/git-exec.test.ts +91 -0
- package/src/modules/git-workspace/__tests__/memory-sync.test.ts +273 -0
- package/src/modules/git-workspace/__tests__/merge-service.test.ts +286 -0
- package/src/modules/git-workspace/__tests__/settings-merge.test.ts +163 -0
- package/src/modules/git-workspace/__tests__/worktree-manager.test.ts +247 -0
- package/src/modules/git-workspace/branch-manager.ts +191 -0
- package/src/modules/git-workspace/git-exec.ts +124 -0
- package/src/modules/git-workspace/index.ts +17 -0
- package/src/modules/git-workspace/memory-sync.ts +89 -0
- package/src/modules/git-workspace/merge-service.ts +156 -0
- package/src/modules/git-workspace/settings-merge.ts +95 -0
- package/src/modules/git-workspace/worktree-manager.ts +199 -0
- package/src/modules/logging/__tests__/log-store.test.ts +242 -0
- package/src/modules/logging/__tests__/logger.test.ts +81 -0
- package/src/modules/logging/__tests__/sse-transport.test.ts +93 -0
- package/src/modules/logging/index.ts +7 -0
- package/src/modules/logging/log-store.ts +80 -0
- package/src/modules/logging/logger.ts +55 -0
- package/src/modules/logging/transports/sse-transport.ts +28 -0
- package/src/modules/multi-repo/__tests__/multi-repo-planner.test.ts +93 -0
- package/src/modules/multi-repo/__tests__/repo-context.test.ts +79 -0
- package/src/modules/multi-repo/index.ts +12 -0
- package/src/modules/multi-repo/multi-repo-planner.ts +112 -0
- package/src/modules/multi-repo/repo-context.ts +71 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-81991/progress.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-81991/queue/completed/task-getall-2.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-81991/queue/pending/task-1.json +13 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-81991/queue/pending/task-getall-1.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-81991/queue/pending/task-status-change.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-81991/workers/worker-1.json +5 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-81991/workers/worker-2.json +5 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-82469/progress.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-82469/queue/completed/task-getall-2.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-82469/queue/pending/task-1.json +13 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-82469/queue/pending/task-getall-1.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-82469/queue/pending/task-status-change.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-82469/workers/worker-1.json +5 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-82469/workers/worker-2.json +5 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-85301/progress.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-85301/queue/completed/task-getall-2.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-85301/queue/pending/task-1.json +13 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-85301/queue/pending/task-getall-1.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-85301/queue/pending/task-status-change.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-85301/workers/worker-1.json +5 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-85301/workers/worker-2.json +5 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-85759/progress.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-85759/queue/completed/task-getall-2.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-85759/queue/pending/task-1.json +13 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-85759/queue/pending/task-getall-1.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-85759/queue/pending/task-status-change.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-85759/workers/worker-1.json +5 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-85759/workers/worker-2.json +5 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-86184/progress.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-86184/queue/completed/task-getall-2.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-86184/queue/pending/task-1.json +13 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-86184/queue/pending/task-getall-1.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-86184/queue/pending/task-status-change.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-86184/workers/worker-1.json +5 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-86184/workers/worker-2.json +5 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-88026/progress.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-88026/queue/completed/task-getall-2.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-88026/queue/pending/task-1.json +13 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-88026/queue/pending/task-getall-1.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-88026/queue/pending/task-status-change.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-88026/workers/worker-1.json +5 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-88026/workers/worker-2.json +5 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-89475/progress.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-89475/queue/completed/task-getall-2.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-89475/queue/pending/task-1.json +13 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-89475/queue/pending/task-getall-1.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-89475/queue/pending/task-status-change.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-89475/workers/worker-1.json +5 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-89475/workers/worker-2.json +5 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-89924/progress.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-89924/queue/completed/task-getall-2.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-89924/queue/pending/task-1.json +13 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-89924/queue/pending/task-getall-1.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-89924/queue/pending/task-status-change.json +10 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-89924/workers/worker-1.json +5 -0
- package/src/modules/persistence/__tests__/.tmp-stores-test-89924/workers/worker-2.json +5 -0
- package/src/modules/persistence/__tests__/file-lock.test.ts +141 -0
- package/src/modules/persistence/__tests__/index.test.ts +38 -0
- package/src/modules/persistence/__tests__/stores.test.ts +594 -0
- package/src/modules/persistence/file-lock.ts +158 -0
- package/src/modules/persistence/fs-run-store.ts +73 -0
- package/src/modules/persistence/fs-task-store.ts +152 -0
- package/src/modules/persistence/fs-worker-store.ts +116 -0
- package/src/modules/persistence/in-memory-stores.ts +98 -0
- package/src/modules/persistence/index.ts +60 -0
- package/src/modules/persistence/stores.port.ts +60 -0
- package/src/modules/planning/__tests__/file-conflict-validator.test.ts +256 -0
- package/src/modules/planning/__tests__/planning-service.test.ts +366 -0
- package/src/modules/planning/__tests__/project-detection.test.ts +707 -0
- package/src/modules/planning/file-conflict-validator.ts +135 -0
- package/src/modules/planning/index.ts +40 -0
- package/src/modules/planning/planning.service.ts +262 -0
- package/src/modules/planning/project-detection.ts +525 -0
- package/src/modules/plugin/__tests__/plugin-loader.test.ts +83 -0
- package/src/modules/plugin/__tests__/plugin-manager.test.ts +187 -0
- package/src/modules/plugin/index.ts +3 -0
- package/src/modules/plugin/plugin-loader.ts +46 -0
- package/src/modules/plugin/plugin-manager.ts +90 -0
- package/src/modules/plugin/plugin.types.ts +37 -0
- package/src/modules/process-manager/__tests__/process-manager.test.ts +210 -0
- package/src/modules/process-manager/__tests__/worker.test.ts +89 -0
- package/src/modules/process-manager/index.ts +5 -0
- package/src/modules/process-manager/process-manager.ts +193 -0
- package/src/modules/process-manager/worker.ts +106 -0
- package/src/modules/task-execution/__tests__/default-spawner.test.ts +154 -0
- package/src/modules/task-execution/__tests__/executor.test.ts +760 -0
- package/src/modules/task-execution/__tests__/implementer-green.test.ts +286 -0
- package/src/modules/task-execution/__tests__/merge-phase.test.ts +368 -0
- package/src/modules/task-execution/__tests__/reviewer.test.ts +302 -0
- package/src/modules/task-execution/__tests__/tester-red.test.ts +281 -0
- package/src/modules/task-execution/__tests__/tester-verify.test.ts +313 -0
- package/src/modules/task-execution/executor.ts +303 -0
- package/src/modules/task-execution/index.ts +45 -0
- package/src/modules/task-execution/phases/default-spawner.ts +49 -0
- package/src/modules/task-execution/phases/implementer-green.ts +100 -0
- package/src/modules/task-execution/phases/merge.ts +122 -0
- package/src/modules/task-execution/phases/reviewer.ts +160 -0
- package/src/modules/task-execution/phases/tester-red.ts +100 -0
- package/src/modules/task-execution/phases/tester-verify.ts +120 -0
- package/src/modules/task-queue/__tests__/dependency-resolver.test.ts +456 -0
- package/src/modules/task-queue/__tests__/dispatcher.test.ts +824 -0
- package/src/modules/task-queue/__tests__/task-plan.test.ts +122 -0
- package/src/modules/task-queue/__tests__/task.test.ts +130 -0
- package/src/modules/task-queue/dependency-resolver.ts +171 -0
- package/src/modules/task-queue/dispatcher.ts +372 -0
- package/src/modules/task-queue/index.ts +16 -0
- package/src/modules/task-queue/task-plan.ts +40 -0
- package/src/modules/task-queue/task.ts +67 -0
- package/src/shared/__tests__/config.test.ts +204 -0
- package/src/shared/__tests__/errors.test.ts +285 -0
- package/src/shared/__tests__/events.test.ts +496 -0
- package/src/shared/__tests__/types.test.ts +360 -0
- package/src/shared/config.ts +133 -0
- package/src/shared/errors.ts +128 -0
- package/src/shared/events.ts +171 -0
- package/src/shared/types.ts +143 -0
- package/tsconfig.json +30 -0
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { describe, test, expect } from "bun:test";
|
|
2
|
+
import {
|
|
3
|
+
AadError,
|
|
4
|
+
ConfigError,
|
|
5
|
+
ClaudeProviderError,
|
|
6
|
+
TimeoutError,
|
|
7
|
+
ValidationError,
|
|
8
|
+
DashboardError,
|
|
9
|
+
PersistenceError,
|
|
10
|
+
FileLockError,
|
|
11
|
+
TaskQueueError,
|
|
12
|
+
CircularDependencyError,
|
|
13
|
+
GitWorkspaceError,
|
|
14
|
+
ProcessManagerError,
|
|
15
|
+
PlanningError,
|
|
16
|
+
TaskExecutionError,
|
|
17
|
+
PhaseError,
|
|
18
|
+
TestRunnerError,
|
|
19
|
+
MergeConflictError,
|
|
20
|
+
} from "../errors";
|
|
21
|
+
|
|
22
|
+
describe("AadError", () => {
|
|
23
|
+
test("creates error with code and message", () => {
|
|
24
|
+
const error = new AadError("TEST_ERROR", "Test error message");
|
|
25
|
+
expect(error.code).toBe("TEST_ERROR");
|
|
26
|
+
expect(error.message).toBe("Test error message");
|
|
27
|
+
expect(error.context).toEqual({});
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test("creates error with context", () => {
|
|
31
|
+
const context = { taskId: "t1", retries: 3 };
|
|
32
|
+
const error = new AadError("TEST_ERROR", "Test error", context);
|
|
33
|
+
expect(error.context).toEqual(context);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test("is instance of Error", () => {
|
|
37
|
+
const error = new AadError("TEST_ERROR", "Test");
|
|
38
|
+
expect(error instanceof Error).toBe(true);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
test("has proper stack trace", () => {
|
|
42
|
+
const error = new AadError("TEST_ERROR", "Test");
|
|
43
|
+
expect(error.stack).toBeDefined();
|
|
44
|
+
expect(error.stack).toContain("AadError");
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
describe("ConfigError", () => {
|
|
49
|
+
test("creates config error", () => {
|
|
50
|
+
const error = new ConfigError("Invalid config value");
|
|
51
|
+
expect(error.code).toBe("CONFIG_ERROR");
|
|
52
|
+
expect(error.message).toBe("Invalid config value");
|
|
53
|
+
expect(error instanceof AadError).toBe(true);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
test("includes context", () => {
|
|
57
|
+
const error = new ConfigError("Missing env var", { key: "AAD_WORKERS" });
|
|
58
|
+
expect(error.context).toEqual({ key: "AAD_WORKERS" });
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
describe("ClaudeProviderError", () => {
|
|
63
|
+
test("creates claude provider error", () => {
|
|
64
|
+
const error = new ClaudeProviderError("Claude call failed");
|
|
65
|
+
expect(error.code).toBe("CLAUDE_PROVIDER_ERROR");
|
|
66
|
+
expect(error.message).toBe("Claude call failed");
|
|
67
|
+
expect(error instanceof AadError).toBe(true);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test("includes context", () => {
|
|
71
|
+
const context = { phase: "tester", exitCode: 1 };
|
|
72
|
+
const error = new ClaudeProviderError("Execution failed", context);
|
|
73
|
+
expect(error.context).toEqual(context);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
describe("TimeoutError", () => {
|
|
78
|
+
test("creates timeout error", () => {
|
|
79
|
+
const error = new TimeoutError("Operation timed out");
|
|
80
|
+
expect(error.code).toBe("TIMEOUT_ERROR");
|
|
81
|
+
expect(error.message).toBe("Operation timed out");
|
|
82
|
+
expect(error instanceof AadError).toBe(true);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
test("includes context", () => {
|
|
86
|
+
const context = { timeout: 30000, elapsed: 35000 };
|
|
87
|
+
const error = new TimeoutError("Timeout exceeded", context);
|
|
88
|
+
expect(error.context).toEqual(context);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
describe("ValidationError", () => {
|
|
93
|
+
test("creates validation error", () => {
|
|
94
|
+
const error = new ValidationError("Invalid input");
|
|
95
|
+
expect(error.code).toBe("VALIDATION_ERROR");
|
|
96
|
+
expect(error.message).toBe("Invalid input");
|
|
97
|
+
expect(error instanceof AadError).toBe(true);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
test("includes context", () => {
|
|
101
|
+
const context = { field: "taskId", value: "" };
|
|
102
|
+
const error = new ValidationError("Field cannot be empty", context);
|
|
103
|
+
expect(error.context).toEqual(context);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
describe("DashboardError", () => {
|
|
108
|
+
test("creates dashboard error", () => {
|
|
109
|
+
const error = new DashboardError("Server failed to start");
|
|
110
|
+
expect(error.code).toBe("DASHBOARD_ERROR");
|
|
111
|
+
expect(error.message).toBe("Server failed to start");
|
|
112
|
+
expect(error instanceof AadError).toBe(true);
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
test("includes context", () => {
|
|
116
|
+
const context = { port: 3333, reason: "EADDRINUSE" };
|
|
117
|
+
const error = new DashboardError("Port already in use", context);
|
|
118
|
+
expect(error.context).toEqual(context);
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
describe("PersistenceError", () => {
|
|
123
|
+
test("creates persistence error", () => {
|
|
124
|
+
const error = new PersistenceError("Failed to save task");
|
|
125
|
+
expect(error.code).toBe("PERSISTENCE_ERROR");
|
|
126
|
+
expect(error.message).toBe("Failed to save task");
|
|
127
|
+
expect(error instanceof AadError).toBe(true);
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
test("includes context", () => {
|
|
131
|
+
const context = { taskId: "task-1", path: "/tmp/task.json" };
|
|
132
|
+
const error = new PersistenceError("Write failed", context);
|
|
133
|
+
expect(error.context).toEqual(context);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
describe("FileLockError", () => {
|
|
138
|
+
test("creates file lock error", () => {
|
|
139
|
+
const error = new FileLockError("Lock acquisition failed");
|
|
140
|
+
expect(error.code).toBe("FILE_LOCK_ERROR");
|
|
141
|
+
expect(error.message).toBe("Lock acquisition failed");
|
|
142
|
+
expect(error instanceof AadError).toBe(true);
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
test("includes context", () => {
|
|
146
|
+
const context = { lockPath: "/tmp/.lock", holder: "worker-1" };
|
|
147
|
+
const error = new FileLockError("Lock held by another process", context);
|
|
148
|
+
expect(error.context).toEqual(context);
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
describe("TaskQueueError", () => {
|
|
153
|
+
test("creates task queue error", () => {
|
|
154
|
+
const error = new TaskQueueError("Dispatch failed");
|
|
155
|
+
expect(error.code).toBe("TASK_QUEUE_ERROR");
|
|
156
|
+
expect(error.message).toBe("Dispatch failed");
|
|
157
|
+
expect(error instanceof AadError).toBe(true);
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
test("includes context", () => {
|
|
161
|
+
const context = { taskId: "task-1", workerId: "worker-1" };
|
|
162
|
+
const error = new TaskQueueError("No idle workers", context);
|
|
163
|
+
expect(error.context).toEqual(context);
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
describe("CircularDependencyError", () => {
|
|
168
|
+
test("creates circular dependency error", () => {
|
|
169
|
+
const error = new CircularDependencyError("Circular dependency detected");
|
|
170
|
+
expect(error.code).toBe("CIRCULAR_DEPENDENCY_ERROR");
|
|
171
|
+
expect(error.message).toBe("Circular dependency detected");
|
|
172
|
+
expect(error instanceof AadError).toBe(true);
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
test("includes context with cycle", () => {
|
|
176
|
+
const context = { cycle: ["task-1", "task-2", "task-3", "task-1"] };
|
|
177
|
+
const error = new CircularDependencyError("Cycle found", context);
|
|
178
|
+
expect(error.context).toEqual(context);
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
describe("GitWorkspaceError", () => {
|
|
183
|
+
test("creates git workspace error", () => {
|
|
184
|
+
const error = new GitWorkspaceError("Worktree creation failed");
|
|
185
|
+
expect(error.code).toBe("GIT_WORKSPACE_ERROR");
|
|
186
|
+
expect(error.message).toBe("Worktree creation failed");
|
|
187
|
+
expect(error instanceof AadError).toBe(true);
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
test("includes context", () => {
|
|
191
|
+
const context = { branch: "task-1-branch", exitCode: 128 };
|
|
192
|
+
const error = new GitWorkspaceError("Git command failed", context);
|
|
193
|
+
expect(error.context).toEqual(context);
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
describe("ProcessManagerError", () => {
|
|
198
|
+
test("creates process manager error", () => {
|
|
199
|
+
const error = new ProcessManagerError("Worker spawn failed");
|
|
200
|
+
expect(error.code).toBe("PROCESS_MANAGER_ERROR");
|
|
201
|
+
expect(error.message).toBe("Worker spawn failed");
|
|
202
|
+
expect(error instanceof AadError).toBe(true);
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
test("includes context", () => {
|
|
206
|
+
const context = { workerId: "worker-1", signal: "SIGTERM" };
|
|
207
|
+
const error = new ProcessManagerError("Process terminated", context);
|
|
208
|
+
expect(error.context).toEqual(context);
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
describe("PlanningError", () => {
|
|
213
|
+
test("creates planning error", () => {
|
|
214
|
+
const error = new PlanningError("Task splitting failed");
|
|
215
|
+
expect(error.code).toBe("PLANNING_ERROR");
|
|
216
|
+
expect(error.message).toBe("Task splitting failed");
|
|
217
|
+
expect(error instanceof AadError).toBe(true);
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
test("includes context", () => {
|
|
221
|
+
const context = { requirementsPath: "/path/to/req.md" };
|
|
222
|
+
const error = new PlanningError("Invalid requirements", context);
|
|
223
|
+
expect(error.context).toEqual(context);
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
describe("TaskExecutionError", () => {
|
|
228
|
+
test("creates task execution error", () => {
|
|
229
|
+
const error = new TaskExecutionError("Execution failed");
|
|
230
|
+
expect(error.code).toBe("TASK_EXECUTION_ERROR");
|
|
231
|
+
expect(error.message).toBe("Execution failed");
|
|
232
|
+
expect(error instanceof AadError).toBe(true);
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
test("includes context", () => {
|
|
236
|
+
const context = { taskId: "task-1", phase: "green" };
|
|
237
|
+
const error = new TaskExecutionError("Phase failed", context);
|
|
238
|
+
expect(error.context).toEqual(context);
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
describe("PhaseError", () => {
|
|
243
|
+
test("creates phase error", () => {
|
|
244
|
+
const error = new PhaseError("Phase execution failed");
|
|
245
|
+
expect(error.code).toBe("PHASE_ERROR");
|
|
246
|
+
expect(error.message).toBe("Phase execution failed");
|
|
247
|
+
expect(error instanceof AadError).toBe(true);
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
test("includes context", () => {
|
|
251
|
+
const context = { phase: "review", taskId: "task-1" };
|
|
252
|
+
const error = new PhaseError("Review failed", context);
|
|
253
|
+
expect(error.context).toEqual(context);
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
describe("TestRunnerError", () => {
|
|
258
|
+
test("creates test runner error", () => {
|
|
259
|
+
const error = new TestRunnerError("Tests failed");
|
|
260
|
+
expect(error.code).toBe("TEST_RUNNER_ERROR");
|
|
261
|
+
expect(error.message).toBe("Tests failed");
|
|
262
|
+
expect(error instanceof AadError).toBe(true);
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
test("includes context", () => {
|
|
266
|
+
const context = { exitCode: 1, command: "bun test" };
|
|
267
|
+
const error = new TestRunnerError("Test execution failed", context);
|
|
268
|
+
expect(error.context).toEqual(context);
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
describe("MergeConflictError", () => {
|
|
273
|
+
test("creates merge conflict error", () => {
|
|
274
|
+
const error = new MergeConflictError("Merge conflict detected");
|
|
275
|
+
expect(error.code).toBe("MERGE_CONFLICT_ERROR");
|
|
276
|
+
expect(error.message).toBe("Merge conflict detected");
|
|
277
|
+
expect(error instanceof AadError).toBe(true);
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
test("includes context with files", () => {
|
|
281
|
+
const context = { conflictedFiles: ["src/file1.ts", "src/file2.ts"] };
|
|
282
|
+
const error = new MergeConflictError("Conflicts found", context);
|
|
283
|
+
expect(error.context).toEqual(context);
|
|
284
|
+
});
|
|
285
|
+
});
|