@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.
@@ -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 '未知')"