@loviusc/sa-spec 0.2.6 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +17 -1
- package/README.ja.md +17 -1
- package/README.ko.md +17 -1
- package/README.zh-CN.md +17 -1
- package/README.zh-TW.md +30 -1
- package/install.bat +43 -0
- package/install.sh +43 -0
- package/package.json +8 -2
- package/readme.md +30 -1
- package/src/cli.js +176 -0
- package/src/pdf.js +605 -0
- package/templates/AGENTS.md +2 -1
- package/templates/readme.md +30 -1
- package/templates/skills/system-analysis/SKILL.md +2 -1
- package/uninstall.bat +22 -0
- package/uninstall.sh +15 -0
- package/update.bat +43 -0
- package/update.sh +30 -0
package/templates/readme.md
CHANGED
|
@@ -32,6 +32,7 @@ sa-spec init --full
|
|
|
32
32
|
- `spec:propose` (`scp`) $\to$ **AI 自動建立 feature 分支與草稿目錄**(零手動指令)
|
|
33
33
|
- `spec:analyze` (`sca`) $\to$ AI 衝突檢查並產出規格文件草稿
|
|
34
34
|
- `spec:commit` (`scc`) $\to$ **AI 自動向主分支領取新號並自動合併回主分支!**
|
|
35
|
+
- `spec:pdf` (`spd`) $\to$ **一鍵將單一 `.md` 或整個需求規格書轉為高品質 PDF!**
|
|
35
36
|
|
|
36
37
|
👉 **Language Guides: [English](./README.en.md) | [繁體中文](./README.zh-TW.md) | [简体中文](./README.zh-CN.md) | [日本語](./README.ja.md) | [한국어](./README.ko.md)**
|
|
37
38
|
|
|
@@ -39,7 +40,7 @@ sa-spec init --full
|
|
|
39
40
|
|
|
40
41
|
`sa-spec` 是一個輕量的系統分析文件工作台,用固定流程把需求想法整理成可確認、可歸檔、可檢查的文件。
|
|
41
42
|
|
|
42
|
-
AI
|
|
43
|
+
AI 工作流使用五個指令,並支援簡寫別名(兩者等價):
|
|
43
44
|
|
|
44
45
|
| 標準指令 | 簡寫 | 說明 |
|
|
45
46
|
|---|---|---|
|
|
@@ -47,6 +48,7 @@ AI 工作流只使用四個指令,並支援簡寫別名(兩者等價):
|
|
|
47
48
|
| `spec:propose` | `scp` | 提出需求並整理摘要 |
|
|
48
49
|
| `spec:analyze` | `sca` | 衝突檢查與規格起草 |
|
|
49
50
|
| `spec:commit` | `scc` | 確認歸檔並建立 Git commit |
|
|
51
|
+
| `spec:pdf` | `spd` | 將指定 `.md` 或需求目錄匯出為 PDF |
|
|
50
52
|
|
|
51
53
|
每個需求歸檔後固定包含:
|
|
52
54
|
|
|
@@ -96,6 +98,25 @@ npm --version
|
|
|
96
98
|
git --version
|
|
97
99
|
```
|
|
98
100
|
|
|
101
|
+
## 一鍵腳本管理(安裝 / 更新 / 解除安裝)
|
|
102
|
+
|
|
103
|
+
專案內建獨立的跨平台腳本,直接執行對應檔案即可完成安裝、更新或解除安裝:
|
|
104
|
+
|
|
105
|
+
### macOS / Linux (`.sh`)
|
|
106
|
+
```bash
|
|
107
|
+
./install.sh # 安裝 sa-spec
|
|
108
|
+
./update.sh # 更新 sa-spec 至最新版本
|
|
109
|
+
./uninstall.sh # 解除安裝 sa-spec
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Windows (`.bat`)
|
|
113
|
+
可直接雙擊執行,或在 CMD / PowerShell 輸入:
|
|
114
|
+
```bat
|
|
115
|
+
install.bat &:: 安裝 sa-spec
|
|
116
|
+
update.bat &:: 更新 sa-spec 至最新版本
|
|
117
|
+
uninstall.bat &:: 解除安裝 sa-spec
|
|
118
|
+
```
|
|
119
|
+
|
|
99
120
|
## macOS 安裝
|
|
100
121
|
|
|
101
122
|
使用 npm 安裝:
|
|
@@ -275,6 +296,7 @@ sa-spec init --full
|
|
|
275
296
|
| `sa-spec init [--full] [--lang zh-TW|en|zh-CN|ja|ko]` | 建立文件骨架與規則文件(支援 5 種語言,預設 `zh-TW`)。 |
|
|
276
297
|
| `sa-spec new [--id REQ-001] --name login [--branch]` | 建立需求資料夾與空白文件模板(未帶 `--id` 時啟用多人草稿模式,可選 `--branch` 自動建立並切換至 `feat/<name>` 分支)。 |
|
|
277
298
|
| `sa-spec finalize --name login` | 將草稿需求定號歸檔為最新序號(自動計算最新號碼、重命名目錄、批次置換 `{{REQ_ID}}` 並重建索引)。 |
|
|
299
|
+
| `sa-spec pdf <target> [--split] [--output out.pdf]` | 將指定 `.md` 轉為同名 `.pdf`,或將需求編號/目錄(如 `REQ-001`)整包合併匯出成一份完整規格書 PDF(加 `--split` 則各檔獨立轉出,`--all` 匯出全專案)。 |
|
|
278
300
|
| `sa-spec reindex` | 掃描 `project/REQ-*` 目錄,依序號重新生成乾淨無衝突的 `project/index.md`。 |
|
|
279
301
|
| `sa-spec check` | 檢查基本文件是否存在。 |
|
|
280
302
|
| `sa-spec status` | 顯示系統規格與需求索引狀態。 |
|
|
@@ -324,6 +346,7 @@ Markdown、PlantUML、YAML、GitLens 這類套件可以提升閱讀與檢查體
|
|
|
324
346
|
| AI 工作流程 | `spec:propose` / `scp` | VS Code AI 對話側邊欄 | 整理使用者提出的需求。 |
|
|
325
347
|
| AI 工作流程 | `spec:analyze` / `sca` | VS Code AI 對話側邊欄 | 檢查衝突並產出待確認草稿。 |
|
|
326
348
|
| AI 工作流程 | `spec:commit` / `scc` | VS Code AI 對話側邊欄 | 歸檔已確認版本並建立本機 Git commit。 |
|
|
349
|
+
| AI 工作流程 | `spec:pdf` / `spd` | VS Code AI 對話側邊欄 | 將指定 `.md` 或需求目錄匯出為 PDF 規格書。 |
|
|
327
350
|
|
|
328
351
|
建議操作順序:
|
|
329
352
|
|
|
@@ -353,6 +376,7 @@ spec:commit # 或簡寫 scc
|
|
|
353
376
|
| `spec:propose` | `scp` | 使用者提出需求後,整理需求摘要、目標、初步流程與待確認事項。 |
|
|
354
377
|
| `spec:analyze` | `sca` | 檢查是否與既有需求衝突;無衝突才產出 SRS、UML、OpenAPI、DB Schema 草稿。 |
|
|
355
378
|
| `spec:commit` | `scc` | 使用者確認無衝突版本後,將版本歸檔到 `project/`,並建立本機 Git commit。 |
|
|
379
|
+
| `spec:pdf` | `spd` | 將指定的 `.md` 檔或需求(如 `REQ-001`)匯出為高品質 PDF。 |
|
|
356
380
|
|
|
357
381
|
狀態機:
|
|
358
382
|
|
|
@@ -725,6 +749,11 @@ git push origin master
|
|
|
725
749
|
|
|
726
750
|
## 更新紀錄
|
|
727
751
|
|
|
752
|
+
### v0.2.7
|
|
753
|
+
- **新增 Markdown 轉 PDF 指令(`spec:pdf` / `spd` / `sa-spec pdf`)與跨平台獨立安裝腳本**:
|
|
754
|
+
- **Markdown 轉 PDF 支援**:新增 AI 指令 `spec:pdf`(簡寫 `spd`)與 CLI 指令 `sa-spec pdf <target> [--split] [--output out.pdf]`(及 `--all`),支援單一 `.md` 轉換、需求目錄整包合併匯出成一份完整規格書 PDF,或加 `--split` 各檔獨立匯出。
|
|
755
|
+
- **跨平台獨立管理腳本**:新增 macOS / Linux(`install.sh`、`update.sh`、`uninstall.sh`)與 Windows(`install.bat`、`update.bat`、`uninstall.bat`)6 個獨立執行腳本,一鍵完成安裝、更新與解除安裝。
|
|
756
|
+
|
|
728
757
|
### v0.2.6
|
|
729
758
|
- **Git Remote 自動推送鐵律(Remote Auto-Push)**:
|
|
730
759
|
- **`scp` 建立分支自動推上遠端**:執行 `spec:propose`(`scp`)或 `sa-spec new --branch` 建立 feature 分支後,自動偵測是否有設定 Git remote;若有則立即將新分支推送至遠端(`git push -u <remote> feat/<name>`)。
|
|
@@ -16,7 +16,7 @@ description: 用 init、propose、analyze、commit 四段流程整理需求,
|
|
|
16
16
|
|
|
17
17
|
## 指令流程
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
使用五個核心指令,並支援簡寫別名(兩者等價):
|
|
20
20
|
|
|
21
21
|
| 指令 | 簡寫 | 用途 | 執行規則 |
|
|
22
22
|
|---|---|---|---|
|
|
@@ -24,6 +24,7 @@ description: 用 init、propose、analyze、commit 四段流程整理需求,
|
|
|
24
24
|
| `spec:propose` | `scp` | 提出需求 | 使用者提出需求後,自動依需求名稱建立並切換至專屬 feature 分支(`feat/<name>`,若已在 feature branch 則沿用),檢查是否有設定 Git remote,若有則自動將分支推上 remote(`git push -u <remote> feat/<name>`),並建立草稿目錄(內部使用 `{{REQ_ID}}` 佔位),整理需求摘要、目標、初步流程與待確認事項;不歸檔、不修改既有需求。 |
|
|
25
25
|
| `spec:analyze` | `sca` | 分析與起草 | 先檢查新需求是否與 `project/` 內所有既有需求衝突;無衝突才產出 SRS、UML、OpenAPI、DB Schema 草稿;有衝突則只列出衝突與待釐清問題,待使用者釐清後再次執行 `spec:analyze`(或 `sca`)。 |
|
|
26
26
|
| `spec:commit` | `scc` | 確認歸檔 | 只把使用者已確認的版本歸檔到該需求資料夾;若有 Git remote 則先將目前分支推上 remote 並同步遠端狀態,接著才查詢主分支(`master`/`main`)最新可用序號定號(`REQ-xxx`)、替換佔位符,更新 `project/index.md`、`project/system-spec.md` 與 `history.md`,建立 Git commit(若有 remote 則推送分支),再自動切換回主分支完成合併並推送到 remote。 |
|
|
27
|
+
| `spec:pdf` | `spd` | 匯出 PDF | 呼叫 `sa-spec pdf <target> [--split] [--output <path>]`(或 `--all`),將指定的單一 `.md` 檔轉為同名 `.pdf`,或將指定需求目錄/編號(如 `REQ-001`)整包合併匯出成一份完整規格書 PDF(加 `--split` 則各別轉為獨立 PDF)。 |
|
|
27
28
|
|
|
28
29
|
## 硬性限制
|
|
29
30
|
|
package/uninstall.bat
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
setlocal EnableDelayedExpansion
|
|
3
|
+
chcp 65001 >nul 2>&1
|
|
4
|
+
|
|
5
|
+
set "PACKAGE_NAME=@loviusc/sa-spec"
|
|
6
|
+
set "SCRIPT_DIR=%~dp0"
|
|
7
|
+
|
|
8
|
+
echo [sa-spec] 開始解除安裝 (Windows)...
|
|
9
|
+
|
|
10
|
+
if exist "%SCRIPT_DIR%package.json" (
|
|
11
|
+
findstr /C:"@loviusc/sa-spec" "%SCRIPT_DIR%package.json" >nul 2>&1
|
|
12
|
+
if !errorlevel! equ 0 (
|
|
13
|
+
pushd "%SCRIPT_DIR%"
|
|
14
|
+
call npm unlink -g >nul 2>&1
|
|
15
|
+
popd
|
|
16
|
+
)
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
call npm uninstall -g %PACKAGE_NAME%
|
|
20
|
+
|
|
21
|
+
echo [完成] 已解除安裝 sa-spec!
|
|
22
|
+
pause
|
package/uninstall.sh
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
PACKAGE_NAME="@loviusc/sa-spec"
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
|
|
7
|
+
echo "[sa-spec] 開始解除安裝 (${OSTYPE:-macOS/Linux})..."
|
|
8
|
+
|
|
9
|
+
if [ -f "${SCRIPT_DIR}/package.json" ] && grep -q '"@loviusc/sa-spec"' "${SCRIPT_DIR}/package.json" 2>/dev/null; then
|
|
10
|
+
(cd "${SCRIPT_DIR}" && npm unlink -g 2>/dev/null) || true
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
npm uninstall -g "${PACKAGE_NAME}" || true
|
|
14
|
+
|
|
15
|
+
echo "[完成] 已解除安裝 sa-spec!"
|
package/update.bat
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
setlocal EnableDelayedExpansion
|
|
3
|
+
chcp 65001 >nul 2>&1
|
|
4
|
+
|
|
5
|
+
set "PACKAGE_NAME=@loviusc/sa-spec"
|
|
6
|
+
set "SCRIPT_DIR=%~dp0"
|
|
7
|
+
|
|
8
|
+
echo [sa-spec] 開始更新 (Windows)...
|
|
9
|
+
|
|
10
|
+
where node >nul 2>&1
|
|
11
|
+
if %errorlevel% neq 0 (
|
|
12
|
+
echo [錯誤] 未偵測到 Node.js,請先執行 install.bat。
|
|
13
|
+
pause
|
|
14
|
+
exit /b 1
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
set "IS_SOURCE=0"
|
|
18
|
+
if exist "%SCRIPT_DIR%package.json" (
|
|
19
|
+
findstr /C:"@loviusc/sa-spec" "%SCRIPT_DIR%package.json" >nul 2>&1
|
|
20
|
+
if !errorlevel! equ 0 set "IS_SOURCE=1"
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
if "%IS_SOURCE%"=="1" (
|
|
24
|
+
echo [更新] 偵測到 sa-spec 原始碼目錄...
|
|
25
|
+
pushd "%SCRIPT_DIR%"
|
|
26
|
+
if exist ".git" (
|
|
27
|
+
where git >nul 2>&1
|
|
28
|
+
if !errorlevel! equ 0 (
|
|
29
|
+
echo [Git] 正在拉取最新原始碼 ^(git pull --ff-only^)...
|
|
30
|
+
git pull --ff-only
|
|
31
|
+
)
|
|
32
|
+
)
|
|
33
|
+
call npm install
|
|
34
|
+
call npm link
|
|
35
|
+
popd
|
|
36
|
+
) else (
|
|
37
|
+
echo [更新] 從 npm 更新 %PACKAGE_NAME%@latest...
|
|
38
|
+
call npm install -g %PACKAGE_NAME%@latest
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
echo [完成] sa-spec 已更新至最新版本!
|
|
42
|
+
call sa-spec --version 2>nul
|
|
43
|
+
pause
|
package/update.sh
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
PACKAGE_NAME="@loviusc/sa-spec"
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
|
|
7
|
+
echo "[sa-spec] 開始更新 (${OSTYPE:-macOS/Linux})..."
|
|
8
|
+
|
|
9
|
+
if ! command -v node >/dev/null 2>&1 || ! command -v npm >/dev/null 2>&1; then
|
|
10
|
+
echo "[錯誤] 未偵測到 Node.js 或 npm,請先執行 ./install.sh。"
|
|
11
|
+
exit 1
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
if [ -f "${SCRIPT_DIR}/package.json" ] && grep -q '"@loviusc/sa-spec"' "${SCRIPT_DIR}/package.json" 2>/dev/null; then
|
|
15
|
+
echo "[更新] 偵測到 sa-spec 原始碼目錄 (${SCRIPT_DIR})..."
|
|
16
|
+
if [ -d "${SCRIPT_DIR}/.git" ] && command -v git >/dev/null 2>&1; then
|
|
17
|
+
if (cd "${SCRIPT_DIR}" && git remote | grep -q .); then
|
|
18
|
+
echo "[Git] 拉取最新原始碼 (git pull --ff-only)..."
|
|
19
|
+
(cd "${SCRIPT_DIR}" && git pull --ff-only) || echo "[提示] git pull 略過,請確認本地是否有未提交修改。"
|
|
20
|
+
fi
|
|
21
|
+
fi
|
|
22
|
+
cd "${SCRIPT_DIR}"
|
|
23
|
+
npm install
|
|
24
|
+
npm link
|
|
25
|
+
else
|
|
26
|
+
echo "[更新] 從 npm 更新 ${PACKAGE_NAME}@latest..."
|
|
27
|
+
npm install -g "${PACKAGE_NAME}@latest"
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
echo "[完成] sa-spec 已更新至最新版本: $(sa-spec --version 2>/dev/null || echo '未知')"
|