rai-cli 2.0.0a1__py3-none-any.whl

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 (137) hide show
  1. rai_cli/__init__.py +38 -0
  2. rai_cli/__main__.py +30 -0
  3. rai_cli/cli/__init__.py +3 -0
  4. rai_cli/cli/commands/__init__.py +3 -0
  5. rai_cli/cli/commands/base.py +101 -0
  6. rai_cli/cli/commands/discover.py +547 -0
  7. rai_cli/cli/commands/init.py +460 -0
  8. rai_cli/cli/commands/memory.py +1626 -0
  9. rai_cli/cli/commands/profile.py +51 -0
  10. rai_cli/cli/commands/session.py +264 -0
  11. rai_cli/cli/commands/skill.py +226 -0
  12. rai_cli/cli/error_handler.py +158 -0
  13. rai_cli/cli/main.py +137 -0
  14. rai_cli/config/__init__.py +11 -0
  15. rai_cli/config/paths.py +309 -0
  16. rai_cli/config/settings.py +180 -0
  17. rai_cli/context/__init__.py +42 -0
  18. rai_cli/context/analyzers/__init__.py +16 -0
  19. rai_cli/context/analyzers/models.py +36 -0
  20. rai_cli/context/analyzers/protocol.py +43 -0
  21. rai_cli/context/analyzers/python.py +291 -0
  22. rai_cli/context/builder.py +1566 -0
  23. rai_cli/context/diff.py +213 -0
  24. rai_cli/context/extractors/__init__.py +13 -0
  25. rai_cli/context/extractors/skills.py +121 -0
  26. rai_cli/context/graph.py +300 -0
  27. rai_cli/context/models.py +134 -0
  28. rai_cli/context/query.py +507 -0
  29. rai_cli/core/__init__.py +37 -0
  30. rai_cli/core/files.py +66 -0
  31. rai_cli/core/text.py +174 -0
  32. rai_cli/core/tools.py +441 -0
  33. rai_cli/discovery/__init__.py +50 -0
  34. rai_cli/discovery/analyzer.py +601 -0
  35. rai_cli/discovery/drift.py +355 -0
  36. rai_cli/discovery/scanner.py +1200 -0
  37. rai_cli/engines/__init__.py +3 -0
  38. rai_cli/exceptions.py +200 -0
  39. rai_cli/governance/__init__.py +11 -0
  40. rai_cli/governance/extractor.py +311 -0
  41. rai_cli/governance/models.py +132 -0
  42. rai_cli/governance/parsers/__init__.py +35 -0
  43. rai_cli/governance/parsers/adr.py +255 -0
  44. rai_cli/governance/parsers/backlog.py +302 -0
  45. rai_cli/governance/parsers/constitution.py +100 -0
  46. rai_cli/governance/parsers/epic.py +299 -0
  47. rai_cli/governance/parsers/glossary.py +297 -0
  48. rai_cli/governance/parsers/guardrails.py +326 -0
  49. rai_cli/governance/parsers/prd.py +93 -0
  50. rai_cli/governance/parsers/vision.py +97 -0
  51. rai_cli/handlers/__init__.py +3 -0
  52. rai_cli/memory/__init__.py +58 -0
  53. rai_cli/memory/loader.py +247 -0
  54. rai_cli/memory/migration.py +247 -0
  55. rai_cli/memory/models.py +169 -0
  56. rai_cli/memory/writer.py +485 -0
  57. rai_cli/onboarding/__init__.py +96 -0
  58. rai_cli/onboarding/bootstrap.py +164 -0
  59. rai_cli/onboarding/claudemd.py +209 -0
  60. rai_cli/onboarding/conventions.py +742 -0
  61. rai_cli/onboarding/detection.py +155 -0
  62. rai_cli/onboarding/governance.py +443 -0
  63. rai_cli/onboarding/manifest.py +101 -0
  64. rai_cli/onboarding/memory_md.py +387 -0
  65. rai_cli/onboarding/migration.py +207 -0
  66. rai_cli/onboarding/profile.py +457 -0
  67. rai_cli/onboarding/skills.py +114 -0
  68. rai_cli/output/__init__.py +28 -0
  69. rai_cli/output/console.py +394 -0
  70. rai_cli/output/formatters/__init__.py +9 -0
  71. rai_cli/output/formatters/discover.py +442 -0
  72. rai_cli/output/formatters/skill.py +293 -0
  73. rai_cli/rai_base/__init__.py +22 -0
  74. rai_cli/rai_base/framework/__init__.py +7 -0
  75. rai_cli/rai_base/framework/methodology.yaml +235 -0
  76. rai_cli/rai_base/governance/__init__.py +1 -0
  77. rai_cli/rai_base/governance/architecture/__init__.py +1 -0
  78. rai_cli/rai_base/governance/architecture/domain-model.md +20 -0
  79. rai_cli/rai_base/governance/architecture/system-context.md +34 -0
  80. rai_cli/rai_base/governance/architecture/system-design.md +24 -0
  81. rai_cli/rai_base/governance/backlog.md +8 -0
  82. rai_cli/rai_base/governance/guardrails.md +18 -0
  83. rai_cli/rai_base/governance/prd.md +25 -0
  84. rai_cli/rai_base/governance/vision.md +16 -0
  85. rai_cli/rai_base/identity/__init__.py +8 -0
  86. rai_cli/rai_base/identity/core.md +119 -0
  87. rai_cli/rai_base/identity/perspective.md +119 -0
  88. rai_cli/rai_base/memory/__init__.py +7 -0
  89. rai_cli/rai_base/memory/patterns-base.jsonl +20 -0
  90. rai_cli/schemas/__init__.py +3 -0
  91. rai_cli/schemas/session_state.py +106 -0
  92. rai_cli/session/__init__.py +5 -0
  93. rai_cli/session/bundle.py +389 -0
  94. rai_cli/session/close.py +255 -0
  95. rai_cli/session/state.py +108 -0
  96. rai_cli/skills/__init__.py +44 -0
  97. rai_cli/skills/locator.py +129 -0
  98. rai_cli/skills/name_checker.py +203 -0
  99. rai_cli/skills/parser.py +145 -0
  100. rai_cli/skills/scaffold.py +185 -0
  101. rai_cli/skills/schema.py +130 -0
  102. rai_cli/skills/validator.py +172 -0
  103. rai_cli/skills_base/__init__.py +59 -0
  104. rai_cli/skills_base/rai-debug/SKILL.md +296 -0
  105. rai_cli/skills_base/rai-discover-document/SKILL.md +292 -0
  106. rai_cli/skills_base/rai-discover-scan/SKILL.md +325 -0
  107. rai_cli/skills_base/rai-discover-start/SKILL.md +213 -0
  108. rai_cli/skills_base/rai-discover-validate/SKILL.md +310 -0
  109. rai_cli/skills_base/rai-epic-close/SKILL.md +369 -0
  110. rai_cli/skills_base/rai-epic-design/SKILL.md +622 -0
  111. rai_cli/skills_base/rai-epic-plan/SKILL.md +672 -0
  112. rai_cli/skills_base/rai-epic-plan/_references/sequencing-strategies.md +67 -0
  113. rai_cli/skills_base/rai-epic-start/SKILL.md +217 -0
  114. rai_cli/skills_base/rai-project-create/SKILL.md +455 -0
  115. rai_cli/skills_base/rai-project-onboard/SKILL.md +503 -0
  116. rai_cli/skills_base/rai-research/SKILL.md +264 -0
  117. rai_cli/skills_base/rai-research/references/research-prompt-template.md +317 -0
  118. rai_cli/skills_base/rai-session-close/SKILL.md +151 -0
  119. rai_cli/skills_base/rai-session-start/SKILL.md +110 -0
  120. rai_cli/skills_base/rai-story-close/SKILL.md +367 -0
  121. rai_cli/skills_base/rai-story-design/SKILL.md +339 -0
  122. rai_cli/skills_base/rai-story-design/references/tech-design-story-v2.md +293 -0
  123. rai_cli/skills_base/rai-story-implement/SKILL.md +256 -0
  124. rai_cli/skills_base/rai-story-plan/SKILL.md +307 -0
  125. rai_cli/skills_base/rai-story-review/SKILL.md +276 -0
  126. rai_cli/skills_base/rai-story-start/SKILL.md +288 -0
  127. rai_cli/telemetry/__init__.py +42 -0
  128. rai_cli/telemetry/schemas.py +285 -0
  129. rai_cli/telemetry/writer.py +210 -0
  130. rai_cli/viz/__init__.py +7 -0
  131. rai_cli/viz/generator.py +404 -0
  132. rai_cli-2.0.0a1.dist-info/METADATA +289 -0
  133. rai_cli-2.0.0a1.dist-info/RECORD +137 -0
  134. rai_cli-2.0.0a1.dist-info/WHEEL +4 -0
  135. rai_cli-2.0.0a1.dist-info/entry_points.txt +2 -0
  136. rai_cli-2.0.0a1.dist-info/licenses/LICENSE +190 -0
  137. rai_cli-2.0.0a1.dist-info/licenses/NOTICE +4 -0
