Merge qualified workspace storage and external owner integration into PR 18395

Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit '56f78fa75e5bc7aa6c54a76badd5644bd3f73fdb':
  fix(server): schedule only outstanding merge confirmations (#18382)
  fix(workspaces): inspect storage only when needed (#18410)
This commit is contained in:
DottaandPaperclip committed 2026-10-31 13:50:24 -05:00
commit 6d54fb819d
14 files changed
+317 -183

No files matched your search

@@ -33,6 +33,17 @@ describe("plugin capability constants", () => {
});
describe("plugin manifest validators", () => {
it("preserves explicit workspace ancestry support without changing legacy declarations", () => {
const manifest = { id: "example.storage", apiVersion: 1, version: "1.0.0", displayName: "Storage", description: "Storage", author: "Tests",
categories: ["workspace"], capabilities: ["workspaces.manage", "events.subscribe"], resourceLifecycle: ["project"],
entrypoints: { worker: "worker.js" }, workspaceProvider: { modes: ["isolated_workspace"], strategies: ["git_worktree"] } };
expect(pluginManifestV1Schema.parse(manifest).workspaceProvider?.supportsMergeAncestry).toBeUndefined();
for (const supportsMergeAncestry of [true, false]) {
expect(pluginManifestV1Schema.parse({ ...manifest, workspaceProvider: { ...manifest.workspaceProvider, supportsMergeAncestry } })
.workspaceProvider?.supportsMergeAncestry).toBe(supportsMergeAncestry);
}
expect(pluginManifestV1Schema.safeParse({ ...manifest, workspaceProvider: { ...manifest.workspaceProvider, supportsMergeAncestry: "false" } }).success).toBe(false);
});
it("limits environment skills to unique declarations owned by the plugin", () => {
const manifest = { ...buildSandboxProviderManifest({ skillKeys: ["desktop"] }),
capabilities: ["environment.drivers.register", "skills.managed"],
+1
View File
@@ -808,6 +808,7 @@ export const pluginManifestV1Schema = z.object({
agentLifecycle: z.literal(true).optional(),
workspaceProvider: z.object({
finalizationVersion: z.literal(1).optional(),
supportsMergeAncestry: z.boolean().optional(),
freshWorkspaceVersion: z.literal(1).optional(),
modes: z.array(z.enum(["shared_workspace", "isolated_workspace", "operator_branch"])).min(1).max(3),
strategies: z.array(z.enum(["project_primary", "git_worktree"])).min(1).max(2),