agentrix 0.0.6 → 0.2.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/dist/api/auth.d.ts +11 -0
- package/dist/api/auth.d.ts.map +1 -1
- package/dist/api/auth.js +18 -3
- package/dist/api/auth.js.map +1 -1
- package/dist/api/automation.d.ts +27 -2
- package/dist/api/automation.d.ts.map +1 -1
- package/dist/api/automation.js +43 -15
- package/dist/api/automation.js.map +1 -1
- package/dist/api/base-handler.d.ts +9 -0
- package/dist/api/base-handler.d.ts.map +1 -1
- package/dist/api/base-handler.js +14 -12
- package/dist/api/base-handler.js.map +1 -1
- package/dist/api/create-plan.d.ts +11 -0
- package/dist/api/create-plan.d.ts.map +1 -1
- package/dist/api/create-plan.js +25 -10
- package/dist/api/create-plan.js.map +1 -1
- package/dist/api/git-status.d.ts +12 -0
- package/dist/api/git-status.d.ts.map +1 -1
- package/dist/api/git-status.js +20 -4
- package/dist/api/git-status.js.map +1 -1
- package/dist/api/plans.d.ts +18 -0
- package/dist/api/plans.d.ts.map +1 -1
- package/dist/api/plans.js +33 -14
- package/dist/api/plans.js.map +1 -1
- package/dist/api/repo-dashboard.d.ts.map +1 -1
- package/dist/api/repo-dashboard.js +4 -5
- package/dist/api/repo-dashboard.js.map +1 -1
- package/dist/api/repo-issue.d.ts.map +1 -1
- package/dist/api/repo-issue.js +6 -9
- package/dist/api/repo-issue.js.map +1 -1
- package/dist/api/repos.d.ts +5 -1
- package/dist/api/repos.d.ts.map +1 -1
- package/dist/api/repos.js +2 -2
- package/dist/api/repos.js.map +1 -1
- package/dist/api/sessions.d.ts +5 -1
- package/dist/api/sessions.d.ts.map +1 -1
- package/dist/api/sessions.js +2 -2
- package/dist/api/sessions.js.map +1 -1
- package/dist/api/tasks.d.ts +6 -1
- package/dist/api/tasks.d.ts.map +1 -1
- package/dist/api/tasks.js +7 -3
- package/dist/api/tasks.js.map +1 -1
- package/dist/api/terminal.d.ts +5 -2
- package/dist/api/terminal.d.ts.map +1 -1
- package/dist/api/terminal.js +2 -1
- package/dist/api/terminal.js.map +1 -1
- package/dist/api/worktrees.d.ts +5 -1
- package/dist/api/worktrees.d.ts.map +1 -1
- package/dist/api/worktrees.js +2 -2
- package/dist/api/worktrees.js.map +1 -1
- package/dist/cli/plans-command.d.ts +9 -0
- package/dist/cli/plans-command.d.ts.map +1 -1
- package/dist/cli/plans-command.js +17 -4
- package/dist/cli/plans-command.js.map +1 -1
- package/dist/cli/server-starter.d.ts +6 -0
- package/dist/cli/server-starter.d.ts.map +1 -1
- package/dist/cli/server-starter.js +14 -2
- package/dist/cli/server-starter.js.map +1 -1
- package/dist/core/agents.d.ts +11 -0
- package/dist/core/agents.d.ts.map +1 -1
- package/dist/core/agents.js +22 -8
- package/dist/core/agents.js.map +1 -1
- package/dist/core/auth.d.ts +10 -0
- package/dist/core/auth.d.ts.map +1 -1
- package/dist/core/auth.js +18 -4
- package/dist/core/auth.js.map +1 -1
- package/dist/core/branch-name.d.ts +10 -0
- package/dist/core/branch-name.d.ts.map +1 -1
- package/dist/core/branch-name.js +19 -6
- package/dist/core/branch-name.js.map +1 -1
- package/dist/core/plan-storage.js +2 -2
- package/dist/core/plan-storage.js.map +1 -1
- package/dist/repositories/git-repository.d.ts +6 -0
- package/dist/repositories/git-repository.d.ts.map +1 -1
- package/dist/repositories/git-repository.js +9 -1
- package/dist/repositories/git-repository.js.map +1 -1
- package/dist/repositories/repository-repository.d.ts +13 -0
- package/dist/repositories/repository-repository.d.ts.map +1 -1
- package/dist/repositories/repository-repository.js +29 -7
- package/dist/repositories/repository-repository.js.map +1 -1
- package/dist/repositories/worktree-repository.d.ts +11 -0
- package/dist/repositories/worktree-repository.d.ts.map +1 -1
- package/dist/repositories/worktree-repository.js +8 -1
- package/dist/repositories/worktree-repository.js.map +1 -1
- package/dist/services/repository-service.d.ts +14 -0
- package/dist/services/repository-service.d.ts.map +1 -1
- package/dist/services/repository-service.js +36 -8
- package/dist/services/repository-service.js.map +1 -1
- package/dist/services/session-service.d.ts +15 -0
- package/dist/services/session-service.d.ts.map +1 -1
- package/dist/services/session-service.js +38 -8
- package/dist/services/session-service.js.map +1 -1
- package/dist/services/terminal-service.d.ts +10 -0
- package/dist/services/terminal-service.d.ts.map +1 -1
- package/dist/services/terminal-service.js +30 -6
- package/dist/services/terminal-service.js.map +1 -1
- package/dist/utils/repository-cache.d.ts +11 -0
- package/dist/utils/repository-cache.d.ts.map +1 -1
- package/dist/utils/repository-cache.js +17 -2
- package/dist/utils/repository-cache.js.map +1 -1
- package/package.json +5 -3
- package/ui/dist/assets/{index-BI2EZLfU.js → index-Df_Dnr2P.js} +149 -134
- package/ui/dist/assets/index-Dq7NgFme.css +41 -0
- package/ui/dist/index.html +2 -2
- package/ui/dist/assets/index-CwB7gOl4.css +0 -41
package/dist/api/auth.d.ts
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
|
+
import { sendJson } from '../utils/http.js';
|
|
2
|
+
import { createAuthService } from '../services/index.js';
|
|
1
3
|
import type { RequestContext } from '../types/http.js';
|
|
2
4
|
import type { AuthManager, CookieManager } from '../types/auth.js';
|
|
5
|
+
interface AuthDependencies {
|
|
6
|
+
createAuthService: typeof createAuthService;
|
|
7
|
+
sendJson: typeof sendJson;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* @internal Test hook to override auth handler dependencies
|
|
11
|
+
*/
|
|
12
|
+
export declare function __setAuthTestOverrides(overrides?: Partial<AuthDependencies>): void;
|
|
3
13
|
export declare function createAuthHandlers(authManager: AuthManager, { cookieManager }?: {
|
|
4
14
|
cookieManager?: CookieManager;
|
|
5
15
|
}): {
|
|
@@ -7,4 +17,5 @@ export declare function createAuthHandlers(authManager: AuthManager, { cookieMan
|
|
|
7
17
|
logout: (context: RequestContext) => Promise<void>;
|
|
8
18
|
status: (context: RequestContext) => Promise<void>;
|
|
9
19
|
};
|
|
20
|
+
export {};
|
|
10
21
|
//# sourceMappingURL=auth.d.ts.map
|
package/dist/api/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/api/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/api/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEnE,UAAU,gBAAgB;IACxB,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,QAAQ,EAAE,OAAO,QAAQ,CAAC;CAC3B;AASD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAMlF;AAED,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,WAAW,EACxB,EAAE,aAAa,EAAE,GAAE;IAAE,aAAa,CAAC,EAAE,aAAa,CAAA;CAAO;;;;EA+B1D"}
|
package/dist/api/auth.js
CHANGED
|
@@ -2,21 +2,36 @@ import { sendJson } from '../utils/http.js';
|
|
|
2
2
|
import { createAuthService } from '../services/index.js';
|
|
3
3
|
import { asyncHandler } from '../infrastructure/errors/index.js';
|
|
4
4
|
import { createSimpleHandler } from './base-handler.js';
|
|
5
|
+
const defaultDependencies = {
|
|
6
|
+
createAuthService,
|
|
7
|
+
sendJson,
|
|
8
|
+
};
|
|
9
|
+
let activeDependencies = { ...defaultDependencies };
|
|
10
|
+
/**
|
|
11
|
+
* @internal Test hook to override auth handler dependencies
|
|
12
|
+
*/
|
|
13
|
+
export function __setAuthTestOverrides(overrides) {
|
|
14
|
+
if (!overrides) {
|
|
15
|
+
activeDependencies = { ...defaultDependencies };
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
activeDependencies = { ...activeDependencies, ...overrides };
|
|
19
|
+
}
|
|
5
20
|
export function createAuthHandlers(authManager, { cookieManager } = {}) {
|
|
6
|
-
const authService = createAuthService(authManager, cookieManager);
|
|
21
|
+
const authService = activeDependencies.createAuthService(authManager, cookieManager);
|
|
7
22
|
// Login requires special error handling for status codes
|
|
8
23
|
const login = asyncHandler(async (context) => {
|
|
9
24
|
const payload = await context.readJsonBody();
|
|
10
25
|
const password = typeof payload['password'] === 'string' ? payload['password'].trim() : '';
|
|
11
26
|
try {
|
|
12
27
|
const result = await authService.login(context.req, context.res, password);
|
|
13
|
-
sendJson(context.res, 200, result);
|
|
28
|
+
activeDependencies.sendJson(context.res, 200, result);
|
|
14
29
|
}
|
|
15
30
|
catch (error) {
|
|
16
31
|
// Auth errors need special handling for status codes
|
|
17
32
|
const err = error;
|
|
18
33
|
const statusCode = err.statusCode || (err.message === 'Invalid password' ? 401 : 400);
|
|
19
|
-
sendJson(context.res, statusCode, { error: err.message });
|
|
34
|
+
activeDependencies.sendJson(context.res, statusCode, { error: err.message });
|
|
20
35
|
}
|
|
21
36
|
});
|
|
22
37
|
const logout = createSimpleHandler(async (context) => authService.logout(context.req, context.res));
|
package/dist/api/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/api/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/api/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AASxD,MAAM,mBAAmB,GAAqB;IAC5C,iBAAiB;IACjB,QAAQ;CACT,CAAC;AAEF,IAAI,kBAAkB,GAAqB,EAAE,GAAG,mBAAmB,EAAE,CAAC;AAEtE;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAqC;IAC1E,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,kBAAkB,GAAG,EAAE,GAAG,mBAAmB,EAAE,CAAC;QAChD,OAAO;IACT,CAAC;IACD,kBAAkB,GAAG,EAAE,GAAG,kBAAkB,EAAE,GAAG,SAAS,EAAsB,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,WAAwB,EACxB,EAAE,aAAa,KAAwC,EAAE;IAEzD,MAAM,WAAW,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAErF,yDAAyD;IACzD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,OAAuB,EAAE,EAAE;QAC3D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3F,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC3E,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,qDAAqD;YACrD,MAAM,GAAG,GAAG,KAAiD,CAAC;YAC9D,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,OAAO,KAAK,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACtF,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAuB,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAEpH,MAAM,MAAM,GAAG,mBAAmB,CAChC,KAAK,EAAE,OAAuB,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CACtE,CAAC;IAEF,OAAO;QACL,KAAK;QACL,MAAM;QACN,MAAM;KACP,CAAC;AACJ,CAAC"}
|
package/dist/api/automation.d.ts
CHANGED
|
@@ -1,11 +1,36 @@
|
|
|
1
|
+
import { cloneRepository, createWorktree, ensureRepository, getWorktreePath } from '../core/git.js';
|
|
1
2
|
import { launchAgentProcess } from '../core/agents.js';
|
|
2
3
|
import { runTask } from '../core/tasks.js';
|
|
4
|
+
import { validateAutomationRequest } from '../core/automation/request-validation.js';
|
|
5
|
+
import { resolveBranchName } from '../core/automation/branch.js';
|
|
6
|
+
import { generatePlanText } from '../core/automation/plan.js';
|
|
7
|
+
import { createGitOrchestrator } from '../core/automation/git-orchestration.js';
|
|
8
|
+
import { runAutomationTask } from '../core/automation/task-runner.js';
|
|
9
|
+
import { createLogger } from '../infrastructure/logging/index.js';
|
|
3
10
|
import type { Logger } from '../infrastructure/logging/index.js';
|
|
4
|
-
|
|
11
|
+
interface AutomationModuleDependencies {
|
|
12
|
+
cloneRepository: typeof cloneRepository;
|
|
13
|
+
ensureRepository: typeof ensureRepository;
|
|
14
|
+
getWorktreePath: typeof getWorktreePath;
|
|
15
|
+
createWorktree: typeof createWorktree;
|
|
16
|
+
launchAgentProcess: typeof launchAgentProcess;
|
|
17
|
+
runTask: typeof runTask;
|
|
18
|
+
validateAutomationRequest: typeof validateAutomationRequest;
|
|
19
|
+
resolveBranchName: typeof resolveBranchName;
|
|
20
|
+
generatePlanText: typeof generatePlanText;
|
|
21
|
+
createGitOrchestrator: typeof createGitOrchestrator;
|
|
22
|
+
runAutomationTask: typeof runAutomationTask;
|
|
23
|
+
createLogger: typeof createLogger;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* @internal Test hook to override automation dependencies
|
|
27
|
+
*/
|
|
28
|
+
export declare function __setAutomationTestOverrides(overrides?: Partial<AutomationModuleDependencies>): void;
|
|
29
|
+
export declare function ensureRepositoryExists(workdir: string, org: string, repo: string): Promise<{
|
|
5
30
|
repositoryPath: string;
|
|
6
31
|
cloned: boolean;
|
|
7
32
|
}>;
|
|
8
|
-
declare function ensureWorktreeExists(workdir: string, org: string, repo: string, branch: string, options?: unknown): Promise<{
|
|
33
|
+
export declare function ensureWorktreeExists(workdir: string, org: string, repo: string, branch: string, options?: unknown): Promise<{
|
|
9
34
|
worktreePath: string;
|
|
10
35
|
created: boolean;
|
|
11
36
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"automation.d.ts","sourceRoot":"","sources":["../../src/api/automation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"automation.d.ts","sourceRoot":"","sources":["../../src/api/automation.ts"],"names":[],"mappings":"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"}
|
package/dist/api/automation.js
CHANGED
|
@@ -9,32 +9,60 @@ import { generatePlanText } from '../core/automation/plan.js';
|
|
|
9
9
|
import { createGitOrchestrator } from '../core/automation/git-orchestration.js';
|
|
10
10
|
import { runAutomationTask } from '../core/automation/task-runner.js';
|
|
11
11
|
import { createLogger } from '../infrastructure/logging/index.js';
|
|
12
|
-
|
|
12
|
+
const defaultAutomationDependencies = {
|
|
13
|
+
cloneRepository,
|
|
14
|
+
ensureRepository,
|
|
15
|
+
getWorktreePath,
|
|
16
|
+
createWorktree,
|
|
17
|
+
launchAgentProcess,
|
|
18
|
+
runTask,
|
|
19
|
+
validateAutomationRequest,
|
|
20
|
+
resolveBranchName,
|
|
21
|
+
generatePlanText,
|
|
22
|
+
createGitOrchestrator,
|
|
23
|
+
runAutomationTask,
|
|
24
|
+
createLogger,
|
|
25
|
+
};
|
|
26
|
+
let activeAutomationDependencies = { ...defaultAutomationDependencies };
|
|
27
|
+
/**
|
|
28
|
+
* @internal Test hook to override automation dependencies
|
|
29
|
+
*/
|
|
30
|
+
export function __setAutomationTestOverrides(overrides) {
|
|
31
|
+
if (!overrides) {
|
|
32
|
+
activeAutomationDependencies = { ...defaultAutomationDependencies };
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
activeAutomationDependencies = {
|
|
36
|
+
...activeAutomationDependencies,
|
|
37
|
+
...overrides,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export async function ensureRepositoryExists(workdir, org, repo) {
|
|
13
41
|
try {
|
|
14
|
-
const { repositoryPath } = await ensureRepository(workdir, org, repo);
|
|
42
|
+
const { repositoryPath } = await activeAutomationDependencies.ensureRepository(workdir, org, repo);
|
|
15
43
|
return { repositoryPath, cloned: false };
|
|
16
44
|
}
|
|
17
45
|
catch (error) {
|
|
18
46
|
const err = error;
|
|
19
47
|
if (err && /Repository not found/i.test(err.message || '')) {
|
|
20
48
|
const remote = `git@github.com:${org}/${repo}.git`;
|
|
21
|
-
await cloneRepository(workdir, remote);
|
|
22
|
-
const { repositoryPath } = await ensureRepository(workdir, org, repo);
|
|
49
|
+
await activeAutomationDependencies.cloneRepository(workdir, remote);
|
|
50
|
+
const { repositoryPath } = await activeAutomationDependencies.ensureRepository(workdir, org, repo);
|
|
23
51
|
return { repositoryPath, cloned: true };
|
|
24
52
|
}
|
|
25
53
|
throw error;
|
|
26
54
|
}
|
|
27
55
|
}
|
|
28
|
-
async function ensureWorktreeExists(workdir, org, repo, branch, options = {}) {
|
|
56
|
+
export async function ensureWorktreeExists(workdir, org, repo, branch, options = {}) {
|
|
29
57
|
try {
|
|
30
|
-
const { worktreePath } = await getWorktreePath(workdir, org, repo, branch);
|
|
58
|
+
const { worktreePath } = await activeAutomationDependencies.getWorktreePath(workdir, org, repo, branch);
|
|
31
59
|
return { worktreePath, created: false };
|
|
32
60
|
}
|
|
33
61
|
catch (error) {
|
|
34
62
|
const err = error;
|
|
35
63
|
if (err && /worktree .* not found/i.test(err.message || '')) {
|
|
36
|
-
await createWorktree(workdir, org, repo, branch, options);
|
|
37
|
-
const { worktreePath } = await getWorktreePath(workdir, org, repo, branch);
|
|
64
|
+
await activeAutomationDependencies.createWorktree(workdir, org, repo, branch, options);
|
|
65
|
+
const { worktreePath } = await activeAutomationDependencies.getWorktreePath(workdir, org, repo, branch);
|
|
38
66
|
return { worktreePath, created: true };
|
|
39
67
|
}
|
|
40
68
|
throw error;
|
|
@@ -75,17 +103,17 @@ function finishMetrics(key, success, durationMs) {
|
|
|
75
103
|
}
|
|
76
104
|
bucket.totalLatencyMs += durationMs;
|
|
77
105
|
}
|
|
78
|
-
export function createAutomationHandlers({ workdir, agentCommands, apiKey, branchNameGenerator, planService, logger, defaultBranches, }, { ensureRepositoryExists: ensureRepoExists = ensureRepositoryExists, ensureWorktreeExists: ensureWorktree = ensureWorktreeExists, launchAgentProcess: launchAgent = launchAgentProcess, runTaskImpl = runTask, now = () => Date.now(), createRequestId = () => randomUUID(), } = {}) {
|
|
79
|
-
const gitOrchestrator = createGitOrchestrator({
|
|
106
|
+
export function createAutomationHandlers({ workdir, agentCommands, apiKey, branchNameGenerator, planService, logger, defaultBranches, }, { ensureRepositoryExists: ensureRepoExists = ensureRepositoryExists, ensureWorktreeExists: ensureWorktree = ensureWorktreeExists, launchAgentProcess: launchAgent = activeAutomationDependencies.launchAgentProcess, runTaskImpl = activeAutomationDependencies.runTask, now = () => Date.now(), createRequestId = () => randomUUID(), } = {}) {
|
|
107
|
+
const gitOrchestrator = activeAutomationDependencies.createGitOrchestrator({
|
|
80
108
|
ensureRepositoryExists: ensureRepoExists,
|
|
81
109
|
ensureWorktreeExists: ensureWorktree,
|
|
82
110
|
});
|
|
83
|
-
const log = createLogger(logger);
|
|
111
|
+
const log = activeAutomationDependencies.createLogger(logger);
|
|
84
112
|
async function launch(context) {
|
|
85
113
|
const ctx = context;
|
|
86
114
|
let validation;
|
|
87
115
|
try {
|
|
88
|
-
validation = await validateAutomationRequest({
|
|
116
|
+
validation = await activeAutomationDependencies.validateAutomationRequest({
|
|
89
117
|
req: ctx.req,
|
|
90
118
|
expectedApiKey: apiKey || '',
|
|
91
119
|
readJsonBody: ctx.readJsonBody,
|
|
@@ -141,10 +169,10 @@ export function createAutomationHandlers({ workdir, agentCommands, apiKey, branc
|
|
|
141
169
|
return;
|
|
142
170
|
}
|
|
143
171
|
try {
|
|
144
|
-
const result = (await runAutomationTask({
|
|
172
|
+
const result = (await activeAutomationDependencies.runAutomationTask({
|
|
145
173
|
runTaskImpl: runTaskImpl,
|
|
146
|
-
resolveBranchName: resolveBranchName,
|
|
147
|
-
generatePlanText: generatePlanText,
|
|
174
|
+
resolveBranchName: activeAutomationDependencies.resolveBranchName,
|
|
175
|
+
generatePlanText: activeAutomationDependencies.generatePlanText,
|
|
148
176
|
gitOrchestrator,
|
|
149
177
|
launchAgent: launchAgent,
|
|
150
178
|
workdir,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"automation.js","sourceRoot":"","sources":["../../src/api/automation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EACL,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"automation.js","sourceRoot":"","sources":["../../src/api/automation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { sendJson } from '../utils/http.js';
|
|
1
2
|
import type { RequestContext } from '../types/http.js';
|
|
2
3
|
/**
|
|
3
4
|
* Generic handler function type
|
|
@@ -44,6 +45,13 @@ export interface HandlerOptions<TInput, TOutput> {
|
|
|
44
45
|
* });
|
|
45
46
|
* ```
|
|
46
47
|
*/
|
|
48
|
+
interface HandlerDependencies {
|
|
49
|
+
sendJson: typeof sendJson;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @internal Test hook to override handler dependencies
|
|
53
|
+
*/
|
|
54
|
+
export declare function __setBaseHandlerTestOverrides(overrides?: Partial<HandlerDependencies>): void;
|
|
47
55
|
export declare function createHandler<TInput = void, TOutput = unknown>(options: HandlerOptions<TInput, TOutput>): (context: RequestContext) => Promise<void>;
|
|
48
56
|
/**
|
|
49
57
|
* Creates a simple handler that doesn't require input validation
|
|
@@ -59,4 +67,5 @@ export declare function createQueryHandler<TOutput = unknown>(handler: (context:
|
|
|
59
67
|
successCode?: number;
|
|
60
68
|
responseTransformer?: (result: TOutput) => unknown;
|
|
61
69
|
}): (context: RequestContext) => Promise<void>;
|
|
70
|
+
export {};
|
|
62
71
|
//# sourceMappingURL=base-handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-handler.d.ts","sourceRoot":"","sources":["../../src/api/base-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base-handler.d.ts","sourceRoot":"","sources":["../../src/api/base-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,CACjE,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,KACpB,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB;;GAEG;AACH,MAAM,MAAM,kBAAkB,CAAC,MAAM,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,MAAM,EAAE,OAAO;IAC7C;;OAEG;IACH,OAAO,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE1C;;OAEG;IACH,SAAS,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAEvC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;CACpD;AAED;;;;;;;;;;;GAWG;AACH,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,OAAO,QAAQ,CAAC;CAC3B;AAQD;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAM5F;AAED,wBAAgB,aAAa,CAAC,MAAM,GAAG,IAAI,EAAE,OAAO,GAAG,OAAO,EAC5D,OAAO,EAAE,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,GACvC,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CA2B5C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAG,OAAO,EACnD,OAAO,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,EACtD,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAA;CAAO,GACzF,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAM5C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAG,OAAO,EAClD,OAAO,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,EACtD,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAA;CAAO,GACzF,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAQ5C"}
|
package/dist/api/base-handler.js
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import { sendJson } from '../utils/http.js';
|
|
2
2
|
import { asyncHandler } from '../infrastructure/errors/index.js';
|
|
3
|
+
const defaultDependencies = {
|
|
4
|
+
sendJson,
|
|
5
|
+
};
|
|
6
|
+
let activeDependencies = { ...defaultDependencies };
|
|
3
7
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* @example
|
|
7
|
-
* ```typescript
|
|
8
|
-
* const createUser = createHandler({
|
|
9
|
-
* handler: async (input, context) => userService.create(input),
|
|
10
|
-
* validator: validateUserCreate,
|
|
11
|
-
* successCode: 201
|
|
12
|
-
* });
|
|
13
|
-
* ```
|
|
8
|
+
* @internal Test hook to override handler dependencies
|
|
14
9
|
*/
|
|
10
|
+
export function __setBaseHandlerTestOverrides(overrides) {
|
|
11
|
+
if (!overrides) {
|
|
12
|
+
activeDependencies = { ...defaultDependencies };
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
activeDependencies = { ...activeDependencies, ...overrides };
|
|
16
|
+
}
|
|
15
17
|
export function createHandler(options) {
|
|
16
18
|
const { handler, validator, successCode = 200, readBody = Boolean(validator), responseTransformer, } = options;
|
|
17
19
|
return asyncHandler(async (context) => {
|
|
@@ -27,7 +29,7 @@ export function createHandler(options) {
|
|
|
27
29
|
const response = responseTransformer
|
|
28
30
|
? responseTransformer(result)
|
|
29
31
|
: result;
|
|
30
|
-
sendJson(context.res, successCode, response);
|
|
32
|
+
activeDependencies.sendJson(context.res, successCode, response);
|
|
31
33
|
});
|
|
32
34
|
}
|
|
33
35
|
/**
|
|
@@ -49,7 +51,7 @@ export function createQueryHandler(handler, options = {}) {
|
|
|
49
51
|
const response = options.responseTransformer
|
|
50
52
|
? options.responseTransformer(result)
|
|
51
53
|
: result;
|
|
52
|
-
sendJson(context.res, options.successCode || 200, response);
|
|
54
|
+
activeDependencies.sendJson(context.res, options.successCode || 200, response);
|
|
53
55
|
});
|
|
54
56
|
}
|
|
55
57
|
//# sourceMappingURL=base-handler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-handler.js","sourceRoot":"","sources":["../../src/api/base-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"base-handler.js","sourceRoot":"","sources":["../../src/api/base-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AA8DjE,MAAM,mBAAmB,GAAwB;IAC/C,QAAQ;CACT,CAAC;AAEF,IAAI,kBAAkB,GAAwB,EAAE,GAAG,mBAAmB,EAAE,CAAC;AAEzE;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAAC,SAAwC;IACpF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,kBAAkB,GAAG,EAAE,GAAG,mBAAmB,EAAE,CAAC;QAChD,OAAO;IACT,CAAC;IACD,kBAAkB,GAAG,EAAE,GAAG,kBAAkB,EAAE,GAAG,SAAS,EAAyB,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAwC;IAExC,MAAM,EACJ,OAAO,EACP,SAAS,EACT,WAAW,GAAG,GAAG,EACjB,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,EAC7B,mBAAmB,GACpB,GAAG,OAAO,CAAC;IAEZ,OAAO,YAAY,CAAC,KAAK,EAAE,OAAuB,EAAE,EAAE;QACpD,IAAI,KAAa,CAAC;QAElB,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;YAC7C,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,OAAkB,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,SAAmB,CAAC;QAC9B,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAG,mBAAmB;YAClC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC;YAC7B,CAAC,CAAC,MAAM,CAAC;QAEX,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAsD,EACtD,UAAwF,EAAE;IAE1F,OAAO,aAAa,CAAC;QACnB,OAAO,EAAE,KAAK,EAAE,MAAY,EAAE,OAAuB,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;QAC1E,QAAQ,EAAE,KAAK;QACf,GAAG,OAAO;KACX,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAsD,EACtD,UAAwF,EAAE;IAE1F,OAAO,YAAY,CAAC,KAAK,EAAE,OAAuB,EAAE,EAAE;QACpD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,mBAAmB;YAC1C,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC;YACrC,CAAC,CAAC,MAAM,CAAC;QACX,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG,EAAE,QAAQ,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,8 +1,19 @@
|
|
|
1
|
+
import { sendJson } from '../utils/http.js';
|
|
2
|
+
import { ensureRepository } from '../core/git.js';
|
|
1
3
|
import type { RequestContext } from '../types/http.js';
|
|
2
4
|
import type { PlanService } from '../types/plan.js';
|
|
5
|
+
interface CreatePlanDependencies {
|
|
6
|
+
ensureRepository: typeof ensureRepository;
|
|
7
|
+
sendJson: typeof sendJson;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* @internal Test hook to override create-plan dependencies
|
|
11
|
+
*/
|
|
12
|
+
export declare function __setCreatePlanTestOverrides(overrides?: Partial<CreatePlanDependencies>): void;
|
|
3
13
|
export declare function createPlanHandlers({ planService: providedPlanService }?: {
|
|
4
14
|
planService?: PlanService;
|
|
5
15
|
}): {
|
|
6
16
|
create: (context: RequestContext) => Promise<void>;
|
|
7
17
|
};
|
|
18
|
+
export {};
|
|
8
19
|
//# sourceMappingURL=create-plan.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-plan.d.ts","sourceRoot":"","sources":["../../src/api/create-plan.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create-plan.d.ts","sourceRoot":"","sources":["../../src/api/create-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,UAAU,sBAAsB;IAC9B,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IAC1C,QAAQ,EAAE,OAAO,QAAQ,CAAC;CAC3B;AASD;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAM9F;AAED,wBAAgB,kBAAkB,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,GAAE;IAAE,WAAW,CAAC,EAAE,WAAW,CAAA;CAAO;sBAG1E,cAAc,KAAG,OAAO,CAAC,IAAI,CAAC;EA8E9D"}
|
package/dist/api/create-plan.js
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
import { sendJson } from '../utils/http.js';
|
|
2
2
|
import { ensureRepository } from '../core/git.js';
|
|
3
|
+
const defaultDependencies = {
|
|
4
|
+
ensureRepository,
|
|
5
|
+
sendJson,
|
|
6
|
+
};
|
|
7
|
+
let activeDependencies = { ...defaultDependencies };
|
|
8
|
+
/**
|
|
9
|
+
* @internal Test hook to override create-plan dependencies
|
|
10
|
+
*/
|
|
11
|
+
export function __setCreatePlanTestOverrides(overrides) {
|
|
12
|
+
if (!overrides) {
|
|
13
|
+
activeDependencies = { ...defaultDependencies };
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
activeDependencies = { ...activeDependencies, ...overrides };
|
|
17
|
+
}
|
|
3
18
|
export function createPlanHandlers({ planService: providedPlanService } = {}) {
|
|
4
19
|
const planService = providedPlanService;
|
|
5
20
|
async function create(context) {
|
|
@@ -9,18 +24,18 @@ export function createPlanHandlers({ planService: providedPlanService } = {}) {
|
|
|
9
24
|
}
|
|
10
25
|
catch (error) {
|
|
11
26
|
const err = error;
|
|
12
|
-
sendJson(context.res, 400, { error: err.message });
|
|
27
|
+
activeDependencies.sendJson(context.res, 400, { error: err.message });
|
|
13
28
|
return;
|
|
14
29
|
}
|
|
15
30
|
const prompt = typeof payload['prompt'] === 'string' ? payload['prompt'] : '';
|
|
16
31
|
if (!prompt.trim()) {
|
|
17
|
-
sendJson(context.res, 400, { error: 'prompt is required' });
|
|
32
|
+
activeDependencies.sendJson(context.res, 400, { error: 'prompt is required' });
|
|
18
33
|
return;
|
|
19
34
|
}
|
|
20
35
|
const rawPrompt = payload && typeof payload['rawPrompt'] === 'boolean' ? payload['rawPrompt'] : false;
|
|
21
36
|
const dangerousMode = payload && typeof payload['dangerousMode'] === 'boolean' ? payload['dangerousMode'] : false;
|
|
22
37
|
if (!planService || !planService.isConfigured) {
|
|
23
|
-
sendJson(context.res, 500, {
|
|
38
|
+
activeDependencies.sendJson(context.res, 500, {
|
|
24
39
|
error: 'Plan generation is not configured. Configure a local LLM command (set planLlm in config.json).',
|
|
25
40
|
});
|
|
26
41
|
return;
|
|
@@ -29,7 +44,7 @@ export function createPlanHandlers({ planService: providedPlanService } = {}) {
|
|
|
29
44
|
const repo = typeof payload['repo'] === 'string' ? payload['repo'].trim() : '';
|
|
30
45
|
let commandCwd = '';
|
|
31
46
|
if ((org && !repo) || (!org && repo)) {
|
|
32
|
-
sendJson(context.res, 400, {
|
|
47
|
+
activeDependencies.sendJson(context.res, 400, {
|
|
33
48
|
error: 'Both org and repo must be provided when specifying repository context.',
|
|
34
49
|
});
|
|
35
50
|
return;
|
|
@@ -37,18 +52,18 @@ export function createPlanHandlers({ planService: providedPlanService } = {}) {
|
|
|
37
52
|
if (org && repo) {
|
|
38
53
|
const workdir = typeof context.workdir === 'string' ? context.workdir : '';
|
|
39
54
|
if (!workdir) {
|
|
40
|
-
sendJson(context.res, 500, {
|
|
55
|
+
activeDependencies.sendJson(context.res, 500, {
|
|
41
56
|
error: 'Server workdir is not configured.',
|
|
42
57
|
});
|
|
43
58
|
return;
|
|
44
59
|
}
|
|
45
60
|
try {
|
|
46
|
-
const { repositoryPath } = await ensureRepository(workdir, org, repo);
|
|
61
|
+
const { repositoryPath } = await activeDependencies.ensureRepository(workdir, org, repo);
|
|
47
62
|
commandCwd = repositoryPath;
|
|
48
63
|
}
|
|
49
64
|
catch (error) {
|
|
50
65
|
const message = error instanceof Error ? error.message : String(error);
|
|
51
|
-
sendJson(context.res, 404, { error: message });
|
|
66
|
+
activeDependencies.sendJson(context.res, 404, { error: message });
|
|
52
67
|
return;
|
|
53
68
|
}
|
|
54
69
|
}
|
|
@@ -61,16 +76,16 @@ export function createPlanHandlers({ planService: providedPlanService } = {}) {
|
|
|
61
76
|
}
|
|
62
77
|
catch (error) {
|
|
63
78
|
if (error instanceof Error && error.message === 'prompt is required') {
|
|
64
|
-
sendJson(context.res, 400, { error: error.message });
|
|
79
|
+
activeDependencies.sendJson(context.res, 400, { error: error.message });
|
|
65
80
|
return;
|
|
66
81
|
}
|
|
67
82
|
const message = error instanceof Error ? error.message : String(error);
|
|
68
|
-
sendJson(context.res, 502, {
|
|
83
|
+
activeDependencies.sendJson(context.res, 502, {
|
|
69
84
|
error: message,
|
|
70
85
|
});
|
|
71
86
|
return;
|
|
72
87
|
}
|
|
73
|
-
sendJson(context.res, 200, { plan: planText });
|
|
88
|
+
activeDependencies.sendJson(context.res, 200, { plan: planText });
|
|
74
89
|
}
|
|
75
90
|
return { create };
|
|
76
91
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-plan.js","sourceRoot":"","sources":["../../src/api/create-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"create-plan.js","sourceRoot":"","sources":["../../src/api/create-plan.ts"],"names":[],"mappings":"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"}
|
package/dist/api/git-status.d.ts
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
|
+
import { getWorktreeStatus, getWorktreeFileDiff } from '../core/git.js';
|
|
2
|
+
import { extractWorktreeParams } from '../validation/index.js';
|
|
1
3
|
import type { RequestContext } from '../types/http.js';
|
|
4
|
+
interface GitStatusDependencies {
|
|
5
|
+
getWorktreeStatus: typeof getWorktreeStatus;
|
|
6
|
+
getWorktreeFileDiff: typeof getWorktreeFileDiff;
|
|
7
|
+
extractWorktreeParams: typeof extractWorktreeParams;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* @internal Test hook to override git-status dependencies
|
|
11
|
+
*/
|
|
12
|
+
export declare function __setGitStatusTestOverrides(overrides?: Partial<GitStatusDependencies>): void;
|
|
2
13
|
export declare function createGitStatusHandlers(workdir: string): {
|
|
3
14
|
read: (context: RequestContext) => Promise<void>;
|
|
4
15
|
diff: (context: RequestContext) => Promise<void>;
|
|
5
16
|
};
|
|
17
|
+
export {};
|
|
6
18
|
//# sourceMappingURL=git-status.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-status.d.ts","sourceRoot":"","sources":["../../src/api/git-status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git-status.d.ts","sourceRoot":"","sources":["../../src/api/git-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,UAAU,qBAAqB;IAC7B,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,mBAAmB,EAAE,OAAO,mBAAmB,CAAC;IAChD,qBAAqB,EAAE,OAAO,qBAAqB,CAAC;CACrD;AAUD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAM5F;AAiBD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM;;;EA+CtD"}
|
package/dist/api/git-status.js
CHANGED
|
@@ -2,6 +2,22 @@ import { getWorktreeStatus, getWorktreeFileDiff } from '../core/git.js';
|
|
|
2
2
|
import { createQueryHandler } from './base-handler.js';
|
|
3
3
|
import { extractWorktreeParams } from '../validation/index.js';
|
|
4
4
|
import { ValidationError } from '../infrastructure/errors/index.js';
|
|
5
|
+
const defaultDependencies = {
|
|
6
|
+
getWorktreeStatus,
|
|
7
|
+
getWorktreeFileDiff,
|
|
8
|
+
extractWorktreeParams,
|
|
9
|
+
};
|
|
10
|
+
let activeDependencies = { ...defaultDependencies };
|
|
11
|
+
/**
|
|
12
|
+
* @internal Test hook to override git-status dependencies
|
|
13
|
+
*/
|
|
14
|
+
export function __setGitStatusTestOverrides(overrides) {
|
|
15
|
+
if (!overrides) {
|
|
16
|
+
activeDependencies = { ...defaultDependencies };
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
activeDependencies = { ...activeDependencies, ...overrides };
|
|
20
|
+
}
|
|
5
21
|
function parseOptionalInteger(value, fallback) {
|
|
6
22
|
if (typeof value !== 'string') {
|
|
7
23
|
return fallback;
|
|
@@ -21,10 +37,10 @@ export function createGitStatusHandlers(workdir) {
|
|
|
21
37
|
throw new Error('workdir is required');
|
|
22
38
|
}
|
|
23
39
|
const read = createQueryHandler(async (context) => {
|
|
24
|
-
const { org, repo, branch } = extractWorktreeParams(context.url.searchParams);
|
|
40
|
+
const { org, repo, branch } = activeDependencies.extractWorktreeParams(context.url.searchParams);
|
|
25
41
|
const entryLimit = parseOptionalInteger(context.url.searchParams.get('entryLimit'), undefined);
|
|
26
42
|
const commitLimit = parseOptionalInteger(context.url.searchParams.get('commitLimit'), undefined);
|
|
27
|
-
const status = await getWorktreeStatus(workdir, org, repo, branch, {
|
|
43
|
+
const status = await activeDependencies.getWorktreeStatus(workdir, org, repo, branch, {
|
|
28
44
|
entryLimit,
|
|
29
45
|
commitLimit,
|
|
30
46
|
});
|
|
@@ -33,7 +49,7 @@ export function createGitStatusHandlers(workdir) {
|
|
|
33
49
|
});
|
|
34
50
|
const diff = createQueryHandler(async (context) => {
|
|
35
51
|
const payload = await context.readJsonBody();
|
|
36
|
-
const { org, repo, branch } = extractWorktreeParams(new URLSearchParams({
|
|
52
|
+
const { org, repo, branch } = activeDependencies.extractWorktreeParams(new URLSearchParams({
|
|
37
53
|
org: typeof payload['org'] === 'string' ? payload['org'] : '',
|
|
38
54
|
repo: typeof payload['repo'] === 'string' ? payload['repo'] : '',
|
|
39
55
|
branch: typeof payload['branch'] === 'string' ? payload['branch'] : '',
|
|
@@ -45,7 +61,7 @@ export function createGitStatusHandlers(workdir) {
|
|
|
45
61
|
const previousPath = typeof payload['previousPath'] === 'string' ? payload['previousPath'] : undefined;
|
|
46
62
|
const mode = typeof payload['mode'] === 'string' ? payload['mode'] : undefined;
|
|
47
63
|
const status = typeof payload['status'] === 'string' ? payload['status'] : undefined;
|
|
48
|
-
return await getWorktreeFileDiff(workdir, org, repo, branch, {
|
|
64
|
+
return await activeDependencies.getWorktreeFileDiff(workdir, org, repo, branch, {
|
|
49
65
|
path: filePath,
|
|
50
66
|
previousPath,
|
|
51
67
|
mode,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-status.js","sourceRoot":"","sources":["../../src/api/git-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"git-status.js","sourceRoot":"","sources":["../../src/api/git-status.ts"],"names":[],"mappings":"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"}
|
package/dist/api/plans.d.ts
CHANGED
|
@@ -1,6 +1,24 @@
|
|
|
1
|
+
import { getWorktreePath } from '../core/git.js';
|
|
2
|
+
import { listPlansForWorktree, readPlanFromWorktree } from '../core/plan-storage.js';
|
|
3
|
+
import { sendJson } from '../utils/http.js';
|
|
4
|
+
import { extractWorktreeParams } from '../validation/index.js';
|
|
5
|
+
import { extractErrorMessage } from '../infrastructure/errors/index.js';
|
|
1
6
|
import type { RequestContext } from '../types/http.js';
|
|
7
|
+
interface PlansDependencies {
|
|
8
|
+
getWorktreePath: typeof getWorktreePath;
|
|
9
|
+
listPlansForWorktree: typeof listPlansForWorktree;
|
|
10
|
+
readPlanFromWorktree: typeof readPlanFromWorktree;
|
|
11
|
+
extractWorktreeParams: typeof extractWorktreeParams;
|
|
12
|
+
sendJson: typeof sendJson;
|
|
13
|
+
extractErrorMessage: typeof extractErrorMessage;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* @internal Test hook to override plans dependencies
|
|
17
|
+
*/
|
|
18
|
+
export declare function __setPlansTestOverrides(overrides?: Partial<PlansDependencies>): void;
|
|
2
19
|
export declare function createPlanArtifactHandlers(workdir: string): {
|
|
3
20
|
list: (context: RequestContext) => Promise<void>;
|
|
4
21
|
read: (context: RequestContext) => Promise<void>;
|
|
5
22
|
};
|
|
23
|
+
export {};
|
|
6
24
|
//# sourceMappingURL=plans.d.ts.map
|