reviewflow 3.37.0 → 3.38.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 +16 -0
- package/dist/main/routes.js +2 -2
- package/dist/main/routes.js.map +1 -1
- package/dist/main/server.d.ts +18 -0
- package/dist/main/server.d.ts.map +1 -1
- package/dist/main/server.js +24 -5
- package/dist/main/server.js.map +1 -1
- package/dist/mcp/mcpServerStdio.d.ts +190 -0
- package/dist/mcp/mcpServerStdio.d.ts.map +1 -1
- package/dist/mcp/mcpServerStdio.js +23 -1
- package/dist/mcp/mcpServerStdio.js.map +1 -1
- package/dist/modules/claude-invocation/entities/claudeSession/claudeSession.guard.d.ts +1 -1
- package/dist/modules/claude-invocation/entities/claudeSession/claudeSession.schema.d.ts +2 -2
- package/dist/modules/ember-chat/entities/emberMemory/emberMemory.guard.d.ts +1 -0
- package/dist/modules/ember-chat/entities/emberMemory/emberMemory.guard.d.ts.map +1 -1
- package/dist/modules/ember-chat/entities/emberMemory/emberMemory.guard.js +2 -1
- package/dist/modules/ember-chat/entities/emberMemory/emberMemory.guard.js.map +1 -1
- package/dist/modules/ember-chat/interface-adapters/controllers/mcp/recordInsight.handler.d.ts +16 -0
- package/dist/modules/ember-chat/interface-adapters/controllers/mcp/recordInsight.handler.d.ts.map +1 -0
- package/dist/modules/ember-chat/interface-adapters/controllers/mcp/recordInsight.handler.js +40 -0
- package/dist/modules/ember-chat/interface-adapters/controllers/mcp/recordInsight.handler.js.map +1 -0
- package/dist/modules/ember-chat/interface-adapters/gateways/emberAnswerTransport.claude.gateway.d.ts +7 -3
- package/dist/modules/ember-chat/interface-adapters/gateways/emberAnswerTransport.claude.gateway.d.ts.map +1 -1
- package/dist/modules/ember-chat/interface-adapters/gateways/emberAnswerTransport.claude.gateway.js +7 -4
- package/dist/modules/ember-chat/interface-adapters/gateways/emberAnswerTransport.claude.gateway.js.map +1 -1
- package/dist/modules/ember-chat/interface-adapters/gateways/emberMemory.fileSystem.gateway.d.ts.map +1 -1
- package/dist/modules/ember-chat/interface-adapters/gateways/emberMemory.fileSystem.gateway.js +8 -1
- package/dist/modules/ember-chat/interface-adapters/gateways/emberMemory.fileSystem.gateway.js.map +1 -1
- package/dist/modules/ember-chat/services/emberSystemPrompt.d.ts +1 -1
- package/dist/modules/ember-chat/services/emberSystemPrompt.d.ts.map +1 -1
- package/dist/modules/ember-chat/services/emberSystemPrompt.js +15 -2
- package/dist/modules/ember-chat/services/emberSystemPrompt.js.map +1 -1
- package/dist/modules/ember-chat/usecases/askEmber/askEmber.usecase.d.ts.map +1 -1
- package/dist/modules/ember-chat/usecases/askEmber/askEmber.usecase.js +1 -1
- package/dist/modules/ember-chat/usecases/askEmber/askEmber.usecase.js.map +1 -1
- package/dist/tests/acceptance/190-ember-live-answers-subscription.acceptance.test.js +1 -1
- package/dist/tests/acceptance/190-ember-live-answers-subscription.acceptance.test.js.map +1 -1
- package/dist/tests/acceptance/193-ember-record-recurring-insight.acceptance.test.d.ts +2 -0
- package/dist/tests/acceptance/193-ember-record-recurring-insight.acceptance.test.d.ts.map +1 -0
- package/dist/tests/acceptance/193-ember-record-recurring-insight.acceptance.test.js +100 -0
- package/dist/tests/acceptance/193-ember-record-recurring-insight.acceptance.test.js.map +1 -0
- package/dist/tests/acceptance/197-trusted-actor-provenance-gate.acceptance.test.d.ts +2 -0
- package/dist/tests/acceptance/197-trusted-actor-provenance-gate.acceptance.test.d.ts.map +1 -0
- package/dist/tests/acceptance/197-trusted-actor-provenance-gate.acceptance.test.js +413 -0
- package/dist/tests/acceptance/197-trusted-actor-provenance-gate.acceptance.test.js.map +1 -0
- package/dist/tests/acceptance/199-review-output-egress-scan.acceptance.test.d.ts +2 -0
- package/dist/tests/acceptance/199-review-output-egress-scan.acceptance.test.d.ts.map +1 -0
- package/dist/tests/acceptance/199-review-output-egress-scan.acceptance.test.js +159 -0
- package/dist/tests/acceptance/199-review-output-egress-scan.acceptance.test.js.map +1 -0
- package/dist/tests/acceptance/201-transport-provenance-hardening.acceptance.test.d.ts +2 -0
- package/dist/tests/acceptance/201-transport-provenance-hardening.acceptance.test.d.ts.map +1 -0
- package/dist/tests/acceptance/201-transport-provenance-hardening.acceptance.test.js +72 -0
- package/dist/tests/acceptance/201-transport-provenance-hardening.acceptance.test.js.map +1 -0
- package/dist/tests/stubs/emberMemory.stub.d.ts.map +1 -1
- package/dist/tests/stubs/emberMemory.stub.js +8 -1
- package/dist/tests/stubs/emberMemory.stub.js.map +1 -1
- package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js +96 -0
- package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js.map +1 -1
- package/dist/tests/units/mcp/mcpServerStdioTools.test.d.ts +2 -0
- package/dist/tests/units/mcp/mcpServerStdioTools.test.d.ts.map +1 -0
- package/dist/tests/units/mcp/mcpServerStdioTools.test.js +21 -0
- package/dist/tests/units/mcp/mcpServerStdioTools.test.js.map +1 -0
- package/dist/tests/units/modules/ember-chat/controllers/mcp/recordInsight.handler.test.d.ts +2 -0
- package/dist/tests/units/modules/ember-chat/controllers/mcp/recordInsight.handler.test.d.ts.map +1 -0
- package/dist/tests/units/modules/ember-chat/controllers/mcp/recordInsight.handler.test.js +79 -0
- package/dist/tests/units/modules/ember-chat/controllers/mcp/recordInsight.handler.test.js.map +1 -0
- package/dist/tests/units/modules/ember-chat/entities/emberMemory.guard.test.js +22 -1
- package/dist/tests/units/modules/ember-chat/entities/emberMemory.guard.test.js.map +1 -1
- package/dist/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.js +20 -2
- package/dist/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.js.map +1 -1
- package/dist/tests/units/modules/ember-chat/gateways/emberMemory.fileSystem.gateway.test.js +33 -0
- package/dist/tests/units/modules/ember-chat/gateways/emberMemory.fileSystem.gateway.test.js.map +1 -1
- package/dist/tests/units/modules/ember-chat/services/emberSystemPrompt.test.js +25 -14
- package/dist/tests/units/modules/ember-chat/services/emberSystemPrompt.test.js.map +1 -1
- package/dist/tests/units/modules/ember-chat/stubs/emberMemory.stub.test.d.ts +2 -0
- package/dist/tests/units/modules/ember-chat/stubs/emberMemory.stub.test.d.ts.map +1 -0
- package/dist/tests/units/modules/ember-chat/stubs/emberMemory.stub.test.js +24 -0
- package/dist/tests/units/modules/ember-chat/stubs/emberMemory.stub.test.js.map +1 -0
- package/package.json +1 -1
package/dist/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.js
CHANGED
|
@@ -40,6 +40,7 @@ function projectDirFor(projectPath, homeDir) {
|
|
|
40
40
|
const FAST_OPTIONS = (homeDir) => ({
|
|
41
41
|
homeDir,
|
|
42
42
|
pollIntervalMs: 1,
|
|
43
|
+
buildMcpConfig: () => '{"mcpServers":{}}',
|
|
43
44
|
});
|
|
44
45
|
describe('EmberAnswerTransportClaudeGateway (integration with real filesystem)', () => {
|
|
45
46
|
let homeDir;
|
|
@@ -81,12 +82,28 @@ describe('EmberAnswerTransportClaudeGateway (integration with real filesystem)',
|
|
|
81
82
|
expect(subscriber.error).toBeNull();
|
|
82
83
|
const dispatch = sessionGateway.dispatchCalls[0];
|
|
83
84
|
expect(dispatch.jobType).toBe('ember-chat');
|
|
84
|
-
expect(dispatch.flags.allowedTools).toBe('Read,Glob,Grep');
|
|
85
|
+
expect(dispatch.flags.allowedTools).toBe('Read,Glob,Grep,mcp__review-progress__record_insight');
|
|
85
86
|
expect(dispatch.flags.disallowedTools).toBe('Edit,Write,Bash,Task');
|
|
86
|
-
expect(dispatch.flags.mcpConfigJson).toBe('{"mcpServers":{}}');
|
|
87
87
|
expect(dispatch.flags.permissionMode).toBe('auto');
|
|
88
88
|
expect(sessionGateway.stopCalls).toEqual(['stub-session']);
|
|
89
89
|
});
|
|
90
|
+
it('dispatches with the MCP config resolved lazily from buildMcpConfig', async () => {
|
|
91
|
+
const dir = projectDirFor(homeDir, homeDir);
|
|
92
|
+
writeFileSync(join(dir, 'stub-session-mcp.jsonl'), JSON.stringify({
|
|
93
|
+
type: 'assistant',
|
|
94
|
+
message: { content: [{ type: 'text', text: 'ok' }], stop_reason: 'end_turn' },
|
|
95
|
+
}) + '\n');
|
|
96
|
+
const mcpConfig = '{"mcpServers":{"review-progress":{"command":"node","args":["mcpServer.js"]}}}';
|
|
97
|
+
const gateway = new EmberAnswerTransportClaudeGateway(sessionGateway, {
|
|
98
|
+
homeDir,
|
|
99
|
+
pollIntervalMs: 1,
|
|
100
|
+
buildMcpConfig: () => mcpConfig,
|
|
101
|
+
});
|
|
102
|
+
const { subscriber, finished } = settled();
|
|
103
|
+
gateway.start(startOptions(), subscriber);
|
|
104
|
+
await finished;
|
|
105
|
+
expect(sessionGateway.dispatchCalls[0].flags.mcpConfigJson).toBe(mcpConfig);
|
|
106
|
+
});
|
|
90
107
|
it('reports ember-answer-dispatch-failed and never stops a session when dispatch fails', async () => {
|
|
91
108
|
sessionGateway.setDispatchResult({ status: 'failed', rawStderr: 'not logged in' });
|
|
92
109
|
const gateway = new EmberAnswerTransportClaudeGateway(sessionGateway, FAST_OPTIONS(homeDir));
|
|
@@ -143,6 +160,7 @@ describe('EmberAnswerTransportClaudeGateway (integration with real filesystem)',
|
|
|
143
160
|
const gateway = new EmberAnswerTransportClaudeGateway(sessionGateway, {
|
|
144
161
|
homeDir,
|
|
145
162
|
pollIntervalMs: 1,
|
|
163
|
+
buildMcpConfig: () => '{"mcpServers":{}}',
|
|
146
164
|
});
|
|
147
165
|
const { subscriber, finished } = settled();
|
|
148
166
|
gateway.start(startOptions(), subscriber);
|
package/dist/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emberAnswerTransport.claude.gateway.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAMrE,OAAO,EAAE,iCAAiC,EAAE,MAAM,yFAAyF,CAAC;AAC5I,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAQ/E,SAAS,oBAAoB,CAAC,OAAmB;IAC/C,MAAM,UAAU,GAAwB;QACtC,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,IAAI;QACX,OAAO,CAAC,IAAY;YAClB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM;YACJ,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;YACvB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,CAAC,OAAe;YACrB,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC;YAC3B,OAAO,EAAE,CAAC;QACZ,CAAC;KACF,CAAC;IACF,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,OAAO;IAId,IAAI,OAAO,GAAe,GAAG,EAAE,CAAC,SAAS,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,EAAE;QACzC,OAAO,GAAG,GAAG,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,aAAa,CAAC,WAAmB,EAAE,OAAe;IACzD,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IACvD,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,CAAC;IACzC,OAAO;IACP,cAAc,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"emberAnswerTransport.claude.gateway.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -78,5 +78,38 @@ describe('EmberMemoryFileSystemGateway', () => {
|
|
|
78
78
|
expect(loaded?.insights).toEqual(['Régression du vendredi.']);
|
|
79
79
|
expect(loaded?.turns).toHaveLength(1);
|
|
80
80
|
});
|
|
81
|
+
it('records the same insight only once (a repeated finding does not pile up)', async () => {
|
|
82
|
+
const gateway = new EmberMemoryFileSystemGateway({ homeDir });
|
|
83
|
+
await gateway.appendInsight(PROJECT_A, 'Le projet alpha régresse chaque vendredi.');
|
|
84
|
+
await gateway.appendInsight(PROJECT_A, 'Le projet alpha régresse chaque vendredi.');
|
|
85
|
+
expect((await gateway.load(PROJECT_A))?.insights).toEqual([
|
|
86
|
+
'Le projet alpha régresse chaque vendredi.',
|
|
87
|
+
]);
|
|
88
|
+
});
|
|
89
|
+
it('treats a trailing-whitespace variant as the same insight', async () => {
|
|
90
|
+
const gateway = new EmberMemoryFileSystemGateway({ homeDir });
|
|
91
|
+
await gateway.appendInsight(PROJECT_A, 'Régression du vendredi.');
|
|
92
|
+
await gateway.appendInsight(PROJECT_A, ' Régression du vendredi. ');
|
|
93
|
+
expect((await gateway.load(PROJECT_A))?.insights).toEqual(['Régression du vendredi.']);
|
|
94
|
+
});
|
|
95
|
+
it('records two genuinely different insights in order', async () => {
|
|
96
|
+
const gateway = new EmberMemoryFileSystemGateway({ homeDir });
|
|
97
|
+
await gateway.appendInsight(PROJECT_A, 'Régression du vendredi.');
|
|
98
|
+
await gateway.appendInsight(PROJECT_A, 'Couverture en baisse sur le module paiement.');
|
|
99
|
+
expect((await gateway.load(PROJECT_A))?.insights).toEqual([
|
|
100
|
+
'Régression du vendredi.',
|
|
101
|
+
'Couverture en baisse sur le module paiement.',
|
|
102
|
+
]);
|
|
103
|
+
});
|
|
104
|
+
it('never records a blank insight', async () => {
|
|
105
|
+
const gateway = new EmberMemoryFileSystemGateway({ homeDir });
|
|
106
|
+
await gateway.appendInsight(PROJECT_A, ' ');
|
|
107
|
+
expect(await gateway.load(PROJECT_A)).toBeNull();
|
|
108
|
+
});
|
|
109
|
+
it('keeps a recorded insight isolated from another project', async () => {
|
|
110
|
+
const gateway = new EmberMemoryFileSystemGateway({ homeDir });
|
|
111
|
+
await gateway.appendInsight(PROJECT_A, 'Le projet alpha régresse chaque vendredi.');
|
|
112
|
+
expect(await gateway.load(PROJECT_B)).toBeNull();
|
|
113
|
+
});
|
|
81
114
|
});
|
|
82
115
|
//# sourceMappingURL=emberMemory.fileSystem.gateway.test.js.map
|
package/dist/tests/units/modules/ember-chat/gateways/emberMemory.fileSystem.gateway.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emberMemory.fileSystem.gateway.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/modules/ember-chat/gateways/emberMemory.fileSystem.gateway.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"emberMemory.fileSystem.gateway.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/modules/ember-chat/gateways/emberMemory.fileSystem.gateway.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,26 +9,27 @@ const EMPTY_GROUNDING = {
|
|
|
9
9
|
worktrees: [],
|
|
10
10
|
memory: null,
|
|
11
11
|
};
|
|
12
|
+
const PROJECT_PATH = '/projects/alpha';
|
|
12
13
|
describe('buildEmberSystemPrompt', () => {
|
|
13
14
|
it('names the four review-data sources as the only data sources', () => {
|
|
14
|
-
const prompt = buildEmberSystemPrompt(EMPTY_GROUNDING);
|
|
15
|
+
const prompt = buildEmberSystemPrompt(EMPTY_GROUNDING, PROJECT_PATH);
|
|
15
16
|
expect(prompt).toContain('reviewScores');
|
|
16
17
|
expect(prompt).toContain('insights');
|
|
17
18
|
expect(prompt).toContain('jobHistory');
|
|
18
19
|
expect(prompt).toContain('worktrees');
|
|
19
20
|
});
|
|
20
21
|
it('instructs to decline rather than invent when asked outside review data', () => {
|
|
21
|
-
const prompt = buildEmberSystemPrompt(EMPTY_GROUNDING);
|
|
22
|
+
const prompt = buildEmberSystemPrompt(EMPTY_GROUNDING, PROJECT_PATH);
|
|
22
23
|
expect(prompt.toLowerCase()).toContain('review');
|
|
23
24
|
expect(prompt).toMatch(/ne sait répondre|ne sais pas|reviews/i);
|
|
24
25
|
});
|
|
25
26
|
it('instructs it stays read-only and performs no writes', () => {
|
|
26
|
-
const prompt = buildEmberSystemPrompt(EMPTY_GROUNDING);
|
|
27
|
+
const prompt = buildEmberSystemPrompt(EMPTY_GROUNDING, PROJECT_PATH);
|
|
27
28
|
expect(prompt.toLowerCase()).toContain('lecture seule');
|
|
28
29
|
expect(prompt).toMatch(/n'effectue aucune écriture/i);
|
|
29
30
|
});
|
|
30
31
|
it('identifies the assistant as Ember', () => {
|
|
31
|
-
expect(buildEmberSystemPrompt(EMPTY_GROUNDING)).toContain('Ember');
|
|
32
|
+
expect(buildEmberSystemPrompt(EMPTY_GROUNDING, PROJECT_PATH)).toContain('Ember');
|
|
32
33
|
});
|
|
33
34
|
it('embeds the actual review data so the answer is grounded in it', () => {
|
|
34
35
|
const grounding = {
|
|
@@ -37,7 +38,7 @@ describe('buildEmberSystemPrompt', () => {
|
|
|
37
38
|
ReviewStatsFactory.create({ mrNumber: 42, score: 3, blocking: 4, warnings: 1 }),
|
|
38
39
|
]),
|
|
39
40
|
};
|
|
40
|
-
expect(buildEmberSystemPrompt(grounding)).toContain('42');
|
|
41
|
+
expect(buildEmberSystemPrompt(grounding, PROJECT_PATH)).toContain('42');
|
|
41
42
|
});
|
|
42
43
|
it('bounds the prompt under a ceiling even for a huge review history', () => {
|
|
43
44
|
const reviews = Array.from({ length: 500 }, (_, index) => ReviewStatsFactory.create({ mrNumber: index, score: index % 10 }));
|
|
@@ -45,7 +46,7 @@ describe('buildEmberSystemPrompt', () => {
|
|
|
45
46
|
...EMPTY_GROUNDING,
|
|
46
47
|
reviewScores: ProjectStatsFactory.withReviews(reviews),
|
|
47
48
|
};
|
|
48
|
-
expect(buildEmberSystemPrompt(grounding).length).toBeLessThan(60_000);
|
|
49
|
+
expect(buildEmberSystemPrompt(grounding, PROJECT_PATH).length).toBeLessThan(60_000);
|
|
49
50
|
});
|
|
50
51
|
it('keeps the aggregates and the most-recent reviews when capping a huge history', () => {
|
|
51
52
|
const reviews = Array.from({ length: 500 }, (_, index) => ReviewStatsFactory.create({ mrNumber: index, score: index % 10 }));
|
|
@@ -53,7 +54,7 @@ describe('buildEmberSystemPrompt', () => {
|
|
|
53
54
|
...EMPTY_GROUNDING,
|
|
54
55
|
reviewScores: ProjectStatsFactory.withReviews(reviews),
|
|
55
56
|
};
|
|
56
|
-
const prompt = buildEmberSystemPrompt(grounding);
|
|
57
|
+
const prompt = buildEmberSystemPrompt(grounding, PROJECT_PATH);
|
|
57
58
|
expect(prompt).toContain('"totalReviews":500');
|
|
58
59
|
expect(prompt).toContain('"mrNumber":499');
|
|
59
60
|
expect(prompt).not.toContain('"mrNumber":0');
|
|
@@ -64,7 +65,7 @@ describe('buildEmberSystemPrompt', () => {
|
|
|
64
65
|
...EMPTY_GROUNDING,
|
|
65
66
|
reviewScores: ProjectStatsFactory.withReviews(reviews),
|
|
66
67
|
};
|
|
67
|
-
const prompt = buildEmberSystemPrompt(grounding);
|
|
68
|
+
const prompt = buildEmberSystemPrompt(grounding, PROJECT_PATH);
|
|
68
69
|
expect(prompt).not.toContain('aucun autre accès');
|
|
69
70
|
expect(prompt).not.toContain('ni système de fichiers');
|
|
70
71
|
expect(prompt).not.toContain('résumé agrégé seulement');
|
|
@@ -75,13 +76,13 @@ describe('buildEmberSystemPrompt', () => {
|
|
|
75
76
|
...EMPTY_GROUNDING,
|
|
76
77
|
reviewScores: ProjectStatsFactory.withReviews(reviews),
|
|
77
78
|
};
|
|
78
|
-
const prompt = buildEmberSystemPrompt(grounding);
|
|
79
|
+
const prompt = buildEmberSystemPrompt(grounding, PROJECT_PATH);
|
|
79
80
|
expect(prompt.toLowerCase()).toContain('à la demande');
|
|
80
81
|
expect(prompt).toMatch(/peux\s+lire|tu\s+peux\s+consulter/i);
|
|
81
82
|
expect(prompt.toLowerCase()).toContain('point de départ');
|
|
82
83
|
});
|
|
83
84
|
it('omits any conversation-memory section when there is no prior memory', () => {
|
|
84
|
-
const prompt = buildEmberSystemPrompt(EMPTY_GROUNDING);
|
|
85
|
+
const prompt = buildEmberSystemPrompt(EMPTY_GROUNDING, PROJECT_PATH);
|
|
85
86
|
expect(prompt.toLowerCase()).not.toContain('conversation précédente');
|
|
86
87
|
});
|
|
87
88
|
it('renders prior conversation turns so a follow-up keeps context', () => {
|
|
@@ -96,7 +97,7 @@ describe('buildEmberSystemPrompt', () => {
|
|
|
96
97
|
],
|
|
97
98
|
}),
|
|
98
99
|
};
|
|
99
|
-
const prompt = buildEmberSystemPrompt(grounding);
|
|
100
|
+
const prompt = buildEmberSystemPrompt(grounding, PROJECT_PATH);
|
|
100
101
|
expect(prompt.toLowerCase()).toContain('conversation précédente');
|
|
101
102
|
expect(prompt).toContain('Quel est le statut du projet X ?');
|
|
102
103
|
expect(prompt).toContain('Le projet X régresse chaque vendredi.');
|
|
@@ -106,14 +107,14 @@ describe('buildEmberSystemPrompt', () => {
|
|
|
106
107
|
...EMPTY_GROUNDING,
|
|
107
108
|
memory: EmberMemoryFactory.create({ turns: [] }),
|
|
108
109
|
};
|
|
109
|
-
expect(buildEmberSystemPrompt(grounding).toLowerCase()).not.toContain('conversation précédente');
|
|
110
|
+
expect(buildEmberSystemPrompt(grounding, PROJECT_PATH).toLowerCase()).not.toContain('conversation précédente');
|
|
110
111
|
});
|
|
111
112
|
it('omits any recurring-insights section when there is no recorded insight', () => {
|
|
112
113
|
const grounding = {
|
|
113
114
|
...EMPTY_GROUNDING,
|
|
114
115
|
memory: EmberMemoryFactory.create({ turns: [], insights: [] }),
|
|
115
116
|
};
|
|
116
|
-
expect(buildEmberSystemPrompt(grounding).toLowerCase()).not.toContain('constats récurrents');
|
|
117
|
+
expect(buildEmberSystemPrompt(grounding, PROJECT_PATH).toLowerCase()).not.toContain('constats récurrents');
|
|
117
118
|
});
|
|
118
119
|
it('renders recorded recurring insights so Ember reuses them instead of recomputing', () => {
|
|
119
120
|
const grounding = {
|
|
@@ -123,10 +124,20 @@ describe('buildEmberSystemPrompt', () => {
|
|
|
123
124
|
insights: ['Le projet X régresse chaque vendredi.'],
|
|
124
125
|
}),
|
|
125
126
|
};
|
|
126
|
-
const prompt = buildEmberSystemPrompt(grounding);
|
|
127
|
+
const prompt = buildEmberSystemPrompt(grounding, PROJECT_PATH);
|
|
127
128
|
expect(prompt.toLowerCase()).toContain('constats récurrents');
|
|
128
129
|
expect(prompt).toContain('Le projet X régresse chaque vendredi.');
|
|
129
130
|
expect(prompt.toLowerCase()).toMatch(/réutilise|sans .*recalcul/i);
|
|
130
131
|
});
|
|
132
|
+
it('instructs Ember to record a derived recurring finding via the record_insight tool', () => {
|
|
133
|
+
const prompt = buildEmberSystemPrompt(EMPTY_GROUNDING, PROJECT_PATH);
|
|
134
|
+
expect(prompt).toContain('record_insight');
|
|
135
|
+
expect(prompt).toContain(PROJECT_PATH);
|
|
136
|
+
});
|
|
137
|
+
it('records only genuine recurring review findings, never arbitrary facts', () => {
|
|
138
|
+
const prompt = buildEmberSystemPrompt(EMPTY_GROUNDING, PROJECT_PATH);
|
|
139
|
+
expect(prompt.toLowerCase()).toMatch(/constat.*récurrent|récurrent/i);
|
|
140
|
+
expect(prompt.toLowerCase()).not.toContain('préférences');
|
|
141
|
+
});
|
|
131
142
|
});
|
|
132
143
|
//# sourceMappingURL=emberSystemPrompt.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emberSystemPrompt.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/modules/ember-chat/services/emberSystemPrompt.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAC;AAE5F,OAAO,EACL,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAEpG,MAAM,eAAe,GAAmB;IACtC,YAAY,EAAE,IAAI;IAClB,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,EAAE;IACb,MAAM,EAAE,IAAI;CACb,CAAC;AAEF,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,MAAM,GAAG,sBAAsB,CAAC,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"emberSystemPrompt.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/modules/ember-chat/services/emberSystemPrompt.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emberMemory.stub.test.d.ts","sourceRoot":"","sources":["../../../../../../src/tests/units/modules/ember-chat/stubs/emberMemory.stub.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { StubEmberMemoryGateway } from '../../../../../tests/stubs/emberMemory.stub.js';
|
|
3
|
+
const PROJECT_A = '/projects/alpha';
|
|
4
|
+
const INSIGHT = 'Le projet alpha régresse chaque vendredi.';
|
|
5
|
+
describe('StubEmberMemoryGateway insight recording mirrors the filesystem gateway', () => {
|
|
6
|
+
it('records the same insight only once', async () => {
|
|
7
|
+
const gateway = new StubEmberMemoryGateway();
|
|
8
|
+
await gateway.appendInsight(PROJECT_A, INSIGHT);
|
|
9
|
+
await gateway.appendInsight(PROJECT_A, INSIGHT);
|
|
10
|
+
expect((await gateway.load(PROJECT_A))?.insights).toEqual([INSIGHT]);
|
|
11
|
+
});
|
|
12
|
+
it('treats a trailing-whitespace variant as the same insight', async () => {
|
|
13
|
+
const gateway = new StubEmberMemoryGateway();
|
|
14
|
+
await gateway.appendInsight(PROJECT_A, INSIGHT);
|
|
15
|
+
await gateway.appendInsight(PROJECT_A, ` ${INSIGHT} `);
|
|
16
|
+
expect((await gateway.load(PROJECT_A))?.insights).toEqual([INSIGHT]);
|
|
17
|
+
});
|
|
18
|
+
it('never records a blank insight', async () => {
|
|
19
|
+
const gateway = new StubEmberMemoryGateway();
|
|
20
|
+
await gateway.appendInsight(PROJECT_A, ' ');
|
|
21
|
+
expect(await gateway.load(PROJECT_A)).toBeNull();
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=emberMemory.stub.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emberMemory.stub.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/modules/ember-chat/stubs/emberMemory.stub.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAE3E,MAAM,SAAS,GAAG,iBAAiB,CAAC;AACpC,MAAM,OAAO,GAAG,2CAA2C,CAAC;AAE5D,QAAQ,CAAC,yEAAyE,EAAE,GAAG,EAAE;IACvF,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,OAAO,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC7C,MAAM,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEhD,MAAM,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,OAAO,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC7C,MAAM,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,OAAO,IAAI,CAAC,CAAC;QAEzD,MAAM,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,OAAO,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC7C,MAAM,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAE9C,MAAM,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|