claude-tempo 0.22.0 → 0.23.0
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.
- package/CLAUDE.md +8 -8
- package/README.md +108 -747
- package/dist/cli/commands.js +1 -0
- package/dist/client/index.d.ts +10 -0
- package/dist/client/index.js +482 -0
- package/dist/client/interface.d.ts +66 -0
- package/dist/client/interface.js +2 -0
- package/dist/tui/App.d.ts +1 -1
- package/dist/tui/client.d.ts +4 -67
- package/dist/tui/client.js +5 -468
- package/dist/tui/commands.d.ts +1 -1
- package/dist/tui/index.js +1 -1
- package/dist/tui/store.d.ts +1 -1
- package/dist/workflows/session.js +2 -0
- package/package.json +1 -1
- package/workflow-bundle.js +3 -1
package/CLAUDE.md
CHANGED
|
@@ -27,6 +27,9 @@ src/
|
|
|
27
27
|
│ ├── output.ts # Shared CLI output formatting helpers
|
|
28
28
|
│ └── preflight.ts # Environment preflight checks
|
|
29
29
|
├── copilot-bridge.ts # Copilot SDK bridge for Copilot CLI players
|
|
30
|
+
├── client/
|
|
31
|
+
│ ├── interface.ts # TempoClient TypeScript interface and related types
|
|
32
|
+
│ └── index.ts # TempoClient factory implementation and barrel re-exports
|
|
30
33
|
├── worker.ts # Temporal worker setup (used by daemon only)
|
|
31
34
|
├── connection.ts # Temporal connection factory (shared by server + CLI)
|
|
32
35
|
├── spawn.ts # Cross-platform process spawning helpers
|
|
@@ -80,7 +83,7 @@ src/
|
|
|
80
83
|
│ ├── index.ts # TUI entry point — connects to Temporal and renders the Ink app
|
|
81
84
|
│ ├── App.tsx # Root TUI component — chat-focused shell with slash commands
|
|
82
85
|
│ ├── store.ts # TUI state reducer (phase, players, messages, schedules, static history)
|
|
83
|
-
│ ├── client.ts #
|
|
86
|
+
│ ├── client.ts # Thin re-export shim — re-exports createTempoClient from src/client/ for backward compatibility
|
|
84
87
|
│ ├── commands.ts # Slash command parser and registry (/player, /broadcast, /status, etc.)
|
|
85
88
|
│ ├── ink-loader.ts # Dynamic ESM loader for Ink (avoids CJS/ESM conflicts)
|
|
86
89
|
│ ├── ink-context.tsx # React context for injected Ink primitives
|
|
@@ -96,6 +99,8 @@ src/
|
|
|
96
99
|
│ │ ├── Picker.tsx # Full-screen interactive picker (players, ensembles)
|
|
97
100
|
│ │ ├── PlayerDetailView.tsx # Player metadata + scrollable message history (zero Yoga nodes)
|
|
98
101
|
│ │ ├── StatusOverlay.tsx # Dismissible overlay showing ensemble player cards (/status)
|
|
102
|
+
│ │ ├── CommandOverlay.tsx # Generic dismissible overlay for data-display commands (/gates, /stages, /recall, /search)
|
|
103
|
+
│ │ ├── ScheduleOverlay.tsx # Dismissible overlay showing active schedules with timing details (/schedule)
|
|
99
104
|
│ │ ├── ConversationStream.tsx # Live message area merging server conversation + optimistic echo
|
|
100
105
|
│ │ ├── CreateEnsembleWizard.tsx # Step-by-step wizard for creating new ensembles (name → workDir → lineup → confirm)
|
|
101
106
|
│ │ ├── ScheduleWizard.tsx # Step-by-step wizard for /schedule create
|
|
@@ -168,8 +173,8 @@ npm test
|
|
|
168
173
|
- **Quality Gate**: A named checklist of criteria a conductor tracks to verify a task is complete. Created via `quality_gate` (conductor only), evaluated via `evaluate_gate`, and listed via `gates`. Each criterion has a `pending` → `passed` | `failed` status; the gate's aggregate status is derived automatically (all passed → `passed`, any failed → `failed`, else `open`). Gates are stored in the conductor workflow and survive `continueAsNew`.
|
|
169
174
|
- **Worktree**: A git worktree provisioned by the conductor for a player, giving them an isolated checkout on a separate branch. Managed via the `worktree` tool (conductor only): `create` provisions the worktree and notifies the player, `remove` cleans up after the task, `list` shows all active worktrees. Worktree assignments are stored in the conductor workflow (`WorktreeEntry` records: player, path, branch, gitRoot, createdAt, createdBy).
|
|
170
175
|
- **Stage**: A fan-out/fan-in tracking primitive for the conductor. Created via `stage` (conductor only), listing via `stages`, cancelled via `cancel_stage`. Each stage tracks a set of players; when a tracked player sends a `report`, their stage status updates automatically (`waiting` → `reported` or `blocked`). When all players have reported, the conductor is notified that the stage is complete. If `failurePolicy` is `'halt'` (default), a blocker from any player fails the entire stage. Stages are stored in the conductor workflow and survive `continueAsNew`.
|
|
171
|
-
- **Maestro**: Two Maestro workflow variants exist. The **per-ensemble** `claudeMaestroWorkflow` (ID: `claude-maestro-{ensemble}`) monitors a single ensemble — maintains a player snapshot, ring-buffer event log (max 200 entries), an aggregated ensemble chat cache (max 500 entries, refreshed every ~10s via `fetchEnsembleChat` activity), and queues commands for relay to the conductor via `maestroSendCommand`. The ensemble chat cache merges maestro + conductor traffic and is served via the `maestroEnsembleChat` query. The **global** `claudeGlobalMaestroWorkflow` (ID: `claude-maestro-global`) spans all ensembles — aggregates players by ensemble, maintains a cross-ensemble message ring buffer (max 500 entries), and exposes on-demand player/conductor history via `maestroFetchPlayerMessages` and `maestroFetchConductorHistory` updates.
|
|
172
|
-
- **TempoClient**: The
|
|
176
|
+
- **Maestro**: Two Maestro workflow variants exist. The **per-ensemble** `claudeMaestroWorkflow` (ID: `claude-maestro-{ensemble}`) monitors a single ensemble — maintains a player snapshot, ring-buffer event log (max 200 entries), an aggregated ensemble chat cache (max 500 entries, refreshed every ~10s via `fetchEnsembleChat` activity), and queues commands for relay to the conductor via `maestroSendCommand`. The ensemble chat cache merges maestro + conductor traffic and is served via the `maestroEnsembleChat` query. The **global** `claudeGlobalMaestroWorkflow` (ID: `claude-maestro-global`) spans all ensembles — aggregates players by ensemble, maintains a cross-ensemble message ring buffer (max 500 entries), and exposes on-demand player/conductor history via `maestroFetchPlayerMessages` and `maestroFetchConductorHistory` updates. Both are implemented in `src/workflows/maestro.ts` with activities in `src/activities/maestro.ts`.
|
|
177
|
+
- **TempoClient**: The API layer for querying ensemble state (`src/client/`). The interface and types live in `interface.ts`; the factory implementation lives in `index.ts`. Provides `discoverEnsembles`, `getPlayers`, `getMessages`, `getConductorHistory`, `sendMessage`, `sendCommand`, `getEnsembleChat`, `getGates`, `getStages`, `getWorktrees`, and `terminatePlayer`. Uses Global Maestro as the primary source with graceful fallback to per-ensemble Maestro and direct workflow list queries. `src/tui/client.ts` is a thin re-export shim for backward compatibility — new consumers should import from `src/client/` directly.
|
|
173
178
|
- **Wire protocol**: All Temporal signal, query, update, and workflow names are documented in [`docs/WIRE-PROTOCOL.md`](docs/WIRE-PROTOCOL.md). These names are stable as of v0.10 — renaming or removing any is a breaking change requiring a major version bump.
|
|
174
179
|
- **Daemon**: A standalone background process (`src/daemon.ts`) that runs all Temporal workers. Auto-started by any claude-tempo command if not already running. PID stored at `~/.claude-tempo/daemon.pid`; logs at `~/.claude-tempo/daemon.log`. Sessions are now pure MCP clients — they no longer run in-process workers. Managed via `claude-tempo daemon start|stop|status|logs`.
|
|
175
180
|
|
|
@@ -196,11 +201,6 @@ Hard-won lessons from debugging input lag in the TUI (#58). Apply these whenever
|
|
|
196
201
|
- **Debugging approach**: When diagnosing Ink lag, create minimal test apps (`.mjs`) adding one factor at a time (fullscreen, Temporal, InkProvider, real components) to isolate the cause. If the minimal app is fast but the real app is slow, the component tree is the culprit — not the infrastructure.
|
|
197
202
|
- **Cap live message counts**: ChatView and similar message lists must limit visible messages (~20). Rendering hundreds of messages in the live Yoga tree creates 1000+ React elements that slow reconciliation and output generation. Show a "↑ N earlier messages" indicator when truncated. Future: adopt Ink's `<Static>` pattern (render-once, exit Yoga tree) like Claude Code does for scroll history.
|
|
198
203
|
|
|
199
|
-
## Dashboard
|
|
200
|
-
|
|
201
|
-
The ensemble dashboard (Maestro) lives in a separate repository: [vinceblank/maestro](https://github.com/vinceblank/maestro)
|
|
202
|
-
|
|
203
|
-
It provides a web UI for managing ensembles, communicating with conductors, and monitoring player activity.
|
|
204
204
|
|
|
205
205
|
## Commit Convention
|
|
206
206
|
|