just-cli 0.3.1__tar.gz → 0.4.0__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 (140) hide show
  1. just_cli-0.4.0/.claude/settings.local.json +7 -0
  2. {just_cli-0.3.1 → just_cli-0.4.0}/.gitignore +4 -1
  3. {just_cli-0.3.1 → just_cli-0.4.0}/PKG-INFO +1 -1
  4. {just_cli-0.3.1 → just_cli-0.4.0}/pyproject.toml +1 -1
  5. just_cli-0.4.0/scripts/ai_coding/agents2claude.py +41 -0
  6. just_cli-0.4.0/scripts/ai_coding/claude2agents.py +41 -0
  7. just_cli-0.4.0/src/just/installers/glab/installer.py +65 -0
  8. just_cli-0.4.0/src/just/installers/kimi/installer.py +24 -0
  9. just_cli-0.4.0/src/just/installers/mssh/installer.py +9 -0
  10. just_cli-0.4.0/tests/test_extension/test_extension_add.py +0 -0
  11. {just_cli-0.3.1 → just_cli-0.4.0}/uv.lock +30 -1
  12. just_cli-0.3.1/.claude/plans/2026-04-18-edit-installer-macos-micro.md +0 -237
  13. just_cli-0.3.1/.claude/settings.local.json +0 -9
  14. just_cli-0.3.1/src/just/installers/mssh/installer.py +0 -14
  15. {just_cli-0.3.1 → just_cli-0.4.0}/.claude/skills/textual/README.md +0 -0
  16. {just_cli-0.3.1 → just_cli-0.4.0}/.claude/skills/textual/SKILL.md +0 -0
  17. {just_cli-0.3.1 → just_cli-0.4.0}/.claude/skills/textual/guide.md +0 -0
  18. {just_cli-0.3.1 → just_cli-0.4.0}/.claude/skills/textual/quick-reference.md +0 -0
  19. {just_cli-0.3.1 → just_cli-0.4.0}/.github/workflows/publish.yml +0 -0
  20. {just_cli-0.3.1 → just_cli-0.4.0}/AGENTS.md +0 -0
  21. {just_cli-0.3.1 → just_cli-0.4.0}/Dockerfile +0 -0
  22. {just_cli-0.3.1 → just_cli-0.4.0}/README.md +0 -0
  23. {just_cli-0.3.1 → just_cli-0.4.0}/docs/extension_guide.md +0 -0
  24. {just_cli-0.3.1 → just_cli-0.4.0}/docs/images/editor_demo.png +0 -0
  25. {just_cli-0.3.1 → just_cli-0.4.0}/docs/images/viewer_demo.png +0 -0
  26. {just_cli-0.3.1 → just_cli-0.4.0}/scripts/system/linux/proxy/proxy.sh +0 -0
  27. {just_cli-0.3.1 → just_cli-0.4.0}/scripts/system/mac/proxy/proxy.sh +0 -0
  28. {just_cli-0.3.1 → just_cli-0.4.0}/scripts/system/windows/proxy/proxy.bat +0 -0
  29. {just_cli-0.3.1 → just_cli-0.4.0}/scripts/system/windows/proxy/proxy.ps1 +0 -0
  30. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/__init__.py +0 -0
  31. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/cli.py +0 -0
  32. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/commands/__init__.py +0 -0
  33. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/commands/download.py +0 -0
  34. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/commands/edit.py +0 -0
  35. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/commands/ext/__init__.py +0 -0
  36. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/commands/ext/add.py +0 -0
  37. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/commands/ext/edit.py +0 -0
  38. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/commands/ext/list.py +0 -0
  39. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/commands/ext/remove.py +0 -0
  40. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/commands/extract.py +0 -0
  41. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/commands/install.py +0 -0
  42. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/commands/linux.py +0 -0
  43. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/commands/note.py +0 -0
  44. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/commands/tunnel.py +0 -0
  45. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/commands/view.py +0 -0
  46. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/commands/workspace.py +0 -0
  47. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/__init__.py +0 -0
  48. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/config/__init__.py +0 -0
  49. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/config/config.py +0 -0
  50. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/config/utils.py +0 -0
  51. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/extension/__init__.py +0 -0
  52. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/extension/generator.py +0 -0
  53. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/extension/parser.py +0 -0
  54. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/extension/utils.py +0 -0
  55. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/extension/validator.py +0 -0
  56. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/installer/AGENTS.md +0 -0
  57. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/installer/__init__.py +0 -0
  58. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/installer/decorator.py +0 -0
  59. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/installer/install_package.py +0 -0
  60. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/installer/installers/__init__.py +0 -0
  61. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/installer/installers/binary_release.py +0 -0
  62. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/installer/installers/remote_script.py +0 -0
  63. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/installer/package_info.py +0 -0
  64. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/installer/source/__init__.py +0 -0
  65. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/installer/source/base.py +0 -0
  66. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/installer/source/http.py +0 -0
  67. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/installer/source/local.py +0 -0
  68. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/installer/utils.py +0 -0
  69. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/system_probe/__init__.py +0 -0
  70. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/system_probe/system_info.py +0 -0
  71. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/core/system_probe/system_probe.py +0 -0
  72. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/AGENTS.md +0 -0
  73. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/__init__.py +0 -0
  74. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/brew/installer.py +0 -0
  75. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/claude-code/__init__.py +0 -0
  76. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/claude-code/installer.py +0 -0
  77. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/cloudflare/__init__.py +0 -0
  78. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/cloudflare/installer.py +0 -0
  79. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/docker/__init__.py +0 -0
  80. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/docker/installer.py +0 -0
  81. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/edit/__init__.py +0 -0
  82. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/edit/installer.py +0 -0
  83. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/gh/__init__.py +0 -0
  84. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/gh/installer.py +0 -0
  85. {just_cli-0.3.1/src/just/installers/mssh → just_cli-0.4.0/src/just/installers/glab}/__init__.py +0 -0
  86. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/miniconda3/installer.py +0 -0
  87. {just_cli-0.3.1/src/just/installers/nvm → just_cli-0.4.0/src/just/installers/mssh}/__init__.py +0 -0
  88. {just_cli-0.3.1/src/just/installers/qodercli → just_cli-0.4.0/src/just/installers/nvm}/__init__.py +0 -0
  89. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/nvm/installer.py +0 -0
  90. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/openclaw/installer.py +0 -0
  91. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/opencode/installer.py +0 -0
  92. {just_cli-0.3.1/src/just/installers/tailscale → just_cli-0.4.0/src/just/installers/qodercli}/__init__.py +0 -0
  93. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/qodercli/installer.py +0 -0
  94. /just_cli-0.3.1/tests/test_extension/test_extension_add.py → /just_cli-0.4.0/src/just/installers/tailscale/__init__.py +0 -0
  95. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/tailscale/installer.py +0 -0
  96. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/uv/__init__.py +0 -0
  97. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/installers/uv/installer.py +0 -0
  98. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/tui/__init__.py +0 -0
  99. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/tui/editor.py +0 -0
  100. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/tui/extension.py +0 -0
  101. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/tui/markdown.py +0 -0
  102. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/tui/note.py +0 -0
  103. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/tui/workspace.py +0 -0
  104. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/AGENTS.md +0 -0
  105. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/__init__.py +0 -0
  106. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/archive/__init__.py +0 -0
  107. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/archive/compression_handler.py +0 -0
  108. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/archive/extractor.py +0 -0
  109. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/archive/format_detect.py +0 -0
  110. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/archive/sevenzip_handler.py +0 -0
  111. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/archive/tar_handler.py +0 -0
  112. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/archive/zip_handler.py +0 -0
  113. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/docker_utils.py +0 -0
  114. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/download_utils.py +0 -0
  115. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/echo_utils.py +0 -0
  116. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/env_utils.py +0 -0
  117. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/file_utils.py +0 -0
  118. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/format_utils.py +0 -0
  119. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/note_utils.py +0 -0
  120. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/progress.py +0 -0
  121. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/shell_utils.py +0 -0
  122. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/system_probe.py +0 -0
  123. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/typer_utils.py +0 -0
  124. {just_cli-0.3.1 → just_cli-0.4.0}/src/just/utils/user_interaction.py +0 -0
  125. {just_cli-0.3.1 → just_cli-0.4.0}/tests/AGENTS.md +0 -0
  126. {just_cli-0.3.1 → just_cli-0.4.0}/tests/requirements.txt +0 -0
  127. {just_cli-0.3.1 → just_cli-0.4.0}/tests/run_tests.py +0 -0
  128. {just_cli-0.3.1 → just_cli-0.4.0}/tests/test_archive_extraction.py +0 -0
  129. {just_cli-0.3.1 → just_cli-0.4.0}/tests/test_bash_script_installer.py +0 -0
  130. {just_cli-0.3.1 → just_cli-0.4.0}/tests/test_download.py +0 -0
  131. {just_cli-0.3.1 → just_cli-0.4.0}/tests/test_extension/README.md +0 -0
  132. {just_cli-0.3.1 → just_cli-0.4.0}/tests/test_extension/test_ext.py +0 -0
  133. {just_cli-0.3.1 → just_cli-0.4.0}/tests/test_extension.py +0 -0
  134. {just_cli-0.3.1 → just_cli-0.4.0}/tests/test_file_utils.py +0 -0
  135. {just_cli-0.3.1 → just_cli-0.4.0}/tests/test_init.py +0 -0
  136. {just_cli-0.3.1 → just_cli-0.4.0}/tests/test_installer_e2e.py +0 -0
  137. {just_cli-0.3.1 → just_cli-0.4.0}/tests/test_linux_commands.py +0 -0
  138. {just_cli-0.3.1 → just_cli-0.4.0}/tests/test_progress_utils.py +0 -0
  139. {just_cli-0.3.1 → just_cli-0.4.0}/tests/test_system_probe.py +0 -0
  140. {just_cli-0.3.1 → just_cli-0.4.0}/tests/testing.py +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(just install:*)"
