Merge pull request 'chore(code): sync develop to master' (#17) from develop into master
Reviewed-on: #17 Reviewed-by: 系統管理員 <1+admin@noreply.localhost>
This commit was merged in pull request #17.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jsc-code",
|
||||
"version": "0.0.1",
|
||||
"version": "0.0.2",
|
||||
"description": "JSC 程式碼工作流 plugin(Claude Code / Codex / Antigravity / OpenCode),提供 Gitea AI review findings 修復/PR 流程、Gitea 議題 TODO 彙整與逐項實作、C# / .NET NuGet 套件更新、Gitea 專案批次同步,以及 action / Dockerfile 標準化流程;於 Claude Code 以 /jsc-code: 前綴呼叫。",
|
||||
"skills": "./skills",
|
||||
"author": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jsc-code",
|
||||
"version": "0.0.1",
|
||||
"version": "0.0.2",
|
||||
"description": "JSC 程式碼工作流 plugin,提供 Gitea AI review findings 修復/PR 流程、Gitea 議題 TODO 彙整與逐項實作、C# / .NET NuGet 套件更新、Gitea 專案批次同步,以及 action / Dockerfile 標準化流程。",
|
||||
"skills": "./skills"
|
||||
}
|
||||
|
||||
@@ -127,13 +127,13 @@ OpenCode 會讀 `~/.config/opencode/skills/`(也會讀 `~/.claude/skills/`、`
|
||||
|
||||
```bash
|
||||
# 安裝
|
||||
git clone https://gitea.jsc.idv.tw/plugins/code.git ~/jsc-plugin
|
||||
git clone https://gitea.jsc.idv.tw/plugins/code.git ~/plugins/code
|
||||
mkdir -p ~/.config/opencode/skills
|
||||
cp -r ~/jsc-plugin/skills/* ~/.config/opencode/skills/
|
||||
cp -r ~/plugins/code/skills/* ~/.config/opencode/skills/
|
||||
|
||||
# 更新
|
||||
git -C ~/jsc-plugin pull
|
||||
cp -r ~/jsc-plugin/skills/* ~/.config/opencode/skills/
|
||||
git -C ~/plugins/code pull
|
||||
cp -r ~/plugins/code/skills/* ~/.config/opencode/skills/
|
||||
|
||||
# 移除
|
||||
rm -rf ~/.config/opencode/skills/{review-resolve,issues,nuget,sync,action-docker,action-composite,action-node,image}
|
||||
@@ -289,6 +289,6 @@ copilot plugin marketplace remove code
|
||||
6. 讓各助理更新:
|
||||
- Claude:`claude plugin update jsc-code@code`
|
||||
- Codex:`codex plugin marketplace upgrade code`
|
||||
- Antigravity:`git -C ~/jsc-plugin pull && agy plugin uninstall jsc-code && agy plugin install ~/jsc-plugin`
|
||||
- Antigravity:`git -C ~/plugins/code pull && agy plugin uninstall jsc-code && agy plugin install ~/plugins/code`
|
||||
- OpenCode:`git pull` 後重新複製 `skills/`
|
||||
- Copilot:`copilot plugin marketplace update code && copilot plugin update jsc-code@code`
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jsc-code",
|
||||
"version": "0.0.1",
|
||||
"version": "0.0.2",
|
||||
"description": "JSC 程式碼工作流 plugin,提供 Gitea AI review findings 修復/PR 流程、Gitea 議題 TODO 彙整與逐項實作、C# / .NET NuGet 套件更新、Gitea 專案批次同步,以及 action / Dockerfile 標準化流程;於 Antigravity 以 /jsc-code: 前綴呼叫。",
|
||||
"skills": "./skills/"
|
||||
}
|
||||
|
||||
@@ -17,28 +17,28 @@ argument-hint: "[--action-dir <action 根目錄>] [--manifest <action.yml 路徑
|
||||
|
||||
---
|
||||
|
||||
## 共用規範(generic plugin,必要前置)
|
||||
## 共用規範(shared plugin,必要前置)
|
||||
|
||||
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到(generic plugin 未安裝)時,先詢問使用者是否安裝 generic plugin(`https://gitea.jsc.idv.tw/plugins/generic.git`),使用者不安裝則直接中斷本 skill**,不得只憑下方一行摘要繼續執行:
|
||||
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到(shared plugin 未安裝)時,先詢問使用者是否安裝 shared plugin(`https://gitea.jsc.idv.tw/plugins/shared.git`),使用者不安裝則直接中斷本 skill**,不得只憑下方一行摘要繼續執行:
|
||||
|
||||
- `/jsc-generic:spec-output`:繁體中文(台灣用語)、UTF-8(不含 BOM)無亂碼。
|
||||
- `/jsc-generic:spec-execution`:自動執行原則(必要決策才中斷)、不臆測/需人工確認、不擴及無關檔案。
|
||||
- `/jsc-generic:spec-git-safety`:不破壞既有工作(絕不 `reset --hard`/`clean`)、`git mv` 保留歷史。
|
||||
- `/jsc-generic:spec-action-params`:action 參數來源優先序(context → 經同意新增 `inputs`)、`secrets`/`vars` 一律視為不可用。
|
||||
- `/jsc-generic:spec-time-log`:更新時間 Asia/Taipei `yyyy/MM/dd HH:mm:ss`、完成後統一同步時間戳。
|
||||
- `/jsc-generic:spec-doc-funcs-handoff`:最終階段完整執行 `/jsc-doc:funcs` 的標準流程。
|
||||
- `/jsc-shared:spec-output`:繁體中文(台灣用語)、UTF-8(不含 BOM)無亂碼。
|
||||
- `/jsc-shared:spec-execution`:自動執行原則(必要決策才中斷)、不臆測/需人工確認、不擴及無關檔案。
|
||||
- `/jsc-shared:spec-git-safety`:不破壞既有工作(絕不 `reset --hard`/`clean`)、`git mv` 保留歷史。
|
||||
- `/jsc-shared:spec-action-params`:action 參數來源優先序(context → 經同意新增 `inputs`)、`secrets`/`vars` 一律視為不可用。
|
||||
- `/jsc-shared:spec-time-log`:更新時間 Asia/Taipei `yyyy/MM/dd HH:mm:ss`、完成後統一同步時間戳。
|
||||
- `/jsc-shared:spec-doc-funcs-handoff`:最終階段完整執行 `/jsc-doc:funcs` 的標準流程。
|
||||
|
||||
本 skill 特有補充:
|
||||
|
||||
- **一定會中斷詢問的點**:階段 B 主 action「非 composite 需對齊」時(破壞性,須先確認),以及階段 D 由 `/jsc-doc:funcs` 自身的「如何實作」詢問。
|
||||
- **保留行為**:對齊 composite 與注入橫幅 step 只「補強」既有流程,不得擅自改變既有 `steps` 的執行順序、輸入(`inputs`)/輸出(`outputs`)契約或副作用;任何無法可靠等價推論的改動一律不做,並以註解或回報標註「需人工確認」。新增 `input` 僅限依 `/jsc-generic:spec-action-params` 經使用者同意後為之。
|
||||
- **保留行為**:對齊 composite 與注入橫幅 step 只「補強」既有流程,不得擅自改變既有 `steps` 的執行順序、輸入(`inputs`)/輸出(`outputs`)契約或副作用;任何無法可靠等價推論的改動一律不做,並以註解或回報標註「需人工確認」。新增 `input` 僅限依 `/jsc-shared:spec-action-params` 經使用者同意後為之。
|
||||
- **本 skill 只動**:action 專案根目錄內的 `action.yml`/`action.yaml`、其 `steps` 直接引用的內嵌腳本(如 `*.sh`/`*.ps1`),以及階段 D 由 funcs 流程處理的目標。
|
||||
|
||||
---
|
||||
|
||||
## 參數來源優先序(開發中需要新參數時)
|
||||
|
||||
從零建立(A1a)、對齊 composite(階段 B)、注入橫幅 step(階段 C)或補強被引用腳本的過程中,若需要新的參數值,一律依 `/jsc-generic:spec-action-params` 的優先序處理:composite 的 `runs.steps` 內優先取 `${{ gitea.* }}`/`${{ github.* }}` context(建議寫 `github.*` 以相容兩邊;`run` 腳本內可改讀 `$GITHUB_*` 環境變數),取不到才以 `AskUserQuestion` 經使用者同意新增 `inputs`;`secrets`/`vars` 一律視為不可用,需要時宣告為 `input` 由呼叫端 workflow 傳入(範例見該 spec)。
|
||||
從零建立(A1a)、對齊 composite(階段 B)、注入橫幅 step(階段 C)或補強被引用腳本的過程中,若需要新的參數值,一律依 `/jsc-shared:spec-action-params` 的優先序處理:composite 的 `runs.steps` 內優先取 `${{ gitea.* }}`/`${{ github.* }}` context(建議寫 `github.*` 以相容兩邊;`run` 腳本內可改讀 `$GITHUB_*` 環境變數),取不到才以 `AskUserQuestion` 經使用者同意新增 `inputs`;`secrets`/`vars` 一律視為不可用,需要時宣告為 `input` 由呼叫端 workflow 傳入(範例見該 spec)。
|
||||
|
||||
---
|
||||
|
||||
@@ -142,7 +142,7 @@ runs:
|
||||
|
||||
在 `runs.steps` **最前面**插入(或更新)一個輸出橫幅的 step,讓 composite action 一啟動就**輸出 action 名稱、用途、更新時間**;並於 `action.yml` 開頭補用途/更新時間註解區塊。
|
||||
|
||||
- **更新時間**依 `/jsc-generic:spec-time-log`(Asia/Taipei、固定 `yyyy/MM/dd HH:mm:ss`、寫成檔內固定字串)。本階段先寫入暫定時間戳,**階段 D 完成後會統一同步各處時間戳**(見階段 D)。
|
||||
- **更新時間**依 `/jsc-shared:spec-time-log`(Asia/Taipei、固定 `yyyy/MM/dd HH:mm:ss`、寫成檔內固定字串)。本階段先寫入暫定時間戳,**階段 D 完成後會統一同步各處時間戳**(見階段 D)。
|
||||
- 名稱/用途取自階段 A2 的 `action.yml`(缺漏時以「(未提供)」標示)。
|
||||
- 橫幅 step 須有可辨識的 `name`(如 `顯示 action 資訊`)與 `shell: bash`;其後緊接既有/對齊後的 steps,**不更動既有 steps**。
|
||||
- 若已存在本 skill 先前插入的橫幅 step(依 `name` 辨識),則**更新**其內容與更新時間,不重複插入。
|
||||
@@ -178,7 +178,7 @@ runs:
|
||||
|
||||
## 階段 D:完整執行 /jsc-doc:funcs 處理流程
|
||||
|
||||
標準化完成後,以階段 A1 的 action 根目錄為目標,依 `/jsc-generic:spec-doc-funcs-handoff` 對**整個 action 專案**完整執行 `/jsc-doc:funcs` 流程(前置可用性檢查、完整流程、由使用者裁示實作方式、重建 README)。完成後依該 spec **統一時間戳**:回頭同步橫幅 step 內文、`action.yml` 開頭註解區塊與 README 的更新時間,確保各處一致。
|
||||
標準化完成後,以階段 A1 的 action 根目錄為目標,依 `/jsc-shared:spec-doc-funcs-handoff` 對**整個 action 專案**完整執行 `/jsc-doc:funcs` 流程(前置可用性檢查、完整流程、由使用者裁示實作方式、重建 README)。完成後依該 spec **統一時間戳**:回頭同步橫幅 step 內文、`action.yml` 開頭註解區塊與 README 的更新時間,確保各處一致。
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -18,29 +18,29 @@ argument-hint: "[--action-dir <action 根目錄>] [--node-version <node tag>] [-
|
||||
|
||||
---
|
||||
|
||||
## 共用規範(generic plugin,必要前置)
|
||||
## 共用規範(shared plugin,必要前置)
|
||||
|
||||
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到(generic plugin 未安裝)時,先詢問使用者是否安裝 generic plugin(`https://gitea.jsc.idv.tw/plugins/generic.git`),使用者不安裝則直接中斷本 skill**,不得只憑下方一行摘要繼續執行:
|
||||
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到(shared plugin 未安裝)時,先詢問使用者是否安裝 shared plugin(`https://gitea.jsc.idv.tw/plugins/shared.git`),使用者不安裝則直接中斷本 skill**,不得只憑下方一行摘要繼續執行:
|
||||
|
||||
- `/jsc-generic:spec-output`:繁體中文(台灣用語)、UTF-8(不含 BOM)無亂碼。
|
||||
- `/jsc-generic:spec-execution`:自動執行原則(必要決策才中斷)、不臆測/需人工確認、不擴及無關檔案。
|
||||
- `/jsc-generic:spec-git-safety`:不破壞既有工作(絕不 `reset --hard`/`clean`)、`git mv` 保留歷史。
|
||||
- `/jsc-generic:spec-action-params`:action 參數來源優先序(環境變數 → 經同意新增 `inputs`)、`secrets`/`vars` 一律視為不可用。
|
||||
- `/jsc-generic:spec-time-log`:更新時間 Asia/Taipei `yyyy/MM/dd HH:mm:ss`、完成後統一同步時間戳。
|
||||
- `/jsc-generic:spec-dockerfile`:Dockerfile 六步流程、多階段建置、固定版號、自我檢查。
|
||||
- `/jsc-generic:spec-doc-funcs-handoff`:最終階段完整執行 `/jsc-doc:funcs` 的標準流程。
|
||||
- `/jsc-shared:spec-output`:繁體中文(台灣用語)、UTF-8(不含 BOM)無亂碼。
|
||||
- `/jsc-shared:spec-execution`:自動執行原則(必要決策才中斷)、不臆測/需人工確認、不擴及無關檔案。
|
||||
- `/jsc-shared:spec-git-safety`:不破壞既有工作(絕不 `reset --hard`/`clean`)、`git mv` 保留歷史。
|
||||
- `/jsc-shared:spec-action-params`:action 參數來源優先序(環境變數 → 經同意新增 `inputs`)、`secrets`/`vars` 一律視為不可用。
|
||||
- `/jsc-shared:spec-time-log`:更新時間 Asia/Taipei `yyyy/MM/dd HH:mm:ss`、完成後統一同步時間戳。
|
||||
- `/jsc-shared:spec-dockerfile`:Dockerfile 六步流程、多階段建置、固定版號、自我檢查。
|
||||
- `/jsc-shared:spec-doc-funcs-handoff`:最終階段完整執行 `/jsc-doc:funcs` 的標準流程。
|
||||
|
||||
本 skill 特有補充:
|
||||
|
||||
- **一定會中斷詢問的點**:階段 B 主程式「非 Node 需改寫」時(破壞性,須先確認),以及階段 E 由 `/jsc-doc:funcs` 自身的「如何實作」詢問。
|
||||
- **保留行為**:Node 化只「翻譯」既有邏輯,不得擅自改變對外行為、輸入輸出契約或副作用;任何無法可靠等價推論的改動一律不做,並以註解或回報標註「需人工確認」。新增 `input` 僅限依 `/jsc-generic:spec-action-params` 經使用者同意後為之。
|
||||
- **保留行為**:Node 化只「翻譯」既有邏輯,不得擅自改變對外行為、輸入輸出契約或副作用;任何無法可靠等價推論的改動一律不做,並以註解或回報標註「需人工確認」。新增 `input` 僅限依 `/jsc-shared:spec-action-params` 經使用者同意後為之。
|
||||
- **本 skill 只動**:action 專案根目錄內的主程式、主程式依賴鏈的 `.js`(搬移到 `src/`)、`package.json`、`action.yml`/`action.yaml`、`entrypoint.sh`、`Dockerfile`、`.dockerignore`,以及階段 E 由 funcs 流程處理的目標。
|
||||
|
||||
---
|
||||
|
||||
## 參數來源優先序(開發中需要新參數時)
|
||||
|
||||
從零建立(A1a)、主程式 Node 化(階段 B)、產生 `entrypoint.sh`(階段 C)或產生 `Dockerfile`(階段 D)的過程中,若需要新的參數值,一律依 `/jsc-generic:spec-action-params` 的優先序處理:Docker 容器 action 優先取 runner 注入的執行期環境變數(Node 主程式讀 `process.env.GITHUB_*`、`entrypoint.sh` 讀 `$GITHUB_*`;Gitea 亦提供 `GITEA_*` 同義變數,建議讀 `GITHUB_*` 以相容兩邊),取不到才以 `AskUserQuestion` 經使用者同意新增 `inputs`(容器內以 `INPUT_<大寫名稱>` 取用);`secrets`/`vars` 一律視為不可用,需要時宣告為 `input` 由呼叫端 workflow 傳入(範例見該 spec)。
|
||||
從零建立(A1a)、主程式 Node 化(階段 B)、產生 `entrypoint.sh`(階段 C)或產生 `Dockerfile`(階段 D)的過程中,若需要新的參數值,一律依 `/jsc-shared:spec-action-params` 的優先序處理:Docker 容器 action 優先取 runner 注入的執行期環境變數(Node 主程式讀 `process.env.GITHUB_*`、`entrypoint.sh` 讀 `$GITHUB_*`;Gitea 亦提供 `GITEA_*` 同義變數,建議讀 `GITHUB_*` 以相容兩邊),取不到才以 `AskUserQuestion` 經使用者同意新增 `inputs`(容器內以 `INPUT_<大寫名稱>` 取用);`secrets`/`vars` 一律視為不可用,需要時宣告為 `input` 由呼叫端 workflow 傳入(範例見該 spec)。
|
||||
|
||||
---
|
||||
|
||||
@@ -139,7 +139,7 @@ runs:
|
||||
|
||||
在 action 根目錄產生(或覆寫)`entrypoint.sh`:**啟動 node 主程式前,先輸出 action 名稱、用途、更新時間**。
|
||||
|
||||
- **更新時間**依 `/jsc-generic:spec-time-log`(Asia/Taipei、固定 `yyyy/MM/dd HH:mm:ss`、寫成檔內固定字串)。本階段先寫入暫定時間戳,**階段 E 完成後會統一同步各處時間戳**(見階段 E)。
|
||||
- **更新時間**依 `/jsc-shared:spec-time-log`(Asia/Taipei、固定 `yyyy/MM/dd HH:mm:ss`、寫成檔內固定字串)。本階段先寫入暫定時間戳,**階段 E 完成後會統一同步各處時間戳**(見階段 E)。
|
||||
- 名稱/用途取自階段 A2 的 `action.yml`。
|
||||
- 最後以 `exec node <主程式>`(如 `exec node /action/src/index.js "$@"`)啟動,讓 node 取代 shell 行程,正確傳遞訊號與 exit code;路徑須與階段 D 的 `Dockerfile` 落點一致。
|
||||
- **若階段 B 裁示「維持非 Node」**:橫幅照常輸出,最後改以 `exec <原直譯器> <主程式>` 啟動(如 `exec python3 /action/src/main.py "$@"`、`exec sh /action/src/main.sh "$@"`)。
|
||||
@@ -190,7 +190,7 @@ exec node /action/src/index.js "$@"
|
||||
5. **縮小映像檔**:多階段建置,runtime 改用 slim 基底,只 `COPY --from=build` 帶入主程式執行**真正需要**的產物——有 build 產物時帶入 `dist/` 與 production `node_modules`(`npm prune --omit=dev` 或重裝 production 相依),純 JS 無 build 時帶入 `src/` 與 production `node_modules`;若 D0 判定 runtime 需要某些 OS 執行檔,於 runtime 階段一併安裝(slim 基底可能不含)。不要把 build 階段的 dev 相依與快取帶進最終映像;**`COPY --from=build` 必須逐項明列路徑,不得整包 `COPY --from=build /action /action`**(整包搬等於沒有縮小)。
|
||||
6. **設定入口**:`ENTRYPOINT` 指向 `entrypoint.sh`,其內 `node` 路徑為 D0 的入口檔。
|
||||
|
||||
base image 版本依 `/jsc-generic:spec-dockerfile`(固定 major tag、不用 `latest`):**預設使用產生當下的最新 LTS major 固定 tag**(如 build 基底 `node:22`、runtime 基底 `node:22-slim`),可查詢 Docker Hub(`https://hub.docker.com/_/node`)確認當前 LTS 版號;帶 `--node-version <tag>` 時改用 `node:<tag>` 與 `node:<tag>-slim`。
|
||||
base image 版本依 `/jsc-shared:spec-dockerfile`(固定 major tag、不用 `latest`):**預設使用產生當下的最新 LTS major 固定 tag**(如 build 基底 `node:22`、runtime 基底 `node:22-slim`),可查詢 Docker Hub(`https://hub.docker.com/_/node`)確認當前 LTS 版號;帶 `--node-version <tag>` 時改用 `node:<tag>` 與 `node:<tag>-slim`。
|
||||
|
||||
下列為**最簡基準骨架**(純 JS、無 build、無 OS 相依的情況);實際內容須依 D0 盤點調整,第 4 步建置、第 2/5 步 OS 套件等視主程式需要增刪:
|
||||
|
||||
@@ -231,7 +231,7 @@ ENTRYPOINT ["/action/entrypoint.sh"]
|
||||
|
||||
- **依主程式實作**:上面只是基準骨架。若主程式是 TypeScript/需打包,第 4 步要加 `npm run build`、第 5 步只帶 `dist/` 與 production 相依;若主程式會 spawn 外部執行檔或用原生模組,第 2/5 步要補對應 OS 套件;用不到的步驟內容不要硬塞。
|
||||
- **若階段 B 裁示「維持非 Node」**:base image 改用對應語言官方映像(如 `python:3-slim`),第 2 步改安裝該生態相依(如 `pip install -r requirements.txt`),其餘六步結構不變;`ENTRYPOINT` 仍指向 `entrypoint.sh`(其內 `exec` 原直譯器,見階段 C)。
|
||||
- **版號對齊**:依 `/jsc-generic:spec-dockerfile`(runtime 與 build 版號一致、以獨立 runtime ARG 帶入不用 `${VERSION}-slim` 組裝、`-alpine`/`-slim` 變體沿用同一 tag、使用者要求 `latest` 時 runtime 用 `node:slim`)。
|
||||
- **版號對齊**:依 `/jsc-shared:spec-dockerfile`(runtime 與 build 版號一致、以獨立 runtime ARG 帶入不用 `${VERSION}-slim` 組裝、`-alpine`/`-slim` 變體沿用同一 tag、使用者要求 `latest` 時 runtime 用 `node:slim`)。
|
||||
- **自我檢查**:`entrypoint.sh` 的 `node <主程式>` 路徑(如 `/action/src/index.js`)需與 `Dockerfile` 的 `WORKDIR`/`COPY` 落點一致,避免容器啟動時找不到主程式;`action.yml` 的 `runs.entrypoint` 若存在,必須是**絕對路徑**且與 `Dockerfile` 落點一致(預設不設,讓 Dockerfile 的 `ENTRYPOINT` 生效)。
|
||||
- 此檔的用途/更新日期註解與逐行註解,同樣於階段 E 由 funcs 指令檔流程統一補齊。
|
||||
|
||||
@@ -239,7 +239,7 @@ ENTRYPOINT ["/action/entrypoint.sh"]
|
||||
|
||||
## 階段 E:完整執行 /jsc-doc:funcs 處理流程
|
||||
|
||||
容器化與 Node 化完成後,以階段 A1 的 action 根目錄為目標,依 `/jsc-generic:spec-doc-funcs-handoff` 對**整個 action 專案**完整執行 `/jsc-doc:funcs` 流程(前置可用性檢查、完整流程、由使用者裁示實作方式、重建 README;本次新增/變更的 `entrypoint.sh`、`Dockerfile` 與 `src/` 內 Node 主程式都會被涵蓋)。完成後依該 spec **統一時間戳**:回頭同步 `entrypoint.sh` 橫幅輸出與註解區塊、`Dockerfile` 註解區塊與 README 的更新時間,確保各處一致。
|
||||
容器化與 Node 化完成後,以階段 A1 的 action 根目錄為目標,依 `/jsc-shared:spec-doc-funcs-handoff` 對**整個 action 專案**完整執行 `/jsc-doc:funcs` 流程(前置可用性檢查、完整流程、由使用者裁示實作方式、重建 README;本次新增/變更的 `entrypoint.sh`、`Dockerfile` 與 `src/` 內 Node 主程式都會被涵蓋)。完成後依該 spec **統一時間戳**:回頭同步 `entrypoint.sh` 橫幅輸出與註解區塊、`Dockerfile` 註解區塊與 README 的更新時間,確保各處一致。
|
||||
|
||||
---
|
||||
|
||||
|
||||
+15
-15
@@ -18,21 +18,21 @@ argument-hint: "[--action-dir <action 根目錄>] [--node-version <node runtime
|
||||
|
||||
---
|
||||
|
||||
## 共用規範(generic plugin,必要前置)
|
||||
## 共用規範(shared plugin,必要前置)
|
||||
|
||||
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到(generic plugin 未安裝)時,先詢問使用者是否安裝 generic plugin(`https://gitea.jsc.idv.tw/plugins/generic.git`),使用者不安裝則直接中斷本 skill**,不得只憑下方一行摘要繼續執行:
|
||||
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到(shared plugin 未安裝)時,先詢問使用者是否安裝 shared plugin(`https://gitea.jsc.idv.tw/plugins/shared.git`),使用者不安裝則直接中斷本 skill**,不得只憑下方一行摘要繼續執行:
|
||||
|
||||
- `/jsc-generic:spec-output`:繁體中文(台灣用語)、UTF-8(不含 BOM)無亂碼。
|
||||
- `/jsc-generic:spec-execution`:自動執行原則(必要決策才中斷)、不臆測/需人工確認、不擴及無關檔案。
|
||||
- `/jsc-generic:spec-git-safety`:不破壞既有工作(絕不 `reset --hard`/`clean`)、`git mv` 保留歷史。
|
||||
- `/jsc-generic:spec-action-params`:action 參數來源優先序(環境變數 → 經同意新增 `inputs`)、`secrets`/`vars` 一律視為不可用。
|
||||
- `/jsc-generic:spec-time-log`:更新時間 Asia/Taipei `yyyy/MM/dd HH:mm:ss`、完成後統一同步時間戳。
|
||||
- `/jsc-generic:spec-doc-funcs-handoff`:最終階段完整執行 `/jsc-doc:funcs` 的標準流程。
|
||||
- `/jsc-shared:spec-output`:繁體中文(台灣用語)、UTF-8(不含 BOM)無亂碼。
|
||||
- `/jsc-shared:spec-execution`:自動執行原則(必要決策才中斷)、不臆測/需人工確認、不擴及無關檔案。
|
||||
- `/jsc-shared:spec-git-safety`:不破壞既有工作(絕不 `reset --hard`/`clean`)、`git mv` 保留歷史。
|
||||
- `/jsc-shared:spec-action-params`:action 參數來源優先序(環境變數 → 經同意新增 `inputs`)、`secrets`/`vars` 一律視為不可用。
|
||||
- `/jsc-shared:spec-time-log`:更新時間 Asia/Taipei `yyyy/MM/dd HH:mm:ss`、完成後統一同步時間戳。
|
||||
- `/jsc-shared:spec-doc-funcs-handoff`:最終階段完整執行 `/jsc-doc:funcs` 的標準流程。
|
||||
|
||||
本 skill 特有補充:
|
||||
|
||||
- **一定會中斷詢問的點**:階段 B 主程式「非 Node 需改寫」時(破壞性,須先確認),階段 D「新增 `@vercel/ncc` 等 build 相依」時(依 `/jsc-generic:spec-action-params` 經同意),以及階段 E 由 `/jsc-doc:funcs` 自身的「如何實作」詢問。
|
||||
- **保留行為**:Node 化只「翻譯」既有邏輯,不得擅自改變對外行為、輸入輸出契約或副作用;任何無法可靠等價推論的改動一律不做,並以註解或回報標註「需人工確認」。新增 `input` 僅限依 `/jsc-generic:spec-action-params` 經使用者同意後為之。
|
||||
- **一定會中斷詢問的點**:階段 B 主程式「非 Node 需改寫」時(破壞性,須先確認),階段 D「新增 `@vercel/ncc` 等 build 相依」時(依 `/jsc-shared:spec-action-params` 經同意),以及階段 E 由 `/jsc-doc:funcs` 自身的「如何實作」詢問。
|
||||
- **保留行為**:Node 化只「翻譯」既有邏輯,不得擅自改變對外行為、輸入輸出契約或副作用;任何無法可靠等價推論的改動一律不做,並以註解或回報標註「需人工確認」。新增 `input` 僅限依 `/jsc-shared:spec-action-params` 經使用者同意後為之。
|
||||
- **本 skill 只動**:action 專案根目錄內的主程式、主程式依賴鏈的 `.js`(搬移到 `src/`)、`package.json`(含 `scripts.build`)、`action.yml`/`action.yaml`、打包產物 `dist/`、`.gitignore`(確保 `dist/` 不被忽略),以及階段 E 由 funcs 流程處理的目標。**不產生** `Dockerfile`/`entrypoint.sh`(那是 action-docker 的範疇)。
|
||||
|
||||
---
|
||||
@@ -59,7 +59,7 @@ node action 相對 docker/composite 的**關鍵差異**(全程據此處理
|
||||
|
||||
## 參數來源優先序(開發中需要新參數時)
|
||||
|
||||
從零建立(A1a)、主程式 Node 化(階段 B)、對齊 `action.yml`(階段 C)或打包(階段 D)的過程中,若需要新的參數值,一律依 `/jsc-generic:spec-action-params` 的優先序處理:node action 主程式優先取 runner 注入的執行期環境變數(`process.env.GITHUB_*`;Gitea 亦提供 `GITEA_*` 同義變數,建議讀 `GITHUB_*` 以相容兩邊),既有 `inputs` 以 `process.env.INPUT_<大寫名稱>`(或 `core.getInput`)取用,取不到才以 `AskUserQuestion` 經使用者同意新增 `inputs`(由呼叫端 workflow 以 `with:` 傳入);`secrets`/`vars` 一律視為不可用,需要時宣告為 `input` 由呼叫端傳入(範例見該 spec)。
|
||||
從零建立(A1a)、主程式 Node 化(階段 B)、對齊 `action.yml`(階段 C)或打包(階段 D)的過程中,若需要新的參數值,一律依 `/jsc-shared:spec-action-params` 的優先序處理:node action 主程式優先取 runner 注入的執行期環境變數(`process.env.GITHUB_*`;Gitea 亦提供 `GITEA_*` 同義變數,建議讀 `GITHUB_*` 以相容兩邊),既有 `inputs` 以 `process.env.INPUT_<大寫名稱>`(或 `core.getInput`)取用,取不到才以 `AskUserQuestion` 經使用者同意新增 `inputs`(由呼叫端 workflow 以 `with:` 傳入);`secrets`/`vars` 一律視為不可用,需要時宣告為 `input` 由呼叫端傳入(範例見該 spec)。
|
||||
|
||||
---
|
||||
|
||||
@@ -152,7 +152,7 @@ runs:
|
||||
main: 'src/index.js' # 有相依打包後於階段 D 改為 'dist/index.js'
|
||||
```
|
||||
|
||||
- **`using` 版本**依 `/jsc-generic:spec-time-log` 之外另遵循版本規則:**預設 `node24`**(現行最新、本生態範本採用),帶 `--node-version` 時改用指定值。`node24` 需較新的 act runner;runner 太舊會報 `The runs.using key in action.yml must be one of: [composite docker node12 node16 node20 go], got node24`——此時**升級 act runner**,或(回報後)暫時退回 `node20`。**不用**沒有意義的 `latest`。
|
||||
- **`using` 版本**依 `/jsc-shared:spec-time-log` 之外另遵循版本規則:**預設 `node24`**(現行最新、本生態範本採用),帶 `--node-version` 時改用指定值。`node24` 需較新的 act runner;runner 太舊會報 `The runs.using key in action.yml must be one of: [composite docker node12 node16 node20 go], got node24`——此時**升級 act runner**,或(回報後)暫時退回 `node20`。**不用**沒有意義的 `latest`。
|
||||
- **`outputs` 去 `value`**:node action 的 `outputs.<name>` 只保留 `description`,**移除**任何 `value: ${{ steps.* }}`(那是 composite 寫法);實際值於執行時由程式寫入 `$GITHUB_OUTPUT`。
|
||||
- **`inputs` 契約保留**:不更動既有 `inputs` 名稱/`required`/`default`;主程式以 `process.env.INPUT_<大寫名稱>`(或 `core.getInput`)取用,runner 會自動注入,**不需**像 composite 手動映射 `env:`。
|
||||
- 原本是 **docker/composite** action 改為 node 時,一併移除只服務原型態的欄位(`image`/`entrypoint`/`steps`),並在回報標示型態已變更;無法可靠等價轉換處以 `# 需人工確認` 標註、不臆測。
|
||||
@@ -162,7 +162,7 @@ runs:
|
||||
|
||||
node action 沒有 `entrypoint.sh`,橫幅改由**主程式 JS 最前面輸出**。在 `src/index.js`(或階段 B 決定的入口)最上方,於任何其他邏輯**之前**插入(或更新)橫幅輸出:
|
||||
|
||||
- **更新時間**依 `/jsc-generic:spec-time-log`(Asia/Taipei、固定 `yyyy/MM/dd HH:mm:ss`、寫成檔內固定字串)。本階段先寫入暫定時間戳,**階段 E 完成後會統一同步各處時間戳**(見階段 E)。
|
||||
- **更新時間**依 `/jsc-shared:spec-time-log`(Asia/Taipei、固定 `yyyy/MM/dd HH:mm:ss`、寫成檔內固定字串)。本階段先寫入暫定時間戳,**階段 E 完成後會統一同步各處時間戳**(見階段 E)。
|
||||
- 名稱/用途取自階段 A2 的 `action.yml`(缺漏時以「(未提供)」標示)。
|
||||
- 若已存在本 skill 先前插入的橫幅(依可辨識註解標記),則**更新**其內容與時間戳,不重複插入。
|
||||
|
||||
@@ -202,7 +202,7 @@ node action 的 runner **不會自動 `npm install`**,因此相依必須隨 re
|
||||
|
||||
打包能把原始碼與相依編成單一檔,避免 commit 龐大的 `node_modules`:
|
||||
|
||||
1. 新增 build 相依(依 `/jsc-generic:spec-action-params`/本 skill「一定會中斷詢問的點」,屬新增相依,先向使用者確認):`npm i -D @vercel/ncc`,並確保 `package.json` 有:
|
||||
1. 新增 build 相依(依 `/jsc-shared:spec-action-params`/本 skill「一定會中斷詢問的點」,屬新增相依,先向使用者確認):`npm i -D @vercel/ncc`,並確保 `package.json` 有:
|
||||
```json
|
||||
"scripts": { "build": "ncc build src/index.js -o dist" }
|
||||
```
|
||||
@@ -223,7 +223,7 @@ node action 的 runner **不會自動 `npm install`**,因此相依必須隨 re
|
||||
|
||||
## 階段 E:完整執行 /jsc-doc:funcs 處理流程
|
||||
|
||||
標準化與打包完成後,以階段 A1 的 action 根目錄為目標,依 `/jsc-generic:spec-doc-funcs-handoff` 對**整個 action 專案**完整執行 `/jsc-doc:funcs` 流程(前置可用性檢查、完整流程、由使用者裁示實作方式、重建 README;本次新增/變更的 `src/` 內 Node 主程式、`action.yml`、`package.json` 都會被涵蓋)。完成後依該 spec **統一時間戳**:回頭同步主程式橫幅輸出與註解區塊、`action.yml` 開頭註解區塊與 README 的更新時間,確保各處一致。
|
||||
標準化與打包完成後,以階段 A1 的 action 根目錄為目標,依 `/jsc-shared:spec-doc-funcs-handoff` 對**整個 action 專案**完整執行 `/jsc-doc:funcs` 流程(前置可用性檢查、完整流程、由使用者裁示實作方式、重建 README;本次新增/變更的 `src/` 內 Node 主程式、`action.yml`、`package.json` 都會被涵蓋)。完成後依該 spec **統一時間戳**:回頭同步主程式橫幅輸出與註解區塊、`action.yml` 開頭註解區塊與 README 的更新時間,確保各處一致。
|
||||
|
||||
---
|
||||
|
||||
|
||||
+11
-11
@@ -16,15 +16,15 @@ argument-hint: "[--project-dir <專案根目錄>] [--dockerfile <Dockerfile 路
|
||||
|
||||
---
|
||||
|
||||
## 共用規範(generic plugin,必要前置)
|
||||
## 共用規範(shared plugin,必要前置)
|
||||
|
||||
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到(generic plugin 未安裝)時,先詢問使用者是否安裝 generic plugin(`https://gitea.jsc.idv.tw/plugins/generic.git`),使用者不安裝則直接中斷本 skill**,不得只憑下方一行摘要繼續執行:
|
||||
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到(shared plugin 未安裝)時,先詢問使用者是否安裝 shared plugin(`https://gitea.jsc.idv.tw/plugins/shared.git`),使用者不安裝則直接中斷本 skill**,不得只憑下方一行摘要繼續執行:
|
||||
|
||||
- `/jsc-generic:spec-output`:繁體中文(台灣用語)、UTF-8(不含 BOM)無亂碼。
|
||||
- `/jsc-generic:spec-execution`:自動執行原則(必要決策才中斷)、不臆測/需人工確認、不擴及無關檔案。
|
||||
- `/jsc-generic:spec-git-safety`:不破壞既有工作(絕不 `reset --hard`/`clean`)。
|
||||
- `/jsc-generic:spec-dockerfile`:Dockerfile 六步流程、多階段建置、對外契約不動、自我檢查。
|
||||
- `/jsc-generic:spec-doc-funcs-handoff`:最終階段完整執行 `/jsc-doc:funcs` 的標準流程。
|
||||
- `/jsc-shared:spec-output`:繁體中文(台灣用語)、UTF-8(不含 BOM)無亂碼。
|
||||
- `/jsc-shared:spec-execution`:自動執行原則(必要決策才中斷)、不臆測/需人工確認、不擴及無關檔案。
|
||||
- `/jsc-shared:spec-git-safety`:不破壞既有工作(絕不 `reset --hard`/`clean`)。
|
||||
- `/jsc-shared:spec-dockerfile`:Dockerfile 六步流程、多階段建置、對外契約不動、自我檢查。
|
||||
- `/jsc-shared:spec-doc-funcs-handoff`:最終階段完整執行 `/jsc-doc:funcs` 的標準流程。
|
||||
|
||||
本 skill 特有補充:
|
||||
|
||||
@@ -76,7 +76,7 @@ argument-hint: "[--project-dir <專案根目錄>] [--dockerfile <Dockerfile 路
|
||||
|
||||
## 階段 B:整理 Dockerfile 為六步流程
|
||||
|
||||
在**保留建置行為**的前提下,把目標 `Dockerfile` 的指令重整/歸位為 `/jsc-generic:spec-dockerfile` 定義的**固定六步流程**(參數處理 → 安裝套件 → 複製檔案 → 執行程序 → 縮小映像檔 → 設定入口),並採**多階段建置**縮小最終映像;各步要點(ARG 集中檔首、相依描述先 `COPY`、同層清理快取、`COPY --from` 逐項明列、搬移 runtime 需要的 `ENV`/`WORKDIR`/`EXPOSE`/`USER`)依該 spec。
|
||||
在**保留建置行為**的前提下,把目標 `Dockerfile` 的指令重整/歸位為 `/jsc-shared:spec-dockerfile` 定義的**固定六步流程**(參數處理 → 安裝套件 → 複製檔案 → 執行程序 → 縮小映像檔 → 設定入口),並採**多階段建置**縮小最終映像;各步要點(ARG 集中檔首、相依描述先 `COPY`、同層清理快取、`COPY --from` 逐項明列、搬移 runtime 需要的 `ENV`/`WORKDIR`/`EXPOSE`/`USER`)依該 spec。
|
||||
|
||||
**重整原則(關鍵)**
|
||||
|
||||
@@ -84,7 +84,7 @@ argument-hint: "[--project-dir <專案根目錄>] [--dockerfile <Dockerfile 路
|
||||
- **已是多階段** → 將既有各階段對應到六步(build 階段涵蓋 1–4、runtime 階段涵蓋 5–6),補齊缺漏的快取最佳化與清理,不破壞既有 `--from` 依賴。
|
||||
- **單階段改多階段** → 僅在能可靠判斷 runtime 真正需要哪些產物時才做;無法可靠判斷時,**不臆測**,標 `# 需人工確認:runtime 需要的產物清單` 並回報,退回「最小重排+補註解」。
|
||||
- **多階段不適用** → 若該映像本質上無法受益於多階段(例如純資料映像、最終就是要完整建置環境),保留單階段,於步驟 5 以註解說明「此映像不適用多階段縮小」,其餘步驟仍依序歸位。
|
||||
- **對外契約不動**:依 `/jsc-generic:spec-dockerfile`(`ENTRYPOINT`/`CMD`/`EXPOSE`/`ENV`/`VOLUME`/`HEALTHCHECK`/`USER` 語意與原檔一致,只可調整位置與分層)。
|
||||
- **對外契約不動**:依 `/jsc-shared:spec-dockerfile`(`ENTRYPOINT`/`CMD`/`EXPOSE`/`ENV`/`VOLUME`/`HEALTHCHECK`/`USER` 語意與原檔一致,只可調整位置與分層)。
|
||||
- **`.dockerignore`**:若為了「複製檔案」步驟的正確性需要排除建置產物/`node_modules`/`.git`,可建立或補強 `.dockerignore`(僅新增排除項,不刪既有),並回報。
|
||||
|
||||
重整骨架(實際指令、base image、語言依階段 A 偵測結果填入;非 Node 專案請換成對應語言的安裝/建置指令與 runtime 基底):
|
||||
@@ -120,7 +120,7 @@ COPY --from=build /app/<artifacts> ./<artifacts>
|
||||
ENTRYPOINT [<entrypoint>]
|
||||
```
|
||||
|
||||
- **自我檢查**:依 `/jsc-generic:spec-dockerfile` 的自我檢查清單(跨階段 `ARG` 重新宣告、runtime 帶齊產物、對外契約一致、路徑一致)。
|
||||
- **自我檢查**:依 `/jsc-shared:spec-dockerfile` 的自我檢查清單(跨階段 `ARG` 重新宣告、runtime 帶齊產物、對外契約一致、路徑一致)。
|
||||
- 此檔的「用途/更新日期」開頭註解區塊與逐行註解,於階段 C 由 `/jsc-doc:funcs` 的指令檔流程統一補齊/覆寫為標準格式;本階段先確保**建置行為**正確、六步結構清楚即可。
|
||||
- **建置驗證**:若環境可執行 `docker build`,重整後做一次建置驗證(或至少 `docker build --check`/語法檢查)確認可建置;無法執行時明確說明原因並標註風險(階段 C funcs 第 11 步亦會做語法驗證)。
|
||||
|
||||
@@ -128,7 +128,7 @@ ENTRYPOINT [<entrypoint>]
|
||||
|
||||
## 階段 C:完整執行 /jsc-doc:funcs 處理流程
|
||||
|
||||
Dockerfile 六步整理完成後,以階段 A1 的專案根目錄為目標,依 `/jsc-generic:spec-doc-funcs-handoff` 對**整個專案**完整執行 `/jsc-doc:funcs` 流程(前置可用性檢查、完整流程、由使用者裁示實作方式、重建 README;本次整理的 `Dockerfile` 會被視為部署設定檔補齊標頭與逐行註解)。
|
||||
Dockerfile 六步整理完成後,以階段 A1 的專案根目錄為目標,依 `/jsc-shared:spec-doc-funcs-handoff` 對**整個專案**完整執行 `/jsc-doc:funcs` 流程(前置可用性檢查、完整流程、由使用者裁示實作方式、重建 README;本次整理的 `Dockerfile` 會被視為部署設定檔補齊標頭與逐行註解)。
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -21,15 +21,15 @@ argument-hint: "[--tool <tea|api>] [--repo <owner/repo>] [--issues <編號,以
|
||||
## 絕對準則(不可違反)
|
||||
|
||||
- **不建立任何草稿檔**:不寫 `.docs/`、不寫暫存檔、不用本機檔案傳遞中間結果。需求彙整、TODO 排序、實作進度、驗證結果等所有中間成果,一律留在**對話內容**,並透過 `tea` 或 Gitea API **保存到議題描述或議題留言**。唯一例外是階段 E 在議題範圍內對**目標 repo 原始碼**的正常程式修改。
|
||||
- **盡量使用表格或圖形**:依 `/jsc-generic:spec-output` — 面向使用者的輸出與寫入議題的內容(需求彙整、TODO 列表、進度回報),優先以 Markdown 表格與 Mermaid 圖呈現,忠實反映議題內容、不得杜撰。
|
||||
- **盡量使用表格或圖形**:依 `/jsc-shared:spec-output` — 面向使用者的輸出與寫入議題的內容(需求彙整、TODO 列表、進度回報),優先以 Markdown 表格與 Mermaid 圖呈現,忠實反映議題內容、不得杜撰。
|
||||
|
||||
## 共用規範(generic plugin,必要前置)
|
||||
## 共用規範(shared plugin,必要前置)
|
||||
|
||||
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到(generic plugin 未安裝)時,先詢問使用者是否安裝 generic plugin(`https://gitea.jsc.idv.tw/plugins/generic.git`),使用者不安裝則直接中斷本 skill**,不得只憑下方一行摘要繼續執行:
|
||||
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到(shared plugin 未安裝)時,先詢問使用者是否安裝 shared plugin(`https://gitea.jsc.idv.tw/plugins/shared.git`),使用者不安裝則直接中斷本 skill**,不得只憑下方一行摘要繼續執行:
|
||||
|
||||
- `/jsc-generic:spec-output`:繁體中文(台灣用語)、UTF-8(不含 BOM)無亂碼、API body 以 UTF-8 JSON 檔帶入且換行為實際換行。
|
||||
- `/jsc-generic:spec-execution`:自動執行原則(必要決策才中斷)、不臆測/需人工確認、已知資訊跳過詢問。
|
||||
- `/jsc-generic:spec-gitea`:tea/API 工具選擇與檢查、`GITEA_TOKEN` 機密保護(不 echo、遮蔽)、不依賴 `jq`、API 分頁完整讀取。
|
||||
- `/jsc-shared:spec-output`:繁體中文(台灣用語)、UTF-8(不含 BOM)無亂碼、API body 以 UTF-8 JSON 檔帶入且換行為實際換行。
|
||||
- `/jsc-shared:spec-execution`:自動執行原則(必要決策才中斷)、不臆測/需人工確認、已知資訊跳過詢問。
|
||||
- `/jsc-shared:spec-gitea`:tea/API 工具選擇與檢查、`GITEA_TOKEN` 機密保護(不 echo、遮蔽)、不依賴 `jq`、API 分頁完整讀取。
|
||||
|
||||
本 skill 特有補充:
|
||||
|
||||
@@ -54,7 +54,7 @@ argument-hint: "[--tool <tea|api>] [--repo <owner/repo>] [--issues <編號,以
|
||||
|
||||
**若使用者已透過 `--tool` 或對話明確選定工具,跳過詢問**,只做該工具的可用性驗證。
|
||||
|
||||
依 `/jsc-generic:spec-gitea` 的工具選擇流程執行:檢查 `tea`(`command -v tea`、`tea login list`)與 `GITEA_TOKEN`(只輸出「已設定/未設定」)→ 以表格呈現檢查結果後詢問使用者要用 `tea` 或 `api` → 兩種方式都不可用則回報並停止(不要請使用者把 token 貼進對話)。
|
||||
依 `/jsc-shared:spec-gitea` 的工具選擇流程執行:檢查 `tea`(`command -v tea`、`tea login list`)與 `GITEA_TOKEN`(只輸出「已設定/未設定」)→ 以表格呈現檢查結果後詢問使用者要用 `tea` 或 `api` → 兩種方式都不可用則回報並停止(不要請使用者把 token 貼進對話)。
|
||||
|
||||
## 階段 B:確認議題所在專案(已知則跳過)
|
||||
|
||||
|
||||
@@ -8,12 +8,12 @@ argument-hint: "[<solution-or-project>] [--include-prerelease] [--no-dedupe] [--
|
||||
|
||||
把 C# / .NET repo 內的 NuGet 套件依專案盤點、清理可安全移除的重複參考,然後逐一更新到最新可用版本。每個套件異動後都要驗證專案可以正常編譯;若最新版本失敗,改從目前版本之後的最小可用版本逐版升級,直到第一個編譯失敗版本為止,保留最後一個可編譯版本並記錄失敗點。
|
||||
|
||||
## 共用規範(generic plugin,必要前置)
|
||||
## 共用規範(shared plugin,必要前置)
|
||||
|
||||
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到(generic plugin 未安裝)時,先詢問使用者是否安裝 generic plugin(`https://gitea.jsc.idv.tw/plugins/generic.git`),使用者不安裝則直接中斷本 skill**,不得只憑下方一行摘要繼續執行:
|
||||
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到(shared plugin 未安裝)時,先詢問使用者是否安裝 shared plugin(`https://gitea.jsc.idv.tw/plugins/shared.git`),使用者不安裝則直接中斷本 skill**,不得只憑下方一行摘要繼續執行:
|
||||
|
||||
- `/jsc-generic:spec-output`:繁體中文(台灣用語)、UTF-8(不含 BOM)無亂碼(套件 id、檔名、指令、版本號保留原文)。
|
||||
- `/jsc-generic:spec-execution`:自動執行原則(必要決策才中斷)、不臆測/需人工確認。
|
||||
- `/jsc-shared:spec-output`:繁體中文(台灣用語)、UTF-8(不含 BOM)無亂碼(套件 id、檔名、指令、版本號保留原文)。
|
||||
- `/jsc-shared:spec-execution`:自動執行原則(必要決策才中斷)、不臆測/需人工確認。
|
||||
|
||||
## 輸出規範(本 skill 特有)
|
||||
|
||||
|
||||
@@ -18,14 +18,14 @@ argument-hint: "[--issue <編號|編號清單|all>] [--findings <findings 檔或
|
||||
|
||||
---
|
||||
|
||||
## 共用規範(generic plugin,必要前置)
|
||||
## 共用規範(shared plugin,必要前置)
|
||||
|
||||
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到(generic plugin 未安裝)時,先詢問使用者是否安裝 generic plugin(`https://gitea.jsc.idv.tw/plugins/generic.git`),使用者不安裝則直接中斷本 skill**,不得只憑下方一行摘要繼續執行:
|
||||
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到(shared plugin 未安裝)時,先詢問使用者是否安裝 shared plugin(`https://gitea.jsc.idv.tw/plugins/shared.git`),使用者不安裝則直接中斷本 skill**,不得只憑下方一行摘要繼續執行:
|
||||
|
||||
- `/jsc-generic:spec-output`:繁體中文(台灣用語)、UTF-8(不含 BOM)無亂碼(含 commit 訊息、PR 標題/描述、寫檔/API body 實作要點與送出前自我檢查)。
|
||||
- `/jsc-generic:spec-execution`:自動執行原則(必要決策才中斷)、不臆測/需人工確認。
|
||||
- `/jsc-generic:spec-gitea`:`GITEA_TOKEN` 機密保護(不 echo、遮蔽 `***`)、API body 以 UTF-8 JSON 檔帶入。
|
||||
- `/jsc-generic:spec-git-safety`:不破壞既有工作、develop → master 後備、保守解衝突、新分支不覆蓋既有分支。
|
||||
- `/jsc-shared:spec-output`:繁體中文(台灣用語)、UTF-8(不含 BOM)無亂碼(含 commit 訊息、PR 標題/描述、寫檔/API body 實作要點與送出前自我檢查)。
|
||||
- `/jsc-shared:spec-execution`:自動執行原則(必要決策才中斷)、不臆測/需人工確認。
|
||||
- `/jsc-shared:spec-gitea`:`GITEA_TOKEN` 機密保護(不 echo、遮蔽 `***`)、API body 以 UTF-8 JSON 檔帶入。
|
||||
- `/jsc-shared:spec-git-safety`:不破壞既有工作、develop → master 後備、保守解衝突、新分支不覆蓋既有分支。
|
||||
|
||||
本 skill 特有補充:
|
||||
|
||||
@@ -136,7 +136,7 @@ source_branch="$(git rev-parse --abbrev-ref HEAD)"
|
||||
|
||||
### A6. 必要時嘗試解衝突
|
||||
|
||||
當 `git pull` 後出現衝突,依 `/jsc-generic:spec-git-safety` 的保守解衝突流程處理(定位衝突檔 → 最小合理整合 → 可安全解決者 `git add` 標記、無法安全判斷者停止並列出決策點);全部衝突解完後,依 git 當前狀態完成 merge / rebase 的必要步驟,確認 `git status --porcelain` 沒有未解衝突,再回到 A5 判斷是否需要建立新工作分支。
|
||||
當 `git pull` 後出現衝突,依 `/jsc-shared:spec-git-safety` 的保守解衝突流程處理(定位衝突檔 → 最小合理整合 → 可安全解決者 `git add` 標記、無法安全判斷者停止並列出決策點);全部衝突解完後,依 git 當前狀態完成 merge / rebase 的必要步驟,確認 `git status --porcelain` 沒有未解衝突,再回到 A5 判斷是否需要建立新工作分支。
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -18,14 +18,14 @@ argument-hint: "[--target-dir <根目錄>] [--owner <擁有者,以逗號分隔>]
|
||||
|
||||
---
|
||||
|
||||
## 共用規範(generic plugin,必要前置)
|
||||
## 共用規範(shared plugin,必要前置)
|
||||
|
||||
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到(generic plugin 未安裝)時,先詢問使用者是否安裝 generic plugin(`https://gitea.jsc.idv.tw/plugins/generic.git`),使用者不安裝則直接中斷本 skill**,不得只憑下方一行摘要繼續執行:
|
||||
執行本 skill 前,先以 Skill 工具載入下列共用規範並全程遵守;**任一載入不到(shared plugin 未安裝)時,先詢問使用者是否安裝 shared plugin(`https://gitea.jsc.idv.tw/plugins/shared.git`),使用者不安裝則直接中斷本 skill**,不得只憑下方一行摘要繼續執行:
|
||||
|
||||
- `/jsc-generic:spec-output`:繁體中文(台灣用語)、UTF-8(不含 BOM)無亂碼。
|
||||
- `/jsc-generic:spec-execution`:自動執行原則(必要決策才中斷)、不臆測/需人工確認。
|
||||
- `/jsc-generic:spec-gitea`:`GITEA_TOKEN` 機密保護(不 echo、遮蔽、clone 後還原乾淨 origin)、API 分頁完整讀取、host 決定順序。
|
||||
- `/jsc-generic:spec-git-safety`:不破壞既有工作(未提交變更不強切、絕不 `reset --hard`/`clean`)、develop → master 後備、`pull --ff-only`。
|
||||
- `/jsc-shared:spec-output`:繁體中文(台灣用語)、UTF-8(不含 BOM)無亂碼。
|
||||
- `/jsc-shared:spec-execution`:自動執行原則(必要決策才中斷)、不臆測/需人工確認。
|
||||
- `/jsc-shared:spec-gitea`:`GITEA_TOKEN` 機密保護(不 echo、遮蔽、clone 後還原乾淨 origin)、API 分頁完整讀取、host 決定順序。
|
||||
- `/jsc-shared:spec-git-safety`:不破壞既有工作(未提交變更不強切、絕不 `reset --hard`/`clean`)、develop → master 後備、`pull --ff-only`。
|
||||
|
||||
本 skill 特有補充:
|
||||
|
||||
@@ -51,11 +51,11 @@ argument-hint: "[--target-dir <根目錄>] [--owner <擁有者,以逗號分隔>]
|
||||
|
||||
### A1. 確認 token
|
||||
|
||||
依 `/jsc-generic:spec-gitea` 確認 `GITEA_TOKEN`(只輸出「已設定/未設定」,不可 echo token 本身);**未設定** → 回報「缺少 `GITEA_TOKEN` 環境變數,無法存取 Gitea API」並停止(不要請使用者把 token 貼進對話)。
|
||||
依 `/jsc-shared:spec-gitea` 確認 `GITEA_TOKEN`(只輸出「已設定/未設定」,不可 echo token 本身);**未設定** → 回報「缺少 `GITEA_TOKEN` 環境變數,無法存取 Gitea API」並停止(不要請使用者把 token 貼進對話)。
|
||||
|
||||
### A2. 決定 gitea 主機
|
||||
|
||||
依 `/jsc-generic:spec-gitea` 的 host 決定順序:`--host` → `$GITEA_HOST` → 目前 repo 的 origin → 詢問使用者(不臆測)。主機僅取 host 部分(如 `gitea.jsc.idv.tw`),組 API base 為 `https://<host>/api/v1`。
|
||||
依 `/jsc-shared:spec-gitea` 的 host 決定順序:`--host` → `$GITEA_HOST` → 目前 repo 的 origin → 詢問使用者(不臆測)。主機僅取 host 部分(如 `gitea.jsc.idv.tw`),組 API base 為 `https://<host>/api/v1`。
|
||||
|
||||
### A3. 決定目標根目錄
|
||||
|
||||
|
||||
Reference in New Issue
Block a user