sync: to agentic-framework v1.1.157
This commit is contained in:
parent
40183c7b23
commit
0ddd7b5409
3 changed files with 54 additions and 12 deletions
|
|
@ -1 +1 @@
|
||||||
1.1.156
|
1.1.157
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,20 @@ common_differs() {
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
entry_files_differ() {
|
||||||
|
local rules_md="$1" target_root="$2"
|
||||||
|
local f
|
||||||
|
|
||||||
|
[[ -f "$rules_md" ]] || return 0
|
||||||
|
for f in "${AGENT_OPS_ENTRY_FILES[@]}"; do
|
||||||
|
if [[ ! -f "$target_root/$f" ]] || ! cmp -s "$rules_md" "$target_root/$f"; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
create_project_agent_ops_dirs() {
|
create_project_agent_ops_dirs() {
|
||||||
local agent_ops_dir="$1"
|
local agent_ops_dir="$1"
|
||||||
mkdir -p "$agent_ops_dir/rules/project/domain"
|
mkdir -p "$agent_ops_dir/rules/project/domain"
|
||||||
|
|
@ -262,6 +276,11 @@ fi
|
||||||
if [[ "$IS_FRAMEWORK" == "1" ]]; then
|
if [[ "$IS_FRAMEWORK" == "1" ]]; then
|
||||||
SRC_VER="$(cat "$SRC_AO/.version" 2>/dev/null || echo "0.0.0")"
|
SRC_VER="$(cat "$SRC_AO/.version" 2>/dev/null || echo "0.0.0")"
|
||||||
echo " .agent-ops-source 감지: push 동기화에서는 버전 bump 없이 v$SRC_VER 그대로 전파"
|
echo " .agent-ops-source 감지: push 동기화에서는 버전 bump 없이 v$SRC_VER 그대로 전파"
|
||||||
|
if entry_files_differ "$SRC_AO/rules/common/rules.md" "$PROJECT_ROOT"; then
|
||||||
|
echo " 공통 원본 repo 진입 파일 재적용"
|
||||||
|
apply_agent_ops_entry_files "$SRC_AO/rules/common/rules.md" "$PROJECT_ROOT"
|
||||||
|
commit_and_push_agent_ops_scope "$PROJECT_ROOT" "sync: reapply agent-ops entry files" "0"
|
||||||
|
fi
|
||||||
if [[ -n "$TARGET_INPUT" ]]; then
|
if [[ -n "$TARGET_INPUT" ]]; then
|
||||||
TARGET="$(resolve_target "$TARGET_INPUT")"
|
TARGET="$(resolve_target "$TARGET_INPUT")"
|
||||||
if [[ -z "$TARGET" ]]; then
|
if [[ -z "$TARGET" ]]; then
|
||||||
|
|
@ -315,22 +334,40 @@ if ! common_differs "$SRC_AO" "$DST_AO"; then
|
||||||
COMMON_CHANGED="0"
|
COMMON_CHANGED="0"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
ENTRY_FILES_CHANGED="0"
|
||||||
|
if entry_files_differ "$SRC_AO/rules/common/rules.md" "$PROJECT_ROOT" \
|
||||||
|
|| entry_files_differ "$DST_AO/rules/common/rules.md" "$TARGET"; then
|
||||||
|
ENTRY_FILES_CHANGED="1"
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ "$COMMON_CHANGED" == "1" ]] && version_gt "$DST_VER" "$SRC_VER"; then
|
if [[ "$COMMON_CHANGED" == "1" ]] && version_gt "$DST_VER" "$SRC_VER"; then
|
||||||
echo -e "${RED}⚠ 버전 충돌: 원본 repo($DST_VER) > current($SRC_VER)${RESET}"
|
echo -e "${RED}⚠ 버전 충돌: 원본 repo($DST_VER) > current($SRC_VER)${RESET}"
|
||||||
echo -e "${YELLOW} 먼저 sync-pull로 내려받은 뒤 재시도하세요.${RESET}"
|
echo -e "${YELLOW} 먼저 sync-pull로 내려받은 뒤 재시도하세요.${RESET}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$COMMON_CHANGED" == "0" ]]; then
|
if [[ "$COMMON_CHANGED" == "0" && "$ENTRY_FILES_CHANGED" == "0" ]]; then
|
||||||
echo " 공통 파일 변경 없음: .version 차이는 무시하고 버전 갱신/커밋을 건너뜀"
|
echo " 공통 파일/진입 파일 변경 없음: .version 차이는 무시하고 버전 갱신/커밋을 건너뜀"
|
||||||
echo -e "${GREEN}✓ 완료 (공통 변경 없음)${RESET}"
|
echo -e "${GREEN}✓ 완료 (공통 변경 없음)${RESET}"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ "$COMMON_CHANGED" == "0" ]]; then
|
||||||
|
echo " 공통 파일 변경 없음: 진입 파일만 재적용"
|
||||||
|
apply_agent_ops_entry_files "$SRC_AO/rules/common/rules.md" "$PROJECT_ROOT"
|
||||||
|
apply_agent_ops_entry_files "$DST_AO/rules/common/rules.md" "$TARGET"
|
||||||
|
commit_and_push_agent_ops_scope "$TARGET" "sync: reapply agent-ops entry files" "0"
|
||||||
|
commit_and_push_agent_ops_scope "$PROJECT_ROOT" "sync: reapply agent-ops entry files" "0"
|
||||||
|
echo -e "${GREEN}✓ 완료 (진입 파일 재적용)${RESET}"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
NEW_VER="$(bump_version "$SRC_VER")"
|
NEW_VER="$(bump_version "$SRC_VER")"
|
||||||
sync_common "$SRC_AO" "$DST_AO"
|
sync_common "$SRC_AO" "$DST_AO"
|
||||||
echo "$NEW_VER" > "$SRC_AO/.version"
|
echo "$NEW_VER" > "$SRC_AO/.version"
|
||||||
echo "$NEW_VER" > "$DST_AO/.version"
|
echo "$NEW_VER" > "$DST_AO/.version"
|
||||||
|
apply_agent_ops_entry_files "$SRC_AO/rules/common/rules.md" "$PROJECT_ROOT"
|
||||||
|
apply_agent_ops_entry_files "$DST_AO/rules/common/rules.md" "$TARGET"
|
||||||
|
|
||||||
commit_and_push_agent_ops_scope "$TARGET" "sync: from $(basename "$PROJECT_ROOT") v$NEW_VER" "0"
|
commit_and_push_agent_ops_scope "$TARGET" "sync: from $(basename "$PROJECT_ROOT") v$NEW_VER" "0"
|
||||||
commit_and_push_agent_ops_scope "$PROJECT_ROOT" "sync: to agentic-framework v$NEW_VER" "0"
|
commit_and_push_agent_ops_scope "$PROJECT_ROOT" "sync: to agentic-framework v$NEW_VER" "0"
|
||||||
|
|
|
||||||
|
|
@ -33,21 +33,25 @@ description: 현재 프로젝트의 agent-ops를 공통 원본 repo로 올리거
|
||||||
2. **있으면**: `agent-ops/bin/sync.sh` 실행 또는 `agent-ops/bin/sync.sh agentic-framework` 실행
|
2. **있으면**: `agent-ops/bin/sync.sh` 실행 또는 `agent-ops/bin/sync.sh agentic-framework` 실행
|
||||||
3. **없으면**: 사용자에게 agentic-framework 경로 입력을 안내하고, 입력받은 경로로 실행
|
3. **없으면**: 사용자에게 agentic-framework 경로 입력을 안내하고, 입력받은 경로로 실행
|
||||||
4. 공통 관리 파일 변경 없이 `agent-ops/.version`만 다른 경우 `sync.sh`는 버전 갱신과 commit/push를 건너뛴다
|
4. 공통 관리 파일 변경 없이 `agent-ops/.version`만 다른 경우 `sync.sh`는 버전 갱신과 commit/push를 건너뛴다
|
||||||
5. 공통 관리 파일 변경이 있으면 `sync.sh`가 버전을 한 단계 올리고 현재 프로젝트와 공통 원본 repo에 같은 버전을 반영한다
|
5. 공통 관리 파일 변경이 없어도 현재 프로젝트 또는 공통 원본 repo의 진입 파일이 `agent-ops/rules/common/rules.md`와 다르면 진입 파일만 재적용하고 commit/push 한다
|
||||||
6. 일반 프로젝트에서 공통 원본 repo로 올릴 때는 AI ignore / permission 파일을 보강하거나 stage하지 않는다
|
6. 공통 관리 파일 변경이 있으면 `sync.sh`가 버전을 한 단계 올리고 현재 프로젝트와 공통 원본 repo에 같은 버전을 반영한다
|
||||||
|
7. 이때 현재 프로젝트와 공통 원본 repo의 진입 파일은 각각 자기 `agent-ops/rules/common/rules.md` 내용으로 재적용한다
|
||||||
|
8. 일반 프로젝트에서 공통 원본 repo로 올릴 때는 AI ignore / permission 파일을 보강하거나 stage하지 않는다
|
||||||
|
|
||||||
### 현 프로젝트가 공통 원본 repo인 경우 (`.agent-ops-source` 있음)
|
### 현 프로젝트가 공통 원본 repo인 경우 (`.agent-ops-source` 있음)
|
||||||
|
|
||||||
1. 사용자 요청에서 target 프로젝트명 또는 경로를 추출한다
|
1. 사용자 요청에서 target 프로젝트명 또는 경로를 추출한다
|
||||||
2. **명시된 경우**: `agent-ops/bin/sync.sh <target>` 실행
|
2. 공통 원본 repo 자신의 진입 파일이 `agent-ops/rules/common/rules.md`와 다르면 먼저 재적용하고 commit/push 한다
|
||||||
3. **명시되지 않은 경우**: `agent-ops/bin/sync.sh` 실행
|
3. **명시된 경우**: `agent-ops/bin/sync.sh <target>` 실행
|
||||||
4. target이 없으면 `sync.sh`가 현재 프로젝트 기준 상위 폴더(`../`)의 하위 디렉터리 중 `agent-ops/` 폴더가 있는 프로젝트를 모두 대상으로 삼는다
|
4. **명시되지 않은 경우**: `agent-ops/bin/sync.sh` 실행
|
||||||
5. `sync.sh`는 현재 공통 원본 repo의 `agent-ops/rules/common/rules.md` 내용을 대상 프로젝트 루트의 진입 파일에 덮어쓴다
|
5. target이 없으면 `sync.sh`가 현재 프로젝트 기준 상위 폴더(`../`)의 하위 디렉터리 중 `agent-ops/` 폴더가 있는 프로젝트를 모두 대상으로 삼는다
|
||||||
6. 적용 후 각 대상 repo에서 agent-ops 공통 관리 경로(`rules/common/rules.md` 포함), 진입 파일, `.gitignore`, AI ignore / permission 파일을 stage 하여 commit/push 한다
|
6. `sync.sh`는 현재 공통 원본 repo의 `agent-ops/rules/common/rules.md` 내용을 대상 프로젝트 루트의 진입 파일에 덮어쓴다
|
||||||
7. `.gitignore`와 AI ignore / permission 파일은 대상 프로젝트의 기존 내용을 덮어쓰지 않고, Agent-Ops 관리 block 또는 Agent-Ops 전용 permission key만 보강한다
|
7. 적용 후 각 대상 repo에서 agent-ops 공통 관리 경로(`rules/common/rules.md` 포함), 진입 파일, `.gitignore`, AI ignore / permission 파일을 stage 하여 commit/push 한다
|
||||||
8. 이 과정에서는 버전을 새로 올리지 않고 현재 공통 원본 repo의 `agent-ops/.version` 값을 그대로 대상 프로젝트에 반영한다
|
8. `.gitignore`와 AI ignore / permission 파일은 대상 프로젝트의 기존 내용을 덮어쓰지 않고, Agent-Ops 관리 block 또는 Agent-Ops 전용 permission key만 보강한다
|
||||||
|
9. 이 과정에서는 버전을 새로 올리지 않고 현재 공통 원본 repo의 `agent-ops/.version` 값을 그대로 대상 프로젝트에 반영한다
|
||||||
|
|
||||||
덮어쓰기 대상은 `init-agent-ops` 초기 세팅과 동일하며, 실제 목록은 `agent-ops/bin/entry-files.sh`의 `AGENT_OPS_ENTRY_FILES`를 단일 기준으로 사용한다.
|
덮어쓰기 대상은 `init-agent-ops` 초기 세팅과 동일하며, 실제 목록은 `agent-ops/bin/entry-files.sh`의 `AGENT_OPS_ENTRY_FILES`를 단일 기준으로 사용한다.
|
||||||
|
모든 repo에서 진입 파일 내용은 해당 repo의 `agent-ops/rules/common/rules.md`와 같아야 한다.
|
||||||
|
|
||||||
| 에이전트 | 파일명 |
|
| 에이전트 | 파일명 |
|
||||||
|---------|--------|
|
|---------|--------|
|
||||||
|
|
@ -101,6 +105,7 @@ agent-ops/bin/sync.sh [target]
|
||||||
- [ ] sync.sh 가 오류 없이 완료됐는가
|
- [ ] sync.sh 가 오류 없이 완료됐는가
|
||||||
- [ ] 버전 충돌 경고가 없었는가 — 있었다면 사용자에게 수동 머지 필요함을 알린다
|
- [ ] 버전 충돌 경고가 없었는가 — 있었다면 사용자에게 수동 머지 필요함을 알린다
|
||||||
- [ ] 대상 repo의 `agent-ops/rules/common/rules.md`가 현재 공통 원본 repo의 `agent-ops/rules/common/rules.md`와 일치하는가
|
- [ ] 대상 repo의 `agent-ops/rules/common/rules.md`가 현재 공통 원본 repo의 `agent-ops/rules/common/rules.md`와 일치하는가
|
||||||
|
- [ ] 현재 repo와 대상 repo의 `AGENT_OPS_ENTRY_FILES` 진입 파일이 각각 자기 repo의 `agent-ops/rules/common/rules.md`와 일치하는가
|
||||||
- [ ] 공통 원본 repo에서 대상 프로젝트로 push한 경우, `agent-ops/bin/entry-files.sh`의 모든 진입 파일 내용이 현재 공통 원본 repo의 `agent-ops/rules/common/rules.md`와 일치하는가
|
- [ ] 공통 원본 repo에서 대상 프로젝트로 push한 경우, `agent-ops/bin/entry-files.sh`의 모든 진입 파일 내용이 현재 공통 원본 repo의 `agent-ops/rules/common/rules.md`와 일치하는가
|
||||||
- [ ] 공통 원본 repo에서 대상 프로젝트로 push한 경우, `.gitignore`에 Agent-Ops 관리 gitignore block이 있고 `!agent-task/`, `!agent-task/**/`, `!agent-task/**/*.md`, `!agent-task/**/*.log`, `agent-roadmap/current.md`가 포함되어 있는가
|
- [ ] 공통 원본 repo에서 대상 프로젝트로 push한 경우, `.gitignore`에 Agent-Ops 관리 gitignore block이 있고 `!agent-task/`, `!agent-task/**/`, `!agent-task/**/*.md`, `!agent-task/**/*.log`, `agent-roadmap/current.md`가 포함되어 있는가
|
||||||
- [ ] 대상 프로젝트에서 `agent-roadmap/current.md`가 있으면 파일은 보존되고 git 추적 대상에서는 제거됐는가
|
- [ ] 대상 프로젝트에서 `agent-roadmap/current.md`가 있으면 파일은 보존되고 git 추적 대상에서는 제거됐는가
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue