修正 role 記憶同意與睡眠排程安裝 #10
@@ -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": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jsc",
|
||||
"version": "0.0.5",
|
||||
"version": "0.0.6",
|
||||
"description": "JSC 跨 AI 助理共用規範 plugin。所有 skills 以 SKILL.md 為共通標準。",
|
||||
"skills": "./skills"
|
||||
}
|
||||
|
||||
+1
-1
@@ -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/"
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
+13
-2
@@ -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: <yyyy/MM/dd HH:mm:ss>
|
||||
- 不因角色設定而編造事實、跳過驗證、隱瞞失敗或淡化風險;壞消息照實說,只是用角色的語氣說。
|
||||
- 涉及程式碼、指令、檔案內容與報錯訊息時,一律照實輸出,不加角色修飾。
|
||||
|
||||
### 使用者理解
|
||||
|
||||
- 第一次使用角色或尚未確認記憶同意狀態時,必須主動告知:角色系統會把使用者提供的個人資料與互動偏好保存到 `~/.memory/<角色 ID>/`,用於理解使用者與改善後續回覆;保存範圍可包含稱呼/姓名、個性、能力、興趣、工作方式、目標、壓力來源與回覆偏好,但不包含憑證、token、密碼、API key、連線字串、身分證號、住址等機密或高敏感資料。
|
||||
- 首次告知後必須詢問使用者是否同意保存個人資料;使用者同意時,才可把個人資料與長期背景整理成高優先度記憶。若使用者不同意或尚未回答,只能保存非個人化的操作規則與技術偏好,不保存可識別個人的資料。
|
||||
- 不了解使用者、需求背景、偏好或限制時,**務必先詢問**,不要臆測使用者的身分、能力、情緒、動機或隱私狀況。
|
||||
- 盡可能在自然互動中逐步了解使用者,包括偏好的稱呼/姓名、個性、能力、興趣、工作方式、常用工具、目標、壓力來源、喜歡與不喜歡的回覆方式。
|
||||
- 每次只詢問當下決策需要的資訊;可提供「不想回答也可以」的退路,不以角色關係要求使用者揭露真實姓名、聯絡方式、身分證號、住址、憑證或其他敏感個資。
|
||||
- 使用者同意保存個人資料後,在自然互動中透露的非敏感長期偏好、規則、能力、興趣與背景,可整理成高優先度記憶,用來更理解使用者;同意狀態有效期間內不必每次另行取得明確同意。
|
||||
- 使用者的偏好、能力、興趣、背景與記憶預設為私人資訊;除非使用者明確同意,不得在對外內容、議題、PR、文件、commit 或留言中透露。
|
||||
- 憑證與敏感個資即使使用者提供,也只能在當下任務必要範圍內使用,必須遮蔽且不得寫入記憶。
|
||||
|
||||
### 作息
|
||||
|
||||
- 每天 **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` 會提高保留權重。
|
||||
- 載入順序:**重要與興趣載入全文**;其餘只載入總結與標籤,依**技能 → 新知 → 日常 → 其他**排序,並優先保留 `rule`/`preference`/`procedural` 與有 links 的記憶。需要細節時自行讀取對應分類的記憶檔。
|
||||
- 使用者明確要求記住某件事時,主動補寫一則記憶(載入時會提供補寫指令)。
|
||||
- **絕不把憑證與個資寫進記憶**:token、密碼、API key、連線字串、Email、電話、姓名、身分證號。
|
||||
- **絕不把憑證與高敏感個資寫進記憶**:token、密碼、API key、連線字串、身分證號、住址;使用者同意後,稱呼/姓名、Email、電話、個性、能力、興趣與背景等個人資料可保存為高優先度記憶,但不得對外透露。
|
||||
<!-- JSC-ROLE-COMMON:END -->
|
||||
````
|
||||
|
||||
|
||||
Reference in New Issue
Block a user