orchestrata_ultimate.session.examples.portfolio_usage

Reference › orchestrata_ultimate › session › examples › portfolio_usage

An example script whose main demonstrates the portfolio workflow of the PortfolioController: in a temporary directory it creates a portfolio, adds two projects, begins a portfolio session, links a project session for each project, adds and completes portfolio work items, prints the report and shows the start of the portfolio file.

At a glance

Source src/orchestrata_ultimate/session/examples/portfolio_usage.py
Lines of code 121
Classes 0
Functions 1
Imports (internal) orchestrata_ultimate.session
Imported by none
Tests that import it tests/session/test_portfolio_usage_example.py

Class diagram

No classes; see Functions.

Dependency diagram

Dependency diagram orchestrata_ultimate.session.examples.portfolio_usage

API

Functions

Function Signature Summary
main main() -> None Demonstrate portfolio management workflow.

Source

Permalink: https://gitlab.com/MSamy/orchestrata-ultimate-architecture/-/blob/a4cbc2bdf/src/orchestrata_ultimate/session/examples/portfolio_usage.py

# mypy: ignore-errors
"""Portfolio Usage module for Orchestrata."""

import tempfile
from pathlib import Path

from orchestrata_ultimate.session import PortfolioController as PortfolioManager

# !/usr/bin/env python3
"""Portfolio usage example for session_management library."""


def main() -> None:
    """Demonstrate portfolio management workflow."""
    with tempfile.TemporaryDirectory() as temp_dir:
        portfolio_path = Path(temp_dir)
        print(f"Portfolio path: {portfolio_path}")

        # Create project directories
        hooks_path = portfolio_path / "claude-hooks"
        hooks_path.mkdir()
        mcp_path = portfolio_path / "mcp-server"
        mcp_path.mkdir()

        # Step 1: Initialize Portfolio
        print("\n" + "=" * 60)
        print("Step 1: Initialize Portfolio")
        print("=" * 60)

        pm = PortfolioManager(portfolio_path)
        portfolio = pm.initialize(
            name="Claude Development Tools",
            summary="Tools for reliable Claude Code development",
        )
        print(f"Portfolio: {portfolio.name}")

        # Step 2: Add Projects
        print("\n" + "=" * 60)
        print("Step 2: Add Projects")
        print("=" * 60)

        pm.add_project("claude-hooks", "claude-hooks", "Session and tool hooks")
        pm.add_project("mcp-server", "mcp-server", "Knowledge MCP server")

        for p in pm.list_projects():
            print(f"  - {p.name}: {p.summary}")

        # Step 3: Start Portfolio Session
        print("\n" + "=" * 60)
        print("Step 3: Start Portfolio Session")
        print("=" * 60)

        ps = pm.begin_session(
            purpose="Cross-project integration",
            objectives=["Integrate hooks with MCP", "Test workflow"],
        )
        print(f"Portfolio Session: {ps.session_id}")
        print(f"Purpose: {ps.purpose}")

        # Step 4: Link Project Sessions
        print("\n" + "=" * 60)
        print("Step 4: Link Project Sessions")
        print("=" * 60)

        pm.link_project_session(ps.seq, "claude-hooks", 1, "SessionStart hook")
        pm.link_project_session(ps.seq, "mcp-server", 1, "Context tools")

        current = pm.get_session(ps.seq)
        if current is not None:
            for linked in current.linked:
                print(f"  - {linked.project}: Session {linked.session_num:03d}")

        # Step 5: Track Portfolio Work
        print("\n" + "=" * 60)
        print("Step 5: Track Portfolio Work")
        print("=" * 60)

        pm.add_work("Integrate hooks with MCP", priority="P1")
        pm.add_work("Shared config system", priority="P1")
        print("Work items added")

        # Step 6: View Pending Work
        print("\n" + "=" * 60)
        print("Step 6: Pending Work")
        print("=" * 60)

        for item in pm.pending_work():
            pri = f"[{item.priority}]" if item.priority else ""
            print(f"  {pri} {item.text}")

        # Step 7: Complete Work
        print("\n" + "=" * 60)
        print("Step 7: Complete Work")
        print("=" * 60)

        pm.complete_work("Integrate hooks with MCP")
        print("Marked 'Integrate hooks with MCP' as done")

        # Step 8: Portfolio Summary
        print("\n" + "=" * 60)
        print("Step 8: Portfolio Summary")
        print("=" * 60)

        summary = pm.report()
        print(f"Name: {summary['name']}")
        print(f"Projects: {summary['project_count']}")
        print(f"Sessions: {summary['session_count']}")
        print(f"Pending work: {summary['pending_work']}")

        # Show portfolio.json
        print("\n" + "=" * 60)
        print("Generated portfolio.json (first 40 lines):")
        print("=" * 60)

        content = (portfolio_path / "portfolio.json").read_text()
        for line in content.split("\n")[:40]:
            print(line)


if __name__ == "__main__":
    main()