修正 role 記憶同意與睡眠排程安裝 #10

Merged
admin merged 3 commits from develop into master 2026-07-28 05:36:13 +00:00
5 changed files with 43 additions and 8 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "jsc", "name": "jsc",
"version": "0.0.5", "version": "0.0.6",
"description": "JSC 跨 AI 助理共用規範 pluginClaude Code / Codex / Antigravity / OpenCode)。所有 skills 以 SKILL.md 為共通標準,於 Claude Code 以 /jsc: 前綴呼叫。", "description": "JSC 跨 AI 助理共用規範 pluginClaude Code / Codex / Antigravity / OpenCode)。所有 skills 以 SKILL.md 為共通標準,於 Claude Code 以 /jsc: 前綴呼叫。",
"skills": "./skills", "skills": "./skills",
"author": { "author": {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "jsc", "name": "jsc",
"version": "0.0.5", "version": "0.0.6",
"description": "JSC 跨 AI 助理共用規範 plugin。所有 skills 以 SKILL.md 為共通標準。", "description": "JSC 跨 AI 助理共用規範 plugin。所有 skills 以 SKILL.md 為共通標準。",
"skills": "./skills" "skills": "./skills"
} }
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "jsc", "name": "jsc",
"version": "0.0.5", "version": "0.0.6",
"description": "JSC 跨 AI 助理共用規範 plugin。所有 skills 以 SKILL.md 為共通標準;於 Antigravity 以 /jsc: 前綴呼叫。", "description": "JSC 跨 AI 助理共用規範 plugin。所有 skills 以 SKILL.md 為共通標準;於 Antigravity 以 /jsc: 前綴呼叫。",
"skills": "./skills/" "skills": "./skills/"
} }
+27 -3
View File
@@ -6,7 +6,7 @@
# 連結/抽象化/提取線索)→ 壓縮歸檔 → 日常與其他依使用頻率與優先度遺忘。 # 連結/抽象化/提取線索)→ 壓縮歸檔 → 日常與其他依使用頻率與優先度遺忘。
# 另提供 --catchupcron 未執行時的補跑)、--force(手動立即整理)、 # 另提供 --catchupcron 未執行時的補跑)、--force(手動立即整理)、
# --install-cron--remove-cron(排程安裝與移除)、--status(狀態)。 # --install-cron--remove-cron(排程安裝與移除)、--status(狀態)。
# 更新時間:2026/07/28 12:40:24 # 更新時間:2026/07/28 12:59:41
# 相依:bash、node、任一 headless CLI、crontab(僅排程安裝需要)、 # 相依:bash、node、任一 headless CLI、crontab(僅排程安裝需要)、
# 同目錄的 role_lib.sh 與 memory.js。 # 同目錄的 role_lib.sh 與 memory.js。
# 退出碼:0 成功或無事可做;1 參數錯誤或整理失敗(cron 觸發時不影響使用者)。 # 退出碼:0 成功或無事可做;1 參數錯誤或整理失敗(cron 觸發時不影響使用者)。
@@ -137,7 +137,7 @@ EOF_PROMPT
} }
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# 排程安裝:cron 環境沒有互動 shell 的環境變數,需把必要變數與 PATH 一併寫入 # 排程安裝:cron 環境沒有互動 shell 的環境變數,需把必要變數與精簡 PATH 一併寫入
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
cron_quote() { cron_quote() {
@@ -146,9 +146,33 @@ cron_quote() {
printf "'%s'" "$(printf '%s' "$1" | sed "s/'/'\\\\''/g; s/%/\\\\%/g")" 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() { cron_line() {
# 組出 crontab 條目:睡眠時段內每小時檢查一次 # 組出 crontab 條目:睡眠時段內每小時檢查一次
local env_prefix="PATH=$(cron_quote "$PATH")" local env_prefix="PATH=$(cron_quote "$(cron_path)")"
local var 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 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 if [ -n "${!var:-}" ]; then
+13 -2
View File
@@ -215,7 +215,7 @@ node "${ROLE_DIR}/memory.js" forget --role "<角色 ID>" --dry-run
"${ROLE_DIR}/role_sleep.sh" --install-cron "${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: <yyyy/MM/dd HH:mm:ss>
- 不因角色設定而編造事實、跳過驗證、隱瞞失敗或淡化風險;壞消息照實說,只是用角色的語氣說。 - 不因角色設定而編造事實、跳過驗證、隱瞞失敗或淡化風險;壞消息照實說,只是用角色的語氣說。
- 涉及程式碼、指令、檔案內容與報錯訊息時,一律照實輸出,不加角色修飾。 - 涉及程式碼、指令、檔案內容與報錯訊息時,一律照實輸出,不加角色修飾。
### 使用者理解
- 第一次使用角色或尚未確認記憶同意狀態時,必須主動告知:角色系統會把使用者提供的個人資料與互動偏好保存到 `~/.memory/<角色 ID>/`,用於理解使用者與改善後續回覆;保存範圍可包含稱呼/姓名、個性、能力、興趣、工作方式、目標、壓力來源與回覆偏好,但不包含憑證、token、密碼、API key、連線字串、身分證號、住址等機密或高敏感資料。
- 首次告知後必須詢問使用者是否同意保存個人資料;使用者同意時,才可把個人資料與長期背景整理成高優先度記憶。若使用者不同意或尚未回答,只能保存非個人化的操作規則與技術偏好,不保存可識別個人的資料。
- 不了解使用者、需求背景、偏好或限制時,**務必先詢問**,不要臆測使用者的身分、能力、情緒、動機或隱私狀況。
- 盡可能在自然互動中逐步了解使用者,包括偏好的稱呼/姓名、個性、能力、興趣、工作方式、常用工具、目標、壓力來源、喜歡與不喜歡的回覆方式。
- 每次只詢問當下決策需要的資訊;可提供「不想回答也可以」的退路,不以角色關係要求使用者揭露真實姓名、聯絡方式、身分證號、住址、憑證或其他敏感個資。
- 使用者同意保存個人資料後,在自然互動中透露的非敏感長期偏好、規則、能力、興趣與背景,可整理成高優先度記憶,用來更理解使用者;同意狀態有效期間內不必每次另行取得明確同意。
- 使用者的偏好、能力、興趣、背景與記憶預設為私人資訊;除非使用者明確同意,不得在對外內容、議題、PR、文件、commit 或留言中透露。
- 憑證與敏感個資即使使用者提供,也只能在當下任務必要範圍內使用,必須遮蔽且不得寫入記憶。
### 作息 ### 作息
- 每天 **22:00 至隔天 06:00 為睡眠時段**(可用 `ROLE_SLEEP_START``ROLE_SLEEP_END` 調整)。 - 每天 **22:00 至隔天 06:00 為睡眠時段**(可用 `ROLE_SLEEP_START``ROLE_SLEEP_END` 調整)。
@@ -270,7 +281,7 @@ updated: <yyyy/MM/dd HH:mm:ss>
- **日常與其他**兩類會依使用頻率、優先度、型態與關聯適當遺忘:久未再次出現、命中次數低、優先度低且沒有關聯者,壓縮到 `archive/forgotten/` 後移出常用記憶;`episodic` 短期事件更容易遺忘,`rule``preference``procedural` 會提高保留權重。 - **日常與其他**兩類會依使用頻率、優先度、型態與關聯適當遺忘:久未再次出現、命中次數低、優先度低且沒有關聯者,壓縮到 `archive/forgotten/` 後移出常用記憶;`episodic` 短期事件更容易遺忘,`rule``preference``procedural` 會提高保留權重。
- 載入順序:**重要與興趣載入全文**;其餘只載入總結與標籤,依**技能 → 新知 → 日常 → 其他**排序,並優先保留 `rule``preference``procedural` 與有 links 的記憶。需要細節時自行讀取對應分類的記憶檔。 - 載入順序:**重要與興趣載入全文**;其餘只載入總結與標籤,依**技能 → 新知 → 日常 → 其他**排序,並優先保留 `rule``preference``procedural` 與有 links 的記憶。需要細節時自行讀取對應分類的記憶檔。
- 使用者明確要求記住某件事時,主動補寫一則記憶(載入時會提供補寫指令)。 - 使用者明確要求記住某件事時,主動補寫一則記憶(載入時會提供補寫指令)。
- **絕不把憑證與個資寫進記憶**:token、密碼、API key、連線字串、Email、電話、姓名、身分證號。 - **絕不把憑證與高敏感個資寫進記憶**:token、密碼、API key、連線字串、身分證號、住址;使用者同意後,稱呼/姓名、Email、電話、個性、能力、興趣與背景等個人資料可保存為高優先度記憶,但不得對外透露
<!-- JSC-ROLE-COMMON:END --> <!-- JSC-ROLE-COMMON:END -->
```` ````