mspec-cli 4.0.8__tar.gz → 4.0.10__tar.gz
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.
- {mspec_cli-4.0.8/src/mspec_cli.egg-info → mspec_cli-4.0.10}/PKG-INFO +1 -1
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/pyproject.toml +1 -1
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/__init__.py +1 -1
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/cli.py +2 -1
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/commands/doctor.py +3 -3
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/commands/init.py +11 -13
- {mspec_cli-4.0.8 → mspec_cli-4.0.10/src/mspec_cli.egg-info}/PKG-INFO +1 -1
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/LICENSE +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/MANIFEST.in +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/README.md +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/setup.cfg +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/__main__.py +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/commands/__init__.py +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/commands/update.py +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/core/__init__.py +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/core/config.py +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/core/openspec_manager.py +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/core/template.py +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/templates/config.yaml +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/templates/design-issue-taxonomy.md +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/templates/design-issues.md +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/templates/requirement-issue-taxonomy.md +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/templates/requirement-issues.md +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/utils/__init__.py +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/utils/console.py +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec_cli.egg-info/SOURCES.txt +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec_cli.egg-info/dependency_links.txt +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec_cli.egg-info/entry_points.txt +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec_cli.egg-info/requires.txt +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec_cli.egg-info/top_level.txt +0 -0
- {mspec_cli-4.0.8 → mspec_cli-4.0.10}/tests/test_init.py +0 -0
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import click
|
|
5
5
|
from rich.console import Console
|
|
6
6
|
|
|
7
|
+
from mspec import __version__
|
|
7
8
|
from mspec.commands import doctor, init, update
|
|
8
9
|
from mspec.utils.console import print_banner
|
|
9
10
|
|
|
@@ -11,7 +12,7 @@ console = Console()
|
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
@click.group()
|
|
14
|
-
@click.version_option(version=
|
|
15
|
+
@click.version_option(version=__version__, prog_name="mspec")
|
|
15
16
|
@click.option("--verbose", "-v", is_flag=True, help="显示详细日志")
|
|
16
17
|
@click.pass_context
|
|
17
18
|
def cli(ctx: click.Context, verbose: bool) -> None:
|
|
@@ -96,13 +96,13 @@ def _check_openspec_cli() -> dict:
|
|
|
96
96
|
return {"ok": True, "message": f"已安装{version_str}"}
|
|
97
97
|
elif status == OpenspecStatus.NPX_AVAILABLE:
|
|
98
98
|
return {
|
|
99
|
-
"ok":
|
|
100
|
-
"message": "
|
|
99
|
+
"ok": False,
|
|
100
|
+
"message": "未全局安装(npx 可用但不够用)。运行 `mspec init` 自动安装",
|
|
101
101
|
}
|
|
102
102
|
else:
|
|
103
103
|
return {
|
|
104
104
|
"ok": False,
|
|
105
|
-
"message": "
|
|
105
|
+
"message": "未安装且 npx 不可用。先安装 Node.js,再运行 `mspec init`",
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
|
|
@@ -121,7 +121,7 @@ def init_cmd(
|
|
|
121
121
|
def _run_openspec_init(target_path: Path) -> bool:
|
|
122
122
|
"""调用 openspec init 初始化 OpenSpec 目录结构
|
|
123
123
|
|
|
124
|
-
|
|
124
|
+
如 openspec 未全局安装,则自动执行 npm install -g 进行全局安装
|
|
125
125
|
|
|
126
126
|
Args:
|
|
127
127
|
target_path: 目标目录路径
|
|
@@ -133,13 +133,9 @@ def _run_openspec_init(target_path: Path) -> bool:
|
|
|
133
133
|
|
|
134
134
|
# 1. 检查当前状态
|
|
135
135
|
status = manager.check()
|
|
136
|
-
used_npx = False # 标记是否使用了 npx
|
|
137
136
|
|
|
138
137
|
if status == OpenspecStatus.INSTALLED:
|
|
139
138
|
console.print("[dim]检测到 openspec 已安装[/dim]")
|
|
140
|
-
elif status == OpenspecStatus.NPX_AVAILABLE:
|
|
141
|
-
console.print("[dim]openspec 未全局安装,将使用 npx 运行[/dim]")
|
|
142
|
-
used_npx = True
|
|
143
139
|
else:
|
|
144
140
|
# 检查 npm 是否安装(Windows 上检查 npm.cmd)
|
|
145
141
|
import shutil
|
|
@@ -160,10 +156,18 @@ def _run_openspec_init(target_path: Path) -> bool:
|
|
|
160
156
|
).ask()
|
|
161
157
|
return continue_anyway
|
|
162
158
|
|
|
163
|
-
|
|
164
|
-
|
|
159
|
+
# openspec 未安装(无论是完全没有还是只有 npx),都执行全局安装
|
|
160
|
+
console.print("[yellow]openspec 未全局安装,正在执行全局安装...[/yellow]")
|
|
161
|
+
if manager.install(global_install=True):
|
|
165
162
|
# 重新检测
|
|
166
163
|
status = manager.check()
|
|
164
|
+
if status != OpenspecStatus.INSTALLED:
|
|
165
|
+
console.print("[red]✗ 安装后仍无法检测到 openspec[/red]")
|
|
166
|
+
manager.print_install_guide()
|
|
167
|
+
continue_anyway = questionary.confirm(
|
|
168
|
+
"是否继续初始化(跳过 openspec)?", default=True
|
|
169
|
+
).ask()
|
|
170
|
+
return continue_anyway
|
|
167
171
|
else:
|
|
168
172
|
# 安装失败,打印指引
|
|
169
173
|
manager.print_install_guide()
|
|
@@ -179,12 +183,6 @@ def _run_openspec_init(target_path: Path) -> bool:
|
|
|
179
183
|
result = manager.run(["init"], cwd=target_path, interactive=True)
|
|
180
184
|
if result.returncode == 0:
|
|
181
185
|
console.print("[green]✓ openspec init 完成[/green]")
|
|
182
|
-
# 3. 如果使用了 npx,提示用户全局安装 openspec
|
|
183
|
-
if used_npx:
|
|
184
|
-
console.print("\n[yellow]⚠ 提示: openspec 是通过 npx 临时运行的[/yellow]")
|
|
185
|
-
console.print("为了后续能正常使用 /opsx:propose 等命令,建议全局安装 openspec:")
|
|
186
|
-
console.print(f" [cyan]npm install -g {manager.PACKAGE_NAME}[/cyan]")
|
|
187
|
-
console.print("\n或者您可以在下次使用时再次通过 npx 运行。")
|
|
188
186
|
return True
|
|
189
187
|
else:
|
|
190
188
|
console.print("[yellow]⚠ openspec init 返回非零退出码,继续执行...[/yellow]")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|