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.
Files changed (31) hide show
  1. {mspec_cli-4.0.8/src/mspec_cli.egg-info → mspec_cli-4.0.10}/PKG-INFO +1 -1
  2. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/pyproject.toml +1 -1
  3. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/__init__.py +1 -1
  4. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/cli.py +2 -1
  5. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/commands/doctor.py +3 -3
  6. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/commands/init.py +11 -13
  7. {mspec_cli-4.0.8 → mspec_cli-4.0.10/src/mspec_cli.egg-info}/PKG-INFO +1 -1
  8. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/LICENSE +0 -0
  9. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/MANIFEST.in +0 -0
  10. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/README.md +0 -0
  11. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/setup.cfg +0 -0
  12. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/__main__.py +0 -0
  13. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/commands/__init__.py +0 -0
  14. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/commands/update.py +0 -0
  15. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/core/__init__.py +0 -0
  16. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/core/config.py +0 -0
  17. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/core/openspec_manager.py +0 -0
  18. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/core/template.py +0 -0
  19. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/templates/config.yaml +0 -0
  20. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/templates/design-issue-taxonomy.md +0 -0
  21. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/templates/design-issues.md +0 -0
  22. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/templates/requirement-issue-taxonomy.md +0 -0
  23. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/templates/requirement-issues.md +0 -0
  24. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/utils/__init__.py +0 -0
  25. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec/utils/console.py +0 -0
  26. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec_cli.egg-info/SOURCES.txt +0 -0
  27. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec_cli.egg-info/dependency_links.txt +0 -0
  28. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec_cli.egg-info/entry_points.txt +0 -0
  29. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec_cli.egg-info/requires.txt +0 -0
  30. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/src/mspec_cli.egg-info/top_level.txt +0 -0
  31. {mspec_cli-4.0.8 → mspec_cli-4.0.10}/tests/test_init.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mspec-cli
3
- Version: 4.0.8
3
+ Version: 4.0.10
4
4
  Summary: mspec-cli - 成员规范驱动开发工作流 CLI 工具
5
5
  Author-email: shirayner <team@mspec.io>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mspec-cli"
7
- version = "4.0.8"
7
+ version = "4.0.10"
8
8
  description = "mspec-cli - 成员规范驱动开发工作流 CLI 工具"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -1,5 +1,5 @@
1
1
  """mspec - 成员规范驱动开发工作流 CLI 工具"""
2
2
 
3
- __version__ = "4.0.0"
3
+ __version__ = "4.0.10"
4
4
  __author__ = "mspec Team"
5
5
  __email__ = "team@mspec.io"
@@ -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="4.0.0", prog_name="mspec")
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": True,
100
- "message": "未全局安装,但可通过 npx 运行",
99
+ "ok": False,
100
+ "message": "未全局安装(npx 可用但不够用)。运行 `mspec init` 自动安装",
101
101
  }
102
102
  else:
103
103
  return {
104
104
  "ok": False,
105
- "message": "未安装。运行 `npm install -g @fission-ai/openspec` 安装",
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
- 支持自动检测 openspec,如未安装则尝试使用 npx 或自动安装
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
- console.print("[yellow]openspec 未安装,正在尝试自动安装...[/yellow]")
164
- if manager.install():
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]")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mspec-cli
3
- Version: 4.0.8
3
+ Version: 4.0.10
4
4
  Summary: mspec-cli - 成员规范驱动开发工作流 CLI 工具
5
5
  Author-email: shirayner <team@mspec.io>
6
6
  License: MIT
File without changes
File without changes
File without changes
File without changes
File without changes