Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ bedsheet/
| `docs/deployment-guide.html` | Local, GCP, and AWS deployment |
| `docs/gcp-deployment-deep-dive.html` | GCP architecture, troubleshooting, best practices |
| `docs/multi-agent-guide.html` | Supervisor patterns |
| `docs/agent-sentinel-setup.html` | Agent Sentinel setup guide |
| `docs/agent-sentinel-dashboard.html` | Live PubNub signal dashboard |
| `PROJECT_STATUS.md` | Detailed project status and session history |

## Common Commands
Expand Down
137 changes: 137 additions & 0 deletions SESSION_HANDOFF_2026-01-26.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
# Session Handoff - 2026-01-26

## What Was Accomplished

### 1. Demo Recording Preparation
- **Released v0.4.8 to PyPI**
- Updated GCP default model: `gemini-2.5-flash` → `gemini-3-flash-preview`
- Published to https://pypi.org/project/bedsheet/0.4.8/
- Git tag: v0.4.8
- Commits: 7324dd0, 721bb6d

### 2. Documentation Updates
- Added GCP deployment deep dive link to README.md
- Added GCP deployment deep dive to CLAUDE.md docs table
- Created comprehensive demo recording plan: `docs/DEMO_RECORDING_PLAN.md`

### 3. Environment Cleanup (Major!)
- Removed old editable bedsheet install (v0.4.2rc7)
- Cleared uv cache: **freed 7.5GB**
- Removed orphaned packages: anthropic, typer
- Total space freed: **~7.51GB**

### 4. Demo Environment Verified
- ✅ `uvx bedsheet version` → installs v0.4.8 from PyPI
- ✅ No local installations to conflict
- ✅ Clean, production-ready state

## Current Project State

### Version
- **PyPI**: v0.4.8 (latest)
- **Git**: main branch at 721bb6d
- **Tests**: 265 passing

### Files Modified This Session
1. `bedsheet/cli/main.py` - GCP model default
2. `README.md` - Added GCP deep dive link
3. `CLAUDE.md` - Added GCP deep dive to docs table
4. `pyproject.toml` - Version bump to 0.4.8
5. `CHANGELOG.md` - v0.4.8 entry
6. `docs/DEMO_RECORDING_PLAN.md` - New comprehensive demo script

### Critical Files for Next Session
- `docs/DEMO_RECORDING_PLAN.md` - Complete 3-4 minute demo script
- `examples/investment-advisor/` - Demo agent code
- `examples/investment-advisor/bedsheet.yaml` - Multi-target config

## Next Steps (For Recording Demo)

### Pre-Recording Checklist
```bash
# Environment setup
export ANTHROPIC_API_KEY=sk-ant-...
gcloud auth login
gcloud auth application-default login
aws configure # or aws-vault

# Note your GCP project ID for bedsheet.yaml
```

### Demo Flow (from docs/DEMO_RECORDING_PLAN.md)
1. **Scene 1 (30s)**: `uvx bedsheet init investment-demo --target local`
2. **Scene 2 (30s)**: Copy agents.py, edit bedsheet.yaml for multi-target
3. **Scene 3 (45s)**: Local deployment with debug UI
4. **Scene 4 (45s)**: GCP deployment with ADK UI
5. **Scene 5 (60s)**: AWS deployment with debug UI + console

### Dry Run Before Recording
Test each scene end-to-end to catch issues:
```bash
# Test init
uvx bedsheet init test-demo --target local
cd test-demo

# Test local generation
bedsheet generate --target local
cd deploy/local && make build && make run

# Test GCP generation (update project ID first!)
bedsheet generate --target gcp

# Test AWS generation
bedsheet generate --target aws
```

## Known Issues / Gotchas

### GCP
- Must set real project ID in bedsheet.yaml (line 16)
- Requires `gcloud auth application-default login`
- Model will be `gemini-3-flash-preview` (new default)

### AWS
- Requires CDK bootstrap: `cdk bootstrap aws://ACCOUNT/REGION`
- Model will be `anthropic.claude-sonnet-4-5-v2:0`
- Native multi-agent collaboration (no delegate Lambda)

