History

chore: effect rpc and layer based startup (#929)

Julius Marminge committed 7 months ago

Commit d8aa2f81 parent 64d6938116 files · +6676 −6648Browse files

Showing the changes to apps/server/src/git (15 of 116 files). Show all

Unified · Split

15 files
  1. apps/server/src/git/Errors.ts +0 −67
  2. apps/server/src/git/Layers/ClaudeTextGeneration.ts +1 −1
  3. apps/server/src/git/Layers/CodexTextGeneration.test.ts +1 −1
  4. apps/server/src/git/Layers/CodexTextGeneration.ts +1 −1
  5. apps/server/src/git/Layers/GitCore.test.ts +1 −1
  6. apps/server/src/git/Layers/GitCore.ts +4 −3
  7. apps/server/src/git/Layers/GitHubCli.ts +1 −1
  8. apps/server/src/git/Layers/GitManager.test.ts +1 −1
  9. apps/server/src/git/Layers/GitManager.ts +2 −2
  10. apps/server/src/git/Prompts.test.ts +1 −1
  11. apps/server/src/git/Services/GitCore.ts +1 −1
  12. apps/server/src/git/Services/GitHubCli.ts +1 −1
  13. apps/server/src/git/Services/GitManager.ts +1 −1
  14. apps/server/src/git/Services/TextGeneration.ts +1 −1
  15. apps/server/src/git/Utils.ts +1 −1
apps/server/src/git/Errors.ts+0−67
@@ -1,67 +0,0 @@
1import { Schema } from "effect";
2
3/**
4 * GitCommandError - Git command execution failed.
5 */
6export class GitCommandError extends Schema.TaggedErrorClass<GitCommandError>()("GitCommandError", {
7 operation: Schema.String,
8 command: Schema.String,
9 cwd: Schema.String,
10 detail: Schema.String,
11 cause: Schema.optional(Schema.Defect),
12}) {
13 override get message(): string {
14 return `Git command failed in ${this.operation}: ${this.command} (${this.cwd}) - ${this.detail}`;
15 }
16}
17
18/**
19 * GitHubCliError - GitHub CLI execution or authentication failed.
20 */
21export class GitHubCliError extends Schema.TaggedErrorClass<GitHubCliError>()("GitHubCliError", {
22 operation: Schema.String,
23 detail: Schema.String,
24 cause: Schema.optional(Schema.Defect),
25}) {
26 override get message(): string {
27 return `GitHub CLI failed in ${this.operation}: ${this.detail}`;
28 }
29}
30
31/**
32 * TextGenerationError - Commit or PR text generation failed.
33 */
34export class TextGenerationError extends Schema.TaggedErrorClass<TextGenerationError>()(
35 "TextGenerationError",
36 {
37 operation: Schema.String,
38 detail: Schema.String,
39 cause: Schema.optional(Schema.Defect),
40 },
41) {
42 override get message(): string {
43 return `Text generation failed in ${this.operation}: ${this.detail}`;
44 }
45}
46
47/**
48 * GitManagerError - Stacked Git workflow orchestration failed.
49 */
50export class GitManagerError extends Schema.TaggedErrorClass<GitManagerError>()("GitManagerError", {
51 operation: Schema.String,
52 detail: Schema.String,
53 cause: Schema.optional(Schema.Defect),
54}) {
55 override get message(): string {
56 return `Git manager failed in ${this.operation}: ${this.detail}`;
57 }
58}
59
60/**
61 * GitManagerServiceError - Errors emitted by stacked Git workflow orchestration.
62 */
63export type GitManagerServiceError =
64 | GitManagerError
65 | GitCommandError
66 | GitHubCliError
67 | TextGenerationError;
apps/server/src/git/Layers/ClaudeTextGeneration.ts+1−1
@@ -14,7 +14,7 @@ import { ClaudeModelSelection } from "@t3tools/contracts"; · 13 unmodified lines
14import { resolveApiModelId } from "@t3tools/shared/model";14import { resolveApiModelId } from "@t3tools/shared/model";
15import { sanitizeBranchFragment, sanitizeFeatureBranchName } from "@t3tools/shared/git";15import { sanitizeBranchFragment, sanitizeFeatureBranchName } from "@t3tools/shared/git";
16 16
17import { TextGenerationError } from "../Errors.ts";17import { TextGenerationError } from "@t3tools/contracts";
18import { type TextGenerationShape, TextGeneration } from "../Services/TextGeneration.ts";18import { type TextGenerationShape, TextGeneration } from "../Services/TextGeneration.ts";
19import {19import {
20 buildBranchNamePrompt,20 buildBranchNamePrompt,
apps/server/src/git/Layers/CodexTextGeneration.test.ts+1−1
@@ -5,7 +5,7 @@ import { expect } from "vitest"; · 4 unmodified lines
5 5
6import { ServerConfig } from "../../config.ts";6import { ServerConfig } from "../../config.ts";
7import { CodexTextGenerationLive } from "./CodexTextGeneration.ts";7import { CodexTextGenerationLive } from "./CodexTextGeneration.ts";
8import { TextGenerationError } from "../Errors.ts";8import { TextGenerationError } from "@t3tools/contracts";
9import { TextGeneration } from "../Services/TextGeneration.ts";9import { TextGeneration } from "../Services/TextGeneration.ts";
10import { ServerSettingsService } from "../../serverSettings.ts";10import { ServerSettingsService } from "../../serverSettings.ts";
11 11
apps/server/src/git/Layers/CodexTextGeneration.ts+1−1
@@ -8,7 +8,7 @@ import { sanitizeBranchFragment, sanitizeFeatureBranchName } from "@t3tools/shar · 7 unmodified lines
8 8
9import { resolveAttachmentPath } from "../../attachmentStore.ts";9import { resolveAttachmentPath } from "../../attachmentStore.ts";
10import { ServerConfig } from "../../config.ts";10import { ServerConfig } from "../../config.ts";
11import { TextGenerationError } from "../Errors.ts";11import { TextGenerationError } from "@t3tools/contracts";
12import {12import {
13 type BranchNameGenerationInput,13 type BranchNameGenerationInput,
14 type ThreadTitleGenerationResult,14 type ThreadTitleGenerationResult,
apps/server/src/git/Layers/GitCore.test.ts+1−1
@@ -8,7 +8,7 @@ import { describe, expect, vi } from "vitest"; · 7 unmodified lines
8 8
9import { GitCoreLive, makeGitCore } from "./GitCore.ts";9import { GitCoreLive, makeGitCore } from "./GitCore.ts";
10import { GitCore, type GitCoreShape } from "../Services/GitCore.ts";10import { GitCore, type GitCoreShape } from "../Services/GitCore.ts";
11import { GitCommandError } from "../Errors.ts";11import { GitCommandError } from "@t3tools/contracts";
12import { type ProcessRunResult, runProcess } from "../../processRunner.ts";12import { type ProcessRunResult, runProcess } from "../../processRunner.ts";
13import { ServerConfig } from "../../config.ts";13import { ServerConfig } from "../../config.ts";
14 14
apps/server/src/git/Layers/GitCore.ts+4−3
@@ -18,7 +18,7 @@ import { · 17 unmodified lines
18} from "effect";18} from "effect";
19import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process";19import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process";
20 20
21import { GitCommandError } from "../Errors.ts";21import { GitCommandError } from "@t3tools/contracts";
22import {22import {
23 GitCore,23 GitCore,
24 type ExecuteGitProgress,24 type ExecuteGitProgress,
@@ -1941,8 +1941,9 @@ export const makeGitCore = Effect.fn("makeGitCore")(function* (options?: { · 1916 unmodified lines
1941 });1941 });
1942 1942
1943 // Refresh upstream refs in the background so checkout remains responsive.1943 // Refresh upstream refs in the background so checkout remains responsive.
1944 yield* Effect.forkScoped(1944 yield* refreshCheckedOutBranchUpstream(input.cwd).pipe(
1945 refreshCheckedOutBranchUpstream(input.cwd).pipe(Effect.ignoreCause({ log: true })),1945 Effect.ignoreCause({ log: true }),
1946 Effect.forkDetach({ startImmediately: true }),
1946 );1947 );
1947 },1948 },
1948 );1949 );
apps/server/src/git/Layers/GitHubCli.ts+1−1
@@ -2,7 +2,7 @@ import { Effect, Layer, Schema } from "effect"; · 1 unmodified line
2import { PositiveInt, TrimmedNonEmptyString } from "@t3tools/contracts";2import { PositiveInt, TrimmedNonEmptyString } from "@t3tools/contracts";
3 3
4import { runProcess } from "../../processRunner";4import { runProcess } from "../../processRunner";
5import { GitHubCliError } from "../Errors.ts";5import { GitHubCliError } from "@t3tools/contracts";
6import {6import {
7 GitHubCli,7 GitHubCli,
8 type GitHubRepositoryCloneUrls,8 type GitHubRepositoryCloneUrls,
apps/server/src/git/Layers/GitManager.test.ts+1−1
@@ -8,7 +8,7 @@ import { Effect, FileSystem, Layer, PlatformError, Scope } from "effect"; · 7 unmodified lines
8import { expect } from "vitest";8import { expect } from "vitest";
9import type { GitActionProgressEvent, ModelSelection } from "@t3tools/contracts";9import type { GitActionProgressEvent, ModelSelection } from "@t3tools/contracts";
10 10
11import { GitCommandError, GitHubCliError, TextGenerationError } from "../Errors.ts";11import { GitCommandError, GitHubCliError, TextGenerationError } from "@t3tools/contracts";
12import { type GitManagerShape } from "../Services/GitManager.ts";12import { type GitManagerShape } from "../Services/GitManager.ts";
13import {13import {
14 type GitHubCliShape,14 type GitHubCliShape,
apps/server/src/git/Layers/GitManager.ts+2−2
@@ -14,7 +14,7 @@ import { · 13 unmodified lines
14 sanitizeFeatureBranchName,14 sanitizeFeatureBranchName,
15} from "@t3tools/shared/git";15} from "@t3tools/shared/git";
16 16
17import { GitManagerError } from "../Errors.ts";17import { GitManagerError } from "@t3tools/contracts";
18import {18import {
19 GitManager,19 GitManager,
20 type GitActionProgressReporter,20 type GitActionProgressReporter,
@@ -25,7 +25,7 @@ import { GitCore } from "../Services/GitCore.ts"; · 4 unmodified lines
25import { GitHubCli } from "../Services/GitHubCli.ts";25import { GitHubCli } from "../Services/GitHubCli.ts";
26import { TextGeneration } from "../Services/TextGeneration.ts";26import { TextGeneration } from "../Services/TextGeneration.ts";
27import { ServerSettingsService } from "../../serverSettings.ts";27import { ServerSettingsService } from "../../serverSettings.ts";
28import type { GitManagerServiceError } from "../Errors.ts";28import type { GitManagerServiceError } from "@t3tools/contracts";
29 29
30const COMMIT_TIMEOUT_MS = 10 * 60_000;30const COMMIT_TIMEOUT_MS = 10 * 60_000;
31const MAX_PROGRESS_TEXT_LENGTH = 500;31const MAX_PROGRESS_TEXT_LENGTH = 500;
apps/server/src/git/Prompts.test.ts+1−1
@@ -7,7 +7,7 @@ import { · 6 unmodified lines
7 buildThreadTitlePrompt,7 buildThreadTitlePrompt,
8} from "./Prompts.ts";8} from "./Prompts.ts";
9import { normalizeCliError, sanitizeThreadTitle } from "./Utils.ts";9import { normalizeCliError, sanitizeThreadTitle } from "./Utils.ts";
10import { TextGenerationError } from "./Errors.ts";10import { TextGenerationError } from "@t3tools/contracts";
11 11
12describe("buildCommitMessagePrompt", () => {12describe("buildCommitMessagePrompt", () => {
13 it("includes staged patch and summary in the prompt", () => {13 it("includes staged patch and summary in the prompt", () => {
apps/server/src/git/Services/GitCore.ts+1−1
@@ -22,7 +22,7 @@ import type { · 21 unmodified lines
22 GitStatusResult,22 GitStatusResult,
23} from "@t3tools/contracts";23} from "@t3tools/contracts";
24 24
25import type { GitCommandError } from "../Errors.ts";25import type { GitCommandError } from "@t3tools/contracts";
26 26
27export interface ExecuteGitInput {27export interface ExecuteGitInput {
28 readonly operation: string;28 readonly operation: string;
apps/server/src/git/Services/GitHubCli.ts+1−1
@@ -9,7 +9,7 @@ import { ServiceMap } from "effect"; · 8 unmodified lines
9import type { Effect } from "effect";9import type { Effect } from "effect";
10 10
11import type { ProcessRunResult } from "../../processRunner";11import type { ProcessRunResult } from "../../processRunner";
12import type { GitHubCliError } from "../Errors.ts";12import type { GitHubCliError } from "@t3tools/contracts";
13 13
14export interface GitHubPullRequestSummary {14export interface GitHubPullRequestSummary {
15 readonly number: number;15 readonly number: number;
apps/server/src/git/Services/GitManager.ts+1−1
@@ -19,7 +19,7 @@ import { · 18 unmodified lines
19} from "@t3tools/contracts";19} from "@t3tools/contracts";
20import { ServiceMap } from "effect";20import { ServiceMap } from "effect";
21import type { Effect } from "effect";21import type { Effect } from "effect";
22import type { GitManagerServiceError } from "../Errors.ts";22import type { GitManagerServiceError } from "@t3tools/contracts";
23 23
24export interface GitActionProgressReporter {24export interface GitActionProgressReporter {
25 readonly publish: (event: GitActionProgressEvent) => Effect.Effect<void, never>;25 readonly publish: (event: GitActionProgressEvent) => Effect.Effect<void, never>;
apps/server/src/git/Services/TextGeneration.ts+1−1
@@ -10,7 +10,7 @@ import { ServiceMap } from "effect"; · 9 unmodified lines
10import type { Effect } from "effect";10import type { Effect } from "effect";
11import type { ChatAttachment, ModelSelection } from "@t3tools/contracts";11import type { ChatAttachment, ModelSelection } from "@t3tools/contracts";
12 12
13import type { TextGenerationError } from "../Errors.ts";13import type { TextGenerationError } from "@t3tools/contracts";
14 14
15/** Providers that support git text generation (commit messages, PR content, branch names). */15/** Providers that support git text generation (commit messages, PR content, branch names). */
16export type TextGenerationProvider = "codex" | "claudeAgent";16export type TextGenerationProvider = "codex" | "claudeAgent";
apps/server/src/git/Utils.ts+1−1
@@ -5,7 +5,7 @@ · 4 unmodified lines
5 */5 */
6import { Schema } from "effect";6import { Schema } from "effect";
7 7
8import { TextGenerationError } from "./Errors.ts";8import { TextGenerationError } from "@t3tools/contracts";
9 9
10import { existsSync } from "node:fs";10import { existsSync } from "node:fs";
11import { join } from "node:path";11import { join } from "node:path";