Ship Assistent 0.15.2: apply closed generate patches immediately, recover stalled streams, and skip repeat greetings when a chat already has replies.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-23 09:28:04 +03:00
co-authored by Cursor
parent 4b36850e2b
commit e53f483a00
19 changed files with 790 additions and 287 deletions
+35
View File
@@ -32,6 +32,30 @@ describe('patch.js', () => {
assert.equal(p.generate, true);
});
it('extractPatch prefers last terminal fence over a later weak pack fence', () => {
const text = [
'ok',
'```json',
'{"prompt":"A slender redhead in a leather jacket, 85mm, street light","generate":true}',
'```',
'```json',
'{"pack":"ordinary"}',
'```',
].join('\n');
const { patch } = extractPatch(text);
assert.equal(patch.generate, true);
assert.match(patch.prompt, /redhead/);
});
it('extractPatch accepts generate true string and unfenced object', () => {
const fenced = extractPatch('ok\n```json\n{"prompt":"A slender redhead in a leather jacket, 85mm","generate":"true"}\n```');
assert.equal(fenced.patch.generate, true);
assert.match(fenced.patch.prompt, /redhead/);
const raw = extractPatch('done\n{"prompt":"A fiery redhead in leather, street light","generate":true}');
assert.equal(raw.patch.generate, true);
assert.equal(raw.prose, 'done');
});
it('scheduler-only patch is detected with full key list', () => {
setPatchKeys(['prompt', 'scheduler', 'generate', 'ask']);
assert.equal(isPatchObject({ scheduler: 'euler' }), true);
@@ -77,6 +101,17 @@ describe('session.js', () => {
assert.equal(intent.vetoed, true);
});
it('resolveTurnIntent honors сгенерируй when prompt is present', () => {
const intent = resolveTurnIntent(
{ prompt: 'A slender redhead in a leather jacket' },
'сгенерируй',
{ askGenerateFn: (t) => /сгенер/i.test(t) },
);
assert.equal(intent.generate, true);
assert.equal(patchWantsGenerate({ generate: 'true' }), true);
assert.equal(patchWantsGenerate({ generate: true }), true);
});
it('mergeExactParamsForGenerate fills turbo profile when LLM omits steps/cfg', () => {
const exact = {
generation: { profile: 'turbo', steps: 8, cfg: 1, sigma_shift: 1.15 },