### Local
- Docker must be running
- Debug UI at http://localhost:8000
- Real data from Yahoo Finance + DuckDuckGo

## Important Context

### Why v0.4.8 Was Released
Demo needs to show `uvx bedsheet` installing from PyPI with the correct Gemini model. Without the release, it would install v0.4.7 with the old `gemini-2.5-flash` model.

### Why Environment Cleanup Mattered
Had old v0.4.2rc7 editable install that would conflict with `uvx bedsheet`. Cleanup ensures demo shows real user experience.

### Demo Recording Tool
User plans to use **Poindeo** for screen recording.

## Files to Reference
- `docs/DEMO_RECORDING_PLAN.md` - Complete demo script
- `docs/gcp-deployment-deep-dive.html` - GCP troubleshooting guide
- `PROJECT_STATUS.md` - Full project history
- `CLAUDE.md` - Development context

## Commands for Quick Setup

```bash
# Verify clean state
python -c "import bedsheet" 2>&1 # Should error
uvx bedsheet version # Should show 0.4.8

# Start demo preparation
cd /tmp # or wherever you want to record
uvx bedsheet init investment-demo --target local
```

## Session Duration
~2 hours of work

## Model Used
- Claude Sonnet 4.5 (primary)
- Claude Haiku 4.5 (brief model switch test)
3 changes: 2 additions & 1 deletion bedsheet/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@
from bedsheet.agent import Agent
from bedsheet.action_group import ActionGroup
from bedsheet.supervisor import Supervisor
from bedsheet.sense import SenseMixin, SenseNetwork

__all__ = ["Agent", "ActionGroup", "Supervisor"]
__all__ = ["Agent", "ActionGroup", "Supervisor", "SenseMixin", "SenseNetwork"]
51 changes: 51 additions & 0 deletions bedsheet/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,52 @@ class CollaboratorCompleteEvent:
type: Literal["collaborator_complete"] = field(default="collaborator_complete", init=False)


@dataclass
class SignalReceivedEvent:
"""A signal arrived from the sense network."""
sender: str
kind: str
channel: str
payload: dict[str, Any]
type: Literal["signal_received"] = field(default="signal_received", init=False)


@dataclass
class AgentConnectedEvent:
"""A remote agent came online on the sense network."""
agent_id: str
agent_name: str
namespace: str
type: Literal["agent_connected"] = field(default="agent_connected", init=False)


@dataclass
class AgentDisconnectedEvent:
"""A remote agent went offline on the sense network."""
agent_id: str
agent_name: str
namespace: str
type: Literal["agent_disconnected"] = field(default="agent_disconnected", init=False)


@dataclass
class RemoteDelegationEvent:
"""A task was sent to a remote agent via the sense network."""
agent_name: str
task: str
correlation_id: str
type: Literal["remote_delegation"] = field(default="remote_delegation", init=False)


@dataclass
class RemoteResultEvent:
"""A result was received from a remote agent via the sense network."""
agent_name: str
result: str
correlation_id: str
type: Literal["remote_result"] = field(default="remote_result", init=False)


Event = Union[
ThinkingEvent,
TextTokenEvent,
Expand All @@ -101,4 +147,9 @@ class CollaboratorCompleteEvent:
CollaboratorStartEvent,
CollaboratorEvent,
CollaboratorCompleteEvent,
SignalReceivedEvent,
AgentConnectedEvent,
AgentDisconnectedEvent,
RemoteDelegationEvent,
RemoteResultEvent,
]
17 changes: 17 additions & 0 deletions bedsheet/sense/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
"""Sense - distributed agent communication for Bedsheet."""
from bedsheet.sense.signals import Signal, SignalKind
from bedsheet.sense.protocol import SenseTransport, AgentPresence
from bedsheet.sense.serialization import serialize, deserialize
from bedsheet.sense.mixin import SenseMixin
from bedsheet.sense.network import SenseNetwork

__all__ = [
"Signal",
"SignalKind",
"SenseTransport",
"AgentPresence",
"SenseMixin",
"SenseNetwork",
"serialize",
"deserialize",
]
Loading