feat: app conversations through the memory_id query parameter (#12025)

* feat: app conversations through the memory_id query parameter, chat-mode flows included

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore: regenerate the mcp session instructions

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: type backendAsync's memoryId option in the eval diagnostics

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore: pin git-sync hub scripts to windmill-cli 1.849.0

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat: memoryId option on the sync backend call too

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore: bump the ui builder artifact for the memoryId option

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore: shared-utils 1.0.14

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore: cli takes shared-utils 1.0.14 for the memoryId option

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: pin the app conversation scoping and the memoryId signatures

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: assert the ownership refusal, not any refusal

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: match the memoryId option in the cli wmill.ts signature tests

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: file an app's turns as the deployed flow's conversation, preview included

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
hugocasa
2026-10-27 23:51:35 +01:00
committed by GitHub
co-authored by Claude Opus 5.5
parent 003a6a9fd6
commit 07d4f7fe61
29 changed files with 263 additions and 131 deletions
+1 -1
View File
@@ -105,7 +105,7 @@ test("fetchPathRunnableSchemas pulls schema for a path-based script and feeds wm
expect(ts).toContain("userId");
expect(ts).toContain("includeProfile");
expect(ts).toMatch(/fetchUser:\s*\(args:\s*\{[^}]*userId/);
expect(ts).not.toMatch(/fetchUser:\s*\(args:\s*\{\s*\}\)/);
expect(ts).not.toMatch(/fetchUser:\s*\(args:\s*\{\s*\}[,)]/);
// Sanity: the generated d.ts is syntactically what the dev server writes
const outPath = path.join(tempDir, "wmill.d.ts.out");
+4 -4
View File
@@ -126,7 +126,7 @@ describe("genWmillTs (regression: path-based runnable schema)", () => {
expect(ts).toMatch(/fetchUser:\s*\(args:\s*\{[^}]*userId/);
expect(ts).toContain("userId");
expect(ts).toContain("includeProfile");
expect(ts).not.toMatch(/fetchUser:\s*\(args:\s*\{\s*\}\)/);
expect(ts).not.toMatch(/fetchUser:\s*\(args:\s*\{\s*\}[,)]/);
});
test("path-based runnable without schema falls back to {}", async () => {
@@ -139,7 +139,7 @@ describe("genWmillTs (regression: path-based runnable schema)", () => {
const runnables = await loadRunnablesFromBackend(backendDir);
const ts = buildWmillTs(runnables);
expect(ts).toMatch(/noSchema:\s*\(args:\s*\{\s*\}\)/);
expect(ts).toMatch(/noSchema:\s*\(args:\s*\{\s*\}[,)]/);
});
});
@@ -192,7 +192,7 @@ describe("inferRunnableSchemaFromFile (regression: new backend-folder format)",
// and the runnable would render as `args: {}`.
expect(ts).toContain("compute:");
expect(ts).toMatch(/compute:\s*\(args:\s*\{[^}]*x:/);
expect(ts).not.toMatch(/compute:\s*\(args:\s*\{\s*\}\)/);
expect(ts).not.toMatch(/compute:\s*\(args:\s*\{\s*\}[,)]/);
});
test("returns undefined for path-based runnables", async () => {
@@ -297,6 +297,6 @@ describe("inferAllInlineSchemas (startup seed for wmill.d.ts)", () => {
expect(ts).toMatch(/greet:\s*\(args:\s*\{[^}]*name/);
expect(ts).toContain("name");
expect(ts).toContain("times");
expect(ts).not.toMatch(/greet:\s*\(args:\s*\{\s*\}\)/);
expect(ts).not.toMatch(/greet:\s*\(args:\s*\{\s*\}[,)]/);
});
});