Add interface-oriented client sessions and headless capability access (WI-07)

This commit is contained in:
Timothy J. Aveni
2026-09-21 14:45:46 -07:00
parent d159d9b281
commit a80982a780
4 changed files with 106 additions and 8 deletions
+12 -1
View File
@@ -112,7 +112,7 @@ export function generateInterfaceClientBindings(
.filter((op) => op.mode === "call")
.map(
(op) =>
`${JSON.stringify(op.displayName)}: defineInterfaceOperation<${tsType(op.inputType)}, ${tsType(op.outputType)}>(${JSON.stringify(publicOperationContract(iface, op))})`,
`${JSON.stringify(op.displayName)}: defineInterfaceOperation<${tsType(op.inputType)}, ${tsType(op.outputType)}, ${JSON.stringify(publicOperationContract(iface, op).execution)}>(${JSON.stringify(publicOperationContract(iface, op))})`,
);
return `${JSON.stringify(member.displayName)}: {${operations.join(",\n")}}`;
});
@@ -120,3 +120,14 @@ export function generateInterfaceClientBindings(
});
return `// Generated from imported interface contracts. Regenerate; do not edit.\nimport { defineInterfaceOperation, type PreparedChange, type ManagedReference } from ${JSON.stringify(runtimeModule)};\nexport const interfaces = {${entries.join(",\n")}} as const;\n`;
}
export function generatePackageQueryClientBindings(
pkg: PackageRevision,
runtimeModule = "@quixos/camino-replica-core",
): string {
const queries = (pkg.checkedQueries ?? []).map(
(query) =>
`${JSON.stringify(query.declaration.displayName)}: definePackageQuery<${tsType(query.variables)}, ${tsType(query.output)}>(${JSON.stringify(publicQueryContract(pkg, query.declaration.id))})`,
);
return `// Generated from checked package query contracts. Regenerate; do not edit.\nimport { definePackageQuery, type ManagedReference } from ${JSON.stringify(runtimeModule)};\nexport const queries = {${queries.join(",\n")}} as const;\n`;
}