feat(coding-agent): add set_session_name RPC command (#1075)

- Add set_session_name command with empty name validation
- Expose sessionName in get_state response
- Add setSessionName() to AgentSession and RpcClient
- Document in docs/rpc.md
This commit is contained in:
Daniel Nouri 2026-01-30 01:41:58 +01:00 committed by GitHub
parent cb08758696
commit e20583aac8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 86 additions and 1 deletions

View file

@ -282,4 +282,37 @@ describe.skipIf(!process.env.ANTHROPIC_API_KEY && !process.env.ANTHROPIC_OAUTH_T
text = await client.getLastAssistantText();
expect(text).toContain("test123");
}, 90000);
test("should set and get session name", async () => {
await client.start();
// Initially undefined
let state = await client.getState();
expect(state.sessionName).toBeUndefined();
// Set name
await client.setSessionName("my-test-session");
// Verify via state
state = await client.getState();
expect(state.sessionName).toBe("my-test-session");
// Wait for file writes
await new Promise((resolve) => setTimeout(resolve, 200));
// Verify session_info entry in session file
const sessionsPath = join(sessionDir, "sessions");
const sessionDirs = readdirSync(sessionsPath);
const cwdSessionDir = join(sessionsPath, sessionDirs[0]);
const sessionFiles = readdirSync(cwdSessionDir).filter((f) => f.endsWith(".jsonl"));
const sessionContent = readFileSync(join(cwdSessionDir, sessionFiles[0]), "utf8");
const entries = sessionContent
.trim()
.split("\n")
.map((line) => JSON.parse(line));
const sessionInfoEntries = entries.filter((e: { type: string }) => e.type === "session_info");
expect(sessionInfoEntries.length).toBe(1);
expect(sessionInfoEntries[0].name).toBe("my-test-session");
}, 30000);
});