5
+ ]
6
+ }
7
+ }
@@ -21,4 +21,7 @@ workspace/
21
21
  extensions/
22
22
  CLAUDE.md
23
23
 
24
- .DS_Store
24
+ .DS_Store
25
+
26
+ .claude/worktrees
27
+ .claude/settings.json
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: just-cli
3
- Version: 0.3.1
3
+ Version: 0.4.0
4
4
  Summary: Your all-in-one CLI Toolkit
5
5
  Author-email: zzzcb <zjxs.zzzcb@gmail.com>
6
6
  Requires-Python: >=3.10
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "just-cli"
3
- version = "0.3.1"
3
+ version = "0.4.0"
4
4
  description = "Your all-in-one CLI Toolkit"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -0,0 +1,41 @@
1
+ """Rename all AGENTS.md files to CLAUDE.md under a given workspace."""
2
+
3
+ import argparse
4
+ import os
5
+ from pathlib import Path
6
+
7
+
8
+ def agents_to_claude(workspace: str) -> list[Path]:
9
+ renamed = []
10
+ for dirpath, _, filenames in os.walk(workspace):
11
+ if "AGENTS.md" in filenames:
12
+ old_path = Path(dirpath) / "AGENTS.md"
13
+ new_path = Path(dirpath) / "CLAUDE.md"
14
+ old_path.rename(new_path)
15
+ renamed.append(new_path)
16
+ return renamed
17
+
18
+
19
+ def main() -> None:
20
+ parser = argparse.ArgumentParser(
21
+ description="Rename all AGENTS.md files to CLAUDE.md under a workspace."
22
+ )
23
+ parser.add_argument(
24
+ "workspace",
25
+ nargs="?",
26
+ default="./",
27
+ help="Root directory to search (default: current directory)",
28
+ )
29
+ args = parser.parse_args()
30
+
31
+ renamed = agents_to_claude(args.workspace)
32
+ if renamed:
33
+ for path in renamed:
34
+ print(f"Renamed: {path}")
35
+ print(f"\nTotal: {len(renamed)} file(s) renamed.")
36
+ else:
37
+ print("No AGENTS.md files found.")
38
+
39
+
40
+ if __name__ == "__main__":
41
+ main()
@@ -0,0 +1,41 @@
1
+ """Rename all CLAUDE.md files to AGENTS.md under a given workspace."""
2
+
3
+ import argparse
4
+ import os
5
+ from pathlib import Path
6
+
7
+
8
+ def claude_to_agents(workspace: str) -> list[Path]:
9
+ renamed = []
10
+ for dirpath, _, filenames in os.walk(workspace):
11
+ if "CLAUDE.md" in filenames:
12
+ old_path = Path(dirpath) / "CLAUDE.md"
13
+ new_path = Path(dirpath) / "AGENTS.md"
14
+ old_path.rename(new_path)
15
+ renamed.append(new_path)
16
+ return renamed
17
+
18
+
19
+ def main() -> None:
20
+ parser = argparse.ArgumentParser(
21
+ description="Rename all CLAUDE.md files to AGENTS.md under a workspace."
22
+ )
23
+ parser.add_argument(
24
+ "workspace",
25
+ nargs="?",
26
+ default="./",
27
+ help="Root directory to search (default: current directory)",
28
+ )
29
+ args = parser.parse_args()
30
+
31
+ renamed = claude_to_agents(args.workspace)
32
+ if renamed:
33
+ for path in renamed:
34
+ print(f"Renamed: {path}")
35
+ print(f"\nTotal: {len(renamed)} file(s) renamed.")
36
+ else:
37
+ print("No CLAUDE.md files found.")
38
+
39
+
40
+ if __name__ == "__main__":
41
+ main()
@@ -0,0 +1,65 @@
1
+ import just
2
+
3
+
4
+ @just.installer(check="glab version")
5
+ def install_glab():
6
+ """Install GitLab CLI (glab)."""
7
+
8
+ if just.system.platform == "darwin":
9
+ if just.system.pms.brew.is_available():
10
+ just.execute_commands("brew install glab")
11
+ else:
12
+ raise NotImplementedError(
13
+ "Homebrew is required to install glab on macOS.\n"
14
+ "Visit: https://gitlab.com/gitlab-org/cli/-/releases"
15
+ )
16
+
17
+ elif just.system.platform == "windows":
18
+ if just.system.pms.winget.is_available():
19
+ just.execute_commands("winget install glab.glab")
20
+ else:
21
+ raise NotImplementedError(
22
+ "winget is required to install glab on Windows.\n"
23
+ "Visit: https://gitlab.com/gitlab-org/cli/-/releases"
24
+ )
25
+
26
+ elif just.system.platform == "linux":
27
+ _install_linux()
28
+
29
+ else:
30
+ raise NotImplementedError(
31
+ f"glab is not supported on {just.system.platform}.\n"
32
+ "Visit: https://gitlab.com/gitlab-org/cli/-/releases"
33
+ )
34
+
35
+ just.echo.success("GitLab CLI (glab) installed successfully.")
36
+
37
+
38
+ def _install_linux():
39
+ arch_map = {"x86_64": "amd64", "aarch64": "arm64"}
40
+ arch = arch_map.get(just.system.arch)
41
+ if not arch:
42
+ raise NotImplementedError(f"Unsupported arch: {just.system.arch}")
43
+
44
+ if just.system.pms.brew.is_available():
45
+ just.execute_commands("brew install glab")
46
+ return
47
+
48
+ if just.system.pms.apt.is_available():
49
+ try:
50
+ just.execute_commands(
51
+ "sudo apt update && sudo apt install -y glab"
52
+ )
53
+ return
54
+ except Exception:
55
+ pass
56
+
57
+ url = (
58
+ "https://gitlab.com/gitlab-org/cli/-/releases/permalink/latest/"
59
+ f"downloads/glab_linux_{arch}.tar.gz"
60
+ )
61
+ just.ArchiveInstaller(
62
+ url=url,
63
+ executables=["glab"],
64
+ name="glab",
65
+ ).run()
@@ -0,0 +1,24 @@
1
+ import just
2
+ from just.core.installer import BashScriptInstaller, PowerShellInstaller
3
+
4
+
5
+ @just.installer(check="kimi --version")
6
+ def install_kimi():
7
+ """Install Kimi Code CLI by Moonshot AI."""
8
+
9
+ if just.system.platform in ("linux", "darwin"):
10
+ BashScriptInstaller(
11
+ script_url="https://code.kimi.com/install.sh",
12
+ name="kimi",
13
+ ).run()
14
+
15
+ elif just.system.platform == "windows":
16
+ PowerShellInstaller(
17
+ script_url="https://code.kimi.com/install.ps1",
18
+ name="kimi",
19
+ ).run()
20
+
21
+ else:
22
+ raise NotImplementedError(
23
+ f"Kimi Code CLI is not supported on {just.system.platform}."
24
+ )
@@ -0,0 +1,9 @@
1
+ import just
2
+
3
+
4
+ @just.installer
5
+ def install_mssh():
6
+ """
7
+ Install TUI SSH Manager
8
+ """
9
+ just.execute_commands("pip install git+https://github.com/zjxszzzcb/ssh-manager.git")
@@ -316,7 +316,7 @@ wheels = [
316
316
 
317
317
  [[package]]
318
318
  name = "just-cli"
319
- version = "0.2.1"
319
+ version = "0.4.0"
320
320
  source = { editable = "." }
321
321
  dependencies = [
322
322
  { name = "httpx" },
@@ -329,9 +329,15 @@ dependencies = [
329
329
  { name = "zstandard" },
330
330
  ]
331
331
 
332
+ [package.optional-dependencies]
333
+ dev = [
334
+ { name = "loguru" },
335
+ ]
336
+
332
337
  [package.metadata]
333
338
  requires-dist = [
334
339
  { name = "httpx" },
340
+ { name = "loguru", marker = "extra == 'dev'" },
335
341
  { name = "prompt-toolkit", specifier = ">=3.0.0" },
336
342
  { name = "py7zr" },
337
343
  { name = "python-dotenv" },
@@ -340,6 +346,7 @@ requires-dist = [
340
346
  { name = "typer", specifier = ">=0.20.0" },
341
347
  { name = "zstandard" },
342
348
  ]
349
+ provides-extras = ["dev"]
343
350
 
344
351
  [[package]]
345
352
  name = "linkify-it-py"
@@ -353,6 +360,19 @@ wheels = [
353
360
  { url = "https://files.pythonhosted.org/packages/04/1e/b832de447dee8b582cac175871d2f6c3d5077cc56d5575cadba1fd1cccfa/linkify_it_py-2.0.3-py3-none-any.whl", hash = "sha256:6bcbc417b0ac14323382aef5c5192c0075bf8a9d6b41820a2b66371eac6b6d79", size = 19820, upload-time = "2024-02-04T14:48:02.496Z" },
354
361
  ]
355
362
 
363
+ [[package]]
364
+ name = "loguru"
365
+ version = "0.7.3"
366
+ source = { registry = "https://pypi.org/simple" }
367
+ dependencies = [
368
+ { name = "colorama", marker = "sys_platform == 'win32'" },
369
+ { name = "win32-setctime", marker = "sys_platform == 'win32'" },
370
+ ]
371
+ sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload-time = "2024-12-06T11:20:56.608Z" }
372
+ wheels = [
373
+ { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload-time = "2024-12-06T11:20:54.538Z" },
374
+ ]
375
+
356
376
  [[package]]
357
377
  name = "markdown-it-py"
358
378
  version = "4.0.0"
@@ -802,6 +822,15 @@ wheels = [
802
822
  { url = "https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl", hash = "sha256:1a3a1e510b553315f8e146c54764f4fb6264ffad731b3d78088cdb1478ffbdad", size = 94189, upload-time = "2026-02-06T19:19:39.646Z" },
803
823
  ]
804
824
 
825
+ [[package]]
826
+ name = "win32-setctime"
827
+ version = "1.2.0"
828
+ source = { registry = "https://pypi.org/simple" }
829
+ sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload-time = "2024-12-07T15:28:28.314Z" }
830
+ wheels = [
831
+ { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload-time = "2024-12-07T15:28:26.465Z" },
832
+ ]
833
+
805
834
  [[package]]
806
835
  name = "zstandard"
807
836
  version = "0.25.0"
@@ -1,237 +0,0 @@
1
- # Edit Installer: macOS Support with micro Implementation Plan
2
-
3
- > **For agentic workers:** REQUIRED: Use superpowers:subagent-driven-development (if subagents available) or superpowers:executing-plans to implement this plan. Steps use checkbox (`- [ ]`) syntax for tracking.
4
-
5
- **Goal:** Add macOS support to `just install edit` by installing the `micro` text editor
6
-
7
- **Architecture:** Platform-specific branching in installer function - Windows/Linux continue using Microsoft Edit, macOS uses micro with symlink from `edit` to `micro`.
8
-
9
- **Tech Stack:** Python 3.10+, typer, just installer framework
10
-
11
- ---
12
-
13
- ## File Structure
14
-
15
- **Files to modify:**
16
- - `src/just/installers/edit/installer.py` - Main installer implementation
17
-
18
- **No new files needed.**
19
-
20
- ---
21
-
22
- ## Chunk 1: Update installer.py with macOS micro support
23
-
24
- ### Task 1: Modify version parameter and add platform detection
25
-
26
- **Files:**
27
- - Modify: `src/just/installers/edit/installer.py`
28
-
29
- - [ ] **Step 1: Update the version parameter default**
30
-
31
- Change the `version` parameter default from `"1.2.0"` to `None`:
32
-
33
- ```python
34
- def install_edit(
35
- version: just.Annotated[
36
- str, just.Option("-v", "--version", help="The version of Edit to install.")
37
- ] = None, # Changed from "1.2.0"
38
- ):
39
- ```
40
-
41
- - [ ] **Step 2: Add version resolution logic**
42
-
43
- Add platform-specific default version after the function definition:
44
-
45
- ```python
46
- # Resolve default version based on platform
47
- if version is None:
48
- if just.system.platform == "darwin":
49
- version = "2.0.15" # micro latest stable
50
- else:
51
- version = "1.2.0" # Microsoft Edit
52
- ```
53
-
54
- - [ ] **Step 3: Update docstring**
55
-
56
- Update the docstring to reflect macOS support:
57
-
58
- ```python
59
- """
60
- Install a terminal text editor.
61
-
62
- - Windows/Linux: Microsoft Edit
63
- - macOS: micro (with 'edit' symlink)
64
- """
65
- ```
66
-
67
- - [ ] **Step 4: Commit**
68
-
69
- ```bash
70
- git add src/just/installers/edit/installer.py
71
- git commit -m "feat(edit): add version parameter resolution for platform defaults"
72
- ```
73
-
74
- ---
75
-
76
- ### Task 2: Add macOS branch with micro installation
77
-
78
- **Files:**
79
- - Modify: `src/just/installers/edit/installer.py`
80
-
81
- - [ ] **Step 1: Add macOS platform branch**
82
-
83
- Add the `elif just.system.platform == "darwin":` branch before the `else` clause:
84
-
85
- ```python
86
- elif just.system.platform == "darwin":
87
- # Install micro text editor for macOS
88
- editor_name = "micro"
89
- url = f"https://github.com/zyedidia/micro/releases/download/v{version}/micro-{version}-{just.system.arch}-darwin.tar.gz"
90
-
91
- just.echo.info(f"Installing {editor_name} v{version} as the default editor...")
92
-
93
- just.ArchiveInstaller(
94
- url=url,
95
- executables=["micro"],
96
- name="micro",
97
- ).run()
98
- ```
99
-
100
- - [ ] **Step 2: Add edit -> micro symlink creation**
101
-
102
- After the `ArchiveInstaller().run()` call in the macOS branch, add symlink creation:
103
-
104
- ```python
105
- # Create edit -> micro symlink for consistency
106
- from just.core.installer.utils import create_symlink_or_wrapper
107
- from just.core.config.utils import get_bin_dir
108
-
109
- micro_path = get_bin_dir() / "micro"
110
- create_symlink_or_wrapper(
111
- target=micro_path,
112
- link_dir=get_bin_dir(),
113
- link_name="edit"
114
- )
115
- ```
116
-
117
- - [ ] **Step 3: Add info log for Windows/Linux branches**
118
-
119
- Add `just.echo.info()` calls before `ArchiveInstaller().run()` in Windows and Linux branches:
120
-
121
- ```python
122
- just.echo.info(f"Installing Microsoft Edit v{version} as the default editor...")
123
- ```
124
-
125
- - [ ] **Step 4: Commit**
126
-
127
- ```bash
128
- git add src/just/installers/edit/installer.py
129
- git commit -m "feat(edit): add macOS support with micro editor"
130
- ```
131
-
132
- ---
133
-
134
- ### Task 3: Update installer decorator check command
135
-
136
- **Files:**
137
- - Modify: `src/just/installers/edit/installer.py`
138
-
139
- - [ ] **Step 1: Update check command for platform detection**
140
-
141
- The current `@just.installer(check="edit -v")` won't work for macOS since we install micro first.
142
- Update to use a dynamic check or remove the check parameter for now:
143
-
144
- ```python
145
- @just.installer(check="edit --version") # Works for both after symlink is created
146
- ```
147
-
148
- Note: `micro --version` works, and after symlink `edit --version` will invoke micro.
149
-
150
- - [ ] **Step 2: Commit**
151
-
152
- ```bash
153
- git add src/just/installers/edit/installer.py
154
- git commit -m "fix(edit): update check command to work with micro"
155
- ```
156
-
157
- ---
158
-
159
- ## Chunk 2: Testing
160
-
161
- ### Task 4: Manual testing on macOS
162
-
163
- **Files:**
164
- - None (manual testing)
165
-
166
- - [ ] **Step 1: Test macOS installation**
167
-
168
- Run on macOS:
169
- ```bash
170
- just install edit
171
- ```
172
-
173
- Expected output:
174
- ```
175
- Installing micro v2.0.15 as the default editor...
176
- ...
177
- Installing micro v2.0.15 as the default editor...
178
- ```
179
-
180
- - [ ] **Step 2: Verify edit command works**
181
-
182
- ```bash
183
- edit --version
184
- ```
185
-
186
- Expected: micro version output
187
-
188
- - [ ] **Step 3: Verify symlink exists**
189
-
190
- ```bash
191
- ls -la ~/.just/bin/edit
192
- ```
193
-
194
- Expected: symlink pointing to micro
195
-
196
- - [ ] **Step 4: Test version override**
197
-
198
- ```bash
199
- just install edit -v 2.0.14
200
- ```
201
-
202
- Expected: installs specified micro version
203
-
204
- ---
205
-
206
- ### Task 5: Verify existing platforms unchanged
207
-
208
- **Files:**
209
- - None (manual testing on Windows/Linux)
210
-
211
- - [ ] **Step 1: Test default behavior**
212
-
213
- ```bash
214
- just install edit
215
- ```
216
-
217
- Expected: installs Microsoft Edit v1.2.0
218
-
219
- - [ ] **Step 2: Test version override**
220
-
221
- ```bash
222
- just install edit -v 1.1.0
223
- ```
224
-
225
- Expected: installs specified Microsoft Edit version
226
-
227
- ---
228
-
229
- ## Final State
230
-
231
- After implementation, `just install edit` will:
232
-
233
- | Platform | Editor | Default Version | Command Available |
234
- |----------|--------|-----------------|-------------------|
235
- | macOS | micro | 2.0.15 | `edit` (-> micro) |
236
- | Windows | Microsoft Edit | 1.2.0 | `edit` |
237
- | Linux | Microsoft Edit | 1.2.0 | `edit` |
@@ -1,9 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "mcp__web-search-prime__web_search_prime",
5
- "mcp__web-reader__webReader",
6
- "mcp__context7__query-docs"
7
- ]
8
- }
9
- }
@@ -1,14 +0,0 @@
1
- import just
2
-
3
-
4
- @just.installer
5
- def install_mssh(
6
- version: just.Annotated[str, just.Option(
7
- '-v', '--version',
8
- help="The version of nvm to install."
9
- )] = ""
10
- ):
11
- """
12
- Install TUI SSH Manager
13
- """
14
- just.execute_commands("pip install https://github.com/zjxszzzcb/ssh-manager/releases/download/v0.1.0/ssh_manager-0.1.0-py3-none-any.whl")
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