From c497d10eaa9975b99beb3d9b7b84caeda93057d5 Mon Sep 17 00:00:00 2001 From: toki Date: Mon, 25 May 2026 21:16:43 +0900 Subject: [PATCH] sync: agent-ops from agentic-framework v1.1.55 --- .claude/settings.json | 3 +- agent-ops/.version | 2 +- agent-ops/bin/ai-ignore.sh | 57 ++++--------------- .../skills/common/init-agent-ops/SKILL.md | 12 ++-- agent-ops/skills/common/sync-pull/SKILL.md | 4 +- agent-ops/skills/common/sync-push/SKILL.md | 8 +-- opencode.json | 6 +- 7 files changed, 28 insertions(+), 64 deletions(-) diff --git a/.claude/settings.json b/.claude/settings.json index c0611b0..0c2baa3 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -2,8 +2,7 @@ "$schema": "https://json.schemastore.org/claude-code-settings.json", "permissions": { "deny": [ - "Read(./agent-task/archive/**)", - "Read(./agent-ops/roadmap/archive/**)" + "Read(./agent-task/archive/**)" ] } } diff --git a/agent-ops/.version b/agent-ops/.version index baeb5d0..6d4b6e1 100644 --- a/agent-ops/.version +++ b/agent-ops/.version @@ -1 +1 @@ -1.1.54 +1.1.55 diff --git a/agent-ops/bin/ai-ignore.sh b/agent-ops/bin/ai-ignore.sh index 4c36c39..1431c15 100755 --- a/agent-ops/bin/ai-ignore.sh +++ b/agent-ops/bin/ai-ignore.sh @@ -81,6 +81,7 @@ def as_object: .permissions = ((.permissions // {}) | as_object) | .permissions.deny = ( (.permissions.deny | as_array) + | map(select(. != "Read(./agent-ops/roadmap/archive/**)")) | append_unique("Read(./agent-task/archive/**)") ) ' @@ -88,7 +89,7 @@ def as_object: agent_ops_merge_json_with_jq \ "$file" \ "$filter" \ - "Note: .claude/settings.json exists; add Read(./agent-task/archive/**) manually." + "Note: .claude/settings.json exists; add Read(./agent-task/archive/**) and remove Read(./agent-ops/roadmap/archive/**) manually." } agent_ops_claude_settings_complete() { @@ -98,7 +99,9 @@ def as_array: if type == "array" then . elif . == null then [] else [.] end; (.permissions.deny | as_array) -| index("Read(./agent-task/archive/**)") +as $deny +| (($deny | index("Read(./agent-task/archive/**)")) != null) +and (($deny | index("Read(./agent-ops/roadmap/archive/**)")) == null) ' if command -v jq >/dev/null 2>&1; then @@ -121,8 +124,10 @@ def as_object: .permission = ((.permission // {}) | as_object) | .permission.read = ((.permission.read // {}) | as_object) | .permission.read["agent-task/archive/**"] = "deny" +| del(.permission.read["agent-ops/roadmap/archive/**"]) | .permission.glob = ((.permission.glob // {}) | as_object) | .permission.glob["agent-task/archive/**"] = "deny" +| del(.permission.glob["agent-ops/roadmap/archive/**"]) | .watcher = ((.watcher // {}) | as_object) | .watcher.ignore = ( (.watcher.ignore | as_array) @@ -134,7 +139,7 @@ def as_object: agent_ops_merge_json_with_jq \ "$file" \ "$filter" \ - "Note: opencode.json exists; add agent-task/archive/** read/glob deny and agent-task/archive/** plus agent-ops/roadmap/archive/** watcher ignore manually." + "Note: opencode.json exists; add agent-task/archive/** read/glob deny, remove agent-ops/roadmap/archive/** read/glob hard deny, and add agent-task/archive/** plus agent-ops/roadmap/archive/** watcher ignore manually." } agent_ops_opencode_config_complete() { @@ -145,7 +150,9 @@ def as_array: (.permission.read["agent-task/archive/**"] == "deny") and (.permission.glob["agent-task/archive/**"] == "deny") -and ((.watcher.ignore | as_array) | index("agent-task/archive/**") and index("agent-ops/roadmap/archive/**")) +and (.permission.read["agent-ops/roadmap/archive/**"] != "deny") +and (.permission.glob["agent-ops/roadmap/archive/**"] != "deny") +and ((.watcher.ignore | as_array) as $ignore | (($ignore | index("agent-task/archive/**")) != null) and (($ignore | index("agent-ops/roadmap/archive/**")) != null)) ' if command -v jq >/dev/null 2>&1; then @@ -155,46 +162,6 @@ and ((.watcher.ignore | as_array) | index("agent-task/archive/**") and index("ag fi } -agent_ops_warn_existing_roadmap_hard_deny() { - local target_dir="$1" - local found="0" - local file - - file="$target_dir/.claude/settings.json" - if [[ -f "$file" ]]; then - if command -v jq >/dev/null 2>&1; then - if jq -e ' -def as_array: - if type == "array" then . elif . == null then [] else [.] end; -(.permissions.deny | as_array) -| index("Read(./agent-ops/roadmap/archive/**)") -' "$file" >/dev/null 2>&1; then - found="1" - fi - elif grep -q "Read(./agent-ops/roadmap/archive/**)" "$file"; then - found="1" - fi - fi - - file="$target_dir/opencode.json" - if [[ -f "$file" ]]; then - if command -v jq >/dev/null 2>&1; then - if jq -e ' -(.permission.read["agent-ops/roadmap/archive/**"] == "deny") -or (.permission.glob["agent-ops/roadmap/archive/**"] == "deny") -' "$file" >/dev/null 2>&1; then - found="1" - fi - elif grep -Eq '"agent-ops/roadmap/archive/\*\*"[[:space:]]*:[[:space:]]*"deny"' "$file"; then - found="1" - fi - fi - - if [[ "$found" == "1" ]]; then - echo " Warning: 기존 roadmap archive hard deny는 사용자 설정으로 보고 보존했습니다. 링크 기반 archive 읽기가 필요하면 수동 확인하세요." - fi -} - ensure_agent_ops_ai_ignore_config() { local target_dir="$1" local ignore_file @@ -248,5 +215,5 @@ EOF agent_ops_merge_opencode_config "$target_dir/opencode.json" fi - agent_ops_warn_existing_roadmap_hard_deny "$target_dir" + echo " AI permission 표준 적용: roadmap archive hard deny 제거" } diff --git a/agent-ops/skills/common/init-agent-ops/SKILL.md b/agent-ops/skills/common/init-agent-ops/SKILL.md index 9f0003a..7fb0964 100644 --- a/agent-ops/skills/common/init-agent-ops/SKILL.md +++ b/agent-ops/skills/common/init-agent-ops/SKILL.md @@ -1,6 +1,6 @@ --- name: init-agent-ops -version: 1.1.3 +version: 1.1.4 description: 프로젝트 상태를 판별하고 agent-ops 기본 스캐폴드를 생성하기 위한 초기 규칙 --- @@ -72,7 +72,7 @@ description: 프로젝트 상태를 판별하고 agent-ops 기본 스캐폴드 | `agent-ops/rules/private/` | 폴더만 생성 (내용은 개인이 작성) | | `.gitignore`에 `agent-ops/rules/private/` 추가 | git 추적 제외 | | `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore` | 사용자 항목은 보존하고 Agent-Ops 관리 block에 `agent-task/archive/**`, `agent-ops/roadmap/archive/**` 추가 | -| `.claude/settings.json`, `opencode.json` | 파일이 없으면 `agent-task/archive/**` 읽기/검색 제외 설정만 생성한다. `agent-ops/roadmap/archive/**`는 필요 시 링크로 읽을 수 있어야 하므로 hard read deny로 추가하지 않는다 | +| `.claude/settings.json`, `opencode.json` | `agent-task/archive/**` 읽기/검색 제외 설정을 생성 또는 병합한다. `agent-ops/roadmap/archive/**`는 필요 시 링크로 읽을 수 있어야 하므로 hard read/glob deny에서 제거한다 | 에이전트별 파일명: @@ -180,8 +180,8 @@ common/rules.md와 내용이 중복되지 않도록 한다. - `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에는 사용자 항목을 건드리지 않고 Agent-Ops 관리 block만 추가하거나 교체한다 - Agent-Ops 관리 block에는 `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`를 넣는다 - `.claude/settings.json`, `opencode.json`이 없으면 `agent-task/archive/**` 읽기/검색 제외 설정을 생성하고, 있으면 가능한 경우 기존 설정을 보존하며 필요한 제외 설정만 병합한다 - - `agent-ops/roadmap/archive/**`는 일반 작업에서 읽지 않도록 AI ignore와 로드맵 규칙으로 제한하되, `.claude/settings.json`이나 `opencode.json`의 hard read deny에는 추가하지 않는다 - - 기존 `.claude/settings.json`이나 `opencode.json`에 `agent-ops/roadmap/archive/**` hard read/glob deny가 있으면 사용자 설정으로 보고 자동 삭제하지 않고 경고만 남긴다 + - `agent-ops/roadmap/archive/**`는 일반 작업에서 읽지 않도록 AI ignore와 로드맵 규칙으로 제한하되, `.claude/settings.json`이나 `opencode.json`의 hard read/glob deny에는 두지 않는다 + - 기존 `.claude/settings.json`이나 `opencode.json`에 `agent-ops/roadmap/archive/**` hard read/glob deny가 있으면 init-agent-ops 표준에 맞게 제거한다 - 대상 루트에 `.agent-ops-source`가 있으면 AI ignore / permission 파일은 보강하지 않는다 - `agent-task/archive/**`와 `agent-ops/roadmap/archive/**` 제외는 `.gitignore`에 추가하지 않는다 @@ -239,8 +239,8 @@ common/rules.md와 내용이 중복되지 않도록 한다. - [ ] `.gitignore`에 `agent-ops/rules/private/` 항목이 추가되어 있는가 - [ ] `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 Agent-Ops 관리 block이 있고 그 안에 `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`가 포함되어 있는가 - [ ] `.claude/settings.json`, `opencode.json`에 `agent-task/archive/**` 제외 설정이 있거나, 병합 불가 시 수동 병합 안내를 출력했는가 -- [ ] `.claude/settings.json`, `opencode.json`에 `agent-ops/roadmap/archive/**` hard read deny를 새로 추가하지 않았는가 -- [ ] 기존 `agent-ops/roadmap/archive/**` hard deny가 있으면 자동 삭제하지 않고 사용자 확인 대상으로 보고했는가 +- [ ] `.claude/settings.json`, `opencode.json`에 `agent-ops/roadmap/archive/**` hard read/glob deny가 남아 있지 않은가 +- [ ] 기존 `agent-ops/roadmap/archive/**` hard deny가 있으면 init-agent-ops 표준에 맞게 제거했는가 - [ ] `.gitignore`에 `agent-task/archive/**` 또는 `agent-ops/roadmap/archive/**`를 추가하지 않았는가 - 검증 실패 시: 누락된 파일/항목을 사용자에게 알리고 해당 부분만 보완한다 diff --git a/agent-ops/skills/common/sync-pull/SKILL.md b/agent-ops/skills/common/sync-pull/SKILL.md index 888a3a4..9afc008 100644 --- a/agent-ops/skills/common/sync-pull/SKILL.md +++ b/agent-ops/skills/common/sync-pull/SKILL.md @@ -31,8 +31,8 @@ agent-ops/bin/sync.sh --pull - [ ] 현재 프로젝트 버전이 framework 버전과 일치하는가 - [ ] `agent-ops/bin/entry-files.sh`의 모든 진입 파일이 갱신됐고, 내용이 framework의 `agent-ops/rules/common/rules.md`와 일치하는가 - [ ] `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 Agent-Ops 관리 block이 있고 그 안에 `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`가 포함되어 있는가 -- [ ] `.claude/settings.json`, `opencode.json`에 `agent-task/archive/**` hard deny가 있고 `agent-ops/roadmap/archive/**` hard read deny를 새로 추가하지 않았는가 -- [ ] 현재 프로젝트에 기존 `agent-ops/roadmap/archive/**` hard deny가 있으면 자동 삭제하지 않고 사용자 확인 대상으로 보고했는가 +- [ ] `.claude/settings.json`, `opencode.json`에 `agent-task/archive/**` hard deny가 있고 `agent-ops/roadmap/archive/**` hard read/glob deny가 남아 있지 않은가 +- [ ] 현재 프로젝트에 기존 `agent-ops/roadmap/archive/**` hard deny가 있으면 init-agent-ops 표준에 맞게 제거했는가 - [ ] agentic-framework의 AI ignore / permission 파일은 수정되거나 stage되지 않았는가 ## 금지 사항 diff --git a/agent-ops/skills/common/sync-push/SKILL.md b/agent-ops/skills/common/sync-push/SKILL.md index 13f8005..c0274d1 100644 --- a/agent-ops/skills/common/sync-push/SKILL.md +++ b/agent-ops/skills/common/sync-push/SKILL.md @@ -74,8 +74,8 @@ agent-ops/roadmap/archive/** - 관리 block 밖의 기존 ignore 항목은 사용자 소유로 보고 삭제, 정렬, 중복 제거하지 않는다. - `.claude/settings.json`과 `opencode.json`은 기존 사용자 설정을 보존하고 `agent-task/archive/**` hard read/glob deny만 보강한다. -- `agent-ops/roadmap/archive/**`는 필요한 경우 링크로 읽을 수 있어야 하므로 `.claude/settings.json`이나 `opencode.json`의 hard read deny로 새로 추가하지 않는다. -- 대상 프로젝트에 기존 `agent-ops/roadmap/archive/**` hard read/glob deny가 있으면 사용자 설정으로 보고 자동 삭제하지 않고 경고만 남긴다. +- `agent-ops/roadmap/archive/**`는 필요한 경우 링크로 읽을 수 있어야 하므로 `.claude/settings.json`이나 `opencode.json`의 hard read/glob deny로 두지 않는다. +- 대상 프로젝트에 기존 `agent-ops/roadmap/archive/**` hard read/glob deny가 있으면 init-agent-ops 표준에 맞게 제거한다. - `opencode.json`의 watcher ignore에는 `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`를 둘 수 있다. ```bash @@ -91,8 +91,8 @@ agent-ops/bin/sync.sh [target] - [ ] 대상 repo의 `agent-ops/rules/common/rules.md`가 현재 agentic-framework의 `agent-ops/rules/common/rules.md`와 일치하는가 - [ ] agentic-framework에서 대상 프로젝트로 push한 경우, `agent-ops/bin/entry-files.sh`의 모든 진입 파일 내용이 현재 agentic-framework의 `agent-ops/rules/common/rules.md`와 일치하는가 - [ ] framework에서 대상 프로젝트로 push한 경우, `.geminiignore`, `.aiexclude`, `.cursorignore`, `.clineignore`에 Agent-Ops 관리 block이 있고 그 안에 `agent-task/archive/**`와 `agent-ops/roadmap/archive/**`가 포함되어 있는가 -- [ ] framework에서 대상 프로젝트로 push한 경우, `.claude/settings.json`과 `opencode.json`에 `agent-task/archive/**` hard deny가 있고 `agent-ops/roadmap/archive/**` hard read deny를 새로 추가하지 않았는가 -- [ ] 대상 프로젝트에 기존 `agent-ops/roadmap/archive/**` hard deny가 있으면 자동 삭제하지 않고 사용자 확인 대상으로 보고했는가 +- [ ] framework에서 대상 프로젝트로 push한 경우, `.claude/settings.json`과 `opencode.json`에 `agent-task/archive/**` hard deny가 있고 `agent-ops/roadmap/archive/**` hard read/glob deny가 남아 있지 않은가 +- [ ] 대상 프로젝트에 기존 `agent-ops/roadmap/archive/**` hard deny가 있으면 init-agent-ops 표준에 맞게 제거했는가 - [ ] 일반 프로젝트에서 agentic-framework로 push한 경우, AI ignore / permission 파일이 agentic-framework에 유입되지 않았는가 - [ ] 대상 repo에 commit/push 된 path가 방향별 허용 범위로 제한되었는가 diff --git a/opencode.json b/opencode.json index 317a052..9dd9cc1 100644 --- a/opencode.json +++ b/opencode.json @@ -2,12 +2,10 @@ "$schema": "https://opencode.ai/config.json", "permission": { "read": { - "agent-task/archive/**": "deny", - "agent-ops/roadmap/archive/**": "deny" + "agent-task/archive/**": "deny" }, "glob": { - "agent-task/archive/**": "deny", - "agent-ops/roadmap/archive/**": "deny" + "agent-task/archive/**": "deny" } }, "watcher": {