agent-tempo 1.7.0 → 2.0.0-beta.2
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 +10 -13
- package/README.md +21 -15
- package/dashboard/dist/assets/index-BbR7zIdK.js.map +1 -1
- package/dashboard/package.json +1 -1
- package/dist/activities/hard-terminate.d.ts +2 -2
- package/dist/activities/hard-terminate.js +3 -9
- package/dist/activities/maestro.d.ts +8 -13
- package/dist/activities/maestro.js +3 -10
- package/dist/activities/outbox.js +16 -2
- package/dist/activities/resolve.d.ts +18 -7
- package/dist/activities/resolve.js +58 -46
- package/dist/adapters/base.js +3 -0
- package/dist/adapters/claude-code/adapter.js +7 -0
- package/dist/cli/command-center-command.js +15 -1
- package/dist/cli/commands.d.ts +8 -0
- package/dist/cli/commands.js +79 -11
- package/dist/cli/daemon-command.js +19 -33
- package/dist/cli/help-text.js +9 -7
- package/dist/cli/home-command.d.ts +26 -0
- package/dist/cli/home-command.js +156 -0
- package/dist/cli/removed-verbs.d.ts +0 -4
- package/dist/cli/removed-verbs.js +23 -12
- package/dist/cli/sa-preflight.d.ts +0 -14
- package/dist/cli/sa-preflight.js +1 -17
- package/dist/cli/startup.d.ts +1 -10
- package/dist/cli/startup.js +0 -40
- package/dist/cli.js +34 -80
- package/dist/client/core.js +13 -15
- package/dist/client/index.d.ts +2 -1
- package/dist/client/interface.d.ts +5 -14
- package/dist/client/with-spawn.d.ts +9 -4
- package/dist/client/with-spawn.js +7 -10
- package/dist/config.d.ts +14 -13
- package/dist/config.js +14 -0
- package/dist/constants.d.ts +50 -0
- package/dist/constants.js +60 -1
- package/dist/daemon.js +81 -0
- package/dist/http/auth.d.ts +3 -21
- package/dist/http/auth.js +10 -31
- package/dist/http/event-types.d.ts +38 -4
- package/dist/http/orphans.d.ts +3 -3
- package/dist/http/orphans.js +3 -3
- package/dist/http/server.d.ts +0 -5
- package/dist/http/server.js +79 -29
- package/dist/http/snapshot.js +3 -0
- package/dist/http/writes.d.ts +1 -1
- package/dist/http/writes.js +25 -2
- package/dist/observability/nondeterminism-alarm.d.ts +113 -0
- package/dist/observability/nondeterminism-alarm.js +162 -0
- package/dist/palette/index.d.ts +6 -7
- package/dist/palette/index.js +6 -7
- package/dist/pi/mission-control/actions.d.ts +67 -1
- package/dist/pi/mission-control/actions.js +61 -0
- package/dist/pi/mission-control/extension.d.ts +77 -0
- package/dist/pi/mission-control/extension.js +171 -0
- package/dist/pi/workflow-client.d.ts +14 -16
- package/dist/pi/workflow-client.js +18 -44
- package/dist/server-tools.js +30 -29
- package/dist/server.js +42 -0
- package/dist/tools/action-guard.d.ts +23 -0
- package/dist/tools/action-guard.js +33 -0
- package/dist/tools/coat-check.d.ts +20 -0
- package/dist/tools/coat-check.js +129 -0
- package/dist/tools/gate.d.ts +13 -0
- package/dist/tools/gate.js +88 -0
- package/dist/tools/schedule.d.ts +18 -0
- package/dist/tools/schedule.js +93 -1
- package/dist/tools/stage.d.ts +17 -0
- package/dist/tools/stage.js +85 -1
- package/dist/tools/state.d.ts +14 -0
- package/dist/tools/state.js +95 -0
- package/dist/types.d.ts +54 -7
- package/dist/upgrade/boot-guard.d.ts +95 -0
- package/dist/upgrade/boot-guard.js +88 -0
- package/dist/upgrade/from-upgrade.d.ts +95 -0
- package/dist/upgrade/from-upgrade.js +330 -0
- package/dist/upgrade/phase-engine.js +4 -1
- package/dist/utils/duration.d.ts +3 -6
- package/dist/utils/duration.js +3 -6
- package/dist/utils/format-hosts.d.ts +1 -1
- package/dist/utils/format-hosts.js +0 -2
- package/dist/utils/grpc-shutdown-guard.js +0 -4
- package/dist/utils/hosts.d.ts +4 -10
- package/dist/utils/hosts.js +12 -28
- package/dist/utils/orphan-guard.d.ts +37 -0
- package/dist/utils/orphan-guard.js +26 -0
- package/dist/utils/search-attributes.d.ts +28 -18
- package/dist/utils/search-attributes.js +48 -18
- package/dist/utils/visibility-deadline.d.ts +16 -0
- package/dist/utils/visibility-deadline.js +16 -0
- package/dist/workflows/maestro-signals.d.ts +0 -13
- package/dist/workflows/maestro-signals.js +6 -14
- package/dist/workflows/maestro.js +27 -32
- package/dist/workflows/scheduler.js +7 -1
- package/dist/workflows/session.js +237 -153
- package/dist/workflows/signals.d.ts +9 -1
- package/dist/workflows/signals.js +8 -6
- package/package.json +1 -6
- package/workflow-bundle.js +478 -225
- package/dist/cli/legacy-migration.d.ts +0 -35
- package/dist/cli/legacy-migration.js +0 -341
- package/dist/client/ensure-conductor-spawned.d.ts +0 -35
- package/dist/client/ensure-conductor-spawned.js +0 -48
- package/dist/tui/App.d.ts +0 -85
- package/dist/tui/App.js +0 -1791
- package/dist/tui/bootstrap-types.d.ts +0 -46
- package/dist/tui/bootstrap-types.js +0 -7
- package/dist/tui/commands.d.ts +0 -71
- package/dist/tui/commands.js +0 -1375
- package/dist/tui/components/ChatView.d.ts +0 -35
- package/dist/tui/components/ChatView.js +0 -54
- package/dist/tui/components/CommandPalette.d.ts +0 -21
- package/dist/tui/components/CommandPalette.js +0 -67
- package/dist/tui/components/ConversationStream.d.ts +0 -114
- package/dist/tui/components/ConversationStream.js +0 -307
- package/dist/tui/components/CreateEnsembleWizard.d.ts +0 -19
- package/dist/tui/components/CreateEnsembleWizard.js +0 -223
- package/dist/tui/components/DestroyConfirmModal.d.ts +0 -17
- package/dist/tui/components/DestroyConfirmModal.js +0 -62
- package/dist/tui/components/ErrorView.d.ts +0 -31
- package/dist/tui/components/ErrorView.js +0 -129
- package/dist/tui/components/HomeView.d.ts +0 -54
- package/dist/tui/components/HomeView.js +0 -306
- package/dist/tui/components/LoadLineupModal.d.ts +0 -18
- package/dist/tui/components/LoadLineupModal.js +0 -79
- package/dist/tui/components/MainView.d.ts +0 -21
- package/dist/tui/components/MainView.js +0 -107
- package/dist/tui/components/NewEnsembleModal.d.ts +0 -9
- package/dist/tui/components/NewEnsembleModal.js +0 -73
- package/dist/tui/components/Picker.d.ts +0 -23
- package/dist/tui/components/Picker.js +0 -70
- package/dist/tui/components/PlayerDetailView.d.ts +0 -26
- package/dist/tui/components/PlayerDetailView.js +0 -118
- package/dist/tui/components/PromptArea.d.ts +0 -50
- package/dist/tui/components/PromptArea.js +0 -303
- package/dist/tui/components/RecruitWizard.d.ts +0 -17
- package/dist/tui/components/RecruitWizard.js +0 -221
- package/dist/tui/components/RestoreConfirmModal.d.ts +0 -18
- package/dist/tui/components/RestoreConfirmModal.js +0 -71
- package/dist/tui/components/ScheduleWizard.d.ts +0 -19
- package/dist/tui/components/ScheduleWizard.js +0 -259
- package/dist/tui/components/Splash.d.ts +0 -23
- package/dist/tui/components/Splash.js +0 -221
- package/dist/tui/components/StatusBar.d.ts +0 -48
- package/dist/tui/components/StatusBar.js +0 -128
- package/dist/tui/components/StatusOverlay.d.ts +0 -15
- package/dist/tui/components/StatusOverlay.js +0 -76
- package/dist/tui/components/TitleBar.d.ts +0 -10
- package/dist/tui/components/TitleBar.js +0 -21
- package/dist/tui/index.d.ts +0 -15
- package/dist/tui/index.js +0 -162
- package/dist/tui/ink-context.d.ts +0 -18
- package/dist/tui/ink-context.js +0 -59
- package/dist/tui/ink-loader.d.ts +0 -26
- package/dist/tui/ink-loader.js +0 -42
- package/dist/tui/removed-commands.d.ts +0 -9
- package/dist/tui/removed-commands.js +0 -22
- package/dist/tui/sse-handler.d.ts +0 -52
- package/dist/tui/sse-handler.js +0 -157
- package/dist/tui/store.d.ts +0 -598
- package/dist/tui/store.js +0 -753
- package/dist/tui/utils/format.d.ts +0 -56
- package/dist/tui/utils/format.js +0 -155
- package/dist/tui/utils/fullscreen.d.ts +0 -23
- package/dist/tui/utils/fullscreen.js +0 -71
- package/dist/tui/utils/history.d.ts +0 -10
- package/dist/tui/utils/history.js +0 -85
- package/dist/tui/utils/platform.d.ts +0 -45
- package/dist/tui/utils/platform.js +0 -258
- package/dist/tui/utils/theme.d.ts +0 -21
- package/dist/tui/utils/theme.js +0 -24
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.CreateEnsembleWizard = CreateEnsembleWizard;
|
|
37
|
-
/**
|
|
38
|
-
* CreateEnsembleWizard — step-by-step flow for creating a new ensemble.
|
|
39
|
-
*
|
|
40
|
-
* Steps: name → workDir → lineup (optional) → confirm
|
|
41
|
-
*
|
|
42
|
-
* Minimal-Box pattern: single <Text> root for static content,
|
|
43
|
-
* one <Box> for Ink's TextInput on text-input steps.
|
|
44
|
-
*/
|
|
45
|
-
const react_1 = __importStar(require("react"));
|
|
46
|
-
const ink_context_1 = require("../ink-context");
|
|
47
|
-
const theme_1 = require("../utils/theme");
|
|
48
|
-
const saver_1 = require("../../ensemble/saver");
|
|
49
|
-
const STEP_LABELS = {
|
|
50
|
-
name: 'Ensemble name',
|
|
51
|
-
workDir: 'Working directory',
|
|
52
|
-
lineup: 'Lineup (optional)',
|
|
53
|
-
confirm: 'Confirm',
|
|
54
|
-
done: 'Done',
|
|
55
|
-
};
|
|
56
|
-
const TEXT_INPUT_STEPS = new Set(['name', 'workDir']);
|
|
57
|
-
function CreateEnsembleWizard({ state, onAnswer, onBack, onConfirm, onCancel, onDone }) {
|
|
58
|
-
const { Box, Text, TextInput, useInput } = (0, ink_context_1.useInk)();
|
|
59
|
-
const [inputValue, setInputValue] = (0, react_1.useState)('');
|
|
60
|
-
const [lineupIdx, setLineupIdx] = (0, react_1.useState)(0);
|
|
61
|
-
const [lineupCustom, setLineupCustom] = (0, react_1.useState)(false);
|
|
62
|
-
// Build lineup options: (none) + saved/shipped + custom path
|
|
63
|
-
const lineupOptions = (0, react_1.useMemo)(() => {
|
|
64
|
-
const options = [
|
|
65
|
-
{ label: '(none) \u2014 start with no lineup', value: '' },
|
|
66
|
-
];
|
|
67
|
-
try {
|
|
68
|
-
for (const l of (0, saver_1.listAllLineups)()) {
|
|
69
|
-
options.push({ label: `${l.name} (${l.source})`, value: l.name, source: l.source });
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
catch { /* ignore */ }
|
|
73
|
-
options.push({ label: '[custom path...]', value: '__custom__' });
|
|
74
|
-
return options;
|
|
75
|
-
}, []);
|
|
76
|
-
useInput((0, react_1.useCallback)((_input, key) => {
|
|
77
|
-
if (key.escape) {
|
|
78
|
-
onCancel();
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
if (key.backspace && state.step !== 'name' && state.step !== 'done' && !inputValue) {
|
|
82
|
-
if (state.step === 'lineup' && lineupCustom) {
|
|
83
|
-
setLineupCustom(false);
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
onBack();
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
if (state.step === 'confirm' && key.return)
|
|
90
|
-
onConfirm();
|
|
91
|
-
if (state.step === 'done' && key.return)
|
|
92
|
-
onDone();
|
|
93
|
-
// Lineup list navigation
|
|
94
|
-
if (state.step === 'lineup' && !lineupCustom) {
|
|
95
|
-
if (key.upArrow) {
|
|
96
|
-
setLineupIdx(i => (i - 1 + lineupOptions.length) % lineupOptions.length);
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
if (key.downArrow) {
|
|
100
|
-
setLineupIdx(i => (i + 1) % lineupOptions.length);
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
if (key.return) {
|
|
104
|
-
const selected = lineupOptions[lineupIdx];
|
|
105
|
-
if (selected.value === '__custom__') {
|
|
106
|
-
setLineupCustom(true);
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
onAnswer({ lineup: selected.value });
|
|
110
|
-
}
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}, [state.step, inputValue, lineupCustom, lineupIdx, lineupOptions, onBack, onCancel, onConfirm, onDone, onAnswer]));
|
|
115
|
-
const handleTextSubmit = (0, react_1.useCallback)((value) => {
|
|
116
|
-
const trimmed = value.trim();
|
|
117
|
-
switch (state.step) {
|
|
118
|
-
case 'name':
|
|
119
|
-
if (!trimmed)
|
|
120
|
-
return;
|
|
121
|
-
onAnswer({ name: trimmed });
|
|
122
|
-
break;
|
|
123
|
-
case 'workDir':
|
|
124
|
-
onAnswer({ workDir: trimmed || state.answers.workDir });
|
|
125
|
-
break;
|
|
126
|
-
case 'lineup':
|
|
127
|
-
// Custom path mode
|
|
128
|
-
onAnswer({ lineup: trimmed });
|
|
129
|
-
setLineupCustom(false);
|
|
130
|
-
break;
|
|
131
|
-
}
|
|
132
|
-
setInputValue('');
|
|
133
|
-
}, [state.step, state.answers.workDir, onAnswer]);
|
|
134
|
-
const children = [];
|
|
135
|
-
// Header
|
|
136
|
-
children.push(react_1.default.createElement(react_1.default.Fragment, { key: 'hdr' }, react_1.default.createElement(Text, { bold: true, color: theme_1.THEME.accent }, ' Create New Ensemble'), react_1.default.createElement(Text, { color: theme_1.THEME.dim }, ' (Esc to cancel, Backspace to go back)')));
|
|
137
|
-
// Completed steps
|
|
138
|
-
const steps = ['name', 'workDir', 'lineup'];
|
|
139
|
-
for (const s of steps) {
|
|
140
|
-
if (s === state.step)
|
|
141
|
-
break;
|
|
142
|
-
const value = getAnswerDisplay(s, state.answers);
|
|
143
|
-
children.push('\n');
|
|
144
|
-
children.push(react_1.default.createElement(react_1.default.Fragment, { key: `done-${s}` }, react_1.default.createElement(Text, { color: theme_1.THEME.success }, ' \u2714 '), react_1.default.createElement(Text, { color: theme_1.THEME.dim }, `${STEP_LABELS[s]}: `), react_1.default.createElement(Text, { color: theme_1.THEME.text }, value)));
|
|
145
|
-
}
|
|
146
|
-
// Current step
|
|
147
|
-
if (state.step === 'confirm') {
|
|
148
|
-
const a = state.answers;
|
|
149
|
-
children.push('\n\n');
|
|
150
|
-
children.push(react_1.default.createElement(Text, { key: 'sum-h', bold: true, color: theme_1.THEME.accent }, ' Create Ensemble:'));
|
|
151
|
-
children.push('\n');
|
|
152
|
-
children.push(react_1.default.createElement(Text, { key: 'sum-n', color: theme_1.THEME.text }, ` Name: ${a.name}`));
|
|
153
|
-
children.push('\n');
|
|
154
|
-
children.push(react_1.default.createElement(Text, { key: 'sum-d', color: theme_1.THEME.text }, ` Directory: ${a.workDir}`));
|
|
155
|
-
children.push('\n');
|
|
156
|
-
children.push(react_1.default.createElement(Text, { key: 'sum-l', color: theme_1.THEME.text }, ` Lineup: ${a.lineup || '(none — bare ensemble)'}`));
|
|
157
|
-
children.push('\n\n');
|
|
158
|
-
children.push(react_1.default.createElement(Text, { key: 'sum-hint', color: theme_1.THEME.dim }, ' Press Enter to create, Esc to cancel'));
|
|
159
|
-
}
|
|
160
|
-
else if (state.step === 'done') {
|
|
161
|
-
children.push('\n\n');
|
|
162
|
-
if (state.error) {
|
|
163
|
-
children.push(react_1.default.createElement(Text, { key: 'err', color: theme_1.THEME.error, bold: true }, ` \u2717 Failed: ${state.error}`));
|
|
164
|
-
children.push('\n');
|
|
165
|
-
children.push(react_1.default.createElement(Text, { key: 'err-h', color: theme_1.THEME.dim }, ' Press Enter to return'));
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
else if (state.submitting) {
|
|
169
|
-
children.push('\n\n');
|
|
170
|
-
children.push(react_1.default.createElement(Text, { key: 'sub', color: theme_1.THEME.warning }, ` \u2026 Creating ensemble "${state.answers.name}"...`));
|
|
171
|
-
}
|
|
172
|
-
else if (state.step === 'lineup') {
|
|
173
|
-
children.push('\n\n');
|
|
174
|
-
children.push(react_1.default.createElement(react_1.default.Fragment, { key: 'inp-q' }, react_1.default.createElement(Text, { color: theme_1.THEME.accent }, ' ? '), react_1.default.createElement(Text, { bold: true, color: theme_1.THEME.text }, 'Select a lineup:')));
|
|
175
|
-
if (!lineupCustom) {
|
|
176
|
-
for (let i = 0; i < lineupOptions.length; i++) {
|
|
177
|
-
const opt = lineupOptions[i];
|
|
178
|
-
const selected = i === lineupIdx;
|
|
179
|
-
children.push('\n');
|
|
180
|
-
children.push(react_1.default.createElement(Text, { key: `lo-${i}`, color: selected ? theme_1.THEME.text : theme_1.THEME.dim, bold: selected }, ` ${selected ? '\u276F' : ' '} ${opt.label}`));
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
else if (TEXT_INPUT_STEPS.has(state.step)) {
|
|
185
|
-
const defaultHint = getDefaultHint(state.step, state.answers);
|
|
186
|
-
children.push('\n\n');
|
|
187
|
-
children.push(react_1.default.createElement(react_1.default.Fragment, { key: 'inp-q' }, react_1.default.createElement(Text, { color: theme_1.THEME.accent }, ' ? '), react_1.default.createElement(Text, { bold: true, color: theme_1.THEME.text }, `${STEP_LABELS[state.step]}:`), defaultHint
|
|
188
|
-
? react_1.default.createElement(Text, { color: theme_1.THEME.dim }, ` (${defaultHint})`)
|
|
189
|
-
: null));
|
|
190
|
-
}
|
|
191
|
-
// Lineup custom path mode: show text input
|
|
192
|
-
if (state.step === 'lineup' && lineupCustom && !state.submitting) {
|
|
193
|
-
return react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(Text, null, ...children), react_1.default.createElement(Box, { marginLeft: 3 }, react_1.default.createElement(Text, { color: theme_1.THEME.accent }, '> '), react_1.default.createElement(TextInput, {
|
|
194
|
-
value: inputValue,
|
|
195
|
-
onChange: setInputValue,
|
|
196
|
-
onSubmit: handleTextSubmit,
|
|
197
|
-
})));
|
|
198
|
-
}
|
|
199
|
-
// Text input steps: Text + Box(TextInput)
|
|
200
|
-
if (TEXT_INPUT_STEPS.has(state.step) && !state.submitting) {
|
|
201
|
-
return react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(Text, null, ...children), react_1.default.createElement(Box, { marginLeft: 3 }, react_1.default.createElement(Text, { color: theme_1.THEME.accent }, '> '), react_1.default.createElement(TextInput, {
|
|
202
|
-
value: inputValue,
|
|
203
|
-
onChange: setInputValue,
|
|
204
|
-
onSubmit: handleTextSubmit,
|
|
205
|
-
})));
|
|
206
|
-
}
|
|
207
|
-
return react_1.default.createElement(Text, null, ...children);
|
|
208
|
-
}
|
|
209
|
-
function getAnswerDisplay(step, answers) {
|
|
210
|
-
switch (step) {
|
|
211
|
-
case 'name': return answers.name;
|
|
212
|
-
case 'workDir': return answers.workDir;
|
|
213
|
-
case 'lineup': return answers.lineup || '(none)';
|
|
214
|
-
default: return '';
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
function getDefaultHint(step, answers) {
|
|
218
|
-
switch (step) {
|
|
219
|
-
case 'workDir': return answers.workDir;
|
|
220
|
-
case 'lineup': return 'press Enter to skip';
|
|
221
|
-
default: return null;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Typed-name confirmation for `/destroy <ensemble>`. User must type the
|
|
3
|
-
* ensemble name character-for-character before Enter fires the destroy
|
|
4
|
-
* call. Mismatch preserves the input + surfaces an inline error; Esc
|
|
5
|
-
* cancels.
|
|
6
|
-
*/
|
|
7
|
-
import React from 'react';
|
|
8
|
-
export interface DestroyConfirmModalProps {
|
|
9
|
-
ensemble: string;
|
|
10
|
-
input: string;
|
|
11
|
-
error?: string;
|
|
12
|
-
submitting?: boolean;
|
|
13
|
-
onInput: (next: string) => void;
|
|
14
|
-
onSubmit: () => void;
|
|
15
|
-
onCancel: () => void;
|
|
16
|
-
}
|
|
17
|
-
export declare function DestroyConfirmModal(props: DestroyConfirmModalProps): React.ReactElement;
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.DestroyConfirmModal = DestroyConfirmModal;
|
|
37
|
-
/**
|
|
38
|
-
* Typed-name confirmation for `/destroy <ensemble>`. User must type the
|
|
39
|
-
* ensemble name character-for-character before Enter fires the destroy
|
|
40
|
-
* call. Mismatch preserves the input + surfaces an inline error; Esc
|
|
41
|
-
* cancels.
|
|
42
|
-
*/
|
|
43
|
-
const react_1 = __importStar(require("react"));
|
|
44
|
-
const ink_context_1 = require("../ink-context");
|
|
45
|
-
const theme_1 = require("../utils/theme");
|
|
46
|
-
function DestroyConfirmModal(props) {
|
|
47
|
-
const { ensemble, input, error, submitting, onInput, onSubmit, onCancel } = props;
|
|
48
|
-
const { Box, Text, TextInput, useInput } = (0, ink_context_1.useInk)();
|
|
49
|
-
useInput((0, react_1.useCallback)((_input, key) => {
|
|
50
|
-
if (!submitting && key.escape)
|
|
51
|
-
onCancel();
|
|
52
|
-
}, [submitting, onCancel]));
|
|
53
|
-
return react_1.default.createElement(Box, { flexDirection: 'column' }, react_1.default.createElement(Text, { bold: true, color: theme_1.THEME.error }, ' Destroy ensemble'), react_1.default.createElement(Box, { marginTop: 1, flexDirection: 'column' }, react_1.default.createElement(Text, { color: theme_1.THEME.text }, ` Destroying "${ensemble}" will terminate all sessions, the scheduler, and the maestro.`), react_1.default.createElement(Text, { color: theme_1.THEME.text }, ` Type the ensemble name (${ensemble}) to confirm, or Esc to cancel:`)), submitting
|
|
54
|
-
? react_1.default.createElement(Box, { marginLeft: 3, marginTop: 1 }, react_1.default.createElement(Text, { color: theme_1.THEME.warning }, `\u2026 Destroying "${ensemble}"\u2026`))
|
|
55
|
-
: react_1.default.createElement(Box, { marginLeft: 3, marginTop: 1 }, react_1.default.createElement(Text, { color: theme_1.THEME.error }, '> '), react_1.default.createElement(TextInput, {
|
|
56
|
-
value: input,
|
|
57
|
-
onChange: onInput,
|
|
58
|
-
onSubmit,
|
|
59
|
-
})), error
|
|
60
|
-
? react_1.default.createElement(Text, { color: theme_1.THEME.error }, ` \u2717 ${error}`)
|
|
61
|
-
: null);
|
|
62
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ErrorView — connection failure screen with troubleshooting.
|
|
3
|
-
*
|
|
4
|
-
* Performance: Single <Text> root with nested virtual-text children.
|
|
5
|
-
* Zero Yoga <Box> nodes — follows the pattern from StatusOverlay/ConversationStream.
|
|
6
|
-
*/
|
|
7
|
-
import React from 'react';
|
|
8
|
-
export interface ErrorCheck {
|
|
9
|
-
label: string;
|
|
10
|
-
passed: boolean;
|
|
11
|
-
detail?: string;
|
|
12
|
-
}
|
|
13
|
-
export interface ErrorViewProps {
|
|
14
|
-
version: string;
|
|
15
|
-
checks: ErrorCheck[];
|
|
16
|
-
/** Error detail text (e.g., "Connection refused (ECONNREFUSED)"). */
|
|
17
|
-
errorDetail?: string;
|
|
18
|
-
/** Whether auto-retry is active. */
|
|
19
|
-
retrying?: boolean;
|
|
20
|
-
/** Seconds until next retry. */
|
|
21
|
-
retryIn?: number;
|
|
22
|
-
/** Current retry attempt number. */
|
|
23
|
-
retryAttempt?: number;
|
|
24
|
-
/** Max retry attempts. */
|
|
25
|
-
retryMax?: number;
|
|
26
|
-
/** Called when user presses 'r' to retry. */
|
|
27
|
-
onRetry?: () => void;
|
|
28
|
-
/** Called when user presses 'q' to quit. */
|
|
29
|
-
onQuit?: () => void;
|
|
30
|
-
}
|
|
31
|
-
export declare function ErrorView({ version, checks, retrying, retryIn, retryAttempt, retryMax, onRetry, onQuit, }: ErrorViewProps): React.CElement<{}, React.Component<{}, any, any>>;
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.ErrorView = ErrorView;
|
|
37
|
-
/**
|
|
38
|
-
* ErrorView — connection failure screen with troubleshooting.
|
|
39
|
-
*
|
|
40
|
-
* Performance: Single <Text> root with nested virtual-text children.
|
|
41
|
-
* Zero Yoga <Box> nodes — follows the pattern from StatusOverlay/ConversationStream.
|
|
42
|
-
*/
|
|
43
|
-
const react_1 = __importStar(require("react"));
|
|
44
|
-
const ink_context_1 = require("../ink-context");
|
|
45
|
-
const platform_1 = require("../utils/platform");
|
|
46
|
-
const theme_1 = require("../utils/theme");
|
|
47
|
-
function ErrorView({ version, checks, retrying, retryIn, retryAttempt, retryMax, onRetry, onQuit, }) {
|
|
48
|
-
const { Text, useInput } = (0, ink_context_1.useInk)();
|
|
49
|
-
// Wire up keybindings
|
|
50
|
-
useInput((0, react_1.useCallback)((input) => {
|
|
51
|
-
if (input === 'r' && onRetry)
|
|
52
|
-
onRetry();
|
|
53
|
-
if (input === 'q' && onQuit)
|
|
54
|
-
onQuit();
|
|
55
|
-
}, [onRetry, onQuit]));
|
|
56
|
-
const children = [];
|
|
57
|
-
// Static metronome — always center frame (index 1), rendered dim
|
|
58
|
-
const brailleFrames = (0, platform_1.metronomeBrailleFrames)();
|
|
59
|
-
const staticFrame = brailleFrames[1];
|
|
60
|
-
for (let i = 0; i < staticFrame.length; i++) {
|
|
61
|
-
if (i > 0)
|
|
62
|
-
children.push('\n');
|
|
63
|
-
children.push(react_1.default.createElement(react_1.default.Fragment, { key: `m-${i}` }, ...staticFrame[i].map((seg, j) => react_1.default.createElement(Text, { key: j, color: theme_1.THEME.dim }, seg.char))));
|
|
64
|
-
}
|
|
65
|
-
// Title
|
|
66
|
-
children.push('\n\n');
|
|
67
|
-
children.push(react_1.default.createElement(Text, { key: 'title', bold: true, color: theme_1.THEME.accent }, ' agent-tempo'));
|
|
68
|
-
children.push('\n');
|
|
69
|
-
children.push(react_1.default.createElement(Text, { key: 'sub', color: theme_1.THEME.dim }, ' Multi-session orchestration via Temporal'));
|
|
70
|
-
children.push('\n');
|
|
71
|
-
children.push(react_1.default.createElement(Text, { key: 'ver', color: theme_1.THEME.muted }, ` v${version}`));
|
|
72
|
-
// Error header
|
|
73
|
-
children.push('\n\n');
|
|
74
|
-
children.push(react_1.default.createElement(Text, { key: 'err', bold: true, color: theme_1.THEME.error }, ' \u26A0 Connection Failed'));
|
|
75
|
-
// Checklist
|
|
76
|
-
children.push('\n');
|
|
77
|
-
for (let i = 0; i < checks.length; i++) {
|
|
78
|
-
const check = checks[i];
|
|
79
|
-
children.push('\n');
|
|
80
|
-
children.push(react_1.default.createElement(Text, { key: `c-${i}`, color: check.passed ? theme_1.THEME.success : theme_1.THEME.error }, ` ${check.passed ? '\u2713' : '\u2717'} ${check.label}`));
|
|
81
|
-
if (check.detail && !check.passed) {
|
|
82
|
-
children.push('\n');
|
|
83
|
-
children.push(react_1.default.createElement(Text, { key: `cd-${i}`, color: theme_1.THEME.dim }, ` ${check.detail}`));
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
// Troubleshooting box (text-based border)
|
|
87
|
-
const boxWidth = 56;
|
|
88
|
-
const hLine = '\u2500'.repeat(boxWidth);
|
|
89
|
-
children.push('\n\n');
|
|
90
|
-
children.push(react_1.default.createElement(Text, { key: 'bt', color: theme_1.THEME.dim }, ` \u250C${hLine}\u2510`));
|
|
91
|
-
children.push('\n');
|
|
92
|
-
children.push(react_1.default.createElement(Text, { key: 'bh', bold: true, color: theme_1.THEME.warning }, ' \u2502 Troubleshooting'));
|
|
93
|
-
children.push(react_1.default.createElement(Text, { key: 'bh2', color: theme_1.THEME.dim }, ' '.repeat(boxWidth - 17) + '\u2502'));
|
|
94
|
-
children.push('\n');
|
|
95
|
-
children.push(react_1.default.createElement(Text, { key: 'bs', color: theme_1.THEME.dim }, ` \u2502${' '.repeat(boxWidth)}\u2502`));
|
|
96
|
-
const steps = [
|
|
97
|
-
{ label: '1. Start the Temporal dev server:', cmd: ' $ temporal server start-dev' },
|
|
98
|
-
{ label: '2. Or specify a custom address:', cmd: ' $ TEMPORAL_ADDRESS=host:7233 agent-tempo' },
|
|
99
|
-
{ label: '3. Check if Temporal is running:', cmd: ' $ temporal operator cluster health' },
|
|
100
|
-
];
|
|
101
|
-
for (let i = 0; i < steps.length; i++) {
|
|
102
|
-
const s = steps[i];
|
|
103
|
-
const pad1 = ' '.repeat(Math.max(0, boxWidth - s.label.length - 2));
|
|
104
|
-
const pad2 = ' '.repeat(Math.max(0, boxWidth - s.cmd.length - 2));
|
|
105
|
-
children.push('\n');
|
|
106
|
-
children.push(react_1.default.createElement(Text, { key: `s${i}a`, color: theme_1.THEME.text }, ` \u2502 ${s.label}`));
|
|
107
|
-
children.push(react_1.default.createElement(Text, { key: `s${i}ap`, color: theme_1.THEME.dim }, `${pad1}\u2502`));
|
|
108
|
-
children.push('\n');
|
|
109
|
-
children.push(react_1.default.createElement(Text, { key: `s${i}b`, color: theme_1.THEME.accent }, ` \u2502 ${s.cmd}`));
|
|
110
|
-
children.push(react_1.default.createElement(Text, { key: `s${i}bp`, color: theme_1.THEME.dim }, `${pad2}\u2502`));
|
|
111
|
-
}
|
|
112
|
-
children.push('\n');
|
|
113
|
-
children.push(react_1.default.createElement(Text, { key: 'be', color: theme_1.THEME.dim }, ` \u2502${' '.repeat(boxWidth)}\u2502`));
|
|
114
|
-
const docsUrl = 'Docs: https://github.com/vinceblank/agent-tempo#setup';
|
|
115
|
-
const docsPad = ' '.repeat(Math.max(0, boxWidth - docsUrl.length - 2));
|
|
116
|
-
children.push('\n');
|
|
117
|
-
children.push(react_1.default.createElement(Text, { key: 'bd', color: theme_1.THEME.dim }, ` \u2502 ${docsUrl}${docsPad}\u2502`));
|
|
118
|
-
children.push('\n');
|
|
119
|
-
children.push(react_1.default.createElement(Text, { key: 'bb', color: theme_1.THEME.dim }, ` \u2514${hLine}\u2518`));
|
|
120
|
-
// Retry progress
|
|
121
|
-
if (retrying) {
|
|
122
|
-
children.push('\n\n');
|
|
123
|
-
children.push(react_1.default.createElement(Text, { key: 'retry', color: theme_1.THEME.dim }, ` Retrying in ${retryIn ?? '?'}s... (attempt ${retryAttempt ?? '?'}/${retryMax ?? 5})`));
|
|
124
|
-
}
|
|
125
|
-
// Keybindings
|
|
126
|
-
children.push('\n\n');
|
|
127
|
-
children.push(react_1.default.createElement(Text, { key: 'keys', color: theme_1.THEME.dim }, ' [r] retry now [q] quit [?] help'));
|
|
128
|
-
return react_1.default.createElement(Text, null, ...children);
|
|
129
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HomeView — three-list landing surface (Online / Paused / Offline). Polls
|
|
3
|
-
* `listEnsembles` every 10s; `r` forces an immediate refresh.
|
|
4
|
-
*
|
|
5
|
-
* Offline rows whose ensemble name matches the cwd's git-root basename are
|
|
6
|
-
* pinned to the top of the offline list with a `⬡` badge — the visual
|
|
7
|
-
* affordance for "press Enter to restore the ensemble you created here".
|
|
8
|
-
* Online and Paused rows are not cwd-pinned — entering them is a no-op
|
|
9
|
-
* navigation, not a restore that needs a per-cwd hint.
|
|
10
|
-
*/
|
|
11
|
-
import React from 'react';
|
|
12
|
-
import type { BootstrapBadges } from '../bootstrap-types';
|
|
13
|
-
import type { EnsembleSummary, TempoClient } from '../../client';
|
|
14
|
-
/**
|
|
15
|
-
* Initial snapshot — structurally a subset of `BootstrapResult` so callers
|
|
16
|
-
* can pass the full bootstrap result directly.
|
|
17
|
-
*/
|
|
18
|
-
export interface HomeViewInitial {
|
|
19
|
-
ensembles: EnsembleSummary[];
|
|
20
|
-
cwdGitRoot: string | null;
|
|
21
|
-
badges: BootstrapBadges;
|
|
22
|
-
}
|
|
23
|
-
export interface HomeViewProps {
|
|
24
|
-
initial: HomeViewInitial;
|
|
25
|
-
client: TempoClient;
|
|
26
|
-
onEnterEnsemble: (name: string) => void;
|
|
27
|
-
onCreateEnsemble: () => void;
|
|
28
|
-
onLoadLineup: () => void;
|
|
29
|
-
onRestoreEnsemble: (name: string) => void;
|
|
30
|
-
onQuit: () => void;
|
|
31
|
-
}
|
|
32
|
-
interface SortedLists {
|
|
33
|
-
online: EnsembleSummary[];
|
|
34
|
-
paused: EnsembleSummary[];
|
|
35
|
-
offline: EnsembleSummary[];
|
|
36
|
-
/**
|
|
37
|
-
* Flat sequence used for keyboard navigation. Order matches render
|
|
38
|
-
* order: Online → Paused → Offline (cwd-match offline rows first).
|
|
39
|
-
*/
|
|
40
|
-
flat: Array<{
|
|
41
|
-
ensemble: EnsembleSummary;
|
|
42
|
-
isCwdMatch: boolean;
|
|
43
|
-
}>;
|
|
44
|
-
/** Count of cwd-matched offline ensembles pinned at the top of the offline list. */
|
|
45
|
-
cwdMatchCount: number;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Split + sort ensembles into Online / Paused / Offline lists with
|
|
49
|
-
* cwd-match rows pinned to the top of the Offline list. Pure function for
|
|
50
|
-
* testability.
|
|
51
|
-
*/
|
|
52
|
-
export declare function partitionEnsembles(ensembles: readonly EnsembleSummary[], cwdGitRoot: string | null, cwdMatcher?: (ensemble: EnsembleSummary, gitRoot: string) => boolean): SortedLists;
|
|
53
|
-
export declare function HomeView(props: HomeViewProps): React.ReactElement;
|
|
54
|
-
export {};
|