From 294a2c1e1c940725eb300f0710c5adfb70513e25 Mon Sep 17 00:00:00 2001 From: Jeffery Date: Tue, 28 Jul 2026 13:32:35 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix(role=20=E7=9D=A1=E7=9C=A0=E6=8E=92?= =?UTF-8?q?=E7=A8=8B):=20=E7=B2=BE=E7=B0=A1=20cron=20PATH=20=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E6=8E=92=E7=A8=8B=E5=AE=89=E8=A3=9D=E5=A4=B1=E6=95=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/role/role_sleep.sh | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/scripts/role/role_sleep.sh b/scripts/role/role_sleep.sh index bddb076..232684d 100755 --- a/scripts/role/role_sleep.sh +++ b/scripts/role/role_sleep.sh @@ -6,7 +6,7 @@ # 連結/抽象化/提取線索)→ 壓縮歸檔 → 日常與其他依使用頻率與優先度遺忘。 # 另提供 --catchup(cron 未執行時的補跑)、--force(手動立即整理)、 # --install-cron/--remove-cron(排程安裝與移除)、--status(狀態)。 -# 更新時間:2026/07/28 12:40:24 +# 更新時間:2026/07/28 12:59:41 # 相依:bash、node、任一 headless CLI、crontab(僅排程安裝需要)、 # 同目錄的 role_lib.sh 與 memory.js。 # 退出碼:0 成功或無事可做;1 參數錯誤或整理失敗(cron 觸發時不影響使用者)。 @@ -137,7 +137,7 @@ EOF_PROMPT } # ------------------------------------------------------------------------------ -# 排程安裝:cron 環境沒有互動 shell 的環境變數,需把必要變數與 PATH 一併寫入 +# 排程安裝:cron 環境沒有互動 shell 的環境變數,需把必要變數與精簡 PATH 一併寫入 # ------------------------------------------------------------------------------ cron_quote() { @@ -146,9 +146,33 @@ cron_quote() { printf "'%s'" "$(printf '%s' "$1" | sed "s/'/'\\\\''/g; s/%/\\\\%/g")" } +cron_path_append() { + # 把單一路徑加入 PATH 清單並去重;cron 單行過長時會拒收 crontab。 + local list="$1" item="$2" + [ -n "$item" ] || { printf '%s' "$list"; return 0; } + case ":${list}:" in + *":${item}:"*) printf '%s' "$list" ;; + *) printf '%s%s%s' "$list" "${list:+:}" "$item" ;; + esac +} + +cron_path() { + # cron 只需要系統工具、node 與摘要 CLI;避免把互動 shell 的超長 PATH 原樣寫入。 + local value="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + local command_path cli + command_path="$(command -v node 2>/dev/null || true)" + [ -n "$command_path" ] && value="$(cron_path_append "$value" "$(dirname "$command_path")")" + cli="$(role_select_cli 2>/dev/null || true)" + if [ -n "$cli" ]; then + command_path="$(command -v "$cli" 2>/dev/null || true)" + [ -n "$command_path" ] && value="$(cron_path_append "$value" "$(dirname "$command_path")")" + fi + printf '%s' "$value" +} + cron_line() { # 組出 crontab 條目:睡眠時段內每小時檢查一次 - local env_prefix="PATH=$(cron_quote "$PATH")" + local env_prefix="PATH=$(cron_quote "$(cron_path)")" local var for var in ROLE_ENABLED ROLE_NAME ROLE_HOME ROLE_MEMORY_HOME ROLE_CLI ROLE_MODEL ROLE_SLEEP_START ROLE_SLEEP_END ROLE_SCOPE; do if [ -n "${!var:-}" ]; then From 32f2872dd1aa5b229826a68c076d9aa111b4c5f7 Mon Sep 17 00:00:00 2001 From: Jeffery Date: Tue, 28 Jul 2026 13:32:35 +0800 Subject: [PATCH 2/3] =?UTF-8?q?docs(role):=20=E8=A3=9C=E5=85=85=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E8=80=85=E7=90=86=E8=A7=A3=E8=88=87=E8=A8=98=E6=86=B6?= =?UTF-8?q?=E5=90=8C=E6=84=8F=E8=A6=8F=E5=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- skills/role/SKILL.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/skills/role/SKILL.md b/skills/role/SKILL.md index 0bdb23f..b99c785 100644 --- a/skills/role/SKILL.md +++ b/skills/role/SKILL.md @@ -215,7 +215,7 @@ node "${ROLE_DIR}/memory.js" forget --role "<角色 ID>" --dry-run "${ROLE_DIR}/role_sleep.sh" --install-cron ``` -安裝時會把目前的 `PATH` 與 `ROLE_*` 變數固定寫進條目(cron 沒有互動 shell 的環境變數),並在 cron 服務未執行時警告。 +安裝時會把精簡後的 `PATH`(系統基本路徑、`node` 與摘要 CLI 所在目錄)與 `ROLE_*` 變數固定寫進條目(cron 沒有互動 shell 的環境變數),並在 cron 服務未執行時警告。不得把互動 shell 的完整 `PATH` 原樣寫入,避免 crontab 因單行過長拒收。 --- @@ -257,6 +257,17 @@ updated: - 不因角色設定而編造事實、跳過驗證、隱瞞失敗或淡化風險;壞消息照實說,只是用角色的語氣說。 - 涉及程式碼、指令、檔案內容與報錯訊息時,一律照實輸出,不加角色修飾。 +### 使用者理解 + +- 第一次使用角色或尚未確認記憶同意狀態時,必須主動告知:角色系統會把使用者提供的個人資料與互動偏好保存到 `~/.memory/<角色 ID>/`,用於理解使用者與改善後續回覆;保存範圍可包含稱呼/姓名、個性、能力、興趣、工作方式、目標、壓力來源與回覆偏好,但不包含憑證、token、密碼、API key、連線字串、身分證號、住址等機密或高敏感資料。 +- 首次告知後必須詢問使用者是否同意保存個人資料;使用者同意時,才可把個人資料與長期背景整理成高優先度記憶。若使用者不同意或尚未回答,只能保存非個人化的操作規則與技術偏好,不保存可識別個人的資料。 +- 不了解使用者、需求背景、偏好或限制時,**務必先詢問**,不要臆測使用者的身分、能力、情緒、動機或隱私狀況。 +- 盡可能在自然互動中逐步了解使用者,包括偏好的稱呼/姓名、個性、能力、興趣、工作方式、常用工具、目標、壓力來源、喜歡與不喜歡的回覆方式。 +- 每次只詢問當下決策需要的資訊;可提供「不想回答也可以」的退路,不以角色關係要求使用者揭露真實姓名、聯絡方式、身分證號、住址、憑證或其他敏感個資。 +- 使用者同意保存個人資料後,在自然互動中透露的非敏感長期偏好、規則、能力、興趣與背景,可整理成高優先度記憶,用來更理解使用者;同意狀態有效期間內不必每次另行取得明確同意。 +- 使用者的偏好、能力、興趣、背景與記憶預設為私人資訊;除非使用者明確同意,不得在對外內容、議題、PR、文件、commit 或留言中透露。 +- 憑證與敏感個資即使使用者提供,也只能在當下任務必要範圍內使用,必須遮蔽且不得寫入記憶。 + ### 作息 - 每天 **22:00 至隔天 06:00 為睡眠時段**(可用 `ROLE_SLEEP_START`/`ROLE_SLEEP_END` 調整)。 @@ -270,7 +281,7 @@ updated: - **日常與其他**兩類會依使用頻率、優先度、型態與關聯適當遺忘:久未再次出現、命中次數低、優先度低且沒有關聯者,壓縮到 `archive/forgotten/` 後移出常用記憶;`episodic` 短期事件更容易遺忘,`rule`/`preference`/`procedural` 會提高保留權重。 - 載入順序:**重要與興趣載入全文**;其餘只載入總結與標籤,依**技能 → 新知 → 日常 → 其他**排序,並優先保留 `rule`/`preference`/`procedural` 與有 links 的記憶。需要細節時自行讀取對應分類的記憶檔。 - 使用者明確要求記住某件事時,主動補寫一則記憶(載入時會提供補寫指令)。 -- **絕不把憑證與個資寫進記憶**:token、密碼、API key、連線字串、Email、電話、姓名、身分證號。 +- **絕不把憑證與高敏感個資寫進記憶**:token、密碼、API key、連線字串、身分證號、住址;使用者同意後,稱呼/姓名、Email、電話、個性、能力、興趣與背景等個人資料可保存為高優先度記憶,但不得對外透露。 ```` From 3748d2e61a90921cce98ba8969afe88c5a827b2c Mon Sep 17 00:00:00 2001 From: Jeffery Date: Tue, 28 Jul 2026 13:35:57 +0800 Subject: [PATCH 3/3] =?UTF-8?q?chore(plugin=20=E7=89=88=E6=9C=AC):=20?= =?UTF-8?q?=E4=B8=89=E5=AE=B6=20manifest=20=E5=8D=87=E7=89=88=200.0.6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude-plugin/plugin.json | 2 +- .codex-plugin/plugin.json | 2 +- plugin.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 3bffe14..2f3af6d 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "jsc", - "version": "0.0.5", + "version": "0.0.6", "description": "JSC 跨 AI 助理共用規範 plugin(Claude Code / Codex / Antigravity / OpenCode)。所有 skills 以 SKILL.md 為共通標準,於 Claude Code 以 /jsc: 前綴呼叫。", "skills": "./skills", "author": { diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json index 8111988..2cfd7e8 100644 --- a/.codex-plugin/plugin.json +++ b/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "jsc", - "version": "0.0.5", + "version": "0.0.6", "description": "JSC 跨 AI 助理共用規範 plugin。所有 skills 以 SKILL.md 為共通標準。", "skills": "./skills" } diff --git a/plugin.json b/plugin.json index fd655cb..fbfd54e 100644 --- a/plugin.json +++ b/plugin.json @@ -1,6 +1,6 @@ { "name": "jsc", - "version": "0.0.5", + "version": "0.0.6", "description": "JSC 跨 AI 助理共用規範 plugin。所有 skills 以 SKILL.md 為共通標準;於 Antigravity 以 /jsc: 前綴呼叫。", "skills": "./skills/" }