From be1b139c25e0a174f46d93a2d9b79af166870531 Mon Sep 17 00:00:00 2001 From: toki Date: Sun, 19 Apr 2026 12:23:11 +0900 Subject: [PATCH] sync: to agentic-framework v1.1.3 + add framework domain rule - add update-domain-rule skill to common - add framework domain rule (lib/framework/) - update core domain to include lib/oto/application.dart - update domain mapping table in rules.md Co-Authored-By: Claude Sonnet 4.6 --- agent-ops/.version | 2 +- agent-ops/rules/project/domain/core/rules.md | 3 +- .../rules/project/domain/framework/rules.md | 48 +++++++++ agent-ops/rules/project/rules.md | 2 + agent-ops/skills/common/router.md | 1 + .../skills/common/update-domain-rule/SKILL.md | 100 ++++++++++++++++++ 6 files changed, 154 insertions(+), 2 deletions(-) create mode 100644 agent-ops/rules/project/domain/framework/rules.md create mode 100644 agent-ops/skills/common/update-domain-rule/SKILL.md diff --git a/agent-ops/.version b/agent-ops/.version index 45a1b3f..781dcb0 100644 --- a/agent-ops/.version +++ b/agent-ops/.version @@ -1 +1 @@ -1.1.2 +1.1.3 diff --git a/agent-ops/rules/project/domain/core/rules.md b/agent-ops/rules/project/domain/core/rules.md index 08610cc..b2d4437 100644 --- a/agent-ops/rules/project/domain/core/rules.md +++ b/agent-ops/rules/project/domain/core/rules.md @@ -2,10 +2,11 @@ ## 목적 / 책임 -파이프라인 실행 전 단계에서 YAML 파싱, Jenkins 환경 변수 합성, 태그 치환을 담당하는 공통 인프라 레이어다. +파이프라인 실행 전 단계에서 YAML 파싱, Jenkins 환경 변수 합성, 태그 치환을 담당하는 공통 인프라 레이어다. `Application` 싱글턴이 전체 빌드 흐름을 오케스트레이션한다. ## 포함 경로 +- `lib/oto/application.dart` — 싱글턴 오케스트레이터 (BuildType enum, 빌드 진입점) - `lib/oto/core/` — 태그 시스템, 데이터 합성, 정의 데이터 - `lib/oto/utils/` — 공통 유틸리티 (Mattermost 등 재사용 헬퍼) diff --git a/agent-ops/rules/project/domain/framework/rules.md b/agent-ops/rules/project/domain/framework/rules.md new file mode 100644 index 0000000..672444e --- /dev/null +++ b/agent-ops/rules/project/domain/framework/rules.md @@ -0,0 +1,48 @@ +# framework + +## 목적 / 책임 + +oto_cli 전체에서 공유하는 런타임 인프라를 제공한다: 프로세스 실행, Isolate 관리, 로깅, 플랫폼 추상화, 공통 유틸리티. + +## 포함 경로 + +- `lib/framework/core/` — Application 베이스, AppDataManager (앱 메타데이터) +- `lib/framework/data/` — Isolate 메시지 데이터 타입 +- `lib/framework/log/` — 로깅 시스템 (Log, LogItem, LogType) +- `lib/framework/model/` — AppData 모델 및 JSON 직렬화 +- `lib/framework/platform/` — 플랫폼 추상화, IsolateManager, ProcessExecutor +- `lib/framework/utils/` — 공통 유틸 (system_util, path, string_util, os_startup, Slack 헬퍼) + +## 제외 경로 + +- `lib/oto/` — OTO 비즈니스 로직 (framework 위에서 동작) +- `lib/cli/` — CLI 레이어 (framework를 소비) + +## 주요 구성 요소 + +- `Application` (`core/application.dart`) — `runZonedGuarded` 기반 앱 진입점 베이스 +- `AppDataManager` (`core/app_data_manager.dart`) — 버전, Git hash, 빌드 일자 생성 및 `app_data.json` 저장 +- `IsolateManager` / `IsolateBase` / `IsolateHandler` (`platform/isolate_manager.dart`) — Dart Isolate 라이프사이클 관리 +- `ProcessExecutor` / `ProcessData` (`platform/process.dart`) — 셸 스크립트·외부 프로세스 실행 (macOS: zsh, Linux: bash, Windows: PowerShell) +- `Log` / `LogItem` (`log/log.dart`) — 로그 수집 및 파일 기록 +- `AppData` (`model/app_data.dart`) — 앱 메타 모델 (`app_data.json`) +- `system_util.dart` — 환경 초기화, CLI 인자 파싱, YAML/JSON 파싱 헬퍼 +- `SlackSender` / `SlackData` (`utils/slack/`) — Slack 메시지 전송 헬퍼 + +## 유지할 패턴 + +- 프로세스 실행은 `ProcessExecutor.start()` (스트리밍, stdout/stderr 실시간 수신) 또는 `ProcessExecutor.run()` (블로킹, 결과만 필요) 중 목적에 맞게 선택 +- 로그 출력은 `log()` / `logWarning()` / `logError()` 함수를 통해서만 기록 +- OS 분기가 필요한 코드는 `Platform.isMacOS / isLinux / isWindows` 조건으로 분기하고, 플랫폼별 구현은 `platform_*` 파일로 분리 + +## 다른 도메인과의 경계 + +- **core**: `lib/oto/application.dart`(OTO 오케스트레이터)는 framework의 `Application`을 상속하지 않고 독립 singleton. framework는 하위 인프라만 제공 +- **cli**: `scheduler_isolate.dart`는 `IsolateBase`를 상속. framework가 API를 제공하고 cli가 소비 +- **command**: 커맨드들이 `ProcessExecutor`를 직접 사용하여 셸 스크립트 실행 + +## 금지 사항 + +- framework 내부에서 `lib/oto/` 또는 `lib/cli/`를 import하지 않는다 (단방향 의존성 유지) +- OTO 비즈니스 로직(파이프라인, 커맨드 등록 등)을 framework에 넣지 않는다 +- `ProcessExecutor`를 우회하여 `dart:io Process`를 직접 호출하지 않는다 diff --git a/agent-ops/rules/project/rules.md b/agent-ops/rules/project/rules.md index 811c39c..8512331 100644 --- a/agent-ops/rules/project/rules.md +++ b/agent-ops/rules/project/rules.md @@ -82,5 +82,7 @@ lib/ | `lib/oto/commands/**` | command | `agent-ops/rules/project/domain/command/rules.md` | | `lib/oto/data/**` | command | `agent-ops/rules/project/domain/command/rules.md` | | `lib/cli/**` | cli | `agent-ops/rules/project/domain/cli/rules.md` | +| `lib/oto/application.dart` | core | `agent-ops/rules/project/domain/core/rules.md` | | `lib/oto/core/**` | core | `agent-ops/rules/project/domain/core/rules.md` | | `lib/oto/utils/**` | core | `agent-ops/rules/project/domain/core/rules.md` | +| `lib/framework/**` | framework | `agent-ops/rules/project/domain/framework/rules.md` | diff --git a/agent-ops/skills/common/router.md b/agent-ops/skills/common/router.md index 6fe73f5..c908256 100644 --- a/agent-ops/skills/common/router.md +++ b/agent-ops/skills/common/router.md @@ -9,3 +9,4 @@ | 코드 리뷰해줘, code review, CODE_REVIEW.md, 리뷰 루프 | `agent-ops/skills/common/code-review/SKILL.md` | | 커밋해줘, 푸시해줘, commit, push, 반영해줘 | `agent-ops/skills/common/commit-push/SKILL.md` | | agent-ops 싱크해, agent-ops 동기화해, agentic-framework에 올려줘, agent-ops를 [프로젝트]로 싱크해 | `agent-ops/skills/common/sync-agent-ops/SKILL.md` | +| 도메인 업데이트, domain rule 갱신, 도메인 검토, domain 스캔 | `agent-ops/skills/common/update-domain-rule/SKILL.md` | diff --git a/agent-ops/skills/common/update-domain-rule/SKILL.md b/agent-ops/skills/common/update-domain-rule/SKILL.md new file mode 100644 index 0000000..b5beb3e --- /dev/null +++ b/agent-ops/skills/common/update-domain-rule/SKILL.md @@ -0,0 +1,100 @@ +--- +name: update-domain-rule +version: 1.0.0 +description: 기존 도메인 rules.md를 코드 현황에 맞게 갱신. 전체 스캔(full) 또는 지정 도메인(targeted) 두 모드 지원 +--- + +# update-domain-rule + +## 목적 + +프로젝트 코드가 변경되면서 기존 domain rule이 실제 구조와 어긋날 수 있다. +이 스킬은 실제 파일 구조를 탐색하여 기존 `rules.md`와 비교하고, 누락·오류·구식 항목을 수정한다. + +## 언제 호출할지 + +- 대규모 리팩터링 또는 외부 패키지 내재화 후 domain rule 동기화가 필요할 때 +- 특정 도메인 파일 구조가 바뀌어 기존 rule이 맞지 않을 때 +- 사용자가 "도메인 업데이트", "domain rule 갱신", "domain 검토" 등을 요청할 때 +- agent-ops 초기 scaffold 이후 코드가 많이 달라진 경우 + +## 입력 + +- `mode`: `full`(전체 도메인 스캔) | `targeted`(지정 도메인만) (필수) +- `domain-name`: 업데이트할 도메인 이름 — `targeted` 모드에서만 필수 + +## 먼저 확인할 것 + +- [ ] `agent-ops/rules/project/domain/` 하위 기존 도메인 목록 확인 +- [ ] `agent-ops/rules/common/_templates/domain-rule-template.md` 읽어 최신 템플릿 형식 파악 +- [ ] `targeted` 모드이면 `agent-ops/rules/project/domain//rules.md` 존재 여부 확인 + - 존재하지 않으면 `create-domain-rule` 스킬을 사용하도록 안내하고 중단 + +## 실행 절차 + +1. **대상 목록 결정** + - `full`: `agent-ops/rules/project/domain/` 하위 모든 도메인 디렉터리를 대상으로 한다 + - `targeted`: 지정된 `domain-name` 하나만 대상으로 한다 + +2. **도메인별 코드 탐색** + - 기존 `rules.md`의 **포함 경로** 목록을 기준으로 실제 파일 구조 탐색 + - 포함 경로에 없지만 도메인 이름과 연관된 경로도 함께 탐색 + - 탐색 시 실제로 존재하는 경로만 수집한다 + +3. **비교 및 변경 항목 식별** + 다음 항목 각각을 현재 `rules.md`와 비교한다: + - **포함 경로**: 실제로 존재하지 않는 경로 제거, 새로 생긴 경로 추가 + - **주요 구성 요소**: 파일/클래스 삭제·이름 변경·신규 추가 반영 + - **유지할 패턴**: 코드에서 더 이상 사용되지 않는 패턴 제거, 새 패턴 추가 + - **다른 도메인과의 경계**: 도메인 간 import 관계가 바뀐 경우 반영 + - **목적/책임**: 도메인 책임이 실질적으로 변경된 경우에만 수정 + +4. **rules.md 업데이트** + - 변경이 필요한 항목만 수정한다 — 변경 불필요한 섹션은 그대로 둔다 + - 확인된 사실만 기재한다; 불확실하면 `` 주석 처리 + - `domain-rule-template.md`의 섹션 구조를 유지한다 + +5. **도메인 매핑 테이블 검토** (`full` 모드 시) + - `agent-ops/rules/project/rules.md`의 도메인 매핑 테이블과 실제 포함 경로 비교 + - 누락된 경로 패턴은 추가, 존재하지 않는 경로 패턴은 제거 + - 기존 항목 순서는 변경하지 않는다 + +6. **결과 보고** + - 도메인별로 수정한 항목 목록 + - `TODO`로 남긴 항목 (해당 시) + - 도메인 매핑 테이블 변경 내용 (full 모드 시) + +## 실행 결과 검증 + +- [ ] 수정된 `rules.md`의 포함 경로가 모두 실제 프로젝트에 존재하는가 +- [ ] 섹션 구조가 `domain-rule-template.md` 형식을 유지하는가 +- [ ] 변경하지 않아도 되는 섹션이 의도치 않게 바뀌지 않았는가 +- [ ] `full` 모드에서 도메인 매핑 테이블이 실제 포함 경로와 일치하는가 +- 검증 실패 시: 실제 존재하지 않는 경로나 누락된 섹션을 사용자에게 알리고 해당 항목만 보완한다 + +## 출력 형식 + +``` +## 업데이트 완료 + +### +- 변경: <수정된 항목 요약> +- 추가: <새로 추가된 경로/구성 요소> +- 제거: <삭제된 경로/구성 요소> +- 유지: 변경 없음 (해당 섹션) + +### 도메인 매핑 테이블 (full 모드 시) +- 추가: <새 경로 패턴> +- 제거: <삭제된 경로 패턴> + +## TODO 항목 (확인 필요) +- <불확실하여 직접 확인이 필요한 항목> (해당 시) +``` + +## 금지 사항 + +- 실제 존재하지 않는 경로를 포함 경로에 기재하지 않는다 +- 추측으로 패턴·금지 사항을 추가하지 않는다 — 코드에서 확인된 내용만 기재한다 +- 신규 도메인 생성이 필요한 경우 직접 생성하지 않고 `create-domain-rule` 스킬 사용을 안내한다 +- `rules/project/rules.md`의 기존 항목을 삭제하거나 재정렬하지 않는다 +- 코드 파일을 수정하지 않는다 — 이 스킬은 rule 파일 갱신만 담당한다