Add activated workspace reflection and Studio definition watches
Expose bounded snapshot-bound definition reads and latest-only watches from the serving checked bundle. Add checked reflection dependency ports, generated SDK bindings and selector-scoped invocation authority. Move Studio factory, contract and query discovery to public reflection inventories. Share an active-definition watch across canvas and standalone routes and invalidate/reload on epoch changes instead of polling GetWorkspace. Document the API and deferred scope; cover compiler/codegen, SDK injection, transport authorization, activation publication, pagination and reconnect behavior. Keep all work local; no deployment or publication.
This commit is contained in:
@@ -849,6 +849,12 @@ const lowerQueryReference = (
|
||||
const lowerDependencyPort = (state: LoweringState, context: DependencyPortContext): DependencyPort | undefined => {
|
||||
const name = identifier(context.identifier(0));
|
||||
const id = capabilityId.dependencyPort(stringValue(context.stringLiteral()));
|
||||
if (context.REFLECTION())
|
||||
return {
|
||||
id,
|
||||
displayName: name,
|
||||
requirement: { kind: "reflection", selectors: context.identifierList()!.identifier().map(identifier) },
|
||||
};
|
||||
if (context.QUERY()) {
|
||||
const query = lowerQueryReference(
|
||||
state,
|
||||
@@ -1097,6 +1103,11 @@ const lowerGenericPackageExport = (
|
||||
.primitiveList()
|
||||
?.primitive()
|
||||
.map((item) => text(item)) ?? [];
|
||||
if (port.REFLECTION())
|
||||
return {
|
||||
...base,
|
||||
requirement: { kind: "reflection", selectors: port.identifierList()!.identifier().map(identifier) },
|
||||
};
|
||||
if (port.QUERY()) {
|
||||
const query = lowerQueryReference(state, identifier(port.identifier(1)), identifier(port.identifier(2)), port);
|
||||
if (!query)
|
||||
@@ -1575,6 +1586,10 @@ const lowerBoundDependencies = (
|
||||
);
|
||||
return projectionId ? { edgeTypeId: attachment.attachment.id, projectionId } : undefined;
|
||||
};
|
||||
if (entry.REFLECTION())
|
||||
return [
|
||||
{ portId, binding: { kind: "reflection", selectors: entry.identifierList()!.identifier().map(identifier) } },
|
||||
];
|
||||
if (entry.QUERY()) {
|
||||
const query = lowerQueryReference(state, identifier(entry.identifier(1)), identifier(entry.identifier(2)), entry);
|
||||
const via = entry.VIA() ? traversal(identifier(entry.identifier(3)), identifier(entry.identifier(4))) : undefined;
|
||||
|
||||
Reference in New Issue
Block a user