feat(companion): support default canvas session in platform clients

This commit is contained in:
William Valentin
2026-02-16 18:41:18 -08:00
parent 56d06e4827
commit cd8bfe26dd
6 changed files with 180 additions and 37 deletions
+40
View File
@@ -183,4 +183,44 @@ describe('platform companion clients', () => {
}),
);
});
it('uses defaultSessionId for canvas operations when sessionId is omitted', async () => {
const mock = createRuntimeMock();
const client = new IOSCompanionClient({
runtime: mock.runtime,
nodeId: 'ios-node',
defaultSessionId: 'ws:default-canvas',
});
await client.putCanvasArtifact({
type: 'markdown',
content: { body: 'default session' },
});
await client.listCanvasArtifacts();
await client.getCanvasArtifact({ artifactId: 'a1' });
await client.deleteCanvasArtifact({ artifactId: 'a1' });
await client.clearCanvasArtifacts();
expect(mock.putCanvasArtifact).toHaveBeenCalledWith({
sessionId: 'ws:default-canvas',
type: 'markdown',
content: { body: 'default session' },
artifactId: undefined,
title: undefined,
metadata: undefined,
});
expect(mock.listCanvasArtifacts).toHaveBeenCalledWith('ws:default-canvas');
expect(mock.getCanvasArtifact).toHaveBeenCalledWith({ sessionId: 'ws:default-canvas', artifactId: 'a1' });
expect(mock.deleteCanvasArtifact).toHaveBeenCalledWith({ sessionId: 'ws:default-canvas', artifactId: 'a1' });
expect(mock.clearCanvasArtifacts).toHaveBeenCalledWith('ws:default-canvas');
});
it('throws when canvas sessionId is missing and no defaultSessionId is configured', async () => {
const mock = createRuntimeMock();
const client = new MacOSCompanionClient({ runtime: mock.runtime, nodeId: 'mac-node' });
expect(() => client.listCanvasArtifacts()).toThrow(
'sessionId is required (provide one or configure defaultSessionId)',
);
});
});