reviewflow 3.28.0 → 3.30.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/CHANGELOG.md +25 -0
- package/dist/dashboard/index.html +74 -9
- package/dist/dashboard/modules/emberAvatar.d.ts +134 -0
- package/dist/dashboard/modules/emberAvatar.d.ts.map +1 -0
- package/dist/dashboard/modules/emberAvatar.js +192 -0
- package/dist/dashboard/modules/emberAvatar.js.map +1 -0
- package/dist/dashboard/modules/emberAvatarRenderer.d.ts +42 -0
- package/dist/dashboard/modules/emberAvatarRenderer.d.ts.map +1 -0
- package/dist/dashboard/modules/emberAvatarRenderer.js +119 -0
- package/dist/dashboard/modules/emberAvatarRenderer.js.map +1 -0
- package/dist/dashboard/modules/emberChat.d.ts +77 -0
- package/dist/dashboard/modules/emberChat.d.ts.map +1 -0
- package/dist/dashboard/modules/emberChat.js +175 -0
- package/dist/dashboard/modules/emberChat.js.map +1 -0
- package/dist/dashboard/styles.css +126 -0
- package/dist/main/routes.d.ts.map +1 -1
- package/dist/main/routes.js +32 -0
- package/dist/main/routes.js.map +1 -1
- package/dist/modules/ember-chat/entities/emberMessage/emberMessage.guard.d.ts +4 -0
- package/dist/modules/ember-chat/entities/emberMessage/emberMessage.guard.d.ts.map +1 -0
- package/dist/modules/ember-chat/entities/emberMessage/emberMessage.guard.js +4 -0
- package/dist/modules/ember-chat/entities/emberMessage/emberMessage.guard.js.map +1 -0
- package/dist/modules/ember-chat/entities/emberMessage/emberMessage.schema.d.ts +6 -0
- package/dist/modules/ember-chat/entities/emberMessage/emberMessage.schema.d.ts.map +1 -0
- package/dist/modules/ember-chat/entities/emberMessage/emberMessage.schema.js +5 -0
- package/dist/modules/ember-chat/entities/emberMessage/emberMessage.schema.js.map +1 -0
- package/dist/modules/ember-chat/entities/emberSession/emberSession.schema.d.ts +7 -0
- package/dist/modules/ember-chat/entities/emberSession/emberSession.schema.d.ts.map +1 -0
- package/dist/modules/ember-chat/entities/emberSession/emberSession.schema.js +3 -0
- package/dist/modules/ember-chat/entities/emberSession/emberSession.schema.js.map +1 -0
- package/dist/modules/ember-chat/entities/emberSession/emberSessionState.d.ts +13 -0
- package/dist/modules/ember-chat/entities/emberSession/emberSessionState.d.ts.map +1 -0
- package/dist/modules/ember-chat/entities/emberSession/emberSessionState.js +35 -0
- package/dist/modules/ember-chat/entities/emberSession/emberSessionState.js.map +1 -0
- package/dist/modules/ember-chat/entities/emberSession/emberSessionTransport.gateway.d.ts +26 -0
- package/dist/modules/ember-chat/entities/emberSession/emberSessionTransport.gateway.d.ts.map +1 -0
- package/dist/modules/ember-chat/entities/emberSession/emberSessionTransport.gateway.js +2 -0
- package/dist/modules/ember-chat/entities/emberSession/emberSessionTransport.gateway.js.map +1 -0
- package/dist/modules/ember-chat/entities/emberTool/emberTool.gateway.d.ts +11 -0
- package/dist/modules/ember-chat/entities/emberTool/emberTool.gateway.d.ts.map +1 -0
- package/dist/modules/ember-chat/entities/emberTool/emberTool.gateway.js +2 -0
- package/dist/modules/ember-chat/entities/emberTool/emberTool.gateway.js.map +1 -0
- package/dist/modules/ember-chat/interface-adapters/controllers/http/emberChat.routes.d.ts +15 -0
- package/dist/modules/ember-chat/interface-adapters/controllers/http/emberChat.routes.d.ts.map +1 -0
- package/dist/modules/ember-chat/interface-adapters/controllers/http/emberChat.routes.js +61 -0
- package/dist/modules/ember-chat/interface-adapters/controllers/http/emberChat.routes.js.map +1 -0
- package/dist/modules/ember-chat/interface-adapters/gateways/emberReadData.composite.gateway.d.ts +24 -0
- package/dist/modules/ember-chat/interface-adapters/gateways/emberReadData.composite.gateway.d.ts.map +1 -0
- package/dist/modules/ember-chat/interface-adapters/gateways/emberReadData.composite.gateway.js +19 -0
- package/dist/modules/ember-chat/interface-adapters/gateways/emberReadData.composite.gateway.js.map +1 -0
- package/dist/modules/ember-chat/interface-adapters/gateways/emberSessionTransport.claude.gateway.d.ts +13 -0
- package/dist/modules/ember-chat/interface-adapters/gateways/emberSessionTransport.claude.gateway.d.ts.map +1 -0
- package/dist/modules/ember-chat/interface-adapters/gateways/emberSessionTransport.claude.gateway.js +130 -0
- package/dist/modules/ember-chat/interface-adapters/gateways/emberSessionTransport.claude.gateway.js.map +1 -0
- package/dist/modules/ember-chat/interface-adapters/gateways/emberStreamJson.parser.d.ts +18 -0
- package/dist/modules/ember-chat/interface-adapters/gateways/emberStreamJson.parser.d.ts.map +1 -0
- package/dist/modules/ember-chat/interface-adapters/gateways/emberStreamJson.parser.js +33 -0
- package/dist/modules/ember-chat/interface-adapters/gateways/emberStreamJson.parser.js.map +1 -0
- package/dist/modules/ember-chat/interface-adapters/presenters/emberStatus.presenter.d.ts +20 -0
- package/dist/modules/ember-chat/interface-adapters/presenters/emberStatus.presenter.d.ts.map +1 -0
- package/dist/modules/ember-chat/interface-adapters/presenters/emberStatus.presenter.js +28 -0
- package/dist/modules/ember-chat/interface-adapters/presenters/emberStatus.presenter.js.map +1 -0
- package/dist/modules/ember-chat/services/emberSystemPrompt.d.ts +12 -0
- package/dist/modules/ember-chat/services/emberSystemPrompt.d.ts.map +1 -0
- package/dist/modules/ember-chat/services/emberSystemPrompt.js +29 -0
- package/dist/modules/ember-chat/services/emberSystemPrompt.js.map +1 -0
- package/dist/modules/ember-chat/usecases/askEmber/askEmber.usecase.d.ts +23 -0
- package/dist/modules/ember-chat/usecases/askEmber/askEmber.usecase.d.ts.map +1 -0
- package/dist/modules/ember-chat/usecases/askEmber/askEmber.usecase.js +23 -0
- package/dist/modules/ember-chat/usecases/askEmber/askEmber.usecase.js.map +1 -0
- package/dist/modules/ember-chat/usecases/emberSession/emberSessionRegistry.d.ts +36 -0
- package/dist/modules/ember-chat/usecases/emberSession/emberSessionRegistry.d.ts.map +1 -0
- package/dist/modules/ember-chat/usecases/emberSession/emberSessionRegistry.js +59 -0
- package/dist/modules/ember-chat/usecases/emberSession/emberSessionRegistry.js.map +1 -0
- package/dist/tests/acceptance/189-ember-readonly-review-chat.acceptance.test.d.ts +2 -0
- package/dist/tests/acceptance/189-ember-readonly-review-chat.acceptance.test.d.ts.map +1 -0
- package/dist/tests/acceptance/189-ember-readonly-review-chat.acceptance.test.js +124 -0
- package/dist/tests/acceptance/189-ember-readonly-review-chat.acceptance.test.js.map +1 -0
- package/dist/tests/factories/emberMessage.factory.d.ts +5 -0
- package/dist/tests/factories/emberMessage.factory.d.ts.map +1 -0
- package/dist/tests/factories/emberMessage.factory.js +9 -0
- package/dist/tests/factories/emberMessage.factory.js.map +1 -0
- package/dist/tests/stubs/emberReadData.stub.d.ts +20 -0
- package/dist/tests/stubs/emberReadData.stub.d.ts.map +1 -0
- package/dist/tests/stubs/emberReadData.stub.js +31 -0
- package/dist/tests/stubs/emberReadData.stub.js.map +1 -0
- package/dist/tests/stubs/emberSessionTransport.stub.d.ts +18 -0
- package/dist/tests/stubs/emberSessionTransport.stub.d.ts.map +1 -0
- package/dist/tests/stubs/emberSessionTransport.stub.js +75 -0
- package/dist/tests/stubs/emberSessionTransport.stub.js.map +1 -0
- package/dist/tests/units/dashboard/modules/emberAvatar.test.d.ts +2 -0
- package/dist/tests/units/dashboard/modules/emberAvatar.test.d.ts.map +1 -0
- package/dist/tests/units/dashboard/modules/emberAvatar.test.js +74 -0
- package/dist/tests/units/dashboard/modules/emberAvatar.test.js.map +1 -0
- package/dist/tests/units/dashboard/modules/emberAvatarRenderer.test.d.ts +2 -0
- package/dist/tests/units/dashboard/modules/emberAvatarRenderer.test.d.ts.map +1 -0
- package/dist/tests/units/dashboard/modules/emberAvatarRenderer.test.js +44 -0
- package/dist/tests/units/dashboard/modules/emberAvatarRenderer.test.js.map +1 -0
- package/dist/tests/units/dashboard/modules/emberChat.test.d.ts +2 -0
- package/dist/tests/units/dashboard/modules/emberChat.test.d.ts.map +1 -0
- package/dist/tests/units/dashboard/modules/emberChat.test.js +59 -0
- package/dist/tests/units/dashboard/modules/emberChat.test.js.map +1 -0
- package/dist/tests/units/modules/ember-chat/controllers/emberChat.routes.test.d.ts +2 -0
- package/dist/tests/units/modules/ember-chat/controllers/emberChat.routes.test.d.ts.map +1 -0
- package/dist/tests/units/modules/ember-chat/controllers/emberChat.routes.test.js +101 -0
- package/dist/tests/units/modules/ember-chat/controllers/emberChat.routes.test.js.map +1 -0
- package/dist/tests/units/modules/ember-chat/entities/emberMessage.guard.test.d.ts +2 -0
- package/dist/tests/units/modules/ember-chat/entities/emberMessage.guard.test.d.ts.map +1 -0
- package/dist/tests/units/modules/ember-chat/entities/emberMessage.guard.test.js +24 -0
- package/dist/tests/units/modules/ember-chat/entities/emberMessage.guard.test.js.map +1 -0
- package/dist/tests/units/modules/ember-chat/entities/emberSessionState.test.d.ts +2 -0
- package/dist/tests/units/modules/ember-chat/entities/emberSessionState.test.d.ts.map +1 -0
- package/dist/tests/units/modules/ember-chat/entities/emberSessionState.test.js +42 -0
- package/dist/tests/units/modules/ember-chat/entities/emberSessionState.test.js.map +1 -0
- package/dist/tests/units/modules/ember-chat/gateways/emberReadData.composite.gateway.test.d.ts +2 -0
- package/dist/tests/units/modules/ember-chat/gateways/emberReadData.composite.gateway.test.d.ts.map +1 -0
- package/dist/tests/units/modules/ember-chat/gateways/emberReadData.composite.gateway.test.js +75 -0
- package/dist/tests/units/modules/ember-chat/gateways/emberReadData.composite.gateway.test.js.map +1 -0
- package/dist/tests/units/modules/ember-chat/gateways/emberStreamJson.parser.test.d.ts +2 -0
- package/dist/tests/units/modules/ember-chat/gateways/emberStreamJson.parser.test.d.ts.map +1 -0
- package/dist/tests/units/modules/ember-chat/gateways/emberStreamJson.parser.test.js +52 -0
- package/dist/tests/units/modules/ember-chat/gateways/emberStreamJson.parser.test.js.map +1 -0
- package/dist/tests/units/modules/ember-chat/presenters/emberStatus.presenter.test.d.ts +2 -0
- package/dist/tests/units/modules/ember-chat/presenters/emberStatus.presenter.test.d.ts.map +1 -0
- package/dist/tests/units/modules/ember-chat/presenters/emberStatus.presenter.test.js +27 -0
- package/dist/tests/units/modules/ember-chat/presenters/emberStatus.presenter.test.js.map +1 -0
- package/dist/tests/units/modules/ember-chat/services/emberSystemPrompt.test.d.ts +2 -0
- package/dist/tests/units/modules/ember-chat/services/emberSystemPrompt.test.d.ts.map +1 -0
- package/dist/tests/units/modules/ember-chat/services/emberSystemPrompt.test.js +41 -0
- package/dist/tests/units/modules/ember-chat/services/emberSystemPrompt.test.js.map +1 -0
- package/dist/tests/units/modules/ember-chat/usecases/askEmber.usecase.test.d.ts +2 -0
- package/dist/tests/units/modules/ember-chat/usecases/askEmber.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/modules/ember-chat/usecases/askEmber.usecase.test.js +46 -0
- package/dist/tests/units/modules/ember-chat/usecases/askEmber.usecase.test.js.map +1 -0
- package/dist/tests/units/modules/ember-chat/usecases/emberSessionRegistry.test.d.ts +2 -0
- package/dist/tests/units/modules/ember-chat/usecases/emberSessionRegistry.test.d.ts.map +1 -0
- package/dist/tests/units/modules/ember-chat/usecases/emberSessionRegistry.test.js +88 -0
- package/dist/tests/units/modules/ember-chat/usecases/emberSessionRegistry.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { StubEmberSessionTransportGateway } from '../../../../../tests/stubs/emberSessionTransport.stub.js';
|
|
3
|
+
import { EmberSessionRegistry } from '../../../../../modules/ember-chat/usecases/emberSession/emberSessionRegistry.js';
|
|
4
|
+
const SYSTEM_PROMPT = 'you are ember';
|
|
5
|
+
const PROJECT_PATH = '/projects/alpha';
|
|
6
|
+
function drain(subscribe) {
|
|
7
|
+
return new Promise((resolve) => {
|
|
8
|
+
let answer = '';
|
|
9
|
+
const statuses = [];
|
|
10
|
+
subscribe({
|
|
11
|
+
onStatus: (state) => statuses.push(state),
|
|
12
|
+
onChunk: (text) => {
|
|
13
|
+
answer += text;
|
|
14
|
+
},
|
|
15
|
+
onDone: () => resolve({ answer, statuses }),
|
|
16
|
+
onError: () => resolve({ answer, statuses }),
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
describe('EmberSessionRegistry', () => {
|
|
21
|
+
it('reuses one transport handle across consecutive questions', async () => {
|
|
22
|
+
const transport = new StubEmberSessionTransportGateway();
|
|
23
|
+
let clock = new Date('2026-05-28T10:00:00Z');
|
|
24
|
+
const registry = new EmberSessionRegistry({
|
|
25
|
+
transport,
|
|
26
|
+
now: () => clock,
|
|
27
|
+
idleTimeoutMs: 60_000,
|
|
28
|
+
});
|
|
29
|
+
const first = registry.ask({ question: 'q1', systemPrompt: SYSTEM_PROMPT, projectPath: PROJECT_PATH });
|
|
30
|
+
if (first.status === 'streaming') {
|
|
31
|
+
await drain(first.subscribe);
|
|
32
|
+
}
|
|
33
|
+
clock = new Date('2026-05-28T10:00:10Z');
|
|
34
|
+
const second = registry.ask({ question: 'q2', systemPrompt: SYSTEM_PROMPT, projectPath: PROJECT_PATH });
|
|
35
|
+
if (second.status === 'streaming') {
|
|
36
|
+
await drain(second.subscribe);
|
|
37
|
+
}
|
|
38
|
+
expect(transport.spawnCount).toBe(1);
|
|
39
|
+
});
|
|
40
|
+
it('emits a working then idle status sequence for one question', async () => {
|
|
41
|
+
const transport = new StubEmberSessionTransportGateway();
|
|
42
|
+
const registry = new EmberSessionRegistry({
|
|
43
|
+
transport,
|
|
44
|
+
now: () => new Date('2026-05-28T10:00:00Z'),
|
|
45
|
+
idleTimeoutMs: 60_000,
|
|
46
|
+
});
|
|
47
|
+
const result = registry.ask({ question: 'q', systemPrompt: SYSTEM_PROMPT, projectPath: PROJECT_PATH });
|
|
48
|
+
expect(result.status).toBe('streaming');
|
|
49
|
+
if (result.status !== 'streaming') {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const { statuses } = await drain(result.subscribe);
|
|
53
|
+
expect(statuses[0]).toBe('working');
|
|
54
|
+
expect(statuses.at(-1)).toBe('idle');
|
|
55
|
+
});
|
|
56
|
+
it('transparently revives with a fresh spawn after the idle timeout releases the session', async () => {
|
|
57
|
+
const transport = new StubEmberSessionTransportGateway();
|
|
58
|
+
let clock = new Date('2026-05-28T10:00:00Z');
|
|
59
|
+
const registry = new EmberSessionRegistry({
|
|
60
|
+
transport,
|
|
61
|
+
now: () => clock,
|
|
62
|
+
idleTimeoutMs: 60_000,
|
|
63
|
+
});
|
|
64
|
+
const first = registry.ask({ question: 'q1', systemPrompt: SYSTEM_PROMPT, projectPath: PROJECT_PATH });
|
|
65
|
+
if (first.status === 'streaming') {
|
|
66
|
+
await drain(first.subscribe);
|
|
67
|
+
}
|
|
68
|
+
clock = new Date('2026-05-28T10:05:00Z');
|
|
69
|
+
registry.onIdle(clock);
|
|
70
|
+
const second = registry.ask({ question: 'q2', systemPrompt: SYSTEM_PROMPT, projectPath: PROJECT_PATH });
|
|
71
|
+
if (second.status === 'streaming') {
|
|
72
|
+
await drain(second.subscribe);
|
|
73
|
+
}
|
|
74
|
+
expect(transport.spawnCount).toBe(2);
|
|
75
|
+
});
|
|
76
|
+
it('returns unavailable when the transport fails to spawn', () => {
|
|
77
|
+
const transport = new StubEmberSessionTransportGateway();
|
|
78
|
+
transport.failSpawn();
|
|
79
|
+
const registry = new EmberSessionRegistry({
|
|
80
|
+
transport,
|
|
81
|
+
now: () => new Date('2026-05-28T10:00:00Z'),
|
|
82
|
+
idleTimeoutMs: 60_000,
|
|
83
|
+
});
|
|
84
|
+
const result = registry.ask({ question: 'q', systemPrompt: SYSTEM_PROMPT, projectPath: PROJECT_PATH });
|
|
85
|
+
expect(result.status).toBe('unavailable');
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
//# sourceMappingURL=emberSessionRegistry.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emberSessionRegistry.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/modules/ember-chat/usecases/emberSessionRegistry.test.ts"],"names":[],"mappings":"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"}
|