rai_cli/__init__.py ADDED
@@ -0,0 +1,38 @@
1
+ """RaiSE CLI - Reliable AI Software Engineering.
2
+
3
+ A governance framework for AI-assisted software development.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ from rai_cli.exceptions import (
9
+ ArtifactNotFoundError,
10
+ ConfigurationError,
11
+ DependencyError,
12
+ GateFailedError,
13
+ GateNotFoundError,
14
+ KataNotFoundError,
15
+ RaiError,
16
+ StateError,
17
+ ValidationError,
18
+ )
19
+
20
+ __version__ = "2.0.0-alpha.1"
21
+ __author__ = "Emilio Osorio"
22
+ __license__ = "MIT"
23
+
24
+ __all__ = [
25
+ "__version__",
26
+ "__author__",
27
+ "__license__",
28
+ # Exceptions
29
+ "RaiError",
30
+ "ConfigurationError",
31
+ "KataNotFoundError",
32
+ "GateNotFoundError",
33
+ "ArtifactNotFoundError",
34
+ "DependencyError",
35
+ "StateError",
36
+ "ValidationError",
37
+ "GateFailedError",
38
+ ]
rai_cli/__main__.py ADDED
@@ -0,0 +1,30 @@
1
+ """Entry point for python -m rai_cli."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import sys
6
+
7
+ from rai_cli.cli.main import app
8
+ from rai_cli.exceptions import RaiError
9
+
10
+
11
+ def main() -> None:
12
+ """Run the CLI application with error handling.
13
+
14
+ Catches RaiError exceptions and displays them with proper formatting,
15
+ then exits with the appropriate exit code.
16
+ """
17
+ try:
18
+ app()
19
+ except RaiError as error:
20
+ # Import here to avoid circular imports and for lazy loading
21
+ from rai_cli.cli.error_handler import handle_error
22
+ from rai_cli.cli.main import get_output_format
23
+
24
+ output_format = get_output_format()
25
+ exit_code = handle_error(error, output_format=output_format)
26
+ sys.exit(exit_code)
27
+
28
+
29
+ if __name__ == "__main__":
30
+ main()
@@ -0,0 +1,3 @@
1
+ """CLI presentation layer."""
2
+
3
+ from __future__ import annotations
@@ -0,0 +1,3 @@
1
+ """Commands."""
2
+
3
+ from __future__ import annotations
@@ -0,0 +1,101 @@
1
+ """CLI commands for base Rai package information.
2
+
3
+ This module provides the `raise base` command group for viewing
4
+ information about the bundled base Rai package.
5
+
6
+ Example:
7
+ $ raise base show # View base package info and install status
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from importlib.resources import files
13
+ from pathlib import Path
14
+
15
+ import typer
16
+
17
+ from rai_cli.config.paths import get_identity_dir
18
+ from rai_cli.rai_base import __version__ as base_version
19
+
20
+ base_app = typer.Typer(
21
+ name="base",
22
+ help="View base Rai package info",
23
+ no_args_is_help=True,
24
+ )
25
+
26
+
27
+ def _get_project_root() -> Path:
28
+ """Get the project root directory.
29
+
30
+ Returns:
31
+ Current working directory as project root.
32
+ """
33
+ return Path.cwd()
34
+
35
+
36
+ def _count_base_patterns() -> int:
37
+ """Count patterns in the bundled base package.
38
+
39
+ Returns:
40
+ Number of base patterns in patterns-base.jsonl.
41
+ """
42
+ base = files("rai_cli.rai_base")
43
+ source = base / "memory" / "patterns-base.jsonl"
44
+ content = source.read_text() # type: ignore[union-attr]
45
+ return sum(1 for line in content.splitlines() if line.strip())
46
+
47
+
48
+ def _check_installed(project_root: Path) -> bool:
49
+ """Check if base Rai has been bootstrapped to this project.
50
+
51
+ Args:
52
+ project_root: Project root directory.
53
+
54
+ Returns:
55
+ True if .raise/rai/identity/ exists with files.
56
+ """
57
+ identity_dir = get_identity_dir(project_root)
58
+ return identity_dir.exists() and any(identity_dir.iterdir())
59
+
60
+
61
+ @base_app.command()
62
+ def show() -> None:
63
+ """Display base Rai package information.
64
+
65
+ Shows the bundled base version, contents (identity, patterns,
66
+ methodology), and whether it has been installed in the current project.
67
+
68
+ Examples:
69
+ $ raise base show
70
+ """
71
+ project_root = _get_project_root()
72
+ pattern_count = _count_base_patterns()
73
+ installed = _check_installed(project_root)
74
+
75
+ # Check for methodology
76
+ base = files("rai_cli.rai_base")
77
+ has_methodology = (base / "framework" / "methodology.yaml").is_file()
78
+
79
+ # Check identity files
80
+ identity_base = base / "identity"
81
+ identity_files: list[str] = []
82
+ try:
83
+ for item in identity_base.iterdir(): # type: ignore[union-attr]
84
+ name = getattr(item, "name", str(item))
85
+ if name.endswith(".md"):
86
+ identity_files.append(name)
87
+ except (AttributeError, TypeError):
88
+ pass
89
+
90
+ typer.echo(f"Base Rai v{base_version}")
91
+ typer.echo()
92
+ typer.echo("Contents:")
93
+ typer.echo(f" Identity: {', '.join(sorted(identity_files)) or 'none'}")
94
+ typer.echo(f" Patterns: {pattern_count} base patterns")
95
+ typer.echo(f" Methodology: {'yes' if has_methodology else 'no'}")
96
+ typer.echo()
97
+
98
+ if installed:
99
+ typer.echo(f"Status: Installed in {project_root}")
100
+ else:
101
+ typer.echo("Status: Not installed (run `raise init` to bootstrap)")