Files
dss/dss-mvp1/dss-cli.py
Digital Production Factory d53b61008c feat(analysis): Implement project analysis engine and CI/CD workflow
This commit introduces a new project analysis engine to the DSS.

Key features include:
- A new analysis module in `dss-mvp1/dss/analyze` that can parse React projects and generate a dependency graph.
- A command-line interface (`dss-mvp1/dss-cli.py`) to run the analysis, designed for use in CI/CD pipelines.
- A new `dss_project_export_context` tool in the Claude MCP server to allow AI agents to access the analysis results.
- A `.gitlab-ci.yml` file to automate the analysis on every push, ensuring the project context is always up-to-date.
- Tests for the new analysis functionality.

This new architecture enables DSS to have a deep, version-controlled understanding of a project's structure, which can be used to power more intelligent agents and provide better developer guidance. The analysis is no longer automatically triggered on `init`, but is designed to be run manually or by a CI/CD pipeline.
2025-12-10 11:05:27 -03:00

93 lines
3.3 KiB
Python
Executable File

#!/usr/bin/env python3
"""
DSS-CLI - A command-line interface for the DSS Engine
This script provides a direct, scriptable interface to the core functionalities
of the DSS analysis and context engine. It is designed for use in CI/CD
pipelines and other automated workflows.
"""
import argparse
import json
import os
import sys
from pathlib import Path
# Ensure the script can find the 'dss' module
# This adds the parent directory of 'dss-mvp1' to the Python path
# Assuming the script is run from the project root, this will allow `from dss...` imports
sys.path.insert(0, str(Path(__file__).parent.parent))
try:
from dss.analyze.project_analyzer import run_project_analysis, export_project_context
except ImportError as e:
print(f"Error: Could not import DSS modules. Make sure dss-mvp1 is in the PYTHONPATH.", file=sys.stderr)
print(f"Import error: {e}", file=sys.stderr)
sys.exit(1)
def main():
"""Main function to parse arguments and dispatch commands."""
parser = argparse.ArgumentParser(
description="DSS Command Line Interface for project analysis and context management."
)
subparsers = parser.add_subparsers(dest="command", required=True, help="Available commands")
# =========================================================================
# 'analyze' command
# =========================================================================
analyze_parser = subparsers.add_parser(
"analyze",
help="Run a deep analysis of a project and save the results to .dss/analysis_graph.json"
)
analyze_parser.add_argument(
"--project-path",
required=True,
help="The root path to the project directory to be analyzed."
)
# =========================================================================
# 'export-context' command
# =========================================================================
export_parser = subparsers.add_parser(
"export-context",
help="Export the comprehensive project context as a JSON object to stdout."
)
export_parser.add_argument(
"--project-path",
required=True,
help="The path to the project directory."
)
args = parser.parse_args()
# --- Command Dispatch ---
project_path = Path(args.project_path).resolve()
if not project_path.is_dir():
print(f"Error: Provided project path is not a valid directory: {project_path}", file=sys.stderr)
sys.exit(1)
try:
if args.command == "analyze":
result = run_project_analysis(str(project_path))
print(f"Analysis complete. Graph saved to {project_path / '.dss' / 'analysis_graph.json'}")
# Optionally print a summary to stdout
summary = {
"status": "success",
"nodes_created": len(result.get("nodes", [])),
"links_created": len(result.get("links", [])),
}
print(json.dumps(summary, indent=2))
elif args.command == "export-context":
result = export_project_context(str(project_path))
# Print the full context to stdout
print(json.dumps(result, indent=2))
except Exception as e:
print(json.dumps({"success": False, "error": str(e)}), file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()