Merge pull request 'fix/model-config-resolve-subcommand' (#4) from fix/model-config-resolve-subcommand into develop
Reviewed-on: #4 Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
This commit was merged in pull request #4.
This commit is contained in:
@@ -1,75 +1,89 @@
|
|||||||
{
|
{
|
||||||
"name": "jsc",
|
"name": "jsc",
|
||||||
|
"description": "jsc 跨 AI 助理技能組的統一 marketplace(claude / codex / copilot / antigravity / kiro)。",
|
||||||
|
"owner": {
|
||||||
|
"name": "JSC"
|
||||||
|
},
|
||||||
"plugins": [
|
"plugins": [
|
||||||
{
|
{
|
||||||
"name": "jsc-ask",
|
"name": "jsc-ask",
|
||||||
"source": {
|
"source": {
|
||||||
"source": "url",
|
"source": "url",
|
||||||
"url": "https://gitea.jsc.idv.tw/plugins/ask.git"
|
"url": "https://gitea.jsc.idv.tw/plugins/ask.git"
|
||||||
}
|
},
|
||||||
|
"description": "決策樹問詢與問詢紀錄(QUESTION_* wiki 頁)"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "jsc-cli",
|
"name": "jsc-cli",
|
||||||
"source": {
|
"source": {
|
||||||
"source": "url",
|
"source": "url",
|
||||||
"url": "https://gitea.jsc.idv.tw/plugins/cli.git"
|
"url": "https://gitea.jsc.idv.tw/plugins/cli.git"
|
||||||
}
|
},
|
||||||
|
"description": "CLI 偵測、模型能力標籤與技能庫批次部署"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "jsc-git",
|
"name": "jsc-git",
|
||||||
"source": {
|
"source": {
|
||||||
"source": "url",
|
"source": "url",
|
||||||
"url": "https://gitea.jsc.idv.tw/plugins/git.git"
|
"url": "https://gitea.jsc.idv.tw/plugins/git.git"
|
||||||
}
|
},
|
||||||
|
"description": "Commit 分組認可與 Push Request 建立"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "jsc-gitea",
|
"name": "jsc-gitea",
|
||||||
"source": {
|
"source": {
|
||||||
"source": "url",
|
"source": "url",
|
||||||
"url": "https://gitea.jsc.idv.tw/plugins/gitea.git"
|
"url": "https://gitea.jsc.idv.tw/plugins/gitea.git"
|
||||||
}
|
},
|
||||||
|
"description": "Gitea API 工具、Wiki 讀寫與存取庫批次同步"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "jsc-hooks",
|
"name": "jsc-hooks",
|
||||||
"source": {
|
"source": {
|
||||||
"source": "url",
|
"source": "url",
|
||||||
"url": "https://gitea.jsc.idv.tw/plugins/hooks.git"
|
"url": "https://gitea.jsc.idv.tw/plugins/hooks.git"
|
||||||
}
|
},
|
||||||
|
"description": "跨 CLI hooks:STE100 語言強制、工時計時、技能用量記錄"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "jsc-log",
|
"name": "jsc-log",
|
||||||
"source": {
|
"source": {
|
||||||
"source": "url",
|
"source": "url",
|
||||||
"url": "https://gitea.jsc.idv.tw/plugins/log.git"
|
"url": "https://gitea.jsc.idv.tw/plugins/log.git"
|
||||||
}
|
},
|
||||||
|
"description": "工作日誌(LOG_* wiki 頁)與技能使用統計"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "jsc-meta",
|
"name": "jsc-meta",
|
||||||
"source": {
|
"source": {
|
||||||
"source": "url",
|
"source": "url",
|
||||||
"url": "https://gitea.jsc.idv.tw/plugins/meta.git"
|
"url": "https://gitea.jsc.idv.tw/plugins/meta.git"
|
||||||
}
|
},
|
||||||
|
"description": "技能組自我管理:新建、更新、刪除技能與技能準則"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "jsc-pkg",
|
"name": "jsc-pkg",
|
||||||
"source": {
|
"source": {
|
||||||
"source": "url",
|
"source": "url",
|
||||||
"url": "https://gitea.jsc.idv.tw/plugins/pkg.git"
|
"url": "https://gitea.jsc.idv.tw/plugins/pkg.git"
|
||||||
}
|
},
|
||||||
|
"description": "套件批次更新(nodejs/python/dotnet),失敗還原"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "jsc-review",
|
"name": "jsc-review",
|
||||||
"source": {
|
"source": {
|
||||||
"source": "url",
|
"source": "url",
|
||||||
"url": "https://gitea.jsc.idv.tw/plugins/review.git"
|
"url": "https://gitea.jsc.idv.tw/plugins/review.git"
|
||||||
}
|
},
|
||||||
|
"description": "程式碼審查:Refactoring 壞味道六組 + 註解規範 + 淺模組"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "jsc-sdlc",
|
"name": "jsc-sdlc",
|
||||||
"source": {
|
"source": {
|
||||||
"source": "url",
|
"source": "url",
|
||||||
"url": "https://gitea.jsc.idv.tw/plugins/sdlc.git"
|
"url": "https://gitea.jsc.idv.tw/plugins/sdlc.git"
|
||||||
}
|
},
|
||||||
|
"description": "開發生命週期:規劃/分析/實作/維護(wiki 追蹤)"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,7 +59,7 @@
|
|||||||
"source": "url",
|
"source": "url",
|
||||||
"url": "https://gitea.jsc.idv.tw/plugins/meta.git"
|
"url": "https://gitea.jsc.idv.tw/plugins/meta.git"
|
||||||
},
|
},
|
||||||
"description": "技能組自我管理:新建/更新/刪除技能與技能準則"
|
"description": "技能組自我管理:新建、更新、刪除技能與技能準則"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "jsc-pkg",
|
"name": "jsc-pkg",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "jsc-cli",
|
"name": "jsc-cli",
|
||||||
"version": "0.0.2",
|
"version": "0.0.3",
|
||||||
"description": "CLI 偵測、模型能力標籤與技能庫批次部署",
|
"description": "CLI 偵測、模型能力標籤與技能庫批次部署",
|
||||||
"skills": "./skills",
|
"skills": "./skills",
|
||||||
"author": {
|
"author": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "jsc-cli",
|
"name": "jsc-cli",
|
||||||
"version": "0.0.2",
|
"version": "0.0.3",
|
||||||
"description": "CLI 偵測、模型能力標籤與技能庫批次部署",
|
"description": "CLI 偵測、模型能力標籤與技能庫批次部署",
|
||||||
"skills": "./skills"
|
"skills": "./skills"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ Marketplace 統一為 `jsc`(https://gitea.jsc.idv.tw/plugins/jsc.git),安
|
|||||||
| 工具 | 用途 |
|
| 工具 | 用途 |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| `tools/detect-clis.sh` | 列出已安裝的 AI CLI 與執行檔路徑(TSV:name / path / version;kiro 的執行檔為 `kiro-cli`) |
|
| `tools/detect-clis.sh` | 列出已安裝的 AI CLI 與執行檔路徑(TSV:name / path / version;kiro 的執行檔為 `kiro-cli`) |
|
||||||
| `tools/model-config.sh` | 解析 SDLC 各階段的指定模型鏈(`get {stage}`、`list`);專案 `.jsc/models` 優先於 `$JSC_HOME/models.conf`,格式見 `references/model-tags.md` |
|
| `tools/model-config.sh` | 解析 SDLC 各階段的指定模型鏈(`get {stage}`、`list`、`resolve {stage}` 印出目前 CLI 可用的第一個模型);專案 `.jsc/models` 優先於 `$JSC_HOME/models.conf`,格式見 `references/model-tags.md` |
|
||||||
|
|
||||||
## Skills 目錄
|
## Skills 目錄
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "jsc-cli",
|
"name": "jsc-cli",
|
||||||
"version": "0.0.2",
|
"version": "0.0.3",
|
||||||
"description": "CLI 偵測、模型能力標籤與技能庫批次部署",
|
"description": "CLI 偵測、模型能力標籤與技能庫批次部署",
|
||||||
"skills": "./skills/"
|
"skills": "./skills/"
|
||||||
}
|
}
|
||||||
|
|||||||
+39
-1
@@ -9,6 +9,7 @@
|
|||||||
# 用法:
|
# 用法:
|
||||||
# model-config.sh get {stage} 印出該階段解析後的模型鏈(逗號分隔);未設定不印。兩種情況都 exit 0。
|
# model-config.sh get {stage} 印出該階段解析後的模型鏈(逗號分隔);未設定不印。兩種情況都 exit 0。
|
||||||
# model-config.sh list 每階段一行:stage<TAB>chain<TAB>source(project 或 global);未設定的 chain 與 source 印「-」。
|
# model-config.sh list 每階段一行:stage<TAB>chain<TAB>source(project 或 global);未設定的 chain 與 source 印「-」。
|
||||||
|
# model-config.sh resolve {stage} 印出該階段「目前 CLI 可用的第一個模型」單一名稱;鏈為空或無法判定時不印,exit 0。
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
JSC_HOME="${JSC_HOME:-$HOME/.jsc}"
|
JSC_HOME="${JSC_HOME:-$HOME/.jsc}"
|
||||||
@@ -52,8 +53,36 @@ resolve() { # $1=階段
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 判斷目前是哪個 CLI 在跑(盡量而為,非必要)。
|
||||||
|
# 依 CLI 官方常見環境變數判斷;偵測不到就回傳 unknown。
|
||||||
|
current_cli() {
|
||||||
|
[ -n "${CLAUDECODE:-}" ] && { echo claude; return 0; }
|
||||||
|
[ -n "${CODEX_SANDBOX:-}${CODEX_HOME:-}" ] && { echo codex; return 0; }
|
||||||
|
[ -n "${COPILOT_AGENT:-}" ] && { echo copilot; return 0; }
|
||||||
|
[ -n "${ANTIGRAVITY_SESSION:-}" ] && { echo antigravity; return 0; }
|
||||||
|
[ -n "${KIRO_SESSION:-}" ] && { echo kiro; return 0; }
|
||||||
|
echo unknown
|
||||||
|
}
|
||||||
|
|
||||||
|
# resolve 子指令:印出「目前 CLI 可用的第一個模型」單一名稱。
|
||||||
|
# 簡化說明:這個 repo 目前沒有「列出某 CLI 實際安裝/可用模型」的 shell 級機制
|
||||||
|
# ——現有的 skills/models 是靠 sub agent 讀各 CLI 的設定檔(~/.claude/settings.json、
|
||||||
|
# ~/.codex/config.toml 等),屬於 LLM 才能做的判讀,沒辦法在這支 POSIX sh 腳本裡重現。
|
||||||
|
# 因此這裡只用 current_cli() 抓到的「目前 CLI 名稱」這個既有訊號做記錄,
|
||||||
|
# 實際判斷可用性一律簡化為「直接取模型鏈的第一個模型」,不逐一檢查該模型是否真的能用。
|
||||||
|
# 之後若要做到依 CLI 實際可用模型過濾,可以在這裡比對 current_cli 的結果與
|
||||||
|
# references/model-tags.md/detect-clis.sh 的輸出,逐一嘗試鏈上模型直到找到可用的。
|
||||||
|
resolve_first_usable() { # $1=階段
|
||||||
|
chain=$(resolve "$1" | cut -f1)
|
||||||
|
[ -n "$chain" ] || return 0
|
||||||
|
cli=$(current_cli)
|
||||||
|
: "目前偵測到的 CLI:$cli(本版本尚未用來篩選模型,見上方簡化說明)"
|
||||||
|
printf '%s\n' "$chain" | cut -d, -f1
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo "用法:model-config.sh get {plan|analyze|implement|maintain} | list" >&2
|
echo "用法:model-config.sh get {plan|analyze|implement|maintain} | list | resolve {plan|analyze|implement|maintain}" >&2
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,6 +96,15 @@ case "${1:-}" in
|
|||||||
resolve "$stage" | cut -f1
|
resolve "$stage" | cut -f1
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
|
resolve)
|
||||||
|
stage="${2:-}"
|
||||||
|
case " $STAGES " in
|
||||||
|
*" $stage "*) ;;
|
||||||
|
*) usage ;;
|
||||||
|
esac
|
||||||
|
resolve_first_usable "$stage"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
list)
|
list)
|
||||||
for stage in $STAGES; do
|
for stage in $STAGES; do
|
||||||
line=$(resolve "$stage")
|
line=$(resolve "$stage")
|
||||||
|
|||||||
Reference in New Issue
Block a user