@jcjeon/integration-cli 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/.gitignore +23 -0
- package/.npmignore +21 -0
- package/.prettierignore +6 -0
- package/.prettierrc +26 -0
- package/AGENTS.md +10 -0
- package/CLAUDE.md +10 -0
- package/README.md +384 -0
- package/apps/server/README.md +294 -0
- package/apps/server/eslint.config.mjs +20 -0
- package/apps/server/nest-cli.json +8 -0
- package/apps/server/package.json +89 -0
- package/apps/server/scripts/postinstall.js +53 -0
- package/apps/server/src/__mocks__/glob.js +6 -0
- package/apps/server/src/__mocks__/uuid.js +5 -0
- package/apps/server/src/app.controller.spec.ts +24 -0
- package/apps/server/src/app.controller.ts +13 -0
- package/apps/server/src/app.module.ts +18 -0
- package/apps/server/src/app.service.ts +8 -0
- package/apps/server/src/common/ji-paths.ts +41 -0
- package/apps/server/src/database/database.module.ts +27 -0
- package/apps/server/src/database/entities/agent-changelog.entity.ts +39 -0
- package/apps/server/src/database/entities/agent-session.entity.ts +29 -0
- package/apps/server/src/database/entities/conversation.entity.ts +41 -0
- package/apps/server/src/database/entities/session.entity.ts +16 -0
- package/apps/server/src/database/entities/task-agent-run.entity.ts +40 -0
- package/apps/server/src/database/entities/task-agent.entity.ts +42 -0
- package/apps/server/src/database/entities/task-requirement.entity.ts +27 -0
- package/apps/server/src/database/entities/task-run.entity.ts +41 -0
- package/apps/server/src/database/entities/task.entity.ts +44 -0
- package/apps/server/src/main.ts +65 -0
- package/apps/server/src/modules/agents/agent-model-settings.spec.ts +80 -0
- package/apps/server/src/modules/agents/agents.module.ts +11 -0
- package/apps/server/src/modules/agents/claude/claude-auth.manager.ts +83 -0
- package/apps/server/src/modules/agents/claude/claude-pty.manager.ts +380 -0
- package/apps/server/src/modules/agents/claude/claude.controller.ts +85 -0
- package/apps/server/src/modules/agents/claude/claude.gateway.ts +158 -0
- package/apps/server/src/modules/agents/claude/claude.module.ts +18 -0
- package/apps/server/src/modules/agents/claude/claude.service.ts +67 -0
- package/apps/server/src/modules/agents/claude/dto/create-session.dto.ts +24 -0
- package/apps/server/src/modules/agents/claude/dto/resize-session.dto.ts +13 -0
- package/apps/server/src/modules/agents/claude/dto/send-input.dto.ts +9 -0
- package/apps/server/src/modules/agents/claude/interfaces/claude-session.interface.ts +26 -0
- package/apps/server/src/modules/agents/claude/interfaces/pty-event.interface.ts +10 -0
- package/apps/server/src/modules/agents/claude/interfaces/stream-event.interface.ts +61 -0
- package/apps/server/src/modules/agents/codex/codex-auth.manager.ts +107 -0
- package/apps/server/src/modules/agents/codex/codex-session.manager.ts +357 -0
- package/apps/server/src/modules/agents/codex/codex.controller.ts +64 -0
- package/apps/server/src/modules/agents/codex/codex.gateway.ts +97 -0
- package/apps/server/src/modules/agents/codex/codex.module.ts +17 -0
- package/apps/server/src/modules/agents/codex/dto/configure-auth.dto.ts +7 -0
- package/apps/server/src/modules/agents/gemini/dto/configure-auth.dto.ts +15 -0
- package/apps/server/src/modules/agents/gemini/dto/create-session.dto.ts +9 -0
- package/apps/server/src/modules/agents/gemini/dto/send-input.dto.ts +9 -0
- package/apps/server/src/modules/agents/gemini/gemini-auth.manager.ts +157 -0
- package/apps/server/src/modules/agents/gemini/gemini-session.manager.ts +287 -0
- package/apps/server/src/modules/agents/gemini/gemini.controller.ts +93 -0
- package/apps/server/src/modules/agents/gemini/gemini.gateway.ts +149 -0
- package/apps/server/src/modules/agents/gemini/gemini.module.ts +17 -0
- package/apps/server/src/modules/agents/gemini/interfaces/gemini-session.interface.ts +18 -0
- package/apps/server/src/modules/agents/gemini/interfaces/stream-event.interface.ts +14 -0
- package/apps/server/src/modules/agents/session-termination.spec.ts +103 -0
- package/apps/server/src/modules/changelog/changelog.controller.ts +20 -0
- package/apps/server/src/modules/changelog/changelog.module.ts +14 -0
- package/apps/server/src/modules/changelog/changelog.service.spec.ts +531 -0
- package/apps/server/src/modules/changelog/changelog.service.ts +690 -0
- package/apps/server/src/modules/conversations/conversation.controller.spec.ts +106 -0
- package/apps/server/src/modules/conversations/conversation.controller.ts +60 -0
- package/apps/server/src/modules/conversations/conversation.module.ts +14 -0
- package/apps/server/src/modules/conversations/conversation.service.spec.ts +176 -0
- package/apps/server/src/modules/conversations/conversation.service.ts +54 -0
- package/apps/server/src/modules/conversations/dto/create-conversation.dto.ts +37 -0
- package/apps/server/src/modules/conversations/enums/conversation.enum.ts +13 -0
- package/apps/server/src/modules/fs/fs.controller.ts +29 -0
- package/apps/server/src/modules/fs/fs.module.ts +8 -0
- package/apps/server/src/modules/harness/dto/save-harness.dto.ts +9 -0
- package/apps/server/src/modules/harness/harness.controller.spec.ts +95 -0
- package/apps/server/src/modules/harness/harness.controller.ts +35 -0
- package/apps/server/src/modules/harness/harness.module.ts +11 -0
- package/apps/server/src/modules/harness/harness.service.spec.ts +217 -0
- package/apps/server/src/modules/harness/harness.service.ts +112 -0
- package/apps/server/src/modules/sessions/session.controller.spec.ts +68 -0
- package/apps/server/src/modules/sessions/session.controller.ts +43 -0
- package/apps/server/src/modules/sessions/session.module.ts +14 -0
- package/apps/server/src/modules/sessions/session.service.spec.ts +106 -0
- package/apps/server/src/modules/sessions/session.service.ts +35 -0
- package/apps/server/src/modules/tasks/dto/create-task.dto.ts +54 -0
- package/apps/server/src/modules/tasks/dto/execute-task.dto.ts +22 -0
- package/apps/server/src/modules/tasks/dto/merge-file.dto.ts +7 -0
- package/apps/server/src/modules/tasks/dto/rerun-task.dto.ts +14 -0
- package/apps/server/src/modules/tasks/dto/update-task.dto.ts +55 -0
- package/apps/server/src/modules/tasks/task-execution.service.ts +978 -0
- package/apps/server/src/modules/tasks/task.gateway.ts +140 -0
- package/apps/server/src/modules/tasks/tasks.controller.spec.ts +210 -0
- package/apps/server/src/modules/tasks/tasks.controller.ts +139 -0
- package/apps/server/src/modules/tasks/tasks.module.ts +30 -0
- package/apps/server/src/modules/tasks/tasks.service.spec.ts +552 -0
- package/apps/server/src/modules/tasks/tasks.service.ts +333 -0
- package/apps/server/test/app.e2e-spec.ts +28 -0
- package/apps/server/test/jest-e2e.json +9 -0
- package/apps/server/tsconfig.build.json +4 -0
- package/apps/server/tsconfig.json +13 -0
- package/apps/web/AGENTS.md +7 -0
- package/apps/web/CLAUDE.md +1 -0
- package/apps/web/README.md +36 -0
- package/apps/web/eslint.config.mjs +21 -0
- package/apps/web/next-env.d.ts +6 -0
- package/apps/web/next.config.ts +7 -0
- package/apps/web/package.json +49 -0
- package/apps/web/postcss.config.mjs +7 -0
- package/apps/web/public/file.svg +1 -0
- package/apps/web/public/globe.svg +1 -0
- package/apps/web/public/next.svg +1 -0
- package/apps/web/public/vercel.svg +1 -0
- package/apps/web/public/window.svg +1 -0
- package/apps/web/src/app/claude/page.tsx +5 -0
- package/apps/web/src/app/codex/page.tsx +126 -0
- package/apps/web/src/app/favicon.ico +0 -0
- package/apps/web/src/app/gemini/page.tsx +130 -0
- package/apps/web/src/app/globals.css +149 -0
- package/apps/web/src/app/layout.tsx +40 -0
- package/apps/web/src/app/login/page.tsx +67 -0
- package/apps/web/src/app/page.tsx +497 -0
- package/apps/web/src/app/task/[id]/page.tsx +11 -0
- package/apps/web/src/app/test/page.tsx +298 -0
- package/apps/web/src/components/ui/Modal.tsx +78 -0
- package/apps/web/src/components/ui/WorkingDirPicker.tsx +195 -0
- package/apps/web/src/components/ui/__tests__/Modal.test.tsx +68 -0
- package/apps/web/src/features/auth/api/__tests__/auth.api.test.ts +83 -0
- package/apps/web/src/features/auth/api/auth.api.ts +81 -0
- package/apps/web/src/features/auth/hooks/__tests__/useClaudeAuth.test.ts +166 -0
- package/apps/web/src/features/auth/hooks/__tests__/useCodexAuth.test.ts +127 -0
- package/apps/web/src/features/auth/hooks/__tests__/useGeminiAuth.test.ts +120 -0
- package/apps/web/src/features/auth/hooks/useClaudeAuth.ts +88 -0
- package/apps/web/src/features/auth/hooks/useCodexAuth.ts +149 -0
- package/apps/web/src/features/auth/hooks/useGeminiAuth.ts +125 -0
- package/apps/web/src/features/auth/ui/CodexLoginPanel.tsx +302 -0
- package/apps/web/src/features/auth/ui/GeminiLoginPanel.tsx +316 -0
- package/apps/web/src/features/auth/ui/LoginForm.tsx +190 -0
- package/apps/web/src/features/auth/ui/LoginPanel.tsx +114 -0
- package/apps/web/src/features/auth/ui/__tests__/LoginPanel.test.tsx +105 -0
- package/apps/web/src/features/chat/api/__tests__/sessions.api.test.ts +187 -0
- package/apps/web/src/features/chat/api/sessions.api.ts +161 -0
- package/apps/web/src/features/chat/container/ClaudePageContainer.tsx +152 -0
- package/apps/web/src/features/chat/hooks/__tests__/useCodexSessions.test.ts +131 -0
- package/apps/web/src/features/chat/hooks/__tests__/useGeminiSessions.test.ts +130 -0
- package/apps/web/src/features/chat/hooks/useAgentModelSettings.ts +54 -0
- package/apps/web/src/features/chat/hooks/useClaudeSessions.ts +323 -0
- package/apps/web/src/features/chat/hooks/useCodexSessions.ts +275 -0
- package/apps/web/src/features/chat/hooks/useGeminiSessions.ts +255 -0
- package/apps/web/src/features/chat/hooks/useSessionCommand.ts +66 -0
- package/apps/web/src/features/chat/hooks/useSessionRename.ts +61 -0
- package/apps/web/src/features/chat/hooks/useSessionWorkingDirectories.ts +34 -0
- package/apps/web/src/features/chat/hooks/useUnifiedSessions.ts +156 -0
- package/apps/web/src/features/chat/lib/agentModelOptions.ts +72 -0
- package/apps/web/src/features/chat/ui/AgentModelPicker.tsx +134 -0
- package/apps/web/src/features/chat/ui/AgentSelectModal.tsx +236 -0
- package/apps/web/src/features/chat/ui/ChatInput.tsx +162 -0
- package/apps/web/src/features/chat/ui/ChatMessage.tsx +204 -0
- package/apps/web/src/features/chat/ui/ChatWorkspace.tsx +207 -0
- package/apps/web/src/features/chat/ui/CheckingSkeleton.tsx +44 -0
- package/apps/web/src/features/chat/ui/ClaudeLoginView.tsx +44 -0
- package/apps/web/src/features/chat/ui/PermissionCard.tsx +37 -0
- package/apps/web/src/features/chat/ui/SessionSidebar.tsx +280 -0
- package/apps/web/src/features/chat/ui/__tests__/AgentSelectModal.test.tsx +58 -0
- package/apps/web/src/features/chat/ui/__tests__/ChatInput.test.tsx +134 -0
- package/apps/web/src/features/chat/ui/__tests__/ChatMessage.test.tsx +106 -0
- package/apps/web/src/features/chat/ui/__tests__/ChatWorkspace.test.tsx +66 -0
- package/apps/web/src/features/diff/ui/DiffFileRow.tsx +73 -0
- package/apps/web/src/features/diff/ui/DiffHunk.tsx +61 -0
- package/apps/web/src/features/diff/ui/FileChangeBadge.tsx +23 -0
- package/apps/web/src/features/diff/ui/__tests__/DiffFileRow.test.tsx +40 -0
- package/apps/web/src/features/diff/ui/__tests__/DiffHunk.test.tsx +24 -0
- package/apps/web/src/features/diff/ui/__tests__/FileChangeBadge.test.tsx +16 -0
- package/apps/web/src/features/fs/api/fs.api.ts +14 -0
- package/apps/web/src/features/fs/hooks/useDirBrowser.ts +50 -0
- package/apps/web/src/features/harness/api/__tests__/harness.api.test.ts +73 -0
- package/apps/web/src/features/harness/api/harness.api.ts +46 -0
- package/apps/web/src/features/harness/hooks/__tests__/useHarness.test.ts +65 -0
- package/apps/web/src/features/harness/hooks/useHarness.ts +66 -0
- package/apps/web/src/features/harness/ui/HarnessModal.tsx +171 -0
- package/apps/web/src/features/harness/ui/__tests__/HarnessModal.test.tsx +46 -0
- package/apps/web/src/features/status/ui/AgentStatusModal.tsx +267 -0
- package/apps/web/src/features/status/ui/__tests__/AgentStatusModal.test.tsx +71 -0
- package/apps/web/src/features/tasks/api/__tests__/changelog.api.test.ts +89 -0
- package/apps/web/src/features/tasks/api/__tests__/tasks.api.test.ts +282 -0
- package/apps/web/src/features/tasks/api/changelog.api.ts +52 -0
- package/apps/web/src/features/tasks/api/tasks.api.ts +175 -0
- package/apps/web/src/features/tasks/container/TaskDetailPageContainer.tsx +69 -0
- package/apps/web/src/features/tasks/hooks/__tests__/useChangelogCodeCopy.test.ts +48 -0
- package/apps/web/src/features/tasks/hooks/__tests__/useTaskChangelog.test.ts +48 -0
- package/apps/web/src/features/tasks/hooks/__tests__/useTaskCreate.test.ts +217 -0
- package/apps/web/src/features/tasks/hooks/__tests__/useTaskEdit.test.ts +152 -0
- package/apps/web/src/features/tasks/hooks/__tests__/useTaskExecution.test.ts +143 -0
- package/apps/web/src/features/tasks/hooks/__tests__/useTaskList.test.ts +168 -0
- package/apps/web/src/features/tasks/hooks/__tests__/useTaskNotification.test.ts +125 -0
- package/apps/web/src/features/tasks/hooks/__tests__/useTaskRuns.test.ts +51 -0
- package/apps/web/src/features/tasks/hooks/useChangelogCodeCopy.ts +52 -0
- package/apps/web/src/features/tasks/hooks/useCopyToClipboard.ts +47 -0
- package/apps/web/src/features/tasks/hooks/useTaskChangelog.ts +32 -0
- package/apps/web/src/features/tasks/hooks/useTaskCreate.ts +137 -0
- package/apps/web/src/features/tasks/hooks/useTaskDetail.ts +217 -0
- package/apps/web/src/features/tasks/hooks/useTaskEdit.ts +130 -0
- package/apps/web/src/features/tasks/hooks/useTaskExecution.ts +137 -0
- package/apps/web/src/features/tasks/hooks/useTaskList.ts +159 -0
- package/apps/web/src/features/tasks/hooks/useTaskNotification.ts +80 -0
- package/apps/web/src/features/tasks/hooks/useTaskRuns.ts +32 -0
- package/apps/web/src/features/tasks/ui/AgentOutputPanel.tsx +203 -0
- package/apps/web/src/features/tasks/ui/AgentRoleSelect.tsx +97 -0
- package/apps/web/src/features/tasks/ui/ChangelogPanel.tsx +321 -0
- package/apps/web/src/features/tasks/ui/RunHistoryPanel.tsx +193 -0
- package/apps/web/src/features/tasks/ui/TaskCreateModal.tsx +205 -0
- package/apps/web/src/features/tasks/ui/TaskDetailView.tsx +413 -0
- package/apps/web/src/features/tasks/ui/TaskEditModal.tsx +165 -0
- package/apps/web/src/features/tasks/ui/TaskListModal.tsx +591 -0
- package/apps/web/src/features/tasks/ui/__tests__/AgentRoleSelect.test.tsx +91 -0
- package/apps/web/src/features/tasks/ui/__tests__/ChangelogPanel.test.tsx +94 -0
- package/apps/web/src/features/tasks/ui/__tests__/RunHistoryPanel.test.tsx +71 -0
- package/apps/web/src/features/tasks/ui/__tests__/TaskCreateModal.test.tsx +153 -0
- package/apps/web/src/features/tasks/ui/__tests__/TaskEditModal.test.tsx +75 -0
- package/apps/web/src/features/tasks/ui/__tests__/TaskListModal.test.tsx +243 -0
- package/apps/web/src/hooks/useWorkingDir.ts +28 -0
- package/apps/web/src/lib/__tests__/ansi.test.ts +88 -0
- package/apps/web/src/lib/ansi.ts +105 -0
- package/apps/web/src/lib/constants.ts +4 -0
- package/apps/web/src/lib/quota.ts +22 -0
- package/apps/web/src/lib/theme.tsx +78 -0
- package/apps/web/src/lib/toast.tsx +175 -0
- package/apps/web/src/store/agentStatusStore.ts +38 -0
- package/apps/web/tsconfig.json +18 -0
- package/apps/web/vitest.config.ts +25 -0
- package/apps/web/vitest.setup.ts +10 -0
- package/package.json +85 -0
- package/packages/cli/dist/commands/check.d.ts +1 -0
- package/packages/cli/dist/commands/check.js +89 -0
- package/packages/cli/dist/commands/init.d.ts +5 -0
- package/packages/cli/dist/commands/init.js +183 -0
- package/packages/cli/dist/commands/start.d.ts +4 -0
- package/packages/cli/dist/commands/start.js +188 -0
- package/packages/cli/dist/index.d.ts +2 -0
- package/packages/cli/dist/index.js +71 -0
- package/packages/cli/dist/utils/agent-tools.d.ts +28 -0
- package/packages/cli/dist/utils/agent-tools.js +193 -0
- package/packages/cli/dist/utils/project-init.d.ts +12 -0
- package/packages/cli/dist/utils/project-init.js +258 -0
- package/packages/cli/dist/utils/proxy.d.ts +8 -0
- package/packages/cli/dist/utils/proxy.js +138 -0
- package/packages/cli/package.json +30 -0
- package/packages/cli/src/commands/check.ts +77 -0
- package/packages/cli/src/commands/init.ts +209 -0
- package/packages/cli/src/commands/start.ts +183 -0
- package/packages/cli/src/index.ts +91 -0
- package/packages/cli/src/utils/agent-tools.ts +201 -0
- package/packages/cli/src/utils/project-init.ts +252 -0
- package/packages/cli/src/utils/proxy.ts +123 -0
- package/packages/cli/tsconfig.json +14 -0
- package/packages/eslint-config/base.mjs +31 -0
- package/packages/eslint-config/nest.mjs +55 -0
- package/packages/eslint-config/next.mjs +23 -0
- package/packages/eslint-config/package.json +20 -0
- package/packages/typescript-config/base.json +16 -0
- package/packages/typescript-config/nestjs.json +17 -0
- package/packages/typescript-config/nextjs.json +15 -0
- package/packages/typescript-config/package.json +11 -0
- package/turbo.json +28 -0
package/.gitignore
ADDED
package/.npmignore
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
.git
|
|
2
|
+
.claude
|
|
3
|
+
**/.claude
|
|
4
|
+
.turbo
|
|
5
|
+
**/.turbo
|
|
6
|
+
node_modules
|
|
7
|
+
**/node_modules
|
|
8
|
+
coverage
|
|
9
|
+
|
|
10
|
+
apps/server/dist
|
|
11
|
+
apps/web/.next
|
|
12
|
+
apps/web/out
|
|
13
|
+
packages/typescript-config/dist
|
|
14
|
+
**/*.tsbuildinfo
|
|
15
|
+
|
|
16
|
+
.env
|
|
17
|
+
.env.local
|
|
18
|
+
.env.*.local
|
|
19
|
+
|
|
20
|
+
*.log
|
|
21
|
+
npm-debug.log*
|
package/.prettierignore
ADDED
package/.prettierrc
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"semi": true,
|
|
3
|
+
"quoteProps": "as-needed",
|
|
4
|
+
"trailingComma": "all",
|
|
5
|
+
"tabWidth": 2,
|
|
6
|
+
"useTabs": false,
|
|
7
|
+
"printWidth": 100,
|
|
8
|
+
"bracketSpacing": true,
|
|
9
|
+
"arrowParens": "always",
|
|
10
|
+
"endOfLine": "lf",
|
|
11
|
+
"overrides": [
|
|
12
|
+
{
|
|
13
|
+
"files": ["apps/web/**/*.{ts,tsx}"],
|
|
14
|
+
"options": {
|
|
15
|
+
"singleQuote": false,
|
|
16
|
+
"plugins": ["prettier-plugin-tailwindcss"]
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"files": ["apps/server/**/*.ts"],
|
|
21
|
+
"options": {
|
|
22
|
+
"singleQuote": true
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
}
|
package/AGENTS.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Project Rules
|
|
2
|
+
|
|
3
|
+
## Tech Stack
|
|
4
|
+
- Frontend: Next.js 16, TypeScript, Tailwind
|
|
5
|
+
- Backend: Node.js, SQLite
|
|
6
|
+
|
|
7
|
+
## Code Style
|
|
8
|
+
- Frontend: customhooks + presentation / container pattern으로 분기 , logic은 custom hooks , ui는 atoms 단위로 작성 후 container layer에서 조합 후 named export
|
|
9
|
+
- Backend: Module / Layer pattern으로 분기
|
|
10
|
+
- 에러 처리는 반드시 try/catch
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Project Rules
|
|
2
|
+
|
|
3
|
+
## Tech Stack
|
|
4
|
+
- Frontend: Next.js 16, TypeScript, Tailwind
|
|
5
|
+
- Backend: Node.js, SQLite
|
|
6
|
+
|
|
7
|
+
## Code Style
|
|
8
|
+
- Frontend: customhooks + presentation / container pattern으로 분기 , logic은 custom hooks , ui는 atoms 단위로 작성 후 container layer에서 조합 후 named export
|
|
9
|
+
- Backend: Module / Layer pattern으로 분기
|
|
10
|
+
- 에러 처리는 반드시 try/catch
|
package/README.md
ADDED
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
# Integration CLI
|
|
2
|
+
|
|
3
|
+
> A local web workspace for managing Claude Code, Gemini CLI, and Codex CLI sessions, tasks, logs, and agent-generated changes.
|
|
4
|
+
>
|
|
5
|
+
> Claude Code, Gemini CLI, Codex CLI 세션과 태스크, 로그, 에이전트 변경사항을 로컬 웹 환경에서 통합 관리하는 워크스페이스입니다.
|
|
6
|
+
|
|
7
|
+
## Overview / 개요
|
|
8
|
+
|
|
9
|
+
Integration CLI is an npm workspaces + Turborepo monorepo. It contains a Next.js web client, a NestJS API/WebSocket server, a small setup CLI, and shared TypeScript/ESLint configuration packages.
|
|
10
|
+
|
|
11
|
+
Integration CLI는 npm workspaces와 Turborepo 기반 모노레포입니다. Next.js 웹 클라이언트, NestJS API/WebSocket 서버, 환경 초기화 CLI, 공용 TypeScript/ESLint 설정 패키지로 구성되어 있습니다.
|
|
12
|
+
|
|
13
|
+
The app is designed around local AI coding agents:
|
|
14
|
+
|
|
15
|
+
- Chat with Claude Code, Gemini CLI, and Codex CLI sessions.
|
|
16
|
+
- Create multi-agent tasks with requirements and role assignments.
|
|
17
|
+
- Stream task execution output through Socket.IO.
|
|
18
|
+
- Review changelogs, run history, and merge generated file changes.
|
|
19
|
+
- Configure per-role harness prompts that are injected into agent runs.
|
|
20
|
+
|
|
21
|
+
주요 목적은 로컬 AI 코딩 에이전트를 한 화면에서 다루는 것입니다.
|
|
22
|
+
|
|
23
|
+
- Claude Code, Gemini CLI, Codex CLI 세션 채팅
|
|
24
|
+
- 요구사항과 역할을 가진 멀티 에이전트 태스크 생성
|
|
25
|
+
- Socket.IO 기반 태스크 실행 출력 스트리밍
|
|
26
|
+
- 변경사항, 실행 이력 확인 및 생성 파일 병합
|
|
27
|
+
- 에이전트 실행 시 주입되는 역할별 하네스 프롬프트 설정
|
|
28
|
+
|
|
29
|
+
## Tech Stack / 기술 스택
|
|
30
|
+
|
|
31
|
+
| Area | English | 한국어 |
|
|
32
|
+
| --- | --- | --- |
|
|
33
|
+
| Monorepo | npm workspaces, Turborepo | npm workspaces, Turborepo |
|
|
34
|
+
| Web | Next.js 16, React 19, TypeScript, Tailwind CSS, Vitest | Next.js 16, React 19, TypeScript, Tailwind CSS, Vitest |
|
|
35
|
+
| Server | NestJS 11, TypeScript, Socket.IO, TypeORM | NestJS 11, TypeScript, Socket.IO, TypeORM |
|
|
36
|
+
| Database | SQLite via `better-sqlite3` | `better-sqlite3` 기반 SQLite |
|
|
37
|
+
| CLI | Commander, TypeScript | Commander, TypeScript |
|
|
38
|
+
| Tests | Vitest for web, Jest for server | 웹은 Vitest, 서버는 Jest |
|
|
39
|
+
|
|
40
|
+
## Repository Structure / 프로젝트 구조
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
.
|
|
44
|
+
├── apps/
|
|
45
|
+
│ ├── web/ # Next.js frontend / Next.js 프론트엔드
|
|
46
|
+
│ └── server/ # NestJS backend / NestJS 백엔드
|
|
47
|
+
├── packages/
|
|
48
|
+
│ ├── cli/ # jccli setup/check CLI / jccli 초기화·점검 CLI
|
|
49
|
+
│ ├── eslint-config/ # shared ESLint configs / 공용 ESLint 설정
|
|
50
|
+
│ └── typescript-config/ # shared tsconfig presets / 공용 tsconfig preset
|
|
51
|
+
├── package.json # workspace scripts / 워크스페이스 스크립트
|
|
52
|
+
└── turbo.json # Turborepo pipeline / Turborepo 파이프라인
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### `apps/web`
|
|
56
|
+
|
|
57
|
+
English:
|
|
58
|
+
|
|
59
|
+
- App routes live in `src/app`.
|
|
60
|
+
- Feature code is grouped under `src/features`.
|
|
61
|
+
- UI atoms/shared components live under `src/components` and `src/lib`.
|
|
62
|
+
- Tests are colocated in `__tests__` directories.
|
|
63
|
+
|
|
64
|
+
한국어:
|
|
65
|
+
|
|
66
|
+
- App Router 페이지는 `src/app`에 있습니다.
|
|
67
|
+
- 기능별 코드는 `src/features` 아래에 모여 있습니다.
|
|
68
|
+
- 공용 UI와 유틸은 `src/components`, `src/lib`에 있습니다.
|
|
69
|
+
- 테스트는 각 영역의 `__tests__` 디렉토리에 colocate되어 있습니다.
|
|
70
|
+
|
|
71
|
+
### `apps/server`
|
|
72
|
+
|
|
73
|
+
English:
|
|
74
|
+
|
|
75
|
+
- Nest modules are split by domain: agents, tasks, sessions, conversations, harness, changelog.
|
|
76
|
+
- SQLite data and local runtime files are stored under `~/.ji`.
|
|
77
|
+
- API docs are exposed at `/docs` when the server is running.
|
|
78
|
+
|
|
79
|
+
한국어:
|
|
80
|
+
|
|
81
|
+
- Nest 모듈은 agents, tasks, sessions, conversations, harness, changelog 도메인으로 나뉩니다.
|
|
82
|
+
- SQLite 데이터와 로컬 런타임 파일은 `~/.ji` 아래에 저장됩니다.
|
|
83
|
+
- 서버 실행 중 API 문서는 `/docs`에서 확인할 수 있습니다.
|
|
84
|
+
|
|
85
|
+
Runtime paths:
|
|
86
|
+
|
|
87
|
+
```text
|
|
88
|
+
~/.ji/
|
|
89
|
+
├── ji.db
|
|
90
|
+
├── logs/server.log
|
|
91
|
+
├── worktrees/
|
|
92
|
+
├── harness/
|
|
93
|
+
└── agents/
|
|
94
|
+
├── gemini/
|
|
95
|
+
└── codex/
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### `packages/cli`
|
|
99
|
+
|
|
100
|
+
English:
|
|
101
|
+
|
|
102
|
+
- Provides the `jccli` binary.
|
|
103
|
+
- Supports `jccli init` and `jccli check`.
|
|
104
|
+
- When this repository is published to npm, installing the root package exposes `jccli`.
|
|
105
|
+
- `jccli init [dir]` can scaffold the full project, install dependencies, create `~/.ji` runtime folders, and verify Claude Code, Gemini CLI, and Codex.
|
|
106
|
+
|
|
107
|
+
한국어:
|
|
108
|
+
|
|
109
|
+
- `jccli` 바이너리를 제공합니다.
|
|
110
|
+
- `jccli init`, `jccli check` 명령을 지원합니다.
|
|
111
|
+
|
|
112
|
+
## Getting Started / 시작하기
|
|
113
|
+
|
|
114
|
+
### Prerequisites / 사전 요구사항
|
|
115
|
+
|
|
116
|
+
- Node.js `>=20` for the monorepo.
|
|
117
|
+
- npm `10.9.7` is the pinned package manager.
|
|
118
|
+
- Claude Code, Gemini CLI, and Codex CLI are expected for full agent functionality.
|
|
119
|
+
|
|
120
|
+
- 모노레포 실행에는 Node.js `>=20`이 필요합니다.
|
|
121
|
+
- 패키지 매니저는 npm `10.9.7` 기준입니다.
|
|
122
|
+
- 전체 에이전트 기능을 사용하려면 Claude Code, Gemini CLI, Codex CLI가 필요합니다.
|
|
123
|
+
|
|
124
|
+
### Install / 설치
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
npm install
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Install From npm / npm 패키지로 설치
|
|
131
|
+
|
|
132
|
+
After publishing the root package, users can install the CLI globally and initialize a project:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
npm install -g ji
|
|
136
|
+
jccli init my-app
|
|
137
|
+
cd my-app
|
|
138
|
+
npm run dev
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
`jccli init` also supports:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
jccli init --skip-install
|
|
145
|
+
jccli init --skip-agents
|
|
146
|
+
jccli check
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Run Everything / 전체 개발 서버 실행
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
npm run dev
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
This runs workspace `dev` scripts through Turborepo.
|
|
156
|
+
|
|
157
|
+
Turborepo를 통해 각 workspace의 `dev` 스크립트를 실행합니다.
|
|
158
|
+
|
|
159
|
+
### Run Apps Separately / 앱별 실행
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
# Web / 웹
|
|
163
|
+
npm run dev --workspace=@ji/web
|
|
164
|
+
|
|
165
|
+
# Server / 서버
|
|
166
|
+
npm run dev --workspace=@ji/server
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Default ports:
|
|
170
|
+
|
|
171
|
+
- Web: Next.js default dev port, usually `3000`.
|
|
172
|
+
- Server: `3001`, unless `PORT` is set.
|
|
173
|
+
|
|
174
|
+
기본 포트:
|
|
175
|
+
|
|
176
|
+
- Web: Next.js 기본 개발 포트, 일반적으로 `3000`
|
|
177
|
+
- Server: `PORT` 환경변수가 없으면 `3001`
|
|
178
|
+
|
|
179
|
+
Server docs:
|
|
180
|
+
|
|
181
|
+
```text
|
|
182
|
+
http://localhost:3001/docs
|
|
183
|
+
http://localhost:3001/docs-json
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Scripts / 스크립트
|
|
187
|
+
|
|
188
|
+
Run from the repository root:
|
|
189
|
+
|
|
190
|
+
루트에서 실행:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
npm run dev
|
|
194
|
+
npm run build
|
|
195
|
+
npm run lint
|
|
196
|
+
npm run lint:fix
|
|
197
|
+
npm run test
|
|
198
|
+
npm run format
|
|
199
|
+
npm run format:check
|
|
200
|
+
npm run clean
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Workspace-specific examples:
|
|
204
|
+
|
|
205
|
+
workspace별 예시:
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
npm run test --workspace=@ji/web
|
|
209
|
+
npm run test:coverage --workspace=@ji/web
|
|
210
|
+
|
|
211
|
+
npm run test --workspace=@ji/server
|
|
212
|
+
npm run test:cov --workspace=@ji/server
|
|
213
|
+
|
|
214
|
+
npm run build --workspace=@ji/cli
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## Testing / 테스트
|
|
218
|
+
|
|
219
|
+
### Web / 웹
|
|
220
|
+
|
|
221
|
+
The web app uses Vitest with jsdom and Testing Library.
|
|
222
|
+
|
|
223
|
+
웹 앱은 jsdom 환경의 Vitest와 Testing Library를 사용합니다.
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
npm run test --workspace=@ji/web
|
|
227
|
+
npm run test:coverage --workspace=@ji/web
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Coverage currently includes `src/features/**`, `src/lib/**`, and `src/components/**`.
|
|
231
|
+
|
|
232
|
+
커버리지 대상은 현재 `src/features/**`, `src/lib/**`, `src/components/**`입니다.
|
|
233
|
+
|
|
234
|
+
### Server / 서버
|
|
235
|
+
|
|
236
|
+
The server uses Jest and ts-jest.
|
|
237
|
+
|
|
238
|
+
서버는 Jest와 ts-jest를 사용합니다.
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
npm run test --workspace=@ji/server
|
|
242
|
+
npm run test:cov --workspace=@ji/server
|
|
243
|
+
npm run test:e2e --workspace=@ji/server
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
## Environment / 환경
|
|
247
|
+
|
|
248
|
+
### Web
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
NEXT_PUBLIC_SERVER_URL=http://localhost:3001
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
If unset, the web client defaults to `http://localhost:3001`.
|
|
255
|
+
|
|
256
|
+
설정하지 않으면 웹 클라이언트는 기본값 `http://localhost:3001`을 사용합니다.
|
|
257
|
+
|
|
258
|
+
### Server
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
PORT=3001
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
The server creates local runtime directories automatically under `~/.ji`.
|
|
265
|
+
|
|
266
|
+
서버는 실행 시 `~/.ji` 아래의 로컬 런타임 디렉토리를 자동 생성합니다.
|
|
267
|
+
|
|
268
|
+
## Main Features / 주요 기능
|
|
269
|
+
|
|
270
|
+
### Agent Authentication / 에이전트 인증
|
|
271
|
+
|
|
272
|
+
English:
|
|
273
|
+
|
|
274
|
+
- Claude Code login flow is handled over WebSocket.
|
|
275
|
+
- Gemini supports API key and Google Cloud Application Default Credentials style login.
|
|
276
|
+
- Codex supports device login and API key configuration.
|
|
277
|
+
|
|
278
|
+
한국어:
|
|
279
|
+
|
|
280
|
+
- Claude Code 로그인 흐름은 WebSocket으로 처리됩니다.
|
|
281
|
+
- Gemini는 API key 및 Google Cloud Application Default Credentials 방식 로그인을 지원합니다.
|
|
282
|
+
- Codex는 device login 및 API key 설정을 지원합니다.
|
|
283
|
+
|
|
284
|
+
### Chat Sessions / 채팅 세션
|
|
285
|
+
|
|
286
|
+
English:
|
|
287
|
+
|
|
288
|
+
- Sessions are persisted in SQLite.
|
|
289
|
+
- Message history is loaded from the server.
|
|
290
|
+
- Streaming output is received through agent-specific Socket.IO namespaces.
|
|
291
|
+
|
|
292
|
+
한국어:
|
|
293
|
+
|
|
294
|
+
- 세션은 SQLite에 저장됩니다.
|
|
295
|
+
- 메시지 이력은 서버에서 불러옵니다.
|
|
296
|
+
- 스트리밍 출력은 에이전트별 Socket.IO namespace를 통해 수신합니다.
|
|
297
|
+
|
|
298
|
+
### Tasks / 태스크
|
|
299
|
+
|
|
300
|
+
English:
|
|
301
|
+
|
|
302
|
+
- Create tasks with title, working directory, requirements, and assigned agents.
|
|
303
|
+
- Execute, stop, rerun, archive, and delete tasks.
|
|
304
|
+
- Inspect execution logs, changelog, and run history.
|
|
305
|
+
- Merge all changes from an agent or merge individual files.
|
|
306
|
+
|
|
307
|
+
한국어:
|
|
308
|
+
|
|
309
|
+
- 제목, 작업 디렉토리, 요구사항, 담당 에이전트를 가진 태스크를 생성합니다.
|
|
310
|
+
- 태스크 실행, 중지, 재실행, 보관, 삭제를 지원합니다.
|
|
311
|
+
- 실행 로그, 변경사항, 실행 이력을 확인합니다.
|
|
312
|
+
- 에이전트 전체 변경사항 또는 개별 파일 단위 병합을 지원합니다.
|
|
313
|
+
|
|
314
|
+
### Harness / 하네스
|
|
315
|
+
|
|
316
|
+
English:
|
|
317
|
+
|
|
318
|
+
- Per-role harness prompts can be edited from the web UI.
|
|
319
|
+
- Harness files are stored under `~/.ji/harness`.
|
|
320
|
+
|
|
321
|
+
한국어:
|
|
322
|
+
|
|
323
|
+
- 역할별 하네스 프롬프트를 웹 UI에서 편집할 수 있습니다.
|
|
324
|
+
- 하네스 파일은 `~/.ji/harness` 아래에 저장됩니다.
|
|
325
|
+
|
|
326
|
+
## API and WebSocket Namespaces / API 및 WebSocket namespace
|
|
327
|
+
|
|
328
|
+
Common HTTP areas:
|
|
329
|
+
|
|
330
|
+
- `/agents/claude`
|
|
331
|
+
- `/agents/gemini`
|
|
332
|
+
- `/agents/codex`
|
|
333
|
+
- `/tasks`
|
|
334
|
+
- `/sessions`
|
|
335
|
+
- `/conversations`
|
|
336
|
+
- `/harness`
|
|
337
|
+
|
|
338
|
+
Socket.IO namespaces:
|
|
339
|
+
|
|
340
|
+
- `/tasks`
|
|
341
|
+
- `/agents/claude`
|
|
342
|
+
- `/agents/gemini`
|
|
343
|
+
- `/agents/codex`
|
|
344
|
+
|
|
345
|
+
## Development Notes / 개발 메모
|
|
346
|
+
|
|
347
|
+
English:
|
|
348
|
+
|
|
349
|
+
- Frontend logic should live in custom hooks; UI should stay presentation-focused and be composed at container layers.
|
|
350
|
+
- Backend code follows a module/layer style.
|
|
351
|
+
- Error handling should use `try/catch` where appropriate.
|
|
352
|
+
- Be careful with local runtime state under `~/.ji` when debugging database or agent behavior.
|
|
353
|
+
|
|
354
|
+
한국어:
|
|
355
|
+
|
|
356
|
+
- 프론트엔드 로직은 custom hook에 두고, UI는 presentation 중심으로 유지한 뒤 container layer에서 조합합니다.
|
|
357
|
+
- 백엔드는 module/layer 패턴을 따릅니다.
|
|
358
|
+
- 에러 처리는 필요한 곳에서 `try/catch`를 사용합니다.
|
|
359
|
+
- DB나 에이전트 동작을 디버깅할 때는 `~/.ji` 아래의 로컬 런타임 상태를 함께 확인하세요.
|
|
360
|
+
|
|
361
|
+
## Useful Commands / 자주 쓰는 명령어
|
|
362
|
+
|
|
363
|
+
```bash
|
|
364
|
+
# Install dependencies / 의존성 설치
|
|
365
|
+
npm install
|
|
366
|
+
|
|
367
|
+
# Start all dev processes / 전체 개발 프로세스 시작
|
|
368
|
+
npm run dev
|
|
369
|
+
|
|
370
|
+
# Start only web / 웹만 실행
|
|
371
|
+
npm run dev --workspace=@ji/web
|
|
372
|
+
|
|
373
|
+
# Start only server / 서버만 실행
|
|
374
|
+
npm run dev --workspace=@ji/server
|
|
375
|
+
|
|
376
|
+
# Web tests with coverage / 웹 테스트 및 커버리지
|
|
377
|
+
npm run test:coverage --workspace=@ji/web
|
|
378
|
+
|
|
379
|
+
# Server tests with coverage / 서버 테스트 및 커버리지
|
|
380
|
+
npm run test:cov --workspace=@ji/server
|
|
381
|
+
|
|
382
|
+
# Build setup CLI / CLI 빌드
|
|
383
|
+
npm run build --workspace=@ji/cli
|
|
384
|
+
```
|