refactor: add platform effects

This commit is contained in:
d-kimsuon
2025-10-18 02:34:33 +09:00
parent 4de41129fe
commit e45a841656
29 changed files with 445 additions and 315 deletions

View File

@@ -4,9 +4,10 @@ import type { CommandExecutor } from "@effect/platform/CommandExecutor";
import { Context, Effect, Layer, Runtime } from "effect";
import { ulid } from "ulid";
import { controllablePromise } from "../../../../lib/controllablePromise";
import type { Config } from "../../../lib/config/config";
import type { UserConfig } from "../../../lib/config/config";
import type { InferEffect } from "../../../lib/effect/types";
import { EventBus } from "../../events/services/EventBus";
import type { EnvService } from "../../platform/services/EnvService";
import { SessionRepository } from "../../session/infrastructure/SessionRepository";
import { VirtualConversationDatabase } from "../../session/infrastructure/VirtualConversationDatabase";
import type { SessionMetaService } from "../../session/services/SessionMetaService";
@@ -36,6 +37,7 @@ const LayerImpl = Effect.gen(function* () {
| VirtualConversationDatabase
| SessionMetaService
| ClaudeCodePermissionService
| EnvService
>();
const continueTask = (options: {
@@ -78,7 +80,7 @@ const LayerImpl = Effect.gen(function* () {
};
const startTask = (options: {
config: Config;
userConfig: UserConfig;
baseSession: {
cwd: string;
projectId: string;
@@ -86,7 +88,7 @@ const LayerImpl = Effect.gen(function* () {
};
message: string;
}) => {
const { baseSession, message, config } = options;
const { baseSession, message, userConfig } = options;
return Effect.gen(function* () {
const {
@@ -258,7 +260,7 @@ const LayerImpl = Effect.gen(function* () {
const permissionOptions =
yield* permissionService.createCanUseToolRelatedOptions({
taskId: task.def.taskId,
config,
userConfig,
sessionId: task.def.baseSessionId,
});

View File

@@ -5,7 +5,7 @@ import type {
PermissionRequest,
PermissionResponse,
} from "../../../../types/permissions";
import type { Config } from "../../../lib/config/config";
import type { UserConfig } from "../../../lib/config/config";
import type { InferEffect } from "../../../lib/effect/types";
import { EventBus } from "../../events/services/EventBus";
import * as ClaudeCode from "../models/ClaudeCode";
@@ -51,10 +51,10 @@ const LayerImpl = Effect.gen(function* () {
const createCanUseToolRelatedOptions = (options: {
taskId: string;
config: Config;
userConfig: UserConfig;
sessionId?: string;
}) => {
const { taskId, config, sessionId } = options;
const { taskId, userConfig, sessionId } = options;
return Effect.gen(function* () {
const claudeCodeConfig = yield* ClaudeCode.Config;
@@ -69,11 +69,11 @@ const LayerImpl = Effect.gen(function* () {
}
const canUseTool: CanUseTool = async (toolName, toolInput, _options) => {
if (config.permissionMode !== "default") {
if (userConfig.permissionMode !== "default") {
// Convert Claude Code permission modes to canUseTool behaviors
if (
config.permissionMode === "bypassPermissions" ||
config.permissionMode === "acceptEdits"
userConfig.permissionMode === "bypassPermissions" ||
userConfig.permissionMode === "acceptEdits"
) {
return {
behavior: "allow" as const,
@@ -123,7 +123,7 @@ const LayerImpl = Effect.gen(function* () {
return {
canUseTool,
permissionMode: config.permissionMode,
permissionMode: userConfig.permissionMode,
} as const;
});
};