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.
- rai_cli/__init__.py +38 -0
- rai_cli/__main__.py +30 -0
- rai_cli/cli/__init__.py +3 -0
- rai_cli/cli/commands/__init__.py +3 -0
- rai_cli/cli/commands/base.py +101 -0
- rai_cli/cli/commands/discover.py +547 -0
- rai_cli/cli/commands/init.py +460 -0
- rai_cli/cli/commands/memory.py +1626 -0
- rai_cli/cli/commands/profile.py +51 -0
- rai_cli/cli/commands/session.py +264 -0
- rai_cli/cli/commands/skill.py +226 -0
- rai_cli/cli/error_handler.py +158 -0
- rai_cli/cli/main.py +137 -0
- rai_cli/config/__init__.py +11 -0
- rai_cli/config/paths.py +309 -0
- rai_cli/config/settings.py +180 -0
- rai_cli/context/__init__.py +42 -0
- rai_cli/context/analyzers/__init__.py +16 -0
- rai_cli/context/analyzers/models.py +36 -0
- rai_cli/context/analyzers/protocol.py +43 -0
- rai_cli/context/analyzers/python.py +291 -0
- rai_cli/context/builder.py +1566 -0
- rai_cli/context/diff.py +213 -0
- rai_cli/context/extractors/__init__.py +13 -0
- rai_cli/context/extractors/skills.py +121 -0
- rai_cli/context/graph.py +300 -0
- rai_cli/context/models.py +134 -0
- rai_cli/context/query.py +507 -0
- rai_cli/core/__init__.py +37 -0
- rai_cli/core/files.py +66 -0
- rai_cli/core/text.py +174 -0
- rai_cli/core/tools.py +441 -0
- rai_cli/discovery/__init__.py +50 -0
- rai_cli/discovery/analyzer.py +601 -0
- rai_cli/discovery/drift.py +355 -0
- rai_cli/discovery/scanner.py +1200 -0
- rai_cli/engines/__init__.py +3 -0
- rai_cli/exceptions.py +200 -0
- rai_cli/governance/__init__.py +11 -0
- rai_cli/governance/extractor.py +311 -0
- rai_cli/governance/models.py +132 -0
- rai_cli/governance/parsers/__init__.py +35 -0
- rai_cli/governance/parsers/adr.py +255 -0
- rai_cli/governance/parsers/backlog.py +302 -0
- rai_cli/governance/parsers/constitution.py +100 -0
- rai_cli/governance/parsers/epic.py +299 -0
- rai_cli/governance/parsers/glossary.py +297 -0
- rai_cli/governance/parsers/guardrails.py +326 -0
- rai_cli/governance/parsers/prd.py +93 -0
- rai_cli/governance/parsers/vision.py +97 -0
- rai_cli/handlers/__init__.py +3 -0
- rai_cli/memory/__init__.py +58 -0
- rai_cli/memory/loader.py +247 -0
- rai_cli/memory/migration.py +247 -0
- rai_cli/memory/models.py +169 -0
- rai_cli/memory/writer.py +485 -0
- rai_cli/onboarding/__init__.py +96 -0
- rai_cli/onboarding/bootstrap.py +164 -0
- rai_cli/onboarding/claudemd.py +209 -0
- rai_cli/onboarding/conventions.py +742 -0
- rai_cli/onboarding/detection.py +155 -0
- rai_cli/onboarding/governance.py +443 -0
- rai_cli/onboarding/manifest.py +101 -0
- rai_cli/onboarding/memory_md.py +387 -0
- rai_cli/onboarding/migration.py +207 -0
- rai_cli/onboarding/profile.py +457 -0
- rai_cli/onboarding/skills.py +114 -0
- rai_cli/output/__init__.py +28 -0
- rai_cli/output/console.py +394 -0
- rai_cli/output/formatters/__init__.py +9 -0
- rai_cli/output/formatters/discover.py +442 -0
- rai_cli/output/formatters/skill.py +293 -0
- rai_cli/rai_base/__init__.py +22 -0
- rai_cli/rai_base/framework/__init__.py +7 -0
- rai_cli/rai_base/framework/methodology.yaml +235 -0
- rai_cli/rai_base/governance/__init__.py +1 -0
- rai_cli/rai_base/governance/architecture/__init__.py +1 -0
- rai_cli/rai_base/governance/architecture/domain-model.md +20 -0
- rai_cli/rai_base/governance/architecture/system-context.md +34 -0
- rai_cli/rai_base/governance/architecture/system-design.md +24 -0
- rai_cli/rai_base/governance/backlog.md +8 -0
- rai_cli/rai_base/governance/guardrails.md +18 -0
- rai_cli/rai_base/governance/prd.md +25 -0
- rai_cli/rai_base/governance/vision.md +16 -0
- rai_cli/rai_base/identity/__init__.py +8 -0
- rai_cli/rai_base/identity/core.md +119 -0
- rai_cli/rai_base/identity/perspective.md +119 -0
- rai_cli/rai_base/memory/__init__.py +7 -0
- rai_cli/rai_base/memory/patterns-base.jsonl +20 -0
- rai_cli/schemas/__init__.py +3 -0
- rai_cli/schemas/session_state.py +106 -0
- rai_cli/session/__init__.py +5 -0
- rai_cli/session/bundle.py +389 -0
- rai_cli/session/close.py +255 -0
- rai_cli/session/state.py +108 -0
- rai_cli/skills/__init__.py +44 -0
- rai_cli/skills/locator.py +129 -0
- rai_cli/skills/name_checker.py +203 -0
- rai_cli/skills/parser.py +145 -0
- rai_cli/skills/scaffold.py +185 -0
- rai_cli/skills/schema.py +130 -0
- rai_cli/skills/validator.py +172 -0
- rai_cli/skills_base/__init__.py +59 -0
- rai_cli/skills_base/rai-debug/SKILL.md +296 -0
- rai_cli/skills_base/rai-discover-document/SKILL.md +292 -0
- rai_cli/skills_base/rai-discover-scan/SKILL.md +325 -0
- rai_cli/skills_base/rai-discover-start/SKILL.md +213 -0
- rai_cli/skills_base/rai-discover-validate/SKILL.md +310 -0
- rai_cli/skills_base/rai-epic-close/SKILL.md +369 -0
- rai_cli/skills_base/rai-epic-design/SKILL.md +622 -0
- rai_cli/skills_base/rai-epic-plan/SKILL.md +672 -0
- rai_cli/skills_base/rai-epic-plan/_references/sequencing-strategies.md +67 -0
- rai_cli/skills_base/rai-epic-start/SKILL.md +217 -0
- rai_cli/skills_base/rai-project-create/SKILL.md +455 -0
- rai_cli/skills_base/rai-project-onboard/SKILL.md +503 -0
- rai_cli/skills_base/rai-research/SKILL.md +264 -0
- rai_cli/skills_base/rai-research/references/research-prompt-template.md +317 -0
- rai_cli/skills_base/rai-session-close/SKILL.md +151 -0
- rai_cli/skills_base/rai-session-start/SKILL.md +110 -0
- rai_cli/skills_base/rai-story-close/SKILL.md +367 -0
- rai_cli/skills_base/rai-story-design/SKILL.md +339 -0
- rai_cli/skills_base/rai-story-design/references/tech-design-story-v2.md +293 -0
- rai_cli/skills_base/rai-story-implement/SKILL.md +256 -0
- rai_cli/skills_base/rai-story-plan/SKILL.md +307 -0
- rai_cli/skills_base/rai-story-review/SKILL.md +276 -0
- rai_cli/skills_base/rai-story-start/SKILL.md +288 -0
- rai_cli/telemetry/__init__.py +42 -0
- rai_cli/telemetry/schemas.py +285 -0
- rai_cli/telemetry/writer.py +210 -0
- rai_cli/viz/__init__.py +7 -0
- rai_cli/viz/generator.py +404 -0
- rai_cli-2.0.0a1.dist-info/METADATA +289 -0
- rai_cli-2.0.0a1.dist-info/RECORD +137 -0
- rai_cli-2.0.0a1.dist-info/WHEEL +4 -0
- rai_cli-2.0.0a1.dist-info/entry_points.txt +2 -0
- rai_cli-2.0.0a1.dist-info/licenses/LICENSE +190 -0
- 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()
|
rai_cli/cli/__init__.py
ADDED
|
@@ -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)")
|