Move brainstorm server metadata to .meta/ subdirectory

Metadata files (.server-info, .events, .server.pid, .server.log,
.server-stopped) were stored in the same directory served over HTTP,
making them accessible via the /files/ route. They now live in a .meta/
subdirectory that is not web-accessible.

Also fixes a stale test assertion ("Waiting for Claude" → "Waiting for
the agent").

Reported-By: 吉田仁
This commit is contained in:
Jesse Vincent
2026-03-24 10:56:12 -07:00
parent a1155f623f
commit 151cfb16a0
6 changed files with 34 additions and 29 deletions

View File

@@ -103,9 +103,9 @@ async function runTests() {
return Promise.resolve();
});
await test('writes .server-info file', () => {
const infoPath = path.join(TEST_DIR, '.server-info');
assert(fs.existsSync(infoPath), '.server-info should exist');
await test('writes .server-info file to .meta/', () => {
const infoPath = path.join(TEST_DIR, '.meta', '.server-info');
assert(fs.existsSync(infoPath), '.meta/.server-info should exist');
const info = JSON.parse(fs.readFileSync(infoPath, 'utf-8').trim());
assert.strictEqual(info.type, 'server-started');
assert.strictEqual(info.port, TEST_PORT);
@@ -118,7 +118,7 @@ async function runTests() {
await test('serves waiting page when no screens exist', async () => {
const res = await fetch(`http://localhost:${TEST_PORT}/`);
assert.strictEqual(res.status, 200);
assert(res.body.includes('Waiting for Claude'), 'Should show waiting message');
assert(res.body.includes('Waiting for the agent'), 'Should show waiting message');
});
await test('injects helper.js into waiting page', async () => {
@@ -206,9 +206,9 @@ async function runTests() {
ws.close();
});
await test('writes choice events to .events file', async () => {
await test('writes choice events to .meta/.events file', async () => {
// Clean up events from prior tests
const eventsFile = path.join(TEST_DIR, '.events');
const eventsFile = path.join(TEST_DIR, '.meta', '.events');
if (fs.existsSync(eventsFile)) fs.unlinkSync(eventsFile);
const ws = new WebSocket(`ws://localhost:${TEST_PORT}`);
@@ -225,8 +225,8 @@ async function runTests() {
ws.close();
});
await test('does NOT write non-choice events to .events file', async () => {
const eventsFile = path.join(TEST_DIR, '.events');
await test('does NOT write non-choice events to .meta/.events file', async () => {
const eventsFile = path.join(TEST_DIR, '.meta', '.events');
if (fs.existsSync(eventsFile)) fs.unlinkSync(eventsFile);
const ws = new WebSocket(`ws://localhost:${TEST_PORT}`);
@@ -347,9 +347,9 @@ async function runTests() {
ws.close();
});
await test('clears .events on new screen', async () => {
await test('clears .meta/.events on new screen', async () => {
// Create an .events file
const eventsFile = path.join(TEST_DIR, '.events');
const eventsFile = path.join(TEST_DIR, '.meta', '.events');
fs.writeFileSync(eventsFile, '{"choice":"a"}\n');
assert(fs.existsSync(eventsFile));