claude-tempo 0.26.0-beta.7 → 0.27.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 -2
- package/README.md +22 -21
- package/assets/icon-512.png +0 -0
- package/dist/activities/outbox.js +20 -12
- package/dist/cli/commands.d.ts +45 -73
- package/dist/cli/commands.js +263 -630
- package/dist/cli/daemon.d.ts +31 -3
- package/dist/cli/daemon.js +58 -16
- package/dist/cli/help-text.js +47 -45
- package/dist/cli/removed-verbs.d.ts +9 -0
- package/dist/cli/removed-verbs.js +75 -0
- package/dist/cli/startup.d.ts +103 -0
- package/dist/cli/startup.js +615 -0
- package/dist/cli.js +66 -166
- package/dist/client/ensure-conductor-spawned.d.ts +32 -0
- package/dist/client/ensure-conductor-spawned.js +45 -0
- package/dist/client/index.d.ts +1 -7
- package/dist/client/index.js +489 -0
- package/dist/client/interface.d.ts +186 -3
- package/dist/config.d.ts +6 -0
- package/dist/config.js +45 -7
- package/dist/daemon.d.ts +101 -1
- package/dist/daemon.js +228 -84
- package/dist/ensemble/loader.js +9 -0
- package/dist/ensemble/saver.js +3 -1
- package/dist/ensemble/schema.d.ts +7 -1
- package/dist/reconcile/orphans.d.ts +134 -2
- package/dist/reconcile/orphans.js +206 -15
- package/dist/server.js +16 -8
- package/dist/tools/destroy.d.ts +1 -1
- package/dist/tools/destroy.js +149 -24
- package/dist/tools/{pause-ensemble.d.ts → hosts.d.ts} +1 -1
- package/dist/tools/hosts.js +40 -0
- package/dist/tools/{resume-ensemble.d.ts → pause.d.ts} +1 -1
- package/dist/tools/pause.js +36 -0
- package/dist/tools/play.d.ts +4 -0
- package/dist/tools/play.js +57 -0
- package/dist/tools/recruit.d.ts +34 -1
- package/dist/tools/recruit.js +157 -1
- package/dist/tools/restore.d.ts +4 -0
- package/dist/tools/restore.js +91 -0
- package/dist/tools/shutdown.d.ts +4 -0
- package/dist/tools/shutdown.js +54 -0
- package/dist/tui/App.d.ts +63 -0
- package/dist/tui/App.js +548 -155
- package/dist/tui/bootstrap-types.d.ts +46 -0
- package/dist/tui/bootstrap-types.js +7 -0
- package/dist/tui/commands.d.ts +48 -1
- package/dist/tui/commands.js +409 -176
- package/dist/tui/components/DestroyConfirmModal.d.ts +17 -0
- package/dist/tui/components/DestroyConfirmModal.js +62 -0
- package/dist/tui/components/HomeView.d.ts +54 -0
- package/dist/tui/components/HomeView.js +306 -0
- package/dist/tui/components/LoadLineupModal.d.ts +18 -0
- package/dist/tui/components/LoadLineupModal.js +79 -0
- package/dist/tui/components/NewEnsembleModal.d.ts +9 -0
- package/dist/tui/components/NewEnsembleModal.js +73 -0
- package/dist/tui/components/PromptArea.js +9 -12
- package/dist/tui/components/RestoreConfirmModal.d.ts +18 -0
- package/dist/tui/components/RestoreConfirmModal.js +71 -0
- package/dist/tui/components/StatusBar.d.ts +34 -1
- package/dist/tui/components/StatusBar.js +59 -14
- package/dist/tui/index.d.ts +8 -0
- package/dist/tui/index.js +13 -0
- package/dist/tui/removed-commands.d.ts +9 -0
- package/dist/tui/removed-commands.js +22 -0
- package/dist/tui/store.d.ts +130 -0
- package/dist/tui/store.js +139 -1
- package/dist/tui/utils/format.d.ts +19 -0
- package/dist/tui/utils/format.js +17 -0
- package/dist/types.d.ts +84 -0
- package/dist/utils/ensemble-ops.d.ts +61 -0
- package/dist/utils/ensemble-ops.js +77 -0
- package/dist/utils/format-hosts.d.ts +21 -0
- package/dist/utils/format-hosts.js +73 -0
- package/dist/utils/hosts.d.ts +84 -0
- package/dist/utils/hosts.js +228 -0
- package/dist/worker.js +29 -0
- package/dist/workflows/maestro-signals.d.ts +29 -1
- package/dist/workflows/maestro-signals.js +29 -1
- package/dist/workflows/maestro.js +43 -0
- package/package.json +3 -1
- package/workflow-bundle.js +73 -2
- package/dist/tools/pause-ensemble.js +0 -58
- package/dist/tools/resume-ensemble.js +0 -79
package/CLAUDE.md
CHANGED
|
@@ -28,6 +28,8 @@ src/
|
|
|
28
28
|
│ ├── mcp.ts # MCP server registration helpers (init, global vs project)
|
|
29
29
|
│ ├── output.ts # Shared CLI output formatting helpers
|
|
30
30
|
│ ├── preflight.ts # Environment preflight checks
|
|
31
|
+
│ ├── removed-verbs.ts # lookup table for the 10 CLI verbs removed in #288 — dispatches migration hints before loading Temporal surface
|
|
32
|
+
│ ├── startup.ts # auto-provisioning bootstrap state machine (#289) — six-step idempotent sequence used by bare `claude-tempo` invocation
|
|
31
33
|
│ └── upgrade-command.ts # upgrade subcommand — crash-proof; dynamic-imports Temporal only for active-session warning
|
|
32
34
|
├── adapters/
|
|
33
35
|
│ ├── README.md # Adapter contract documentation
|
|
@@ -69,7 +71,8 @@ src/
|
|
|
69
71
|
│ ├── worktree.ts / stage.ts / stages.ts / cancel-stage.ts
|
|
70
72
|
│ ├── load-lineup.ts / save-lineup.ts / agent-types.ts / resolve.ts
|
|
71
73
|
│ ├── set-name.ts / set-part.ts / who-am-i.ts / release.ts
|
|
72
|
-
│ ├── pause
|
|
74
|
+
│ ├── pause.ts / play.ts / shutdown.ts / restore.ts
|
|
75
|
+
│ ├── hosts.ts
|
|
73
76
|
│ └── helpers.ts # Zod/MCP tool registration wrapper
|
|
74
77
|
├── tui/
|
|
75
78
|
│ ├── App.tsx / store.ts / commands.ts # TUI root, state, slash commands
|
|
@@ -78,6 +81,8 @@ src/
|
|
|
78
81
|
│ └── utils/ # format, platform, theme, fullscreen, history
|
|
79
82
|
├── utils/
|
|
80
83
|
│ ├── validation.ts / worktree.ts / safe-path.ts / duration.ts / search-attributes.ts
|
|
84
|
+
│ ├── attachment-format.ts / recall-format.ts # Shared display formatters (attachment-info, recall)
|
|
85
|
+
│ ├── hosts.ts / format-hosts.ts # Host enumeration + shared hosts display formatter (#274)
|
|
81
86
|
├── types.ts # Shared type definitions
|
|
82
87
|
├── git-info.ts # Git repository detection helper
|
|
83
88
|
└── config.ts # Env var handling
|
|
@@ -118,11 +123,12 @@ daemon worker notes, `npx ts-node` dev runner).
|
|
|
118
123
|
- **Outbox**: Outbound requests (cue, report, recruit, restart, detach, destroy, …) go through the session's workflow outbox instead of directly signaling other workflows. The dispatch loop processes entries via activities, decoupling tools from cross-workflow signaling.
|
|
119
124
|
- **Attachment phase** (v0.26): Seven phases tracked on the session workflow — `booting → attached → processing | awaiting → draining → detached → gone`. The phase is authoritative for lifecycle truth: adapters drive it via `claimAttachment` / `adapterExited` / `forceDetach` / `destroy`, and the workflow publishes it on the `ClaudeTempoAttachmentState` search attribute. Replaced the v0.25 `ClaudeTempoStatus` heuristic (removed in v0.26). See [docs/concepts.md](docs/concepts.md) for the phase table and [docs/ops/v0.26-migration.md](docs/ops/v0.26-migration.md) for the upgrade path.
|
|
120
125
|
- **Adapter heartbeat observability** (#249): After `claimAttachment`, the base adapter logs `first heartbeat scheduled in Xms` then `heartbeat#1 delivered` on the first tick. Every 10 ticks it emits `heartbeats-delivered=N / phase-ticks=N` breadcrumbs. Any silent guard trip in `tickHeartbeat` / `tickPhaseWatcher` now emits a structured `guard tripped: {stopped, reconnecting, …}` log instead of silently orphaning the timer. The phase-watcher emits `WARNING: heartbeat staleness` when `lastHeartbeatAt` falls more than 2× `heartbeatMs` behind `now`. Grep `[claude-tempo:adapter]` to confirm loop health without parsing Temporal history.
|
|
121
|
-
- **Per-host task queues**: `host` param on `recruit`/`restart`/`migrate` routes to `claude-tempo-{hostname}` task queue. See [docs/concepts.md](docs/concepts.md) for cross-machine recruiting details.
|
|
126
|
+
- **Per-host task queues**: `host` param on `recruit`/`restart`/`migrate` routes to `claude-tempo-{hostname}` task queue. When `host` is set on `recruit`, a pre-flight check validates the target daemon is live and supports the requested agent type (`force: true` bypasses). Daemon boot profiles (hostname, platform, available player types) are advertised via the `hostProfile` signal and maintained in the global maestro's `hostProfiles` map — surfaced by the `hosts` MCP tool, `claude-tempo hosts` CLI, and `/hosts` TUI command (#274). See [docs/concepts.md](docs/concepts.md) for cross-machine recruiting details.
|
|
122
127
|
- **Wire protocol**: All signal/query/update names are documented in [`docs/WIRE-PROTOCOL.md`](docs/WIRE-PROTOCOL.md) and are stable — renaming or removing any is a breaking change. **Process**: update `docs/WIRE-PROTOCOL.md` in the same commit as any new signal, query, or update.
|
|
123
128
|
- **Daemon**: Standalone background process (`src/daemon.ts`) that runs all Temporal workers. Auto-started by any `claude-tempo` command. PID at `~/.claude-tempo/daemon.pid`; logs at `~/.claude-tempo/daemon.log`.
|
|
124
129
|
- **Player types**: Reusable agent definitions in Claude Code's subagent format (`.md` files with YAML frontmatter). Three-tier lookup: project `.claude/agents/` → user `~/.claude/agents/` → shipped `examples/agents/`. Discover via `agent_types` tool or `claude-tempo agent-types` CLI. Shipped types: tempo-conductor, tempo-composer, tempo-soloist, tempo-tuner, tempo-critic, tempo-roadie, tempo-improv, tempo-liner.
|
|
125
130
|
- **Lineup examples**: Four pre-built ensemble YAML files in `examples/ensembles/` — `tempo-big-band`, `tempo-dev-team`, `tempo-review-squad`, `tempo-jam-session`. Load with `claude-tempo up --lineup <name>` or the `load_lineup` tool.
|
|
131
|
+
- **GitHub App identity** (`claude-tempo[bot]`): When a player writes to GitHub — issue comments, PR creation/merge, commits, labels, check runs — **use `./scripts/ensemble-gh`** instead of `gh`. The wrapper mints a short-lived installation token so the action is attributed to `claude-tempo[bot]`, not to the human maintainer, making the AI authorship visible. Plain `gh` is still correct for read-only local dev (`gh pr view`, `gh repo clone`, `gh auth status`). Every bot-authored comment/PR body must include the AI attribution footer documented in [docs/github-app.md](docs/github-app.md).
|
|
126
132
|
|
|
127
133
|
See [docs/concepts.md](docs/concepts.md) for the full glossary (Adapter, Attachment phases, Restart, Detach/Destroy, Migrate, Broadcast, Recall, Schedule, Lineup, Quality Gate, Worktree, Stage, Hold/Release, Pause/Resume, Maestro, TempoClient, and more).
|
|
128
134
|
|
package/README.md
CHANGED
|
@@ -59,11 +59,10 @@ claude-tempo up
|
|
|
59
59
|
This starts Temporal, registers the MCP server, launches the daemon, and opens a conductor session. Then add players:
|
|
60
60
|
|
|
61
61
|
```bash
|
|
62
|
-
claude-tempo start # open a player session
|
|
63
62
|
claude-tempo status # see who's active
|
|
64
63
|
```
|
|
65
64
|
|
|
66
|
-
Or ask the conductor to `recruit`
|
|
65
|
+
Or use the TUI to recruit players, or ask the conductor to `recruit` from inside Claude Code.
|
|
67
66
|
|
|
68
67
|
### Manual setup
|
|
69
68
|
|
|
@@ -71,8 +70,7 @@ Or ask the conductor to `recruit` players from inside Claude Code.
|
|
|
71
70
|
claude-tempo server # start Temporal dev server
|
|
72
71
|
claude-tempo init # register MCP server globally
|
|
73
72
|
claude-tempo preflight # verify environment
|
|
74
|
-
claude-tempo
|
|
75
|
-
claude-tempo start # start a player
|
|
73
|
+
claude-tempo up # launch conductor via auto-provisioning
|
|
76
74
|
```
|
|
77
75
|
|
|
78
76
|
## Upgrading
|
|
@@ -90,12 +88,15 @@ claude-tempo upgrade 0.22.0
|
|
|
90
88
|
## Stopping & Tear Down
|
|
91
89
|
|
|
92
90
|
```bash
|
|
93
|
-
#
|
|
94
|
-
claude-tempo
|
|
91
|
+
# Terminate all sessions in an ensemble
|
|
92
|
+
claude-tempo destroy my-ensemble
|
|
95
93
|
|
|
96
94
|
# Tear down everything (all sessions, schedulers, and Maestro workflows)
|
|
97
95
|
claude-tempo down --all
|
|
98
96
|
|
|
97
|
+
# Tear down and terminate all workflows in one step
|
|
98
|
+
claude-tempo down --destroy -y
|
|
99
|
+
|
|
99
100
|
# Stop the background daemon
|
|
100
101
|
claude-tempo daemon stop
|
|
101
102
|
```
|
|
@@ -107,17 +108,17 @@ claude-tempo daemon stop
|
|
|
107
108
|
## Core Concepts
|
|
108
109
|
|
|
109
110
|
- **Player** — A Claude Code session registered as a Temporal workflow
|
|
110
|
-
- **Conductor** —
|
|
111
|
+
- **Conductor** — Required orchestration hub (one per ensemble); receives `report` calls and connects to external interfaces. Lineup schema enforces its presence.
|
|
111
112
|
- **Ensemble** — A named group of players isolated from other ensembles; defaults to `default`
|
|
112
113
|
- **Cue** — A message sent to a player by name via Temporal signal
|
|
113
114
|
- **Lineup** — A YAML file that defines a full team and recruits them in one step
|
|
114
115
|
- **Player Type** — A reusable agent definition (`.md` with YAML frontmatter) that gives a player a named role
|
|
115
116
|
|
|
116
|
-
Players in one ensemble cannot see or message players in another:
|
|
117
|
+
Players in one ensemble cannot see or message players in another. Launch `claude-tempo` to open the TUI and switch between ensembles, or target a specific ensemble directly:
|
|
117
118
|
|
|
118
119
|
```bash
|
|
119
|
-
claude-tempo
|
|
120
|
-
claude-tempo
|
|
120
|
+
claude-tempo up frontend # provision and launch conductor in "frontend"
|
|
121
|
+
claude-tempo up backend # provision and launch conductor in "backend"
|
|
121
122
|
```
|
|
122
123
|
|
|
123
124
|
## MCP Tools
|
|
@@ -139,16 +140,16 @@ Tools available inside Claude Code sessions connected to claude-tempo:
|
|
|
139
140
|
## CLI
|
|
140
141
|
|
|
141
142
|
```bash
|
|
142
|
-
claude-tempo
|
|
143
|
-
claude-tempo
|
|
144
|
-
claude-tempo
|
|
143
|
+
claude-tempo # launch TUI (auto-provisions on first run)
|
|
144
|
+
claude-tempo up [ensemble] # provision infrastructure and launch conductor
|
|
145
|
+
claude-tempo down [--destroy] # tear down infrastructure (--destroy also terminates workflows)
|
|
145
146
|
claude-tempo status [ensemble] # list active sessions
|
|
146
|
-
claude-tempo
|
|
147
|
+
claude-tempo destroy <ensemble> # terminate all sessions in an ensemble
|
|
148
|
+
claude-tempo restore <ensemble> # restore orphaned sessions on this host
|
|
149
|
+
claude-tempo hosts # list daemons polling this Temporal namespace (--all/--json)
|
|
150
|
+
claude-tempo recall <name> # read a player's message history (--limit/--offset/--preview/--json)
|
|
147
151
|
claude-tempo attachment-info <name> # inspect a session's phase, holder, lease, and heartbeat age
|
|
148
152
|
claude-tempo release [ensemble] # release held players (unlock + deliver tasks)
|
|
149
|
-
claude-tempo pause [ensemble] # pause all sessions and the scheduler
|
|
150
|
-
claude-tempo resume [ensemble] # resume a paused ensemble (--release also releases held players)
|
|
151
|
-
claude-tempo tui # open the terminal UI
|
|
152
153
|
claude-tempo daemon <sub> # manage the worker daemon
|
|
153
154
|
claude-tempo upgrade # update to latest
|
|
154
155
|
```
|
|
@@ -239,7 +240,7 @@ claude-tempo tui --ensemble my-ensemble # direct ensemble mode
|
|
|
239
240
|
The TUI provides a chat-focused shell for managing your ensemble:
|
|
240
241
|
|
|
241
242
|
- **Ensemble chat feed** — live aggregated view of conductor + player traffic; type bare text to message the conductor, `@player message` to message directly
|
|
242
|
-
- **Slash commands** — `/recruit`, `/status`, `/schedule`, `/gates`, `/stages`, `/worktree`, `/go` (release held), `/pause`, `/
|
|
243
|
+
- **Slash commands** — `/recruit`, `/status`, `/schedule`, `/gates`, `/stages`, `/worktree`, `/go` (release held), `/pause`, `/play`, `/shutdown`, `/restore`, `/home`, and more; type `/help` for the full list
|
|
243
244
|
- **Interactive overlays and wizards** — step-by-step flows for recruiting players, creating schedules, and managing ensembles
|
|
244
245
|
|
|
245
246
|
📖 [TUI reference → docs/tui.md](docs/tui.md)
|
|
@@ -248,10 +249,10 @@ The TUI provides a chat-focused shell for managing your ensemble:
|
|
|
248
249
|
|
|
249
250
|
> **Experimental** — subject to breaking changes.
|
|
250
251
|
|
|
251
|
-
GitHub Copilot CLI sessions can join an ensemble using `--agent copilot
|
|
252
|
+
GitHub Copilot CLI sessions can join an ensemble using `--agent copilot`. Recruit one from the TUI:
|
|
252
253
|
|
|
253
|
-
```
|
|
254
|
-
|
|
254
|
+
```
|
|
255
|
+
/recruit copilot-1 --agent copilot
|
|
255
256
|
```
|
|
256
257
|
|
|
257
258
|
📖 [Copilot bridge setup and limitations → docs/copilot.md](docs/copilot.md)
|
|
Binary file
|
|
@@ -575,15 +575,22 @@ function createOutboxActivities(client, config) {
|
|
|
575
575
|
// already exists at `~/.claude/projects/<encoded-path>/<uuid>.jsonl`
|
|
576
576
|
// ("Session ID already in use"). A prior failed spawn can leave that
|
|
577
577
|
// file behind, wedging every subsequent `fresh` restart that reuses the
|
|
578
|
-
// stored sessionId.
|
|
579
|
-
//
|
|
580
|
-
//
|
|
581
|
-
//
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
578
|
+
// stored sessionId.
|
|
579
|
+
//
|
|
580
|
+
// #306: `/restart` ALWAYS spawns a fresh Claude Code process — never
|
|
581
|
+
// `--resume <id>`. The transcript `.jsonl` for the prior `spawnSessionId`
|
|
582
|
+
// is NOT guaranteed to have been flushed to disk before the prior
|
|
583
|
+
// adapter was hard-terminated (Windows `taskkill /T /F` is synchronous
|
|
584
|
+
// and unconditional). Claude Code then errors out with "No conversation
|
|
585
|
+
// found with session ID" and the new terminal drops to shell.
|
|
586
|
+
//
|
|
587
|
+
// Context preservation is already handled by the Step 5 replay above —
|
|
588
|
+
// we re-send recent messages to the fresh session. That's authoritative;
|
|
589
|
+
// the session-id `--resume` path was only ever a bonus on top. So we
|
|
590
|
+
// mint a new UUID on every restart, persist it to metadata, and never
|
|
591
|
+
// pass `resume: true` to the spawn.
|
|
592
|
+
const spawnSessionId = crypto.randomUUID();
|
|
593
|
+
await handle.signal(signals_1.updateMetadataSignal, { sessionId: spawnSessionId });
|
|
587
594
|
// Issue #184: re-resolve on the invoker host against the session's
|
|
588
595
|
// workDir (NOT the daemon's process.cwd — daemon runs elsewhere than
|
|
589
596
|
// the session's project, so the project-tier lookup needs the session's
|
|
@@ -598,8 +605,9 @@ function createOutboxActivities(client, config) {
|
|
|
598
605
|
host: targetHost,
|
|
599
606
|
attachmentId: token.attachmentId,
|
|
600
607
|
runId: token.runId,
|
|
601
|
-
|
|
602
|
-
|
|
608
|
+
// #306: `/restart` is always a fresh spawn (see comment above).
|
|
609
|
+
resume: false,
|
|
610
|
+
sessionId: spawnSessionId,
|
|
603
611
|
adapterId,
|
|
604
612
|
...(resolved ? {
|
|
605
613
|
agentDefinition: resolved.name,
|
|
@@ -608,7 +616,7 @@ function createOutboxActivities(client, config) {
|
|
|
608
616
|
} : {}),
|
|
609
617
|
}],
|
|
610
618
|
});
|
|
611
|
-
log(`Restart prepared for "${targetPlayerId}" — attachmentId=${token.attachmentId}, spawnEntryId=${spawnEntryId}, host=${targetHost}${fresh ?
|
|
619
|
+
log(`Restart prepared for "${targetPlayerId}" — attachmentId=${token.attachmentId}, spawnEntryId=${spawnEntryId}, host=${targetHost}, fresh sessionId=${spawnSessionId}${fresh ? ' (context replay skipped)' : ''}`);
|
|
612
620
|
return { success: true };
|
|
613
621
|
}
|
|
614
622
|
catch (err) {
|
package/dist/cli/commands.d.ts
CHANGED
|
@@ -1,28 +1,5 @@
|
|
|
1
1
|
import { CliOverrides } from '../config';
|
|
2
2
|
import { AgentType } from '../types';
|
|
3
|
-
interface StartOpts extends CliOverrides {
|
|
4
|
-
ensemble: string;
|
|
5
|
-
conductor: boolean;
|
|
6
|
-
replace?: boolean;
|
|
7
|
-
resume?: boolean;
|
|
8
|
-
name?: string;
|
|
9
|
-
skipPreflight?: boolean;
|
|
10
|
-
agent: AgentType;
|
|
11
|
-
dir?: string;
|
|
12
|
-
/**
|
|
13
|
-
* Issue #172: `conduct --lineup <name>` — load a lineup during conductor
|
|
14
|
-
* startup and apply the same initial-startup semantics as `up --lineup`:
|
|
15
|
-
* conductor instructions deferred, players held, banner shown. Only
|
|
16
|
-
* meaningful when `conductor: true`.
|
|
17
|
-
*/
|
|
18
|
-
lineup?: string;
|
|
19
|
-
/**
|
|
20
|
-
* Issue #172: opt out of the defer-conductor-instructions behavior.
|
|
21
|
-
* Forces the legacy immediate-start path even on `conduct --lineup`.
|
|
22
|
-
*/
|
|
23
|
-
noHold?: boolean;
|
|
24
|
-
}
|
|
25
|
-
export declare function start(opts: StartOpts): Promise<void>;
|
|
26
3
|
interface StatusOpts extends CliOverrides {
|
|
27
4
|
ensemble?: string;
|
|
28
5
|
}
|
|
@@ -50,24 +27,16 @@ interface UpOpts extends CliOverrides {
|
|
|
50
27
|
}
|
|
51
28
|
export declare function up(opts: UpOpts): Promise<void>;
|
|
52
29
|
interface DownOpts extends CliOverrides {
|
|
53
|
-
/** Explicitly specified ensemble name. If undefined, auto-detect from running workflows. */
|
|
54
|
-
ensemble?: string;
|
|
55
|
-
all: boolean;
|
|
56
30
|
removeMcp: boolean;
|
|
57
31
|
keepDaemon: boolean;
|
|
58
32
|
yes: boolean;
|
|
33
|
+
/** When true, terminate every workflow across every ensemble before
|
|
34
|
+
* stopping infra. Without it, workflows stay on the Temporal server and
|
|
35
|
+
* resume on the next `up`. */
|
|
36
|
+
destroy: boolean;
|
|
59
37
|
dir: string;
|
|
60
38
|
}
|
|
61
39
|
export declare function down(opts: DownOpts): Promise<void>;
|
|
62
|
-
interface StopOpts extends CliOverrides {
|
|
63
|
-
/** Stop a specific player by name. */
|
|
64
|
-
name?: string;
|
|
65
|
-
/** Stop all sessions in this ensemble. */
|
|
66
|
-
ensemble?: string;
|
|
67
|
-
/** Stop every session across all ensembles. */
|
|
68
|
-
all?: boolean;
|
|
69
|
-
}
|
|
70
|
-
export declare function stop(opts: StopOpts): Promise<void>;
|
|
71
40
|
interface AgentTypesCommandOpts {
|
|
72
41
|
subcommand?: string;
|
|
73
42
|
name?: string;
|
|
@@ -84,28 +53,42 @@ interface VerbOpts extends CliOverrides {
|
|
|
84
53
|
name: string;
|
|
85
54
|
ensemble?: string;
|
|
86
55
|
}
|
|
87
|
-
interface
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
force?: boolean;
|
|
91
|
-
contextMessages?: number;
|
|
92
|
-
/** PR-F: required when force-restarting a session attached to a different host. */
|
|
93
|
-
yesSteal?: string;
|
|
94
|
-
}
|
|
95
|
-
interface DetachCliOpts extends VerbOpts {
|
|
96
|
-
deadlineMs?: number;
|
|
97
|
-
}
|
|
98
|
-
interface DestroyCliOpts extends VerbOpts {
|
|
99
|
-
reason?: string;
|
|
100
|
-
}
|
|
101
|
-
interface MigrateCliOpts extends RestartCliOpts {
|
|
102
|
-
host: string;
|
|
56
|
+
interface DestroyCliOpts extends CliOverrides {
|
|
57
|
+
ensemble: string;
|
|
58
|
+
yes: boolean;
|
|
103
59
|
}
|
|
104
|
-
|
|
105
|
-
|
|
60
|
+
/**
|
|
61
|
+
* `claude-tempo destroy <ensemble> [-y]` — terminate every workflow in an
|
|
62
|
+
* ensemble (#288). Prompts with the ensemble name and workflow count unless
|
|
63
|
+
* `-y` is passed. The per-player destroy path lives in the TUI (`/destroy
|
|
64
|
+
* --player`).
|
|
65
|
+
*/
|
|
106
66
|
export declare function destroy(opts: DestroyCliOpts): Promise<void>;
|
|
107
|
-
export declare function migrate(opts: MigrateCliOpts): Promise<void>;
|
|
108
67
|
export declare function attachmentInfo(opts: VerbOpts): Promise<void>;
|
|
68
|
+
export interface HostsCliOpts extends CliOverrides {
|
|
69
|
+
ensemble?: string;
|
|
70
|
+
/** Include stale hosts (those not seen in the last minute). CLI default: false. */
|
|
71
|
+
all?: boolean;
|
|
72
|
+
/** Emit raw `HostInfo[]` JSON instead of the formatted table. */
|
|
73
|
+
json?: boolean;
|
|
74
|
+
}
|
|
75
|
+
export declare function hosts(opts: HostsCliOpts): Promise<void>;
|
|
76
|
+
export interface RefreshHostProfileCliOpts extends CliOverrides {
|
|
77
|
+
ensemble?: string;
|
|
78
|
+
/** Max wait for the new profile to appear in the maestro `hostProfiles` map. Default 10s. */
|
|
79
|
+
confirmTimeoutMs?: number;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* #274 AC5d (M12) — manual re-signal of this host's profile to the
|
|
83
|
+
* global maestro. The daemon otherwise only re-signals on boot; this
|
|
84
|
+
* subcommand re-computes the profile + signals fresh.
|
|
85
|
+
*
|
|
86
|
+
* Exit semantics (per my implementation-time call to the conductor,
|
|
87
|
+
* approved): await ensureGlobalMaestro → signal → short poll on
|
|
88
|
+
* `hostProfiles()` to confirm the new version is visible → exit 0.
|
|
89
|
+
* Exits nonzero if the poll timeout elapses without confirmation.
|
|
90
|
+
*/
|
|
91
|
+
export declare function refreshHostProfile(opts: RefreshHostProfileCliOpts): Promise<void>;
|
|
109
92
|
export interface RecallCliOpts extends VerbOpts {
|
|
110
93
|
limit?: number;
|
|
111
94
|
offset?: number;
|
|
@@ -118,16 +101,15 @@ export interface RecallCliOpts extends VerbOpts {
|
|
|
118
101
|
}
|
|
119
102
|
export declare function recall(opts: RecallCliOpts): Promise<void>;
|
|
120
103
|
interface RestoreCliOpts extends CliOverrides {
|
|
121
|
-
|
|
122
|
-
name?: string;
|
|
123
|
-
ensemble?: string;
|
|
124
|
-
/** Restore every orphan in the namespace, respecting allowlist. */
|
|
125
|
-
all?: boolean;
|
|
126
|
-
/** Filter to orphans whose `preferredHost` matches this value. */
|
|
127
|
-
fromHost?: string;
|
|
128
|
-
/** List candidates without restoring. */
|
|
129
|
-
dryRun?: boolean;
|
|
104
|
+
ensemble: string;
|
|
130
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* `claude-tempo restore <ensemble>` — delegate to {@link TempoClient.restore},
|
|
108
|
+
* which reattaches orphans AND unpauses maestro + scheduler (#298 — the
|
|
109
|
+
* direct-to-`restoreOrphansOnce` path left the ensemble paused after a
|
|
110
|
+
* `shutdown → restore` roundtrip). The TUI home view (#290) is the picker
|
|
111
|
+
* surface; the CLI is the scriptable bulk operation, one ensemble at a time.
|
|
112
|
+
*/
|
|
131
113
|
export declare function restore(opts: RestoreCliOpts): Promise<void>;
|
|
132
114
|
interface EnsembleCommandOpts extends CliOverrides {
|
|
133
115
|
subcommand?: string;
|
|
@@ -139,14 +121,4 @@ interface ReleaseOpts extends CliOverrides {
|
|
|
139
121
|
}
|
|
140
122
|
/** Release all held sessions in an ensemble (unlock outbox, deliver initial messages). */
|
|
141
123
|
export declare function release(opts: ReleaseOpts): Promise<void>;
|
|
142
|
-
interface PauseResumeOpts extends CliOverrides {
|
|
143
|
-
ensemble: string;
|
|
144
|
-
/** Issue #172: when true on `resume`, also fan out `releaseHeldSignal` to every
|
|
145
|
-
* session so deferred task messages are delivered and outboxes unlocked in one shot. */
|
|
146
|
-
release?: boolean;
|
|
147
|
-
}
|
|
148
|
-
/** Pause an entire ensemble — sessions, scheduler, and maestro. */
|
|
149
|
-
export declare function pause(opts: PauseResumeOpts): Promise<void>;
|
|
150
|
-
/** Resume an entire ensemble — sessions, scheduler, and maestro. */
|
|
151
|
-
export declare function resume(opts: PauseResumeOpts): Promise<void>;
|
|
152
124
|
export {};
|