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
API
Functions
| Function | Signature | Summary |
|---|---|---|
main |
main() -> None |
Demonstrate portfolio management workflow. |
Source
# 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()