aoaoe 0.3.0 → 0.5.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/README.md +48 -6
- package/dist/chat.d.ts +3 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +317 -0
- package/dist/chat.js.map +1 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +26 -4
- package/dist/config.js.map +1 -1
- package/dist/console.d.ts +2 -0
- package/dist/console.d.ts.map +1 -1
- package/dist/console.js +33 -13
- package/dist/console.js.map +1 -1
- package/dist/daemon-state.d.ts +10 -0
- package/dist/daemon-state.d.ts.map +1 -0
- package/dist/daemon-state.js +107 -0
- package/dist/daemon-state.js.map +1 -0
- package/dist/dashboard.d.ts.map +1 -1
- package/dist/dashboard.js +23 -6
- package/dist/dashboard.js.map +1 -1
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +4 -0
- package/dist/executor.js.map +1 -1
- package/dist/index.js +194 -18
- package/dist/index.js.map +1 -1
- package/dist/input.d.ts +1 -0
- package/dist/input.d.ts.map +1 -1
- package/dist/input.js +13 -0
- package/dist/input.js.map +1 -1
- package/dist/shell.d.ts +2 -1
- package/dist/shell.d.ts.map +1 -1
- package/dist/shell.js +31 -16
- package/dist/shell.js.map +1 -1
- package/dist/types.d.ts +21 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -51,14 +51,32 @@ npm link
|
|
|
51
51
|
# 1. Make sure you have AoE sessions running
|
|
52
52
|
aoe
|
|
53
53
|
|
|
54
|
-
# 2.
|
|
54
|
+
# 2. Register aoaoe as an AoE session (one-time setup)
|
|
55
|
+
aoaoe register
|
|
56
|
+
|
|
57
|
+
# 3. Start the supervisor daemon
|
|
55
58
|
aoaoe
|
|
56
59
|
|
|
57
|
-
#
|
|
60
|
+
# 4. Start the aoaoe session in AoE, then enter it via AoE's TUI
|
|
61
|
+
aoe session start aoaoe
|
|
62
|
+
aoe # select "aoaoe" to chat with the reasoner
|
|
63
|
+
|
|
64
|
+
# Or specify a reasoning backend
|
|
58
65
|
aoaoe --reasoner opencode
|
|
59
66
|
aoaoe --reasoner claude-code
|
|
60
67
|
```
|
|
61
68
|
|
|
69
|
+
### Register as an AoE Session
|
|
70
|
+
|
|
71
|
+
`aoaoe register` adds aoaoe to your AoE session list so you can enter it just like any other agent. Inside the session you get an interactive chat where you can send messages to the reasoner, see observations, and watch decisions in real time.
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
aoaoe register # register with default title "aoaoe"
|
|
75
|
+
aoaoe register --title my-brain # custom title
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
The session runs an interactive chat (chat.ts) inside the AoE-managed tmux pane. The daemon reads your messages from `~/.aoaoe/pending-input.txt` and writes observations and decisions to `~/.aoaoe/conversation.log`.
|
|
79
|
+
|
|
62
80
|
## How It Works
|
|
63
81
|
|
|
64
82
|
```
|
|
@@ -212,22 +230,34 @@ AoE sessions are named `aoe_<sanitized_title>_<first8_of_id>` in tmux. State is
|
|
|
212
230
|
|
|
213
231
|
```
|
|
214
232
|
src/
|
|
215
|
-
index.ts # entry point, daemon loop
|
|
233
|
+
index.ts # entry point, daemon loop, register/attach subcommands
|
|
234
|
+
chat.ts # interactive chat for AoE-managed tmux pane
|
|
216
235
|
config.ts # config loader and validation
|
|
236
|
+
console.ts # conversation log + input IPC (file-based)
|
|
217
237
|
poller.ts # aoe CLI + tmux capture-pane wrapper
|
|
218
238
|
executor.ts # maps action decisions to shell commands
|
|
239
|
+
dashboard.ts # periodic CLI status table
|
|
240
|
+
input.ts # stdin readline listener
|
|
241
|
+
shell.ts # exec() wrappers
|
|
242
|
+
types.ts # shared types (SessionSnapshot, Action, etc.)
|
|
219
243
|
reasoner/
|
|
220
244
|
index.ts # common Reasoner interface
|
|
245
|
+
prompt.ts # system prompt + observation formatting
|
|
221
246
|
opencode.ts # OpenCode SDK backend
|
|
222
247
|
claude-code.ts # Claude Code CLI backend
|
|
223
|
-
types.ts # shared types (SessionSnapshot, Action, etc.)
|
|
224
248
|
```
|
|
225
249
|
|
|
226
|
-
## CLI
|
|
250
|
+
## CLI
|
|
227
251
|
|
|
228
252
|
```
|
|
229
|
-
aoaoe [options]
|
|
253
|
+
aoaoe [command] [options]
|
|
254
|
+
|
|
255
|
+
commands:
|
|
256
|
+
(none) start the daemon
|
|
257
|
+
attach enter the reasoner console (Ctrl+B D to detach)
|
|
258
|
+
register register aoaoe as an AoE session (appears in aoe list)
|
|
230
259
|
|
|
260
|
+
options:
|
|
231
261
|
--reasoner <opencode|claude-code> reasoning backend (default: opencode)
|
|
232
262
|
--poll-interval <ms> poll interval in ms (default: 10000)
|
|
233
263
|
--port <number> opencode server port (default: 4097)
|
|
@@ -235,6 +265,18 @@ aoaoe [options]
|
|
|
235
265
|
--profile <name> aoe profile (default: default)
|
|
236
266
|
--dry-run observe + reason but don't execute
|
|
237
267
|
--verbose, -v verbose logging
|
|
268
|
+
|
|
269
|
+
register options:
|
|
270
|
+
--title, -t <name> session title in AoE (default: aoaoe)
|
|
271
|
+
|
|
272
|
+
chat commands (inside AoE session):
|
|
273
|
+
/help show available commands
|
|
274
|
+
/status request daemon status
|
|
275
|
+
/dashboard request dashboard output
|
|
276
|
+
/pause pause the daemon
|
|
277
|
+
/resume resume the daemon
|
|
278
|
+
/clear clear the screen
|
|
279
|
+
(anything) send a message to the reasoner
|
|
238
280
|
```
|
|
239
281
|
|
|
240
282
|
Action history is persisted to `~/.aoaoe/actions.log` (JSONL format).
|
package/dist/chat.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":""}
|
package/dist/chat.js
ADDED
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// chat.ts -- standalone interactive chat that runs inside an AoE-managed tmux pane
|
|
3
|
+
// this is the program that --cmd_override points to when aoaoe registers itself as an AoE session.
|
|
4
|
+
// it reads conversation.log for history display, writes user input to pending-input.txt,
|
|
5
|
+
// and the daemon picks it up on the next poll cycle.
|
|
6
|
+
//
|
|
7
|
+
// features:
|
|
8
|
+
// - live countdown to next reasoning cycle (reads daemon-state.json every 1s)
|
|
9
|
+
// - per-pane task display (/tasks command)
|
|
10
|
+
// - ESC-ESC to interrupt the current reasoner (like OpenCode)
|
|
11
|
+
import { createInterface, emitKeypressEvents } from "node:readline";
|
|
12
|
+
import { appendFileSync, writeFileSync, existsSync, mkdirSync, watchFile, unwatchFile, readFileSync, statSync, openSync, readSync, closeSync, unlinkSync } from "node:fs";
|
|
13
|
+
import { join } from "node:path";
|
|
14
|
+
import { homedir } from "node:os";
|
|
15
|
+
import { readState, requestInterrupt } from "./daemon-state.js";
|
|
16
|
+
const AOAOE_DIR = join(homedir(), ".aoaoe");
|
|
17
|
+
const CONVO_LOG = join(AOAOE_DIR, "conversation.log");
|
|
18
|
+
const INPUT_FILE = join(AOAOE_DIR, "pending-input.txt");
|
|
19
|
+
const PID_FILE = join(AOAOE_DIR, "chat.pid");
|
|
20
|
+
// ANSI helpers
|
|
21
|
+
const DIM = "\x1b[2m";
|
|
22
|
+
const BOLD = "\x1b[1m";
|
|
23
|
+
const GREEN = "\x1b[32m";
|
|
24
|
+
const CYAN = "\x1b[36m";
|
|
25
|
+
const YELLOW = "\x1b[33m";
|
|
26
|
+
const RED = "\x1b[31m";
|
|
27
|
+
const MAGENTA = "\x1b[35m";
|
|
28
|
+
const RESET = "\x1b[0m";
|
|
29
|
+
const SAVE_CURSOR = "\x1b7";
|
|
30
|
+
const RESTORE_CURSOR = "\x1b8";
|
|
31
|
+
const CLEAR_LINE = "\x1b[2K";
|
|
32
|
+
// ESC-ESC interrupt detection
|
|
33
|
+
let lastEscTime = 0;
|
|
34
|
+
const ESC_DOUBLE_TAP_MS = 500;
|
|
35
|
+
function main() {
|
|
36
|
+
mkdirSync(AOAOE_DIR, { recursive: true });
|
|
37
|
+
// write PID so daemon can detect we're running
|
|
38
|
+
writeFileSync(PID_FILE, String(process.pid));
|
|
39
|
+
// print banner
|
|
40
|
+
console.log(`${BOLD}${CYAN}aoaoe reasoner chat${RESET}`);
|
|
41
|
+
console.log(`${DIM}messages you type here are sent to the reasoner on the next poll cycle${RESET}`);
|
|
42
|
+
console.log(`${DIM}the daemon writes observations and decisions to this view${RESET}`);
|
|
43
|
+
console.log(`${DIM}type /help for commands, ESC ESC to interrupt reasoner, Ctrl+C to exit${RESET}`);
|
|
44
|
+
console.log();
|
|
45
|
+
// replay existing conversation log
|
|
46
|
+
replayLog();
|
|
47
|
+
// watch conversation.log for new content and stream it
|
|
48
|
+
let lastSize = existsSync(CONVO_LOG) ? statSync(CONVO_LOG).size : 0;
|
|
49
|
+
watchFile(CONVO_LOG, { interval: 500 }, (curr) => {
|
|
50
|
+
if (curr.size > lastSize) {
|
|
51
|
+
// read only new bytes
|
|
52
|
+
const fd = openSync(CONVO_LOG, "r");
|
|
53
|
+
const buf = Buffer.alloc(curr.size - lastSize);
|
|
54
|
+
readSync(fd, buf, 0, buf.length, lastSize);
|
|
55
|
+
closeSync(fd);
|
|
56
|
+
const newText = buf.toString("utf-8");
|
|
57
|
+
// move cursor to start of line, clear it, print new content, then re-show prompt
|
|
58
|
+
process.stdout.write(`\r\x1b[K${colorize(newText)}`);
|
|
59
|
+
rl.prompt(true);
|
|
60
|
+
lastSize = curr.size;
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
// set up keypress events for ESC-ESC detection
|
|
64
|
+
if (process.stdin.isTTY) {
|
|
65
|
+
emitKeypressEvents(process.stdin);
|
|
66
|
+
process.stdin.on("keypress", (_ch, key) => {
|
|
67
|
+
if (key?.name === "escape" || key?.sequence === "\x1b") {
|
|
68
|
+
const now = Date.now();
|
|
69
|
+
if (now - lastEscTime < ESC_DOUBLE_TAP_MS) {
|
|
70
|
+
// double-ESC detected -- interrupt the reasoner
|
|
71
|
+
handleInterrupt();
|
|
72
|
+
lastEscTime = 0;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
lastEscTime = now;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
// any other key resets the ESC timer
|
|
80
|
+
lastEscTime = 0;
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
// interactive readline
|
|
85
|
+
const rl = createInterface({
|
|
86
|
+
input: process.stdin,
|
|
87
|
+
output: process.stdout,
|
|
88
|
+
prompt: `${GREEN}>${RESET} `,
|
|
89
|
+
terminal: true,
|
|
90
|
+
});
|
|
91
|
+
rl.prompt();
|
|
92
|
+
// live status bar -- update every second
|
|
93
|
+
const statusInterval = setInterval(() => {
|
|
94
|
+
renderStatusBar(rl);
|
|
95
|
+
}, 1000);
|
|
96
|
+
rl.on("line", (line) => {
|
|
97
|
+
const trimmed = line.trim();
|
|
98
|
+
if (!trimmed) {
|
|
99
|
+
rl.prompt();
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
// handle local commands
|
|
103
|
+
if (trimmed === "/help") {
|
|
104
|
+
printHelp();
|
|
105
|
+
rl.prompt();
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (trimmed === "/status") {
|
|
109
|
+
appendToInput("__CMD_STATUS__");
|
|
110
|
+
console.log(`${DIM}status requested${RESET}`);
|
|
111
|
+
rl.prompt();
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if (trimmed === "/dashboard") {
|
|
115
|
+
appendToInput("__CMD_DASHBOARD__");
|
|
116
|
+
console.log(`${DIM}dashboard requested${RESET}`);
|
|
117
|
+
rl.prompt();
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
if (trimmed === "/tasks") {
|
|
121
|
+
printTasks();
|
|
122
|
+
rl.prompt();
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (trimmed === "/verbose") {
|
|
126
|
+
appendToInput("__CMD_VERBOSE__");
|
|
127
|
+
console.log(`${DIM}verbose toggled${RESET}`);
|
|
128
|
+
rl.prompt();
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (trimmed === "/pause") {
|
|
132
|
+
appendToInput("__CMD_PAUSE__");
|
|
133
|
+
console.log(`${DIM}pause requested${RESET}`);
|
|
134
|
+
rl.prompt();
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (trimmed === "/resume") {
|
|
138
|
+
appendToInput("__CMD_RESUME__");
|
|
139
|
+
console.log(`${DIM}resume requested${RESET}`);
|
|
140
|
+
rl.prompt();
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (trimmed === "/interrupt") {
|
|
144
|
+
handleInterrupt();
|
|
145
|
+
rl.prompt();
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (trimmed === "/clear") {
|
|
149
|
+
process.stdout.write("\x1b[2J\x1b[H");
|
|
150
|
+
rl.prompt();
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
// regular message -- queue for reasoner
|
|
154
|
+
appendToInput(trimmed);
|
|
155
|
+
console.log(`${DIM}queued for next reasoning cycle${RESET}`);
|
|
156
|
+
rl.prompt();
|
|
157
|
+
});
|
|
158
|
+
rl.on("close", () => {
|
|
159
|
+
clearInterval(statusInterval);
|
|
160
|
+
cleanup();
|
|
161
|
+
process.exit(0);
|
|
162
|
+
});
|
|
163
|
+
process.on("SIGINT", () => {
|
|
164
|
+
clearInterval(statusInterval);
|
|
165
|
+
cleanup();
|
|
166
|
+
process.exit(0);
|
|
167
|
+
});
|
|
168
|
+
process.on("SIGTERM", () => {
|
|
169
|
+
clearInterval(statusInterval);
|
|
170
|
+
cleanup();
|
|
171
|
+
process.exit(0);
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
function handleInterrupt() {
|
|
175
|
+
const state = readState();
|
|
176
|
+
if (state?.phase === "reasoning") {
|
|
177
|
+
requestInterrupt();
|
|
178
|
+
console.log(`${RED}${BOLD}interrupting reasoner...${RESET}`);
|
|
179
|
+
console.log(`${DIM}type your message -- it will be sent before the next reasoning cycle${RESET}`);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
console.log(`${DIM}no active reasoning to interrupt (phase: ${state?.phase ?? "unknown"})${RESET}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// render a status bar showing countdown, phase, and session count
|
|
186
|
+
function renderStatusBar(rl) {
|
|
187
|
+
const state = readState();
|
|
188
|
+
if (!state)
|
|
189
|
+
return;
|
|
190
|
+
const parts = [];
|
|
191
|
+
// phase indicator
|
|
192
|
+
const phaseIcons = {
|
|
193
|
+
sleeping: "zzz",
|
|
194
|
+
polling: "...",
|
|
195
|
+
reasoning: "thinking",
|
|
196
|
+
executing: "running",
|
|
197
|
+
interrupted: "INTERRUPTED",
|
|
198
|
+
};
|
|
199
|
+
const phaseStr = phaseIcons[state.phase] ?? state.phase;
|
|
200
|
+
// countdown to next tick
|
|
201
|
+
if (state.phase === "sleeping" && state.nextTickAt) {
|
|
202
|
+
const remaining = Math.max(0, Math.ceil((state.nextTickAt - Date.now()) / 1000));
|
|
203
|
+
parts.push(`next cycle: ${remaining}s`);
|
|
204
|
+
}
|
|
205
|
+
else if (state.phase === "reasoning") {
|
|
206
|
+
const elapsed = Math.floor((Date.now() - state.phaseStartedAt) / 1000);
|
|
207
|
+
parts.push(`reasoning: ${elapsed}s`);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
parts.push(phaseStr);
|
|
211
|
+
}
|
|
212
|
+
// session count
|
|
213
|
+
parts.push(`${state.sessionCount} sessions`);
|
|
214
|
+
if (state.paused)
|
|
215
|
+
parts.push("PAUSED");
|
|
216
|
+
parts.push(`poll #${state.pollCount}`);
|
|
217
|
+
const statusLine = parts.join(" | ");
|
|
218
|
+
// write status to terminal title (visible in tmux pane title)
|
|
219
|
+
process.stdout.write(`\x1b]0;aoaoe: ${statusLine}\x07`);
|
|
220
|
+
// also write a status line above the prompt using save/restore cursor
|
|
221
|
+
// this overwrites the line above the current prompt
|
|
222
|
+
process.stderr.write(`${SAVE_CURSOR}\x1b[s` + // save position
|
|
223
|
+
`\x1b[1A` + // move up one line
|
|
224
|
+
`\r${CLEAR_LINE}` + // clear that line
|
|
225
|
+
`${DIM}[${statusLine}]${RESET}` +
|
|
226
|
+
`\x1b[u${RESTORE_CURSOR}` // restore position
|
|
227
|
+
);
|
|
228
|
+
}
|
|
229
|
+
function printTasks() {
|
|
230
|
+
const state = readState();
|
|
231
|
+
if (!state || state.sessions.length === 0) {
|
|
232
|
+
console.log(`${DIM}no active sessions${RESET}`);
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
console.log(`\n${BOLD}session tasks:${RESET}`);
|
|
236
|
+
for (const s of state.sessions) {
|
|
237
|
+
const statusIcon = s.status === "working" ? "~" : s.status === "idle" ? "." : s.status === "error" ? "!" : "?";
|
|
238
|
+
const task = s.currentTask ?? `${DIM}(no task assigned)${RESET}`;
|
|
239
|
+
const activity = s.lastActivity
|
|
240
|
+
? `${DIM}last: ${s.lastActivity.slice(0, 60)}${RESET}`
|
|
241
|
+
: "";
|
|
242
|
+
console.log(` ${statusIcon} ${BOLD}${s.title}${RESET} [${s.tool}] ${s.id.slice(0, 8)}`);
|
|
243
|
+
console.log(` task: ${task}`);
|
|
244
|
+
if (activity)
|
|
245
|
+
console.log(` ${activity}`);
|
|
246
|
+
}
|
|
247
|
+
console.log();
|
|
248
|
+
}
|
|
249
|
+
function appendToInput(msg) {
|
|
250
|
+
try {
|
|
251
|
+
appendFileSync(INPUT_FILE, msg + "\n");
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
// ignore write errors
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
function replayLog() {
|
|
258
|
+
if (!existsSync(CONVO_LOG))
|
|
259
|
+
return;
|
|
260
|
+
try {
|
|
261
|
+
const content = readFileSync(CONVO_LOG, "utf-8");
|
|
262
|
+
if (content.trim()) {
|
|
263
|
+
process.stdout.write(colorize(content));
|
|
264
|
+
console.log(`${DIM}--- end of history ---${RESET}\n`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
catch {
|
|
268
|
+
// ignore read errors
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
// colorize conversation log lines based on their tag
|
|
272
|
+
function colorize(text) {
|
|
273
|
+
return text.replace(/^(.*?\[)(observation|you|reasoner|action|\+ action|! action|system)(\].*$)/gm, (_, pre, tag, post) => {
|
|
274
|
+
switch (tag) {
|
|
275
|
+
case "observation": return `${DIM}${pre}${tag}${post}${RESET}`;
|
|
276
|
+
case "you": return `${GREEN}${pre}${tag}${post}${RESET}`;
|
|
277
|
+
case "reasoner": return `${CYAN}${pre}${tag}${post}${RESET}`;
|
|
278
|
+
case "+ action": return `${YELLOW}${pre}${tag}${post}${RESET}`;
|
|
279
|
+
case "! action": return `${RED}${pre}${tag}${post}${RESET}`;
|
|
280
|
+
case "system": return `${DIM}${pre}${tag}${post}${RESET}`;
|
|
281
|
+
default: return `${pre}${tag}${post}`;
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
function printHelp() {
|
|
286
|
+
console.log(`
|
|
287
|
+
${BOLD}commands:${RESET}
|
|
288
|
+
/help show this help
|
|
289
|
+
/status request daemon status
|
|
290
|
+
/dashboard request dashboard output
|
|
291
|
+
/tasks show per-session task assignments
|
|
292
|
+
/verbose toggle verbose logging
|
|
293
|
+
/pause pause the daemon
|
|
294
|
+
/resume resume the daemon
|
|
295
|
+
/interrupt interrupt the current reasoner call
|
|
296
|
+
/clear clear the screen
|
|
297
|
+
|
|
298
|
+
${BOLD}shortcuts:${RESET}
|
|
299
|
+
ESC ESC interrupt the current reasoner (same as /interrupt)
|
|
300
|
+
|
|
301
|
+
${BOLD}anything else${RESET} is sent to the reasoner as an operator message
|
|
302
|
+
`);
|
|
303
|
+
}
|
|
304
|
+
function cleanup() {
|
|
305
|
+
unwatchFile(CONVO_LOG);
|
|
306
|
+
try {
|
|
307
|
+
// only remove PID file if it's still ours
|
|
308
|
+
if (existsSync(PID_FILE) && readFileSync(PID_FILE, "utf-8").trim() === String(process.pid)) {
|
|
309
|
+
unlinkSync(PID_FILE);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
catch {
|
|
313
|
+
// ignore
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
main();
|
|
317
|
+
//# sourceMappingURL=chat.js.map
|
package/dist/chat.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,YAAY,CAAC;AA2B/D,wBAAgB,UAAU,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAqBxE;AAGD,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB5E;AAkCD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAC5C,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,YAAY,CAAC;AA2B/D,wBAAgB,UAAU,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAqBxE;AAGD,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB5E;AAkCD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAC5C,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CA6DA;AAED,wBAAgB,SAAS,SAgCxB"}
|
package/dist/config.js
CHANGED
|
@@ -93,9 +93,21 @@ export function parseCliArgs(argv) {
|
|
|
93
93
|
let help = false;
|
|
94
94
|
let version = false;
|
|
95
95
|
let attach = false;
|
|
96
|
+
let register = false;
|
|
97
|
+
let registerTitle;
|
|
96
98
|
// check for subcommand as first non-flag arg
|
|
97
99
|
if (argv[2] === "attach") {
|
|
98
|
-
return { overrides, help: false, version: false, attach: true };
|
|
100
|
+
return { overrides, help: false, version: false, attach: true, register: false };
|
|
101
|
+
}
|
|
102
|
+
if (argv[2] === "register") {
|
|
103
|
+
register = true;
|
|
104
|
+
// parse --title from remaining args
|
|
105
|
+
for (let i = 3; i < argv.length; i++) {
|
|
106
|
+
if ((argv[i] === "--title" || argv[i] === "-t") && argv[i + 1]) {
|
|
107
|
+
registerTitle = argv[++i];
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return { overrides, help: false, version: false, attach: false, register, registerTitle };
|
|
99
111
|
}
|
|
100
112
|
for (let i = 2; i < argv.length; i++) {
|
|
101
113
|
const arg = argv[i];
|
|
@@ -133,7 +145,7 @@ export function parseCliArgs(argv) {
|
|
|
133
145
|
break;
|
|
134
146
|
}
|
|
135
147
|
}
|
|
136
|
-
return { overrides, help, version, attach };
|
|
148
|
+
return { overrides, help, version, attach, register: false };
|
|
137
149
|
}
|
|
138
150
|
export function printHelp() {
|
|
139
151
|
console.log(`aoaoe - autonomous supervisor for agent-of-empires sessions
|
|
@@ -143,6 +155,7 @@ usage: aoaoe [command] [options]
|
|
|
143
155
|
commands:
|
|
144
156
|
(none) start the daemon
|
|
145
157
|
attach enter the reasoner console (Ctrl+B D to detach)
|
|
158
|
+
register register aoaoe as an AoE session (appears in aoe list)
|
|
146
159
|
|
|
147
160
|
options:
|
|
148
161
|
--reasoner <opencode|claude-code> reasoning backend (default: opencode)
|
|
@@ -155,7 +168,16 @@ options:
|
|
|
155
168
|
--help, -h show this help
|
|
156
169
|
--version show version
|
|
157
170
|
|
|
158
|
-
|
|
159
|
-
|
|
171
|
+
register options:
|
|
172
|
+
--title, -t <name> session title in AoE (default: aoaoe)
|
|
173
|
+
|
|
174
|
+
console commands (inside reasoner chat):
|
|
175
|
+
/help show available commands
|
|
176
|
+
/status request daemon status
|
|
177
|
+
/dashboard request dashboard output
|
|
178
|
+
/pause pause the daemon
|
|
179
|
+
/resume resume the daemon
|
|
180
|
+
/clear clear the screen
|
|
181
|
+
(anything) send a message to the reasoner`);
|
|
160
182
|
}
|
|
161
183
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,QAAQ,GAAgB;IAC5B,QAAQ,EAAE,UAAU;IACpB,cAAc,EAAE,MAAM;IACtB,QAAQ,EAAE;QACR,IAAI,EAAE,IAAI;KACX;IACD,UAAU,EAAE;QACV,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,IAAI;KACb;IACD,GAAG,EAAE;QACH,OAAO,EAAE,SAAS;KACnB;IACD,QAAQ,EAAE;QACR,oBAAoB,EAAE,OAAO;QAC7B,sBAAsB,EAAE,CAAC;QACzB,qBAAqB,EAAE,IAAI;KAC5B;IACD,iBAAiB,EAAE,GAAG;IACtB,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,KAAK;CACd,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC;AAE1D,MAAM,UAAU,UAAU,CAAC,SAAgC;IACzD,IAAI,UAAU,GAAyB,EAAE,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;gBAClD,GAAG,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;YACjC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,kBAAkB,CAAC,CAAC;YACjE,CAAC;YACD,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CACd,QAA8C,EAC9C,UAAqC,EACrC,CAAC,SAAS,IAAI,EAAE,CAA4B,CAC7C,CAAC;AACJ,CAAC;AAED,2CAA2C;AAC3C,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAmB;IAC3D,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAClE,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEjD,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,aAAa,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,GAAW;IAC9B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACxD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,GAAG,OAAkC;IACtD,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACtC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;oBACtF,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAA4B,EAAE,GAA8B,CAAC,CAAC;gBAClG,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAgC,CAAC;AAC1C,CAAC;AAED,SAAS,GAAG,CAAC,GAAW;IACtB,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAc;IAQzC,MAAM,SAAS,GAAyB,EAAE,CAAC;IAC3C,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,aAAiC,CAAC;IAEtC,6CAA6C;IAC7C,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACnF,CAAC;IACD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;QAC3B,QAAQ,GAAG,IAAI,CAAC;QAChB,oCAAoC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC/D,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC5F,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,YAAY;gBACf,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAoB,CAAC;gBAClD,MAAM;YACR,KAAK,iBAAiB;gBACpB,SAAS,CAAC,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnD,MAAM;YACR,KAAK,QAAQ;gBACX,SAAS,CAAC,QAAQ,GAAG,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAA6B,CAAC;gBACzG,MAAM;YACR,KAAK,SAAS;gBACZ,2CAA2C;gBAC3C,SAAS,CAAC,QAAQ,GAAG,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAA6B,CAAC;gBAC5F,SAAS,CAAC,UAAU,GAAG,EAAE,GAAG,SAAS,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAA+B,CAAC;gBAChG,MAAM;YACR,KAAK,WAAW;gBACd,SAAS,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACvC,MAAM;YACR,KAAK,WAAW,CAAC;YACjB,KAAK,IAAI;gBACP,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;gBACzB,MAAM;YACR,KAAK,WAAW;gBACd,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;gBACxB,MAAM;YACR,KAAK,QAAQ,CAAC;YACd,KAAK,IAAI;gBACP,IAAI,GAAG,IAAI,CAAC;gBACZ,MAAM;YACR,KAAK,WAAW;gBACd,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDA8BkC,CAAC,CAAC;AAClD,CAAC"}
|
package/dist/console.d.ts
CHANGED
package/dist/console.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../src/console.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../src/console.ts"],"names":[],"mappings":"AAeA,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IAGzB,OAAO,CAAC,aAAa;IAaf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgD5B,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAQpF,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAInC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIvC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAKnE,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK9B,UAAU,IAAI,MAAM,EAAE;IAYhB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,EAAE;IAIV,MAAM,CAAC,WAAW,IAAI,MAAM;CAG7B"}
|
package/dist/console.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
// console.ts -- manages
|
|
2
|
-
// two
|
|
3
|
-
//
|
|
1
|
+
// console.ts -- manages conversation log and user input IPC for the reasoner
|
|
2
|
+
// supports two modes:
|
|
3
|
+
// 1. standalone tmux session (aoaoe_reasoner) -- legacy fallback when not registered as AoE session
|
|
4
|
+
// 2. file-only mode -- when chat.ts runs inside an AoE-managed tmux pane, we just read/write files
|
|
4
5
|
import { mkdirSync, appendFileSync, readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
5
6
|
import { join } from "node:path";
|
|
6
7
|
import { homedir } from "node:os";
|
|
@@ -8,40 +9,59 @@ import { execQuiet, exec } from "./shell.js";
|
|
|
8
9
|
const AOAOE_DIR = join(homedir(), ".aoaoe");
|
|
9
10
|
const CONVO_LOG = join(AOAOE_DIR, "conversation.log");
|
|
10
11
|
const INPUT_FILE = join(AOAOE_DIR, "pending-input.txt");
|
|
12
|
+
const PID_FILE = join(AOAOE_DIR, "chat.pid");
|
|
11
13
|
const SESSION_NAME = "aoaoe_reasoner";
|
|
12
14
|
export class ReasonerConsole {
|
|
13
15
|
started = false;
|
|
16
|
+
ownsTmux = false; // true if we created the aoaoe_reasoner tmux session
|
|
17
|
+
// detect if chat.ts is running (registered as AoE session)
|
|
18
|
+
chatIsRunning() {
|
|
19
|
+
if (!existsSync(PID_FILE))
|
|
20
|
+
return false;
|
|
21
|
+
try {
|
|
22
|
+
const pid = parseInt(readFileSync(PID_FILE, "utf-8").trim(), 10);
|
|
23
|
+
if (isNaN(pid))
|
|
24
|
+
return false;
|
|
25
|
+
// check if process is alive (signal 0 doesn't kill, just checks)
|
|
26
|
+
process.kill(pid, 0);
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
14
33
|
async start() {
|
|
15
34
|
mkdirSync(AOAOE_DIR, { recursive: true });
|
|
16
35
|
// clear previous conversation log (fresh session)
|
|
17
36
|
writeFileSync(CONVO_LOG, "");
|
|
18
37
|
writeFileSync(INPUT_FILE, "");
|
|
19
|
-
//
|
|
38
|
+
// if chat.ts is running in an AoE pane, skip creating our own tmux session
|
|
39
|
+
if (this.chatIsRunning()) {
|
|
40
|
+
this.started = true;
|
|
41
|
+
this.writeSystem("aoaoe daemon connected (chat running in AoE session)");
|
|
42
|
+
this.writeSystem("---");
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
// fallback: create standalone tmux session
|
|
20
46
|
await execQuiet("tmux", ["kill-session", "-t", SESSION_NAME]);
|
|
21
|
-
// create the session with the conversation viewer in the top pane
|
|
22
|
-
// using ANSI colors for a nice look
|
|
23
47
|
await exec("tmux", [
|
|
24
48
|
"new-session", "-d", "-s", SESSION_NAME, "-x", "200", "-y", "50",
|
|
25
49
|
`tail -f ${CONVO_LOG}`,
|
|
26
50
|
]);
|
|
27
|
-
// split bottom pane for user input
|
|
28
51
|
await exec("tmux", [
|
|
29
52
|
"split-window", "-t", SESSION_NAME, "-v", "-l", "4",
|
|
30
53
|
`bash ${join(AOAOE_DIR, "input-loop.sh")}`,
|
|
31
54
|
]);
|
|
32
|
-
// write the input loop script
|
|
33
55
|
writeFileSync(join(AOAOE_DIR, "input-loop.sh"), INPUT_LOOP_SCRIPT);
|
|
34
|
-
// select top pane by default (so user sees conversation first)
|
|
35
56
|
await execQuiet("tmux", ["select-pane", "-t", `${SESSION_NAME}:.0`]);
|
|
36
|
-
// style: set pane border labels
|
|
37
57
|
await execQuiet("tmux", [
|
|
38
58
|
"set-option", "-t", SESSION_NAME, "pane-border-format",
|
|
39
59
|
" #{?pane_active,#[fg=green],#[fg=white]}#{pane_title} ",
|
|
40
60
|
]);
|
|
41
61
|
await execQuiet("tmux", ["select-pane", "-t", `${SESSION_NAME}:.0`, "-T", "conversation"]);
|
|
42
62
|
await execQuiet("tmux", ["select-pane", "-t", `${SESSION_NAME}:.1`, "-T", "input (type here)"]);
|
|
43
|
-
// focus the input pane so user can type immediately on attach
|
|
44
63
|
await execQuiet("tmux", ["select-pane", "-t", `${SESSION_NAME}:.1`]);
|
|
64
|
+
this.ownsTmux = true;
|
|
45
65
|
this.started = true;
|
|
46
66
|
this.writeSystem("aoaoe reasoner console started");
|
|
47
67
|
this.writeSystem("type a message below to send to the reasoner");
|
|
@@ -81,10 +101,10 @@ export class ReasonerConsole {
|
|
|
81
101
|
return content.split("\n").filter((l) => l.trim());
|
|
82
102
|
}
|
|
83
103
|
async stop() {
|
|
84
|
-
if (this.started) {
|
|
104
|
+
if (this.started && this.ownsTmux) {
|
|
85
105
|
await execQuiet("tmux", ["kill-session", "-t", SESSION_NAME]);
|
|
86
|
-
this.started = false;
|
|
87
106
|
}
|
|
107
|
+
this.started = false;
|
|
88
108
|
}
|
|
89
109
|
append(line) {
|
|
90
110
|
try {
|