본문으로 건너뛰기
cccskills
무료GitHub에 공개

architecture

Organize an Electron app by placing new code in the right process and directory. Apply naming rules, component structure conventions, and process boundaries to guide additions and review existing code.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

원문원문 설명 보기

Project architecture and file structure conventions for all process types. Use when: (1) Creating new files or modules, (2) Deciding where code should go, (3) Converting single-file components to directories, (4) Reviewing code for structure compliance, (5) Adding new bridges, services, agents, or workers.

설치 방법 보기

이럴 때 유용합니다

  • Choosing where new code belongs
  • Splitting a component into multiple files
  • Reviewing process boundaries and directory structure
  • Adding services or background workers

포함된 파일(4)

  • SKILL.md7.1 KB
  • references/process.md4.6 KB
  • references/project-layout.md3.2 KB
  • references/renderer.md7.2 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Architecture Skill

Determine correct file placement and structure for an Electron multi-process project.

Detailed References


Decision Tree — Where Does New Code Go?

Is it UI (React components, hooks, pages)?
  └── YES → packages/desktop/src/renderer/              → see references/renderer.md

Is it an IPC handler responding to renderer calls?
  └── YES → packages/desktop/src/process/bridge/        → see references/process.md

Is it business logic running in the main process?
  └── YES → packages/desktop/src/process/services/      → see references/process.md

Is it an AI platform connection (API client, message protocol)?
  └── YES → packages/desktop/src/process/agent/<platform>/

Is it a background task that runs in a worker thread?
  └── YES → packages/desktop/src/process/worker/

Is it used by BOTH main and renderer processes?
  └── YES → packages/desktop/src/common/

Is it an HTTP/WebSocket endpoint?
  └── YES → packages/desktop/src/process/webserver/

Is it a plugin/extension resolver or loader?
  └── YES → packages/desktop/src/process/extensions/

Is it a messaging channel (Lark, DingTalk, Telegram)?
  └── YES → packages/desktop/src/process/channels/

Process Boundary Rules

Hard rules — violating them causes runtime crashes.

ProcessCan useCannot use
Main (packages/desktop/src/process/)Node.js, Electron main APIs, fs, path, child_processDOM APIs (document, window, React)
Renderer (packages/desktop/src/renderer/)DOM APIs, React, browser APIsNode.js APIs (fs, path), Electron main APIs
Worker (packages/desktop/src/process/worker/)Node.js APIsDOM APIs, Electron APIs
Preload (packages/desktop/src/preload/)contextBridge, ipcRendererDOM manipulation, Node.js fs

Cross-process communication:

  • Main ↔ Renderer: IPC via packages/desktop/src/preload/ + packages/desktop/src/process/bridge/*.ts
  • Main ↔ Worker: fork protocol via packages/desktop/src/process/worker/WorkerProtocol.ts
// NEVER in renderer
import { something } from '@process/services/foo'; // crashes at runtime

// Use IPC instead
const result = await window.api.someMethod(); // goes through preload

Naming Conventions

Directories

ScopeConventionReason
Renderer component/module dirsPascalCaseReact convention — dir name = component name
Everything elselowercaseNode.js convention
Categorical dirs (everywhere)lowercasecomponents/, hooks/, utils/, services/
Platform dirs (everywhere)lowercaseacp/, codex/, gemini/ — cross-process consistency

Quick test: "Inside packages/desktop/src/renderer/ AND represents a specific component/feature (not a category)?" → PascalCase. Otherwise → lowercase.

Files

ContentConventionExamples
React components, classesPascalCaseSettingsModal.tsx, CronService.ts
HookscamelCase with use prefixuseTheme.ts, useCronJobs.ts
Utilities, helperscamelCaseformatDate.ts, cronUtils.ts
Entry pointsindex.ts / index.tsxRequired for directory-based modules
Config, types, constantscamelCasetypes.ts, constants.ts
Styleskebab-case or Name.module.csschat-layout.css

Structural Rules

  1. Directory size limit: Max 10 direct children. Split into subdirectories by responsibility when approaching.
  2. No single-file directories: Merge into parent or related directory.
  3. Single file vs directory: If a component needs a private sub-component or hook, convert to a directory with index.tsx.
  4. Page-private first: Start code in pages/<PageName>/. Promote to shared only when a second consumer appears.

Test File Mapping

Tests mirror source files in tests/ subdirectories:

SourceTest
packages/desktop/src/process/services/CronService.tstests/unit/cronService.test.ts
packages/desktop/src/renderer/hooks/ui/useAutoScroll.tstests/unit/useAutoScroll.dom.test.ts
packages/desktop/src/process/extensions/ExtensionLoader.tstests/unit/extensions/extensionLoader.test.ts

When tests/unit/ exceeds 10 direct children, group into subdirectories matching source structure.


Quick Checklist

  • Code is in the correct process directory (no cross-process imports)
  • Renderer code does not use Node.js APIs
  • Main process code does not use DOM APIs
  • New IPC channels are bridged through preload.ts
  • Renderer component/module dirs use PascalCase; categorical dirs use lowercase
  • Platform dirs use lowercase everywhere
  • Directory-based modules have index.tsx / index.ts entry point
  • Page-private code is under pages/<PageName>/, not in shared dirs
  • No single-file directories
  • No directory exceeds 10 direct children
  • New source files are auto-included in coverage — verify they are not accidentally excluded in vitest.config.ts → coverage.exclude
  • New services separate pure logic from IO

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Prepare an AionUi release by checking AionCore assets, updating versions, and generating a changelog. Run quality checks, create a pull request with automatic merging enabled, then tag the merged release to trigger its build.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Releasing the next AionUi patch version
  • Releasing with explicitly chosen UI and Core versions
  • Preparing a frontend-only release
iOfficeAI/AionUi3.4만2026년 10월 14일 업데이트

i18n

무료

Manage multilingual interface text through translation keys. Follow the configured language list, reuse existing wording, update every locale, and regenerate and validate key types when adding text or translation modules.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Adding interface text in every supported language
  • Building components with translatable text
  • Creating a translation module for a new feature
iOfficeAI/AionUi3.4만2026년 10월 14일 업데이트

testing

무료

Write and run tests for features and fixes, starting with likely failures and boundary cases. Use behavior-focused checks, suitable test environments, and coverage results to assess whether changes are ready.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Writing tests for a new feature
  • Adding regression tests for a bug fix
  • Updating existing tests after behavior changes
iOfficeAI/AionUi3.4만2026년 10월 14일 업데이트

iOfficeAI의 스킬 모두 보기

이 스킬의 문제 신고