diff --git a/dist/bindings.d.ts b/dist/bindings.d.ts index 14078fe..cb39f41 100644 --- a/dist/bindings.d.ts +++ b/dist/bindings.d.ts @@ -63,6 +63,10 @@ export type QxOperationSpec = { outputType: QxValueType; }; export type QxPortSpec = { + kind: "reflection"; + id: string; + selectors: string[]; +} | { kind: "query"; id: string; definitionDigest: string; diff --git a/dist/bindings.d.ts.map b/dist/bindings.d.ts.map index 28dbb00..1280bbf 100644 --- a/dist/bindings.d.ts.map +++ b/dist/bindings.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../src/bindings.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../src/bindings.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/bindings.js b/dist/bindings.js index f8711f0..26a58d5 100644 --- a/dist/bindings.js +++ b/dist/bindings.js @@ -171,6 +171,8 @@ export const bindQxHandler = (spec, handler, messages) => { bindInterfaceView(target, defineQxInterfaceContract(port.interfaceRevisionId, port.operations), messages), ]; } + case "reflection": + return [name, raw.reflection(port.id)]; case "query": { const query = raw.query(port.id); const variablesToWire = (variables) => { diff --git a/dist/index.d.ts b/dist/index.d.ts index d14fef8..87e57a8 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -2,6 +2,8 @@ import http from "node:http"; import { type QxObjectRef } from "./references.js"; export * from "./bindings.js"; export * from "./queries.js"; +export * from "./reflection.js"; +import type { QxReflectionPort } from "./reflection.js"; export { relationshipMap, relationshipList, relationshipSet } from "./relationships.js"; export { createMigrationContext, migrationObjectId, serveMigration, type MigrationContext, type MigrationInput, type MigrationOutput, type MigrationEdge, } from "./migration.js"; import { type Client, type ConnectRouter } from "@connectrpc/connect"; @@ -67,7 +69,10 @@ export type QueryPort = { execute(variables: Record, expectedDefinitionDigest?: string): Promise; watch(variables: Record, signal: AbortSignal, expectedDefinitionDigest?: string): AsyncIterable; }; -export type RuntimePort = StatePort | EdgePort | InterfacePort | ConstructorPort | QueryPort; +export type ReflectionPort = QxReflectionPort & { + reflection: true; +}; +export type RuntimePort = StatePort | EdgePort | InterfacePort | ConstructorPort | QueryPort | ReflectionPort; export type RuntimeContext = { tryConform(object: QxObjectRef, interfaceRevisionId: string): Promise; /** Cooperative cancellation. Completion is acknowledged only after the handler returns. */ @@ -82,6 +87,7 @@ export type RuntimeContext = { interface(portId: string): InterfacePort; constructor(portId: string): ConstructorPort; query(portId: string): QueryPort; + reflection(portId: string): ReflectionPort; }; export type RuntimeSession = { id: string; diff --git a/dist/index.d.ts.map b/dist/index.d.ts.map index 3737a72..5c15e77 100644 --- a/dist/index.d.ts.map +++ b/dist/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index cbb9156..5f5bb67 100644 --- a/dist/index.js +++ b/dist/index.js @@ -4,6 +4,7 @@ import { createInvocationRegistry } from "./invocations.js"; import { isObjectReference, referenceFromWire, referenceToWire, assertReferenceFree, } from "./references.js"; export * from "./bindings.js"; export * from "./queries.js"; +export * from "./reflection.js"; export { relationshipMap, relationshipList, relationshipSet } from "./relationships.js"; import { AsyncLocalStorage } from "node:async_hooks"; import { createHmac, randomBytes, randomUUID, timingSafeEqual } from "node:crypto"; @@ -156,6 +157,20 @@ export const createRuntimeContext = (camino, orch, request) => { const ports = new Map(); for (const dependency of request.dependencies) { switch (dependency.binding.case) { + case "reflection": { + const scope = dependency.binding.value; + const scoped = (input) => { + if (!scope.selectors.includes(input.selector.kind)) + throw new Error("Undeclared reflection selector"); + return { ...input, workspaceId: scope.workspaceId, workspaceEpoch: scope.workspaceEpoch }; + }; + ports.set(dependency.portId, { + reflection: true, + read: (input) => orch.readDefinitions(scoped(input)), + watch: (input, signal) => orch.watchDefinitions(scoped(input), { signal }), + }); + break; + } case "queryId": case "workspaceQuery": { if (dependency.binding.case === "workspaceQuery" && !dependency.binding.value.scope) @@ -315,6 +330,7 @@ export const createRuntimeContext = (camino, orch, request) => { interface: (portId) => requirePort(portId, "interfaceRevisionId"), constructor: (portId) => requirePort(portId, "atomId"), query: (portId) => requirePort(portId, "queryId"), + reflection: (portId) => requirePort(portId, "reflection"), }; }; export const derived = (get) => ({ kind: "derived", get }); diff --git a/dist/quixos/orch_pb.d.ts b/dist/quixos/orch_pb.d.ts index 98b06e5..f3c8842 100644 --- a/dist/quixos/orch_pb.d.ts +++ b/dist/quixos/orch_pb.d.ts @@ -9,6 +9,346 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file quixos/orch.proto. */ export declare const file_quixos_orch: GenFile; +/** + * Activated definitions, not runtime metrics or object data. Nested type JSON + * uses the compiler's canonical ValueType/InterfaceRevision public contracts. + * + * @generated from message quixos.orch.DefinitionSelector + */ +export type DefinitionSelector = Message<"quixos.orch.DefinitionSelector"> & { + /** + * active | atoms | interfaces | conformances | queries | indexes + * + * @generated from field: string kind = 1; + */ + kind: string; + /** + * @generated from field: repeated string ids = 2; + */ + ids: string[]; + /** + * @generated from field: string atom_id = 3; + */ + atomId: string; + /** + * @generated from field: string interface_revision_id = 4; + */ + interfaceRevisionId: string; + /** + * @generated from field: string package_revision_id = 5; + */ + packageRevisionId: string; +}; +/** + * Describes the message quixos.orch.DefinitionSelector. + * Use `create(DefinitionSelectorSchema)` to create a new message. + */ +export declare const DefinitionSelectorSchema: GenMessage; +/** + * @generated from message quixos.orch.DefinitionIdentity + */ +export type DefinitionIdentity = Message<"quixos.orch.DefinitionIdentity"> & { + /** + * @generated from field: string workspace_id = 1; + */ + workspaceId: string; + /** + * @generated from field: string workspace_revision_id = 2; + */ + workspaceRevisionId: string; + /** + * @generated from field: string source_root_commit = 3; + */ + sourceRootCommit: string; + /** + * @generated from field: string workspace_epoch = 4; + */ + workspaceEpoch: string; + /** + * @generated from field: string definition_digest = 5; + */ + definitionDigest: string; +}; +/** + * Describes the message quixos.orch.DefinitionIdentity. + * Use `create(DefinitionIdentitySchema)` to create a new message. + */ +export declare const DefinitionIdentitySchema: GenMessage; +/** + * @generated from message quixos.orch.DefinitionRequest + */ +export type DefinitionRequest = Message<"quixos.orch.DefinitionRequest"> & { + /** + * @generated from field: quixos.orch.DefinitionSelector selector = 1; + */ + selector?: DefinitionSelector | undefined; + /** + * 1..100; 0 uses 50 + * + * @generated from field: uint32 first = 2; + */ + first: number; + /** + * @generated from field: string after = 3; + */ + after: string; + /** + * issued definition_digest; current serving snapshot only + * + * @generated from field: string snapshot = 4; + */ + snapshot: string; + /** + * required for injected package authority + * + * @generated from field: string workspace_id = 5; + */ + workspaceId: string; + /** + * required for invocation-bound package calls + * + * @generated from field: string workspace_epoch = 6; + */ + workspaceEpoch: string; +}; +/** + * Describes the message quixos.orch.DefinitionRequest. + * Use `create(DefinitionRequestSchema)` to create a new message. + */ +export declare const DefinitionRequestSchema: GenMessage; +/** + * @generated from message quixos.orch.ReflectedAtom + */ +export type ReflectedAtom = Message<"quixos.orch.ReflectedAtom"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + /** + * @generated from field: string display_name = 2; + */ + displayName: string; + /** + * @generated from field: string constructor_input_type_json = 3; + */ + constructorInputTypeJson: string; +}; +/** + * Describes the message quixos.orch.ReflectedAtom. + * Use `create(ReflectedAtomSchema)` to create a new message. + */ +export declare const ReflectedAtomSchema: GenMessage; +/** + * @generated from message quixos.orch.ReflectedInterface + */ +export type ReflectedInterface = Message<"quixos.orch.ReflectedInterface"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + /** + * @generated from field: string interface_id = 2; + */ + interfaceId: string; + /** + * @generated from field: string display_name = 3; + */ + displayName: string; + /** + * canonical interface contract, excluding source location + * + * @generated from field: string contract_json = 4; + */ + contractJson: string; +}; +/** + * Describes the message quixos.orch.ReflectedInterface. + * Use `create(ReflectedInterfaceSchema)` to create a new message. + */ +export declare const ReflectedInterfaceSchema: GenMessage; +/** + * @generated from message quixos.orch.ReflectedConformance + */ +export type ReflectedConformance = Message<"quixos.orch.ReflectedConformance"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + /** + * @generated from field: string atom_id = 2; + */ + atomId: string; + /** + * @generated from field: string interface_revision_id = 3; + */ + interfaceRevisionId: string; + /** + * @generated from field: string definition_id = 4; + */ + definitionId: string; + /** + * @generated from field: repeated string operation_ids = 5; + */ + operationIds: string[]; + /** + * @generated from field: repeated quixos.orch.ClassCapability class_capabilities = 6; + */ + classCapabilities: ClassCapability[]; + /** + * @generated from field: bool instance = 7; + */ + instance: boolean; +}; +/** + * Describes the message quixos.orch.ReflectedConformance. + * Use `create(ReflectedConformanceSchema)` to create a new message. + */ +export declare const ReflectedConformanceSchema: GenMessage; +/** + * @generated from message quixos.orch.ReflectedQuery + */ +export type ReflectedQuery = Message<"quixos.orch.ReflectedQuery"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + /** + * @generated from field: string name = 2; + */ + name: string; + /** + * @generated from field: string package_revision_id = 3; + */ + packageRevisionId: string; + /** + * @generated from field: string definition_digest = 4; + */ + definitionDigest: string; + /** + * @generated from field: string binding_digest = 5; + */ + bindingDigest: string; + /** + * @generated from field: string root_kind = 6; + */ + rootKind: string; + /** + * @generated from field: string interface_revision_id = 7; + */ + interfaceRevisionId: string; + /** + * @generated from field: string variables_type_json = 8; + */ + variablesTypeJson: string; + /** + * @generated from field: string output_type_json = 9; + */ + outputTypeJson: string; + /** + * @generated from field: string effects_json = 10; + */ + effectsJson: string; + /** + * @generated from field: bool watch = 11; + */ + watch: boolean; + /** + * @generated from field: quixos.WorkspaceQueryScope workspace_scope = 12; + */ + workspaceScope?: WorkspaceQueryScope | undefined; +}; +/** + * Describes the message quixos.orch.ReflectedQuery. + * Use `create(ReflectedQuerySchema)` to create a new message. + */ +export declare const ReflectedQuerySchema: GenMessage; +/** + * @generated from message quixos.orch.ReflectedIndex + */ +export type ReflectedIndex = Message<"quixos.orch.ReflectedIndex"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + /** + * @generated from field: string contract_json = 2; + */ + contractJson: string; +}; +/** + * Describes the message quixos.orch.ReflectedIndex. + * Use `create(ReflectedIndexSchema)` to create a new message. + */ +export declare const ReflectedIndexSchema: GenMessage; +/** + * @generated from message quixos.orch.DefinitionRecord + */ +export type DefinitionRecord = Message<"quixos.orch.DefinitionRecord"> & { + /** + * @generated from oneof quixos.orch.DefinitionRecord.definition + */ + definition: { + /** + * @generated from field: quixos.orch.ReflectedAtom atom = 1; + */ + value: ReflectedAtom; + case: "atom"; + } | { + /** + * @generated from field: quixos.orch.ReflectedInterface interface = 2; + */ + value: ReflectedInterface; + case: "interface"; + } | { + /** + * @generated from field: quixos.orch.ReflectedConformance conformance = 3; + */ + value: ReflectedConformance; + case: "conformance"; + } | { + /** + * @generated from field: quixos.orch.ReflectedQuery query = 4; + */ + value: ReflectedQuery; + case: "query"; + } | { + /** + * @generated from field: quixos.orch.ReflectedIndex index = 5; + */ + value: ReflectedIndex; + case: "index"; + } | { + case: undefined; + value?: undefined; + }; +}; +/** + * Describes the message quixos.orch.DefinitionRecord. + * Use `create(DefinitionRecordSchema)` to create a new message. + */ +export declare const DefinitionRecordSchema: GenMessage; +/** + * @generated from message quixos.orch.DefinitionPage + */ +export type DefinitionPage = Message<"quixos.orch.DefinitionPage"> & { + /** + * @generated from field: quixos.orch.DefinitionIdentity identity = 1; + */ + identity?: DefinitionIdentity | undefined; + /** + * @generated from field: repeated quixos.orch.DefinitionRecord records = 2; + */ + records: DefinitionRecord[]; + /** + * @generated from field: string next_cursor = 3; + */ + nextCursor: string; +}; +/** + * Describes the message quixos.orch.DefinitionPage. + * Use `create(DefinitionPageSchema)` to create a new message. + */ +export declare const DefinitionPageSchema: GenMessage; /** * @generated from message quixos.orch.QueryEvent */ @@ -779,6 +1119,22 @@ export declare const PackageRuntimeStatusSchema: GenMessage & { */ value: WorkspaceQueryDependency; case: "workspaceQuery"; + } | { + /** + * @generated from field: quixos.ReflectionDependency reflection = 9; + */ + value: ReflectionDependency; + case: "reflection"; } | { case: undefined; value?: undefined; @@ -193,6 +199,28 @@ export type InjectedDependency = Message<"quixos.InjectedDependency"> & { * Use `create(InjectedDependencySchema)` to create a new message. */ export declare const InjectedDependencySchema: GenMessage; +/** + * @generated from message quixos.ReflectionDependency + */ +export type ReflectionDependency = Message<"quixos.ReflectionDependency"> & { + /** + * @generated from field: string workspace_id = 1; + */ + workspaceId: string; + /** + * @generated from field: string workspace_epoch = 2; + */ + workspaceEpoch: string; + /** + * @generated from field: repeated string selectors = 3; + */ + selectors: string[]; +}; +/** + * Describes the message quixos.ReflectionDependency. + * Use `create(ReflectionDependencySchema)` to create a new message. + */ +export declare const ReflectionDependencySchema: GenMessage; /** * Scope evidence is not authority by itself. The caller must also hold the * matching workspace-query grant (or the authenticated workspace user grant). diff --git a/dist/quixos/refs_pb.d.ts.map b/dist/quixos/refs_pb.d.ts.map index f6e3142..1cb27a3 100644 --- a/dist/quixos/refs_pb.d.ts.map +++ b/dist/quixos/refs_pb.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"refs_pb.d.ts","sourceRoot":"","sources":["../../src/quixos/refs_pb.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"refs_pb.d.ts","sourceRoot":"","sources":["../../src/quixos/refs_pb.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/quixos/refs_pb.js b/dist/quixos/refs_pb.js index 9065bde..22be19d 100644 --- a/dist/quixos/refs_pb.js +++ b/dist/quixos/refs_pb.js @@ -5,7 +5,7 @@ import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2"; /** * Describes the file quixos/refs.proto. */ -export const file_quixos_refs = /*@__PURE__*/ fileDesc("ChFxdWl4b3MvcmVmcy5wcm90bxIGcXVpeG9zInUKDUNhcGFiaWxpdHlSZWYSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAEgASgJEhQKDG9wZXJhdGlvbl9pZBgCIAEoCRIvCgtjb25mb3JtYW5jZRgDIAEoCzIaLnF1aXhvcy5Db25mb3JtYW5jZVdpdG5lc3Mi0QEKDEZpZWxkRWRpdGluZxIbChNnZXR0ZXJfb3BlcmF0aW9uX2lkGAEgASgJEhsKE3NldHRlcl9vcGVyYXRpb25faWQYAiABKAkSFQoNZG9jdW1lbnRfdHlwZRgDIAEoCRIWCg5iaW5kaW5nX2RpZ2VzdBgEIAEoCRInCgRtb2RlGAUgASgOMhkucXVpeG9zLkZpZWxkRWRpdGluZy5Nb2RlIi8KBE1vZGUSDwoLVU5TUEVDSUZJRUQQABIMCghSRUdJU1RFUhABEggKBENSRFQQAiKWAQoSQ29uZm9ybWFuY2VXaXRuZXNzEhEKCW9iamVjdF9pZBgBIAEoCRIdChVpbnRlcmZhY2VfcmV2aXNpb25faWQYAiABKAkSFgoOY29uZm9ybWFuY2VfaWQYAyABKAkSHQoVd29ya3NwYWNlX3JldmlzaW9uX2lkGAQgASgJEhcKD3dvcmtzcGFjZV9lcG9jaBgFIAEoCSJCChBQYWNrYWdlRXhwb3J0UmVmEhsKE3BhY2thZ2VfcmV2aXNpb25faWQYASABKAkSEQoJZXhwb3J0X2lkGAIgASgJIpUCChJJbmplY3RlZERlcGVuZGVuY3kSDwoHcG9ydF9pZBgBIAEoCRIXCg1zdGF0ZV9zbG90X2lkGAIgASgJSAASJgoEZWRnZRgDIAEoCzIWLnF1aXhvcy5FZGdlRGVwZW5kZW5jeUgAEh8KFWludGVyZmFjZV9yZXZpc2lvbl9pZBgEIAEoCUgAEh0KE2NvbnN0cnVjdG9yX2F0b21faWQYBSABKAlIABISCghxdWVyeV9pZBgHIAEoCUgAEjsKD3dvcmtzcGFjZV9xdWVyeRgIIAEoCzIgLnF1aXhvcy5Xb3Jrc3BhY2VRdWVyeURlcGVuZGVuY3lIABIRCglvYmplY3RfaWQYBiABKAlCCQoHYmluZGluZyKaAQoTV29ya3NwYWNlUXVlcnlTY29wZRIUCgx3b3Jrc3BhY2VfaWQYASABKAkSHQoVd29ya3NwYWNlX3JldmlzaW9uX2lkGAIgASgJEhcKD3dvcmtzcGFjZV9lcG9jaBgDIAEoCRIdChVpbnRlcmZhY2VfcmV2aXNpb25faWQYBCABKAkSFgoOYmluZGluZ19kaWdlc3QYBSABKAkiWAoYV29ya3NwYWNlUXVlcnlEZXBlbmRlbmN5EhAKCHF1ZXJ5X2lkGAEgASgJEioKBXNjb3BlGAIgASgLMhsucXVpeG9zLldvcmtzcGFjZVF1ZXJ5U2NvcGUiPQoORWRnZURlcGVuZGVuY3kSFAoMZWRnZV90eXBlX2lkGAEgASgJEhUKDXByb2plY3Rpb25faWQYAiABKAliBnByb3RvMw"); +export const file_quixos_refs = /*@__PURE__*/ fileDesc("ChFxdWl4b3MvcmVmcy5wcm90bxIGcXVpeG9zInUKDUNhcGFiaWxpdHlSZWYSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAEgASgJEhQKDG9wZXJhdGlvbl9pZBgCIAEoCRIvCgtjb25mb3JtYW5jZRgDIAEoCzIaLnF1aXhvcy5Db25mb3JtYW5jZVdpdG5lc3Mi0QEKDEZpZWxkRWRpdGluZxIbChNnZXR0ZXJfb3BlcmF0aW9uX2lkGAEgASgJEhsKE3NldHRlcl9vcGVyYXRpb25faWQYAiABKAkSFQoNZG9jdW1lbnRfdHlwZRgDIAEoCRIWCg5iaW5kaW5nX2RpZ2VzdBgEIAEoCRInCgRtb2RlGAUgASgOMhkucXVpeG9zLkZpZWxkRWRpdGluZy5Nb2RlIi8KBE1vZGUSDwoLVU5TUEVDSUZJRUQQABIMCghSRUdJU1RFUhABEggKBENSRFQQAiKWAQoSQ29uZm9ybWFuY2VXaXRuZXNzEhEKCW9iamVjdF9pZBgBIAEoCRIdChVpbnRlcmZhY2VfcmV2aXNpb25faWQYAiABKAkSFgoOY29uZm9ybWFuY2VfaWQYAyABKAkSHQoVd29ya3NwYWNlX3JldmlzaW9uX2lkGAQgASgJEhcKD3dvcmtzcGFjZV9lcG9jaBgFIAEoCSJCChBQYWNrYWdlRXhwb3J0UmVmEhsKE3BhY2thZ2VfcmV2aXNpb25faWQYASABKAkSEQoJZXhwb3J0X2lkGAIgASgJIskCChJJbmplY3RlZERlcGVuZGVuY3kSDwoHcG9ydF9pZBgBIAEoCRIXCg1zdGF0ZV9zbG90X2lkGAIgASgJSAASJgoEZWRnZRgDIAEoCzIWLnF1aXhvcy5FZGdlRGVwZW5kZW5jeUgAEh8KFWludGVyZmFjZV9yZXZpc2lvbl9pZBgEIAEoCUgAEh0KE2NvbnN0cnVjdG9yX2F0b21faWQYBSABKAlIABISCghxdWVyeV9pZBgHIAEoCUgAEjsKD3dvcmtzcGFjZV9xdWVyeRgIIAEoCzIgLnF1aXhvcy5Xb3Jrc3BhY2VRdWVyeURlcGVuZGVuY3lIABIyCgpyZWZsZWN0aW9uGAkgASgLMhwucXVpeG9zLlJlZmxlY3Rpb25EZXBlbmRlbmN5SAASEQoJb2JqZWN0X2lkGAYgASgJQgkKB2JpbmRpbmciWAoUUmVmbGVjdGlvbkRlcGVuZGVuY3kSFAoMd29ya3NwYWNlX2lkGAEgASgJEhcKD3dvcmtzcGFjZV9lcG9jaBgCIAEoCRIRCglzZWxlY3RvcnMYAyADKAkimgEKE1dvcmtzcGFjZVF1ZXJ5U2NvcGUSFAoMd29ya3NwYWNlX2lkGAEgASgJEh0KFXdvcmtzcGFjZV9yZXZpc2lvbl9pZBgCIAEoCRIXCg93b3Jrc3BhY2VfZXBvY2gYAyABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAQgASgJEhYKDmJpbmRpbmdfZGlnZXN0GAUgASgJIlgKGFdvcmtzcGFjZVF1ZXJ5RGVwZW5kZW5jeRIQCghxdWVyeV9pZBgBIAEoCRIqCgVzY29wZRgCIAEoCzIbLnF1aXhvcy5Xb3Jrc3BhY2VRdWVyeVNjb3BlIj0KDkVkZ2VEZXBlbmRlbmN5EhQKDGVkZ2VfdHlwZV9pZBgBIAEoCRIVCg1wcm9qZWN0aW9uX2lkGAIgASgJYgZwcm90bzM"); /** * Describes the message quixos.CapabilityRef. * Use `create(CapabilityRefSchema)` to create a new message. @@ -53,18 +53,23 @@ export const PackageExportRefSchema = /*@__PURE__*/ messageDesc(file_quixos_refs * Use `create(InjectedDependencySchema)` to create a new message. */ export const InjectedDependencySchema = /*@__PURE__*/ messageDesc(file_quixos_refs, 4); +/** + * Describes the message quixos.ReflectionDependency. + * Use `create(ReflectionDependencySchema)` to create a new message. + */ +export const ReflectionDependencySchema = /*@__PURE__*/ messageDesc(file_quixos_refs, 5); /** * Describes the message quixos.WorkspaceQueryScope. * Use `create(WorkspaceQueryScopeSchema)` to create a new message. */ -export const WorkspaceQueryScopeSchema = /*@__PURE__*/ messageDesc(file_quixos_refs, 5); +export const WorkspaceQueryScopeSchema = /*@__PURE__*/ messageDesc(file_quixos_refs, 6); /** * Describes the message quixos.WorkspaceQueryDependency. * Use `create(WorkspaceQueryDependencySchema)` to create a new message. */ -export const WorkspaceQueryDependencySchema = /*@__PURE__*/ messageDesc(file_quixos_refs, 6); +export const WorkspaceQueryDependencySchema = /*@__PURE__*/ messageDesc(file_quixos_refs, 7); /** * Describes the message quixos.EdgeDependency. * Use `create(EdgeDependencySchema)` to create a new message. */ -export const EdgeDependencySchema = /*@__PURE__*/ messageDesc(file_quixos_refs, 7); +export const EdgeDependencySchema = /*@__PURE__*/ messageDesc(file_quixos_refs, 8); diff --git a/dist/reflection.d.ts b/dist/reflection.d.ts new file mode 100644 index 0000000..068b1b7 --- /dev/null +++ b/dist/reflection.d.ts @@ -0,0 +1,35 @@ +import type { DefinitionPage } from "./quixos/orch_pb.js"; +export type { DefinitionPage, DefinitionIdentity, DefinitionRecord, ReflectedAtom, ReflectedInterface, ReflectedConformance, ReflectedQuery, ReflectedIndex, } from "./quixos/orch_pb.js"; +export type ReflectionKind = "active" | "atoms" | "interfaces" | "conformances" | "queries" | "indexes"; +export type ReflectionSelector = K extends "active" ? { + kind: K; +} : K extends "atoms" ? { + kind: K; + ids?: string[]; + interfaceRevisionId?: string; +} : K extends "conformances" ? { + kind: K; + ids?: string[]; + atomId?: string; + interfaceRevisionId?: string; +} : K extends "queries" ? { + kind: K; + ids?: string[]; + packageRevisionId?: string; + interfaceRevisionId?: string; +} : { + kind: K; + ids?: string[]; +}; +export type ReflectionRequest = { + selector: ReflectionSelector; + first?: number; + after?: string; + snapshot?: string; +}; +/** Read-only metadata. Returned capability IDs confer no invocation authority. */ +export type QxReflectionPort = { + read(request: ReflectionRequest): Promise; + watch(request: Omit, "after" | "snapshot">, signal: AbortSignal): AsyncIterable; +}; +//# sourceMappingURL=reflection.d.ts.map \ No newline at end of file diff --git a/dist/reflection.d.ts.map b/dist/reflection.d.ts.map new file mode 100644 index 0000000..2bee1ea --- /dev/null +++ b/dist/reflection.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"reflection.d.ts","sourceRoot":"","sources":["../src/reflection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC;AACxG,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,cAAc,IAAI,CAAC,SAAS,QAAQ,GAClF;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,GACX,CAAC,SAAS,OAAO,GACf;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAAE,GACzD,CAAC,SAAS,cAAc,GACtB;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1E,CAAC,SAAS,SAAS,GACjB;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAAE,GACrF;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AACtC,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,cAAc,IAAI;IACjE,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AACF,kFAAkF;AAClF,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,GAAG,cAAc,IAAI;IAChE,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7D,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;CACtH,CAAC"} \ No newline at end of file diff --git a/dist/reflection.js b/dist/reflection.js new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/dist/reflection.js @@ -0,0 +1 @@ +export {}; diff --git a/src/bindings.ts b/src/bindings.ts index 4a6bf36..0f47935 100644 --- a/src/bindings.ts +++ b/src/bindings.ts @@ -51,6 +51,7 @@ export type QxValueType = | { kind: "optional" | "list"; value: QxValueType }; export type QxOperationSpec = { id: string; inputType: QxValueType; outputType: QxValueType }; export type QxPortSpec = + | { kind: "reflection"; id: string; selectors: string[] } | { kind: "query"; id: string; definitionDigest: string; variables: QxValueType; output: QxValueType; watch: boolean } | { kind: "state"; id: string; valueType: QxValueType; primitives: string[] } | { kind: "edge"; id: string; primitives: string[] } @@ -246,6 +247,8 @@ export const bindQxHandler = ( bindInterfaceView(target, defineQxInterfaceContract(port.interfaceRevisionId, port.operations), messages), ]; } + case "reflection": + return [name, raw.reflection(port.id)]; case "query": { const query = raw.query(port.id); const variablesToWire = (variables: unknown) => { diff --git a/src/index.ts b/src/index.ts index f343a3c..8abce90 100644 --- a/src/index.ts +++ b/src/index.ts @@ -10,6 +10,8 @@ import { } from "./references.js"; export * from "./bindings.js"; export * from "./queries.js"; +export * from "./reflection.js"; +import type { QxReflectionPort, ReflectionRequest } from "./reflection.js"; export { relationshipMap, relationshipList, relationshipSet } from "./relationships.js"; import { AsyncLocalStorage } from "node:async_hooks"; import { createHmac, randomBytes, randomUUID, timingSafeEqual } from "node:crypto"; @@ -208,7 +210,8 @@ export type QueryPort = { expectedDefinitionDigest?: string, ): AsyncIterable; }; -export type RuntimePort = StatePort | EdgePort | InterfacePort | ConstructorPort | QueryPort; +export type ReflectionPort = QxReflectionPort & { reflection: true }; +export type RuntimePort = StatePort | EdgePort | InterfacePort | ConstructorPort | QueryPort | ReflectionPort; export type RuntimeContext = { tryConform(object: QxObjectRef, interfaceRevisionId: string): Promise; @@ -224,6 +227,7 @@ export type RuntimeContext = { interface(portId: string): InterfacePort; constructor(portId: string): ConstructorPort; query(portId: string): QueryPort; + reflection(portId: string): ReflectionPort; }; export type RuntimeSession = { @@ -285,6 +289,19 @@ export const createRuntimeContext = ( const ports = new Map(); for (const dependency of request.dependencies) { switch (dependency.binding.case) { + case "reflection": { + const scope = dependency.binding.value; + const scoped = (input: ReflectionRequest) => { + if (!scope.selectors.includes(input.selector.kind)) throw new Error("Undeclared reflection selector"); + return { ...input, workspaceId: scope.workspaceId, workspaceEpoch: scope.workspaceEpoch }; + }; + ports.set(dependency.portId, { + reflection: true, + read: (input: ReflectionRequest) => orch.readDefinitions(scoped(input)), + watch: (input: ReflectionRequest, signal: AbortSignal) => orch.watchDefinitions(scoped(input), { signal }), + }); + break; + } case "queryId": case "workspaceQuery": { if (dependency.binding.case === "workspaceQuery" && !dependency.binding.value.scope) @@ -453,6 +470,7 @@ export const createRuntimeContext = ( interface: (portId: string) => requirePort(portId, "interfaceRevisionId"), constructor: (portId: string) => requirePort(portId, "atomId"), query: (portId: string) => requirePort(portId, "queryId"), + reflection: (portId: string) => requirePort(portId, "reflection"), }; }; diff --git a/src/quixos/orch_pb.ts b/src/quixos/orch_pb.ts index 71f6f42..f513e4c 100644 --- a/src/quixos/orch_pb.ts +++ b/src/quixos/orch_pb.ts @@ -20,7 +20,412 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file quixos/orch.proto. */ export const file_quixos_orch: GenFile = /*@__PURE__*/ - fileDesc("ChFxdWl4b3Mvb3JjaC5wcm90bxILcXVpeG9zLm9yY2gitwEKClF1ZXJ5RXZlbnQSDgoGcnVuX2lkGAEgASgJEhAKCHNlcXVlbmNlGAIgASgEEgwKBGtpbmQYAyABKAkSJwoIc25hcHNob3QYBCABKAsyFS5jYW1pbm8uUXVlcnlSZXNwb25zZRIjCgRwYXRoGAUgAygLMhUuY2FtaW5vLlF1ZXJ5UGF0aFBhcnQSHAoFdmFsdWUYBiABKAsyDS5jYW1pbm8uVmFsdWUSDQoFZXJyb3IYByABKAkiRQoRVHJ5Q29uZm9ybVJlcXVlc3QSEQoJb2JqZWN0X2lkGAEgASgJEh0KFWludGVyZmFjZV9yZXZpc2lvbl9pZBgCIAEoCSJFChJUcnlDb25mb3JtUmVzcG9uc2USLwoLY29uZm9ybWFuY2UYASABKAsyGi5xdWl4b3MuQ29uZm9ybWFuY2VXaXRuZXNzIqUBChZDb25zdHJ1Y3RPYmplY3RSZXF1ZXN0Eg8KB2F0b21faWQYASABKAkSPQoFaW5wdXQYAiADKAsyLi5xdWl4b3Mub3JjaC5Db25zdHJ1Y3RPYmplY3RSZXF1ZXN0LklucHV0RW50cnkaOwoKSW5wdXRFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5jYW1pbm8uVmFsdWU6AjgBIj8KF0NvbnN0cnVjdE9iamVjdFJlc3BvbnNlEiQKBm9iamVjdBgBIAEoCzIULmNhbWluby5DYW1pbm9PYmplY3QibQomUmVzb2x2ZU9yQ29uc3RydWN0UmVsYXRlZE9iamVjdFJlcXVlc3QSEQoJb2JqZWN0X2lkGAEgASgJEh0KFWludGVyZmFjZV9yZXZpc2lvbl9pZBgCIAEoCRIRCgltZW1iZXJfaWQYAyABKAkiZAonUmVzb2x2ZU9yQ29uc3RydWN0UmVsYXRlZE9iamVjdFJlc3BvbnNlEiQKBm9iamVjdBgBIAEoCzIULmNhbWluby5DYW1pbm9PYmplY3QSEwoLY29uc3RydWN0ZWQYAiABKAgi8AEKF0ludm9rZUNhcGFiaWxpdHlSZXF1ZXN0EikKCmNhcGFiaWxpdHkYASABKAsyFS5xdWl4b3MuQ2FwYWJpbGl0eVJlZhIRCglvYmplY3RfaWQYAiABKAkSPgoFaW5wdXQYAyADKAsyLy5xdWl4b3Mub3JjaC5JbnZva2VDYXBhYmlsaXR5UmVxdWVzdC5JbnB1dEVudHJ5EhoKEmNsaWVudF9tdXRhdGlvbl9pZBgEIAEoCRo7CgpJbnB1dEVudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLmNhbWluby5WYWx1ZToCOAEizgEKHEludm9rZUNsYXNzQ2FwYWJpbGl0eVJlcXVlc3QSFgoOY29uZm9ybWFuY2VfaWQYASABKAkSFAoMb3BlcmF0aW9uX2lkGAIgASgJEkMKBWlucHV0GAMgAygLMjQucXVpeG9zLm9yY2guSW52b2tlQ2xhc3NDYXBhYmlsaXR5UmVxdWVzdC5JbnB1dEVudHJ5GjsKCklucHV0RW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0uY2FtaW5vLlZhbHVlOgI4ASL+AQoYSW52b2tlQ2FwYWJpbGl0eVJlc3BvbnNlEhUKDWludm9jYXRpb25faWQYASABKAkSKwoKYWN0aXZhdGlvbhgCIAEoCzIXLnF1aXhvcy5vcmNoLkFjdGl2YXRpb24SCgoCb2sYAyABKAgSHQoGcmVzdWx0GAQgASgLMg0uY2FtaW5vLlZhbHVlEg0KBWVycm9yGAUgASgJEjcKDGRlcGVuZGVuY2llcxgGIAMoCzIhLnF1aXhvcy5ydW50aW1lLkRlcml2ZWREZXBlbmRlbmN5EisKDWZpZWxkX2VkaXRpbmcYByABKAsyFC5xdWl4b3MuRmllbGRFZGl0aW5nIv4BChpFZGl0Q2FwYWJpbGl0eUZpZWxkUmVxdWVzdBIpCgpjYXBhYmlsaXR5GAEgASgLMhUucXVpeG9zLkNhcGFiaWxpdHlSZWYSEQoJb2JqZWN0X2lkGAIgASgJEhsKE3NldHRlcl9vcGVyYXRpb25faWQYAyABKAkSFgoOYmluZGluZ19kaWdlc3QYBCABKAkSIwoGdXBkYXRlGAUgASgLMhEuY2FtaW5vLkNyZHRWYWx1ZUgAEiQKC3JlcGxhY2VtZW50GAcgASgLMg0uY2FtaW5vLlZhbHVlSAASGgoSY2xpZW50X211dGF0aW9uX2lkGAYgASgJQgYKBGVkaXQi0gEKFldhdGNoQ2FwYWJpbGl0eVJlcXVlc3QSKQoKY2FwYWJpbGl0eRgBIAEoCzIVLnF1aXhvcy5DYXBhYmlsaXR5UmVmEhEKCW9iamVjdF9pZBgCIAEoCRI9CgVpbnB1dBgDIAMoCzIuLnF1aXhvcy5vcmNoLldhdGNoQ2FwYWJpbGl0eVJlcXVlc3QuSW5wdXRFbnRyeRo7CgpJbnB1dEVudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLmNhbWluby5WYWx1ZToCOAEikAIKFFdhdGNoQ2FwYWJpbGl0eUV2ZW50EhUKDWludm9jYXRpb25faWQYASABKAkSKwoKYWN0aXZhdGlvbhgCIAEoCzIXLnF1aXhvcy5vcmNoLkFjdGl2YXRpb24SEAoId2F0Y2hfaWQYAyABKAkSHAoFdmFsdWUYBCABKAsyDS5jYW1pbm8uVmFsdWUSNwoMZGVwZW5kZW5jaWVzGAUgAygLMiEucXVpeG9zLnJ1bnRpbWUuRGVyaXZlZERlcGVuZGVuY3kSDQoFZXJyb3IYBiABKAkSDwoHaW5pdGlhbBgHIAEoCBIrCg1maWVsZF9lZGl0aW5nGAggASgLMhQucXVpeG9zLkZpZWxkRWRpdGluZyJbChNHZXRXb3Jrc3BhY2VSZXF1ZXN0EiMKG2luY2x1ZGVfaW50ZXJmYWNlX2NvbnRyYWN0cxgBIAEoCBIfChdpbmNsdWRlX3F1ZXJ5X2NvbnRyYWN0cxgCIAEoCCK7AwoUR2V0V29ya3NwYWNlUmVzcG9uc2USFAoMd29ya3NwYWNlX2lkGAEgASgJEh0KFXdvcmtzcGFjZV9yZXZpc2lvbl9pZBgCIAEoCRIaChJzb3VyY2Vfcm9vdF9jb21taXQYAyABKAkSKgoiZW1wdHlfaW5wdXRfY29uc3RydWN0aWJsZV9hdG9tX2lkcxgEIAMoCRI/ChFjYXBhYmlsaXR5X2lucHV0cxgFIAMoCzIkLnF1aXhvcy5vcmNoLkNhcGFiaWxpdHlJbnB1dENvbnRyYWN0EkEKEmNvbnN0cnVjdG9yX2lucHV0cxgGIAMoCzIlLnF1aXhvcy5vcmNoLkNvbnN0cnVjdG9ySW5wdXRDb250cmFjdBIXCg9pbnRlcmZhY2VzX2pzb24YByABKAkSOAoSY2xhc3NfY2FwYWJpbGl0aWVzGAggAygLMhwucXVpeG9zLm9yY2guQ2xhc3NDYXBhYmlsaXR5Ei4KB3F1ZXJpZXMYCSADKAsyHS5xdWl4b3Mub3JjaC5RdWVyeURlc2NyaXB0aW9uEh8KF2FjdGl2ZV9xdWVyeV9leGVjdXRpb25zGAogASgNIvMBChBRdWVyeURlc2NyaXB0aW9uEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSGwoTcGFja2FnZV9yZXZpc2lvbl9pZBgDIAEoCRIQCghkb2N1bWVudBgEIAEoCRIOCgZzY2hlbWEYBSABKAkSFAoMc291cmNlX2ZpbGVzGAYgAygJEhQKDGVmZmVjdHNfanNvbhgHIAEoCRIkCgRwbGFuGAggASgLMhYuY2FtaW5vLkluc3RhbGxlZFF1ZXJ5EjQKD3dvcmtzcGFjZV9zY29wZRgJIAEoCzIbLnF1aXhvcy5Xb3Jrc3BhY2VRdWVyeVNjb3BlIrkBCg9DbGFzc0NhcGFiaWxpdHkSFgoOY29uZm9ybWFuY2VfaWQYASABKAkSDwoHYXRvbV9pZBgCIAEoCRIdChVpbnRlcmZhY2VfcmV2aXNpb25faWQYAyABKAkSFQoNZGVmaW5pdGlvbl9pZBgEIAEoCRIUCgxvcGVyYXRpb25faWQYBSABKAkSFwoPaW5wdXRfdHlwZV9qc29uGAYgASgJEhgKEG91dHB1dF90eXBlX2pzb24YByABKAkiYQoXQ2FwYWJpbGl0eUlucHV0Q29udHJhY3QSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAEgASgJEhQKDG9wZXJhdGlvbl9pZBgCIAEoCRIRCgl0eXBlX2pzb24YAyABKAkiPgoYQ29uc3RydWN0b3JJbnB1dENvbnRyYWN0Eg8KB2F0b21faWQYASABKAkSEQoJdHlwZV9qc29uGAIgASgJIhgKFkxpc3RBY3RpdmF0aW9uc1JlcXVlc3QiHwodTGlzdFBhY2thZ2VEZXNjcmlwdG9yc1JlcXVlc3QiUAoeTGlzdFBhY2thZ2VEZXNjcmlwdG9yc1Jlc3BvbnNlEi4KC2Rlc2NyaXB0b3JzGAEgAygLMhkucXVpeG9zLlBhY2thZ2VEZXNjcmlwdG9yIhwKGkxpc3RQYWNrYWdlUnVudGltZXNSZXF1ZXN0IlIKG0xpc3RQYWNrYWdlUnVudGltZXNSZXNwb25zZRIzCghydW50aW1lcxgBIAMoCzIhLnF1aXhvcy5vcmNoLlBhY2thZ2VSdW50aW1lU3RhdHVzIkcKF0xpc3RBY3RpdmF0aW9uc1Jlc3BvbnNlEiwKC2FjdGl2YXRpb25zGAEgAygLMhcucXVpeG9zLm9yY2guQWN0aXZhdGlvbiI/ChZDbG9zZUFjdGl2YXRpb25SZXF1ZXN0EhUKDWFjdGl2YXRpb25faWQYASABKAkSDgoGcmVhc29uGAIgASgJIkYKF0Nsb3NlQWN0aXZhdGlvblJlc3BvbnNlEisKCmFjdGl2YXRpb24YASABKAsyFy5xdWl4b3Mub3JjaC5BY3RpdmF0aW9uIusBCgpBY3RpdmF0aW9uEhUKDWFjdGl2YXRpb25faWQYASABKAkSKAoGZXhwb3J0GAIgASgLMhgucXVpeG9zLlBhY2thZ2VFeHBvcnRSZWYSEQoJb2JqZWN0X2lkGAMgASgJEg0KBXN0YXRlGAQgASgJEg4KBmRlbWFuZBgFIAEoDRIRCglvcGVuZWRfYXQYBiABKAkSFAoMbGFzdF91c2VkX2F0GAcgASgJEhgKEGlkbGVfZGVhZGxpbmVfYXQYCCABKAkSEQoJY2xvc2VkX2F0GAkgASgJEhQKDGNsb3NlX3JlYXNvbhgKIAEoCSKzAgoUUGFja2FnZVJ1bnRpbWVTdGF0dXMSEwoLcnVudGltZV9rZXkYASABKAkSGwoTcGFja2FnZV9yZXZpc2lvbl9pZBgCIAEoCRIZChFzb3VyY2VfcmVwb3NpdG9yeRgDIAEoCRIVCg1zb3VyY2VfY29tbWl0GAQgASgJEhQKDGJ1aWxkX3RhcmdldBgFIAEoCRITCgtzZXJ2ZXJfcGF0aBgGIAEoCRILCgNwaWQYByABKA0SDQoFc3RhdGUYCCABKAkSEgoKc3RhcnRlZF9hdBgJIAEoCRIZChFsYXN0X2hhbmRzaGFrZV9hdBgKIAEoCRIgChhydW50aW1lX3Byb3RvY29sX3ZlcnNpb24YCyABKAkSHwoXYWR2ZXJ0aXNlZF9leHBvcnRfY291bnQYDCABKA0yywoKE09yY2hlc3RyYXRvclJ1bnRpbWUSOwoMRXhlY3V0ZVF1ZXJ5EhQuY2FtaW5vLlF1ZXJ5UmVxdWVzdBoVLmNhbWluby5RdWVyeVJlc3BvbnNlEj0KCldhdGNoUXVlcnkSFC5jYW1pbm8uUXVlcnlSZXF1ZXN0GhcucXVpeG9zLm9yY2guUXVlcnlFdmVudDABEk0KClRyeUNvbmZvcm0SHi5xdWl4b3Mub3JjaC5UcnlDb25mb3JtUmVxdWVzdBofLnF1aXhvcy5vcmNoLlRyeUNvbmZvcm1SZXNwb25zZRJfChBJbnZva2VDYXBhYmlsaXR5EiQucXVpeG9zLm9yY2guSW52b2tlQ2FwYWJpbGl0eVJlcXVlc3QaJS5xdWl4b3Mub3JjaC5JbnZva2VDYXBhYmlsaXR5UmVzcG9uc2USZQoTRWRpdENhcGFiaWxpdHlGaWVsZBInLnF1aXhvcy5vcmNoLkVkaXRDYXBhYmlsaXR5RmllbGRSZXF1ZXN0GiUucXVpeG9zLm9yY2guSW52b2tlQ2FwYWJpbGl0eVJlc3BvbnNlEmkKFUludm9rZUNsYXNzQ2FwYWJpbGl0eRIpLnF1aXhvcy5vcmNoLkludm9rZUNsYXNzQ2FwYWJpbGl0eVJlcXVlc3QaJS5xdWl4b3Mub3JjaC5JbnZva2VDYXBhYmlsaXR5UmVzcG9uc2USWwoPV2F0Y2hDYXBhYmlsaXR5EiMucXVpeG9zLm9yY2guV2F0Y2hDYXBhYmlsaXR5UmVxdWVzdBohLnF1aXhvcy5vcmNoLldhdGNoQ2FwYWJpbGl0eUV2ZW50MAESXAoPQ29uc3RydWN0T2JqZWN0EiMucXVpeG9zLm9yY2guQ29uc3RydWN0T2JqZWN0UmVxdWVzdBokLnF1aXhvcy5vcmNoLkNvbnN0cnVjdE9iamVjdFJlc3BvbnNlEowBCh9SZXNvbHZlT3JDb25zdHJ1Y3RSZWxhdGVkT2JqZWN0EjMucXVpeG9zLm9yY2guUmVzb2x2ZU9yQ29uc3RydWN0UmVsYXRlZE9iamVjdFJlcXVlc3QaNC5xdWl4b3Mub3JjaC5SZXNvbHZlT3JDb25zdHJ1Y3RSZWxhdGVkT2JqZWN0UmVzcG9uc2USUwoMR2V0V29ya3NwYWNlEiAucXVpeG9zLm9yY2guR2V0V29ya3NwYWNlUmVxdWVzdBohLnF1aXhvcy5vcmNoLkdldFdvcmtzcGFjZVJlc3BvbnNlEnEKFkxpc3RQYWNrYWdlRGVzY3JpcHRvcnMSKi5xdWl4b3Mub3JjaC5MaXN0UGFja2FnZURlc2NyaXB0b3JzUmVxdWVzdBorLnF1aXhvcy5vcmNoLkxpc3RQYWNrYWdlRGVzY3JpcHRvcnNSZXNwb25zZRJoChNMaXN0UGFja2FnZVJ1bnRpbWVzEicucXVpeG9zLm9yY2guTGlzdFBhY2thZ2VSdW50aW1lc1JlcXVlc3QaKC5xdWl4b3Mub3JjaC5MaXN0UGFja2FnZVJ1bnRpbWVzUmVzcG9uc2USXAoPTGlzdEFjdGl2YXRpb25zEiMucXVpeG9zLm9yY2guTGlzdEFjdGl2YXRpb25zUmVxdWVzdBokLnF1aXhvcy5vcmNoLkxpc3RBY3RpdmF0aW9uc1Jlc3BvbnNlElwKD0Nsb3NlQWN0aXZhdGlvbhIjLnF1aXhvcy5vcmNoLkNsb3NlQWN0aXZhdGlvblJlcXVlc3QaJC5xdWl4b3Mub3JjaC5DbG9zZUFjdGl2YXRpb25SZXNwb25zZWIGcHJvdG8z", [file_camino_api, file_camino_schema, file_quixos_package, file_quixos_refs, file_quixos_runtime]); + fileDesc("ChFxdWl4b3Mvb3JjaC5wcm90bxILcXVpeG9zLm9yY2gifAoSRGVmaW5pdGlvblNlbGVjdG9yEgwKBGtpbmQYASABKAkSCwoDaWRzGAIgAygJEg8KB2F0b21faWQYAyABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAQgASgJEhsKE3BhY2thZ2VfcmV2aXNpb25faWQYBSABKAkimQEKEkRlZmluaXRpb25JZGVudGl0eRIUCgx3b3Jrc3BhY2VfaWQYASABKAkSHQoVd29ya3NwYWNlX3JldmlzaW9uX2lkGAIgASgJEhoKEnNvdXJjZV9yb290X2NvbW1pdBgDIAEoCRIXCg93b3Jrc3BhY2VfZXBvY2gYBCABKAkSGQoRZGVmaW5pdGlvbl9kaWdlc3QYBSABKAkipQEKEURlZmluaXRpb25SZXF1ZXN0EjEKCHNlbGVjdG9yGAEgASgLMh8ucXVpeG9zLm9yY2guRGVmaW5pdGlvblNlbGVjdG9yEg0KBWZpcnN0GAIgASgNEg0KBWFmdGVyGAMgASgJEhAKCHNuYXBzaG90GAQgASgJEhQKDHdvcmtzcGFjZV9pZBgFIAEoCRIXCg93b3Jrc3BhY2VfZXBvY2gYBiABKAkiVgoNUmVmbGVjdGVkQXRvbRIKCgJpZBgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkSIwobY29uc3RydWN0b3JfaW5wdXRfdHlwZV9qc29uGAMgASgJImMKElJlZmxlY3RlZEludGVyZmFjZRIKCgJpZBgBIAEoCRIUCgxpbnRlcmZhY2VfaWQYAiABKAkSFAoMZGlzcGxheV9uYW1lGAMgASgJEhUKDWNvbnRyYWN0X2pzb24YBCABKAkizAEKFFJlZmxlY3RlZENvbmZvcm1hbmNlEgoKAmlkGAEgASgJEg8KB2F0b21faWQYAiABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAMgASgJEhUKDWRlZmluaXRpb25faWQYBCABKAkSFQoNb3BlcmF0aW9uX2lkcxgFIAMoCRI4ChJjbGFzc19jYXBhYmlsaXRpZXMYBiADKAsyHC5xdWl4b3Mub3JjaC5DbGFzc0NhcGFiaWxpdHkSEAoIaW5zdGFuY2UYByABKAgivgIKDlJlZmxlY3RlZFF1ZXJ5EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSGwoTcGFja2FnZV9yZXZpc2lvbl9pZBgDIAEoCRIZChFkZWZpbml0aW9uX2RpZ2VzdBgEIAEoCRIWCg5iaW5kaW5nX2RpZ2VzdBgFIAEoCRIRCglyb290X2tpbmQYBiABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAcgASgJEhsKE3ZhcmlhYmxlc190eXBlX2pzb24YCCABKAkSGAoQb3V0cHV0X3R5cGVfanNvbhgJIAEoCRIUCgxlZmZlY3RzX2pzb24YCiABKAkSDQoFd2F0Y2gYCyABKAgSNAoPd29ya3NwYWNlX3Njb3BlGAwgASgLMhsucXVpeG9zLldvcmtzcGFjZVF1ZXJ5U2NvcGUiMwoOUmVmbGVjdGVkSW5kZXgSCgoCaWQYASABKAkSFQoNY29udHJhY3RfanNvbhgCIAEoCSKYAgoQRGVmaW5pdGlvblJlY29yZBIqCgRhdG9tGAEgASgLMhoucXVpeG9zLm9yY2guUmVmbGVjdGVkQXRvbUgAEjQKCWludGVyZmFjZRgCIAEoCzIfLnF1aXhvcy5vcmNoLlJlZmxlY3RlZEludGVyZmFjZUgAEjgKC2NvbmZvcm1hbmNlGAMgASgLMiEucXVpeG9zLm9yY2guUmVmbGVjdGVkQ29uZm9ybWFuY2VIABIsCgVxdWVyeRgEIAEoCzIbLnF1aXhvcy5vcmNoLlJlZmxlY3RlZFF1ZXJ5SAASLAoFaW5kZXgYBSABKAsyGy5xdWl4b3Mub3JjaC5SZWZsZWN0ZWRJbmRleEgAQgwKCmRlZmluaXRpb24iiAEKDkRlZmluaXRpb25QYWdlEjEKCGlkZW50aXR5GAEgASgLMh8ucXVpeG9zLm9yY2guRGVmaW5pdGlvbklkZW50aXR5Ei4KB3JlY29yZHMYAiADKAsyHS5xdWl4b3Mub3JjaC5EZWZpbml0aW9uUmVjb3JkEhMKC25leHRfY3Vyc29yGAMgASgJIrcBCgpRdWVyeUV2ZW50Eg4KBnJ1bl9pZBgBIAEoCRIQCghzZXF1ZW5jZRgCIAEoBBIMCgRraW5kGAMgASgJEicKCHNuYXBzaG90GAQgASgLMhUuY2FtaW5vLlF1ZXJ5UmVzcG9uc2USIwoEcGF0aBgFIAMoCzIVLmNhbWluby5RdWVyeVBhdGhQYXJ0EhwKBXZhbHVlGAYgASgLMg0uY2FtaW5vLlZhbHVlEg0KBWVycm9yGAcgASgJIkUKEVRyeUNvbmZvcm1SZXF1ZXN0EhEKCW9iamVjdF9pZBgBIAEoCRIdChVpbnRlcmZhY2VfcmV2aXNpb25faWQYAiABKAkiRQoSVHJ5Q29uZm9ybVJlc3BvbnNlEi8KC2NvbmZvcm1hbmNlGAEgASgLMhoucXVpeG9zLkNvbmZvcm1hbmNlV2l0bmVzcyKlAQoWQ29uc3RydWN0T2JqZWN0UmVxdWVzdBIPCgdhdG9tX2lkGAEgASgJEj0KBWlucHV0GAIgAygLMi4ucXVpeG9zLm9yY2guQ29uc3RydWN0T2JqZWN0UmVxdWVzdC5JbnB1dEVudHJ5GjsKCklucHV0RW50cnkSCwoDa2V5GAEgASgJEhwKBXZhbHVlGAIgASgLMg0uY2FtaW5vLlZhbHVlOgI4ASI/ChdDb25zdHJ1Y3RPYmplY3RSZXNwb25zZRIkCgZvYmplY3QYASABKAsyFC5jYW1pbm8uQ2FtaW5vT2JqZWN0Im0KJlJlc29sdmVPckNvbnN0cnVjdFJlbGF0ZWRPYmplY3RSZXF1ZXN0EhEKCW9iamVjdF9pZBgBIAEoCRIdChVpbnRlcmZhY2VfcmV2aXNpb25faWQYAiABKAkSEQoJbWVtYmVyX2lkGAMgASgJImQKJ1Jlc29sdmVPckNvbnN0cnVjdFJlbGF0ZWRPYmplY3RSZXNwb25zZRIkCgZvYmplY3QYASABKAsyFC5jYW1pbm8uQ2FtaW5vT2JqZWN0EhMKC2NvbnN0cnVjdGVkGAIgASgIIvABChdJbnZva2VDYXBhYmlsaXR5UmVxdWVzdBIpCgpjYXBhYmlsaXR5GAEgASgLMhUucXVpeG9zLkNhcGFiaWxpdHlSZWYSEQoJb2JqZWN0X2lkGAIgASgJEj4KBWlucHV0GAMgAygLMi8ucXVpeG9zLm9yY2guSW52b2tlQ2FwYWJpbGl0eVJlcXVlc3QuSW5wdXRFbnRyeRIaChJjbGllbnRfbXV0YXRpb25faWQYBCABKAkaOwoKSW5wdXRFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5jYW1pbm8uVmFsdWU6AjgBIs4BChxJbnZva2VDbGFzc0NhcGFiaWxpdHlSZXF1ZXN0EhYKDmNvbmZvcm1hbmNlX2lkGAEgASgJEhQKDG9wZXJhdGlvbl9pZBgCIAEoCRJDCgVpbnB1dBgDIAMoCzI0LnF1aXhvcy5vcmNoLkludm9rZUNsYXNzQ2FwYWJpbGl0eVJlcXVlc3QuSW5wdXRFbnRyeRo7CgpJbnB1dEVudHJ5EgsKA2tleRgBIAEoCRIcCgV2YWx1ZRgCIAEoCzINLmNhbWluby5WYWx1ZToCOAEi/gEKGEludm9rZUNhcGFiaWxpdHlSZXNwb25zZRIVCg1pbnZvY2F0aW9uX2lkGAEgASgJEisKCmFjdGl2YXRpb24YAiABKAsyFy5xdWl4b3Mub3JjaC5BY3RpdmF0aW9uEgoKAm9rGAMgASgIEh0KBnJlc3VsdBgEIAEoCzINLmNhbWluby5WYWx1ZRINCgVlcnJvchgFIAEoCRI3CgxkZXBlbmRlbmNpZXMYBiADKAsyIS5xdWl4b3MucnVudGltZS5EZXJpdmVkRGVwZW5kZW5jeRIrCg1maWVsZF9lZGl0aW5nGAcgASgLMhQucXVpeG9zLkZpZWxkRWRpdGluZyL+AQoaRWRpdENhcGFiaWxpdHlGaWVsZFJlcXVlc3QSKQoKY2FwYWJpbGl0eRgBIAEoCzIVLnF1aXhvcy5DYXBhYmlsaXR5UmVmEhEKCW9iamVjdF9pZBgCIAEoCRIbChNzZXR0ZXJfb3BlcmF0aW9uX2lkGAMgASgJEhYKDmJpbmRpbmdfZGlnZXN0GAQgASgJEiMKBnVwZGF0ZRgFIAEoCzIRLmNhbWluby5DcmR0VmFsdWVIABIkCgtyZXBsYWNlbWVudBgHIAEoCzINLmNhbWluby5WYWx1ZUgAEhoKEmNsaWVudF9tdXRhdGlvbl9pZBgGIAEoCUIGCgRlZGl0ItIBChZXYXRjaENhcGFiaWxpdHlSZXF1ZXN0EikKCmNhcGFiaWxpdHkYASABKAsyFS5xdWl4b3MuQ2FwYWJpbGl0eVJlZhIRCglvYmplY3RfaWQYAiABKAkSPQoFaW5wdXQYAyADKAsyLi5xdWl4b3Mub3JjaC5XYXRjaENhcGFiaWxpdHlSZXF1ZXN0LklucHV0RW50cnkaOwoKSW5wdXRFbnRyeRILCgNrZXkYASABKAkSHAoFdmFsdWUYAiABKAsyDS5jYW1pbm8uVmFsdWU6AjgBIpACChRXYXRjaENhcGFiaWxpdHlFdmVudBIVCg1pbnZvY2F0aW9uX2lkGAEgASgJEisKCmFjdGl2YXRpb24YAiABKAsyFy5xdWl4b3Mub3JjaC5BY3RpdmF0aW9uEhAKCHdhdGNoX2lkGAMgASgJEhwKBXZhbHVlGAQgASgLMg0uY2FtaW5vLlZhbHVlEjcKDGRlcGVuZGVuY2llcxgFIAMoCzIhLnF1aXhvcy5ydW50aW1lLkRlcml2ZWREZXBlbmRlbmN5Eg0KBWVycm9yGAYgASgJEg8KB2luaXRpYWwYByABKAgSKwoNZmllbGRfZWRpdGluZxgIIAEoCzIULnF1aXhvcy5GaWVsZEVkaXRpbmciWwoTR2V0V29ya3NwYWNlUmVxdWVzdBIjChtpbmNsdWRlX2ludGVyZmFjZV9jb250cmFjdHMYASABKAgSHwoXaW5jbHVkZV9xdWVyeV9jb250cmFjdHMYAiABKAgiuwMKFEdldFdvcmtzcGFjZVJlc3BvbnNlEhQKDHdvcmtzcGFjZV9pZBgBIAEoCRIdChV3b3Jrc3BhY2VfcmV2aXNpb25faWQYAiABKAkSGgoSc291cmNlX3Jvb3RfY29tbWl0GAMgASgJEioKImVtcHR5X2lucHV0X2NvbnN0cnVjdGlibGVfYXRvbV9pZHMYBCADKAkSPwoRY2FwYWJpbGl0eV9pbnB1dHMYBSADKAsyJC5xdWl4b3Mub3JjaC5DYXBhYmlsaXR5SW5wdXRDb250cmFjdBJBChJjb25zdHJ1Y3Rvcl9pbnB1dHMYBiADKAsyJS5xdWl4b3Mub3JjaC5Db25zdHJ1Y3RvcklucHV0Q29udHJhY3QSFwoPaW50ZXJmYWNlc19qc29uGAcgASgJEjgKEmNsYXNzX2NhcGFiaWxpdGllcxgIIAMoCzIcLnF1aXhvcy5vcmNoLkNsYXNzQ2FwYWJpbGl0eRIuCgdxdWVyaWVzGAkgAygLMh0ucXVpeG9zLm9yY2guUXVlcnlEZXNjcmlwdGlvbhIfChdhY3RpdmVfcXVlcnlfZXhlY3V0aW9ucxgKIAEoDSLzAQoQUXVlcnlEZXNjcmlwdGlvbhIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhsKE3BhY2thZ2VfcmV2aXNpb25faWQYAyABKAkSEAoIZG9jdW1lbnQYBCABKAkSDgoGc2NoZW1hGAUgASgJEhQKDHNvdXJjZV9maWxlcxgGIAMoCRIUCgxlZmZlY3RzX2pzb24YByABKAkSJAoEcGxhbhgIIAEoCzIWLmNhbWluby5JbnN0YWxsZWRRdWVyeRI0Cg93b3Jrc3BhY2Vfc2NvcGUYCSABKAsyGy5xdWl4b3MuV29ya3NwYWNlUXVlcnlTY29wZSK5AQoPQ2xhc3NDYXBhYmlsaXR5EhYKDmNvbmZvcm1hbmNlX2lkGAEgASgJEg8KB2F0b21faWQYAiABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAMgASgJEhUKDWRlZmluaXRpb25faWQYBCABKAkSFAoMb3BlcmF0aW9uX2lkGAUgASgJEhcKD2lucHV0X3R5cGVfanNvbhgGIAEoCRIYChBvdXRwdXRfdHlwZV9qc29uGAcgASgJImEKF0NhcGFiaWxpdHlJbnB1dENvbnRyYWN0Eh0KFWludGVyZmFjZV9yZXZpc2lvbl9pZBgBIAEoCRIUCgxvcGVyYXRpb25faWQYAiABKAkSEQoJdHlwZV9qc29uGAMgASgJIj4KGENvbnN0cnVjdG9ySW5wdXRDb250cmFjdBIPCgdhdG9tX2lkGAEgASgJEhEKCXR5cGVfanNvbhgCIAEoCSIYChZMaXN0QWN0aXZhdGlvbnNSZXF1ZXN0Ih8KHUxpc3RQYWNrYWdlRGVzY3JpcHRvcnNSZXF1ZXN0IlAKHkxpc3RQYWNrYWdlRGVzY3JpcHRvcnNSZXNwb25zZRIuCgtkZXNjcmlwdG9ycxgBIAMoCzIZLnF1aXhvcy5QYWNrYWdlRGVzY3JpcHRvciIcChpMaXN0UGFja2FnZVJ1bnRpbWVzUmVxdWVzdCJSChtMaXN0UGFja2FnZVJ1bnRpbWVzUmVzcG9uc2USMwoIcnVudGltZXMYASADKAsyIS5xdWl4b3Mub3JjaC5QYWNrYWdlUnVudGltZVN0YXR1cyJHChdMaXN0QWN0aXZhdGlvbnNSZXNwb25zZRIsCgthY3RpdmF0aW9ucxgBIAMoCzIXLnF1aXhvcy5vcmNoLkFjdGl2YXRpb24iPwoWQ2xvc2VBY3RpdmF0aW9uUmVxdWVzdBIVCg1hY3RpdmF0aW9uX2lkGAEgASgJEg4KBnJlYXNvbhgCIAEoCSJGChdDbG9zZUFjdGl2YXRpb25SZXNwb25zZRIrCgphY3RpdmF0aW9uGAEgASgLMhcucXVpeG9zLm9yY2guQWN0aXZhdGlvbiLrAQoKQWN0aXZhdGlvbhIVCg1hY3RpdmF0aW9uX2lkGAEgASgJEigKBmV4cG9ydBgCIAEoCzIYLnF1aXhvcy5QYWNrYWdlRXhwb3J0UmVmEhEKCW9iamVjdF9pZBgDIAEoCRINCgVzdGF0ZRgEIAEoCRIOCgZkZW1hbmQYBSABKA0SEQoJb3BlbmVkX2F0GAYgASgJEhQKDGxhc3RfdXNlZF9hdBgHIAEoCRIYChBpZGxlX2RlYWRsaW5lX2F0GAggASgJEhEKCWNsb3NlZF9hdBgJIAEoCRIUCgxjbG9zZV9yZWFzb24YCiABKAkiswIKFFBhY2thZ2VSdW50aW1lU3RhdHVzEhMKC3J1bnRpbWVfa2V5GAEgASgJEhsKE3BhY2thZ2VfcmV2aXNpb25faWQYAiABKAkSGQoRc291cmNlX3JlcG9zaXRvcnkYAyABKAkSFQoNc291cmNlX2NvbW1pdBgEIAEoCRIUCgxidWlsZF90YXJnZXQYBSABKAkSEwoLc2VydmVyX3BhdGgYBiABKAkSCwoDcGlkGAcgASgNEg0KBXN0YXRlGAggASgJEhIKCnN0YXJ0ZWRfYXQYCSABKAkSGQoRbGFzdF9oYW5kc2hha2VfYXQYCiABKAkSIAoYcnVudGltZV9wcm90b2NvbF92ZXJzaW9uGAsgASgJEh8KF2FkdmVydGlzZWRfZXhwb3J0X2NvdW50GAwgASgNMu4LChNPcmNoZXN0cmF0b3JSdW50aW1lEk4KD1JlYWREZWZpbml0aW9ucxIeLnF1aXhvcy5vcmNoLkRlZmluaXRpb25SZXF1ZXN0GhsucXVpeG9zLm9yY2guRGVmaW5pdGlvblBhZ2USUQoQV2F0Y2hEZWZpbml0aW9ucxIeLnF1aXhvcy5vcmNoLkRlZmluaXRpb25SZXF1ZXN0GhsucXVpeG9zLm9yY2guRGVmaW5pdGlvblBhZ2UwARI7CgxFeGVjdXRlUXVlcnkSFC5jYW1pbm8uUXVlcnlSZXF1ZXN0GhUuY2FtaW5vLlF1ZXJ5UmVzcG9uc2USPQoKV2F0Y2hRdWVyeRIULmNhbWluby5RdWVyeVJlcXVlc3QaFy5xdWl4b3Mub3JjaC5RdWVyeUV2ZW50MAESTQoKVHJ5Q29uZm9ybRIeLnF1aXhvcy5vcmNoLlRyeUNvbmZvcm1SZXF1ZXN0Gh8ucXVpeG9zLm9yY2guVHJ5Q29uZm9ybVJlc3BvbnNlEl8KEEludm9rZUNhcGFiaWxpdHkSJC5xdWl4b3Mub3JjaC5JbnZva2VDYXBhYmlsaXR5UmVxdWVzdBolLnF1aXhvcy5vcmNoLkludm9rZUNhcGFiaWxpdHlSZXNwb25zZRJlChNFZGl0Q2FwYWJpbGl0eUZpZWxkEicucXVpeG9zLm9yY2guRWRpdENhcGFiaWxpdHlGaWVsZFJlcXVlc3QaJS5xdWl4b3Mub3JjaC5JbnZva2VDYXBhYmlsaXR5UmVzcG9uc2USaQoVSW52b2tlQ2xhc3NDYXBhYmlsaXR5EikucXVpeG9zLm9yY2guSW52b2tlQ2xhc3NDYXBhYmlsaXR5UmVxdWVzdBolLnF1aXhvcy5vcmNoLkludm9rZUNhcGFiaWxpdHlSZXNwb25zZRJbCg9XYXRjaENhcGFiaWxpdHkSIy5xdWl4b3Mub3JjaC5XYXRjaENhcGFiaWxpdHlSZXF1ZXN0GiEucXVpeG9zLm9yY2guV2F0Y2hDYXBhYmlsaXR5RXZlbnQwARJcCg9Db25zdHJ1Y3RPYmplY3QSIy5xdWl4b3Mub3JjaC5Db25zdHJ1Y3RPYmplY3RSZXF1ZXN0GiQucXVpeG9zLm9yY2guQ29uc3RydWN0T2JqZWN0UmVzcG9uc2USjAEKH1Jlc29sdmVPckNvbnN0cnVjdFJlbGF0ZWRPYmplY3QSMy5xdWl4b3Mub3JjaC5SZXNvbHZlT3JDb25zdHJ1Y3RSZWxhdGVkT2JqZWN0UmVxdWVzdBo0LnF1aXhvcy5vcmNoLlJlc29sdmVPckNvbnN0cnVjdFJlbGF0ZWRPYmplY3RSZXNwb25zZRJTCgxHZXRXb3Jrc3BhY2USIC5xdWl4b3Mub3JjaC5HZXRXb3Jrc3BhY2VSZXF1ZXN0GiEucXVpeG9zLm9yY2guR2V0V29ya3NwYWNlUmVzcG9uc2UScQoWTGlzdFBhY2thZ2VEZXNjcmlwdG9ycxIqLnF1aXhvcy5vcmNoLkxpc3RQYWNrYWdlRGVzY3JpcHRvcnNSZXF1ZXN0GisucXVpeG9zLm9yY2guTGlzdFBhY2thZ2VEZXNjcmlwdG9yc1Jlc3BvbnNlEmgKE0xpc3RQYWNrYWdlUnVudGltZXMSJy5xdWl4b3Mub3JjaC5MaXN0UGFja2FnZVJ1bnRpbWVzUmVxdWVzdBooLnF1aXhvcy5vcmNoLkxpc3RQYWNrYWdlUnVudGltZXNSZXNwb25zZRJcCg9MaXN0QWN0aXZhdGlvbnMSIy5xdWl4b3Mub3JjaC5MaXN0QWN0aXZhdGlvbnNSZXF1ZXN0GiQucXVpeG9zLm9yY2guTGlzdEFjdGl2YXRpb25zUmVzcG9uc2USXAoPQ2xvc2VBY3RpdmF0aW9uEiMucXVpeG9zLm9yY2guQ2xvc2VBY3RpdmF0aW9uUmVxdWVzdBokLnF1aXhvcy5vcmNoLkNsb3NlQWN0aXZhdGlvblJlc3BvbnNlYgZwcm90bzM", [file_camino_api, file_camino_schema, file_quixos_package, file_quixos_refs, file_quixos_runtime]); + +/** + * Activated definitions, not runtime metrics or object data. Nested type JSON + * uses the compiler's canonical ValueType/InterfaceRevision public contracts. + * + * @generated from message quixos.orch.DefinitionSelector + */ +export type DefinitionSelector = Message<"quixos.orch.DefinitionSelector"> & { + /** + * active | atoms | interfaces | conformances | queries | indexes + * + * @generated from field: string kind = 1; + */ + kind: string; + + /** + * @generated from field: repeated string ids = 2; + */ + ids: string[]; + + /** + * @generated from field: string atom_id = 3; + */ + atomId: string; + + /** + * @generated from field: string interface_revision_id = 4; + */ + interfaceRevisionId: string; + + /** + * @generated from field: string package_revision_id = 5; + */ + packageRevisionId: string; +}; + +/** + * Describes the message quixos.orch.DefinitionSelector. + * Use `create(DefinitionSelectorSchema)` to create a new message. + */ +export const DefinitionSelectorSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_quixos_orch, 0); + +/** + * @generated from message quixos.orch.DefinitionIdentity + */ +export type DefinitionIdentity = Message<"quixos.orch.DefinitionIdentity"> & { + /** + * @generated from field: string workspace_id = 1; + */ + workspaceId: string; + + /** + * @generated from field: string workspace_revision_id = 2; + */ + workspaceRevisionId: string; + + /** + * @generated from field: string source_root_commit = 3; + */ + sourceRootCommit: string; + + /** + * @generated from field: string workspace_epoch = 4; + */ + workspaceEpoch: string; + + /** + * @generated from field: string definition_digest = 5; + */ + definitionDigest: string; +}; + +/** + * Describes the message quixos.orch.DefinitionIdentity. + * Use `create(DefinitionIdentitySchema)` to create a new message. + */ +export const DefinitionIdentitySchema: GenMessage = /*@__PURE__*/ + messageDesc(file_quixos_orch, 1); + +/** + * @generated from message quixos.orch.DefinitionRequest + */ +export type DefinitionRequest = Message<"quixos.orch.DefinitionRequest"> & { + /** + * @generated from field: quixos.orch.DefinitionSelector selector = 1; + */ + selector?: DefinitionSelector | undefined; + + /** + * 1..100; 0 uses 50 + * + * @generated from field: uint32 first = 2; + */ + first: number; + + /** + * @generated from field: string after = 3; + */ + after: string; + + /** + * issued definition_digest; current serving snapshot only + * + * @generated from field: string snapshot = 4; + */ + snapshot: string; + + /** + * required for injected package authority + * + * @generated from field: string workspace_id = 5; + */ + workspaceId: string; + + /** + * required for invocation-bound package calls + * + * @generated from field: string workspace_epoch = 6; + */ + workspaceEpoch: string; +}; + +/** + * Describes the message quixos.orch.DefinitionRequest. + * Use `create(DefinitionRequestSchema)` to create a new message. + */ +export const DefinitionRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_quixos_orch, 2); + +/** + * @generated from message quixos.orch.ReflectedAtom + */ +export type ReflectedAtom = Message<"quixos.orch.ReflectedAtom"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * @generated from field: string display_name = 2; + */ + displayName: string; + + /** + * @generated from field: string constructor_input_type_json = 3; + */ + constructorInputTypeJson: string; +}; + +/** + * Describes the message quixos.orch.ReflectedAtom. + * Use `create(ReflectedAtomSchema)` to create a new message. + */ +export const ReflectedAtomSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_quixos_orch, 3); + +/** + * @generated from message quixos.orch.ReflectedInterface + */ +export type ReflectedInterface = Message<"quixos.orch.ReflectedInterface"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * @generated from field: string interface_id = 2; + */ + interfaceId: string; + + /** + * @generated from field: string display_name = 3; + */ + displayName: string; + + /** + * canonical interface contract, excluding source location + * + * @generated from field: string contract_json = 4; + */ + contractJson: string; +}; + +/** + * Describes the message quixos.orch.ReflectedInterface. + * Use `create(ReflectedInterfaceSchema)` to create a new message. + */ +export const ReflectedInterfaceSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_quixos_orch, 4); + +/** + * @generated from message quixos.orch.ReflectedConformance + */ +export type ReflectedConformance = Message<"quixos.orch.ReflectedConformance"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * @generated from field: string atom_id = 2; + */ + atomId: string; + + /** + * @generated from field: string interface_revision_id = 3; + */ + interfaceRevisionId: string; + + /** + * @generated from field: string definition_id = 4; + */ + definitionId: string; + + /** + * @generated from field: repeated string operation_ids = 5; + */ + operationIds: string[]; + + /** + * @generated from field: repeated quixos.orch.ClassCapability class_capabilities = 6; + */ + classCapabilities: ClassCapability[]; + + /** + * @generated from field: bool instance = 7; + */ + instance: boolean; +}; + +/** + * Describes the message quixos.orch.ReflectedConformance. + * Use `create(ReflectedConformanceSchema)` to create a new message. + */ +export const ReflectedConformanceSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_quixos_orch, 5); + +/** + * @generated from message quixos.orch.ReflectedQuery + */ +export type ReflectedQuery = Message<"quixos.orch.ReflectedQuery"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * @generated from field: string name = 2; + */ + name: string; + + /** + * @generated from field: string package_revision_id = 3; + */ + packageRevisionId: string; + + /** + * @generated from field: string definition_digest = 4; + */ + definitionDigest: string; + + /** + * @generated from field: string binding_digest = 5; + */ + bindingDigest: string; + + /** + * @generated from field: string root_kind = 6; + */ + rootKind: string; + + /** + * @generated from field: string interface_revision_id = 7; + */ + interfaceRevisionId: string; + + /** + * @generated from field: string variables_type_json = 8; + */ + variablesTypeJson: string; + + /** + * @generated from field: string output_type_json = 9; + */ + outputTypeJson: string; + + /** + * @generated from field: string effects_json = 10; + */ + effectsJson: string; + + /** + * @generated from field: bool watch = 11; + */ + watch: boolean; + + /** + * @generated from field: quixos.WorkspaceQueryScope workspace_scope = 12; + */ + workspaceScope?: WorkspaceQueryScope | undefined; +}; + +/** + * Describes the message quixos.orch.ReflectedQuery. + * Use `create(ReflectedQuerySchema)` to create a new message. + */ +export const ReflectedQuerySchema: GenMessage = /*@__PURE__*/ + messageDesc(file_quixos_orch, 6); + +/** + * @generated from message quixos.orch.ReflectedIndex + */ +export type ReflectedIndex = Message<"quixos.orch.ReflectedIndex"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * @generated from field: string contract_json = 2; + */ + contractJson: string; +}; + +/** + * Describes the message quixos.orch.ReflectedIndex. + * Use `create(ReflectedIndexSchema)` to create a new message. + */ +export const ReflectedIndexSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_quixos_orch, 7); + +/** + * @generated from message quixos.orch.DefinitionRecord + */ +export type DefinitionRecord = Message<"quixos.orch.DefinitionRecord"> & { + /** + * @generated from oneof quixos.orch.DefinitionRecord.definition + */ + definition: { + /** + * @generated from field: quixos.orch.ReflectedAtom atom = 1; + */ + value: ReflectedAtom; + case: "atom"; + } | { + /** + * @generated from field: quixos.orch.ReflectedInterface interface = 2; + */ + value: ReflectedInterface; + case: "interface"; + } | { + /** + * @generated from field: quixos.orch.ReflectedConformance conformance = 3; + */ + value: ReflectedConformance; + case: "conformance"; + } | { + /** + * @generated from field: quixos.orch.ReflectedQuery query = 4; + */ + value: ReflectedQuery; + case: "query"; + } | { + /** + * @generated from field: quixos.orch.ReflectedIndex index = 5; + */ + value: ReflectedIndex; + case: "index"; + } | { case: undefined; value?: undefined }; +}; + +/** + * Describes the message quixos.orch.DefinitionRecord. + * Use `create(DefinitionRecordSchema)` to create a new message. + */ +export const DefinitionRecordSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_quixos_orch, 8); + +/** + * @generated from message quixos.orch.DefinitionPage + */ +export type DefinitionPage = Message<"quixos.orch.DefinitionPage"> & { + /** + * @generated from field: quixos.orch.DefinitionIdentity identity = 1; + */ + identity?: DefinitionIdentity | undefined; + + /** + * @generated from field: repeated quixos.orch.DefinitionRecord records = 2; + */ + records: DefinitionRecord[]; + + /** + * @generated from field: string next_cursor = 3; + */ + nextCursor: string; +}; + +/** + * Describes the message quixos.orch.DefinitionPage. + * Use `create(DefinitionPageSchema)` to create a new message. + */ +export const DefinitionPageSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_quixos_orch, 9); /** * @generated from message quixos.orch.QueryEvent @@ -67,7 +472,7 @@ export type QueryEvent = Message<"quixos.orch.QueryEvent"> & { * Use `create(QueryEventSchema)` to create a new message. */ export const QueryEventSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 0); + messageDesc(file_quixos_orch, 10); /** * Exact closed interface lookup; no policy selection or competing conformances. @@ -91,7 +496,7 @@ export type TryConformRequest = Message<"quixos.orch.TryConformRequest"> & { * Use `create(TryConformRequestSchema)` to create a new message. */ export const TryConformRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 1); + messageDesc(file_quixos_orch, 11); /** * @generated from message quixos.orch.TryConformResponse @@ -110,7 +515,7 @@ export type TryConformResponse = Message<"quixos.orch.TryConformResponse"> & { * Use `create(TryConformResponseSchema)` to create a new message. */ export const TryConformResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 2); + messageDesc(file_quixos_orch, 12); /** * @generated from message quixos.orch.ConstructObjectRequest @@ -132,7 +537,7 @@ export type ConstructObjectRequest = Message<"quixos.orch.ConstructObjectRequest * Use `create(ConstructObjectRequestSchema)` to create a new message. */ export const ConstructObjectRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 3); + messageDesc(file_quixos_orch, 13); /** * @generated from message quixos.orch.ConstructObjectResponse @@ -149,7 +554,7 @@ export type ConstructObjectResponse = Message<"quixos.orch.ConstructObjectRespon * Use `create(ConstructObjectResponseSchema)` to create a new message. */ export const ConstructObjectResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 4); + messageDesc(file_quixos_orch, 14); /** * @generated from message quixos.orch.ResolveOrConstructRelatedObjectRequest @@ -176,7 +581,7 @@ export type ResolveOrConstructRelatedObjectRequest = Message<"quixos.orch.Resolv * Use `create(ResolveOrConstructRelatedObjectRequestSchema)` to create a new message. */ export const ResolveOrConstructRelatedObjectRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 5); + messageDesc(file_quixos_orch, 15); /** * @generated from message quixos.orch.ResolveOrConstructRelatedObjectResponse @@ -198,7 +603,7 @@ export type ResolveOrConstructRelatedObjectResponse = Message<"quixos.orch.Resol * Use `create(ResolveOrConstructRelatedObjectResponseSchema)` to create a new message. */ export const ResolveOrConstructRelatedObjectResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 6); + messageDesc(file_quixos_orch, 16); /** * @generated from message quixos.orch.InvokeCapabilityRequest @@ -233,7 +638,7 @@ export type InvokeCapabilityRequest = Message<"quixos.orch.InvokeCapabilityReque * Use `create(InvokeCapabilityRequestSchema)` to create a new message. */ export const InvokeCapabilityRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 7); + messageDesc(file_quixos_orch, 17); /** * @generated from message quixos.orch.InvokeClassCapabilityRequest @@ -260,7 +665,7 @@ export type InvokeClassCapabilityRequest = Message<"quixos.orch.InvokeClassCapab * Use `create(InvokeClassCapabilityRequestSchema)` to create a new message. */ export const InvokeClassCapabilityRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 8); + messageDesc(file_quixos_orch, 18); /** * @generated from message quixos.orch.InvokeCapabilityResponse @@ -307,7 +712,7 @@ export type InvokeCapabilityResponse = Message<"quixos.orch.InvokeCapabilityResp * Use `create(InvokeCapabilityResponseSchema)` to create a new message. */ export const InvokeCapabilityResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 9); + messageDesc(file_quixos_orch, 19); /** * @generated from message quixos.orch.EditCapabilityFieldRequest @@ -363,7 +768,7 @@ export type EditCapabilityFieldRequest = Message<"quixos.orch.EditCapabilityFiel * Use `create(EditCapabilityFieldRequestSchema)` to create a new message. */ export const EditCapabilityFieldRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 10); + messageDesc(file_quixos_orch, 20); /** * @generated from message quixos.orch.WatchCapabilityRequest @@ -390,7 +795,7 @@ export type WatchCapabilityRequest = Message<"quixos.orch.WatchCapabilityRequest * Use `create(WatchCapabilityRequestSchema)` to create a new message. */ export const WatchCapabilityRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 11); + messageDesc(file_quixos_orch, 21); /** * @generated from message quixos.orch.WatchCapabilityEvent @@ -442,7 +847,7 @@ export type WatchCapabilityEvent = Message<"quixos.orch.WatchCapabilityEvent"> & * Use `create(WatchCapabilityEventSchema)` to create a new message. */ export const WatchCapabilityEventSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 12); + messageDesc(file_quixos_orch, 22); /** * @generated from message quixos.orch.GetWorkspaceRequest @@ -466,7 +871,7 @@ export type GetWorkspaceRequest = Message<"quixos.orch.GetWorkspaceRequest"> & { * Use `create(GetWorkspaceRequestSchema)` to create a new message. */ export const GetWorkspaceRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 13); + messageDesc(file_quixos_orch, 23); /** * @generated from message quixos.orch.GetWorkspaceResponse @@ -533,7 +938,7 @@ export type GetWorkspaceResponse = Message<"quixos.orch.GetWorkspaceResponse"> & * Use `create(GetWorkspaceResponseSchema)` to create a new message. */ export const GetWorkspaceResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 14); + messageDesc(file_quixos_orch, 24); /** * @generated from message quixos.orch.QueryDescription @@ -590,7 +995,7 @@ export type QueryDescription = Message<"quixos.orch.QueryDescription"> & { * Use `create(QueryDescriptionSchema)` to create a new message. */ export const QueryDescriptionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 15); + messageDesc(file_quixos_orch, 25); /** * @generated from message quixos.orch.ClassCapability @@ -637,7 +1042,7 @@ export type ClassCapability = Message<"quixos.orch.ClassCapability"> & { * Use `create(ClassCapabilitySchema)` to create a new message. */ export const ClassCapabilitySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 16); + messageDesc(file_quixos_orch, 26); /** * @generated from message quixos.orch.CapabilityInputContract @@ -664,7 +1069,7 @@ export type CapabilityInputContract = Message<"quixos.orch.CapabilityInputContra * Use `create(CapabilityInputContractSchema)` to create a new message. */ export const CapabilityInputContractSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 17); + messageDesc(file_quixos_orch, 27); /** * @generated from message quixos.orch.ConstructorInputContract @@ -686,7 +1091,7 @@ export type ConstructorInputContract = Message<"quixos.orch.ConstructorInputCont * Use `create(ConstructorInputContractSchema)` to create a new message. */ export const ConstructorInputContractSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 18); + messageDesc(file_quixos_orch, 28); /** * @generated from message quixos.orch.ListActivationsRequest @@ -699,7 +1104,7 @@ export type ListActivationsRequest = Message<"quixos.orch.ListActivationsRequest * Use `create(ListActivationsRequestSchema)` to create a new message. */ export const ListActivationsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 19); + messageDesc(file_quixos_orch, 29); /** * @generated from message quixos.orch.ListPackageDescriptorsRequest @@ -712,7 +1117,7 @@ export type ListPackageDescriptorsRequest = Message<"quixos.orch.ListPackageDesc * Use `create(ListPackageDescriptorsRequestSchema)` to create a new message. */ export const ListPackageDescriptorsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 20); + messageDesc(file_quixos_orch, 30); /** * @generated from message quixos.orch.ListPackageDescriptorsResponse @@ -729,7 +1134,7 @@ export type ListPackageDescriptorsResponse = Message<"quixos.orch.ListPackageDes * Use `create(ListPackageDescriptorsResponseSchema)` to create a new message. */ export const ListPackageDescriptorsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 21); + messageDesc(file_quixos_orch, 31); /** * @generated from message quixos.orch.ListPackageRuntimesRequest @@ -742,7 +1147,7 @@ export type ListPackageRuntimesRequest = Message<"quixos.orch.ListPackageRuntime * Use `create(ListPackageRuntimesRequestSchema)` to create a new message. */ export const ListPackageRuntimesRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 22); + messageDesc(file_quixos_orch, 32); /** * @generated from message quixos.orch.ListPackageRuntimesResponse @@ -759,7 +1164,7 @@ export type ListPackageRuntimesResponse = Message<"quixos.orch.ListPackageRuntim * Use `create(ListPackageRuntimesResponseSchema)` to create a new message. */ export const ListPackageRuntimesResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 23); + messageDesc(file_quixos_orch, 33); /** * @generated from message quixos.orch.ListActivationsResponse @@ -776,7 +1181,7 @@ export type ListActivationsResponse = Message<"quixos.orch.ListActivationsRespon * Use `create(ListActivationsResponseSchema)` to create a new message. */ export const ListActivationsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 24); + messageDesc(file_quixos_orch, 34); /** * @generated from message quixos.orch.CloseActivationRequest @@ -798,7 +1203,7 @@ export type CloseActivationRequest = Message<"quixos.orch.CloseActivationRequest * Use `create(CloseActivationRequestSchema)` to create a new message. */ export const CloseActivationRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 25); + messageDesc(file_quixos_orch, 35); /** * @generated from message quixos.orch.CloseActivationResponse @@ -815,7 +1220,7 @@ export type CloseActivationResponse = Message<"quixos.orch.CloseActivationRespon * Use `create(CloseActivationResponseSchema)` to create a new message. */ export const CloseActivationResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 26); + messageDesc(file_quixos_orch, 36); /** * @generated from message quixos.orch.Activation @@ -877,7 +1282,7 @@ export type Activation = Message<"quixos.orch.Activation"> & { * Use `create(ActivationSchema)` to create a new message. */ export const ActivationSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 27); + messageDesc(file_quixos_orch, 37); /** * @generated from message quixos.orch.PackageRuntimeStatus @@ -949,12 +1354,28 @@ export type PackageRuntimeStatus = Message<"quixos.orch.PackageRuntimeStatus"> & * Use `create(PackageRuntimeStatusSchema)` to create a new message. */ export const PackageRuntimeStatusSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_orch, 28); + messageDesc(file_quixos_orch, 38); /** * @generated from service quixos.orch.OrchestratorRuntime */ export const OrchestratorRuntime: GenService<{ + /** + * @generated from rpc quixos.orch.OrchestratorRuntime.ReadDefinitions + */ + readDefinitions: { + methodKind: "unary"; + input: typeof DefinitionRequestSchema; + output: typeof DefinitionPageSchema; + }, + /** + * @generated from rpc quixos.orch.OrchestratorRuntime.WatchDefinitions + */ + watchDefinitions: { + methodKind: "server_streaming"; + input: typeof DefinitionRequestSchema; + output: typeof DefinitionPageSchema; + }, /** * @generated from rpc quixos.orch.OrchestratorRuntime.ExecuteQuery */ diff --git a/src/quixos/refs_pb.ts b/src/quixos/refs_pb.ts index 6f164a4..12d7c24 100644 --- a/src/quixos/refs_pb.ts +++ b/src/quixos/refs_pb.ts @@ -10,7 +10,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file quixos/refs.proto. */ export const file_quixos_refs: GenFile = /*@__PURE__*/ - fileDesc("ChFxdWl4b3MvcmVmcy5wcm90bxIGcXVpeG9zInUKDUNhcGFiaWxpdHlSZWYSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAEgASgJEhQKDG9wZXJhdGlvbl9pZBgCIAEoCRIvCgtjb25mb3JtYW5jZRgDIAEoCzIaLnF1aXhvcy5Db25mb3JtYW5jZVdpdG5lc3Mi0QEKDEZpZWxkRWRpdGluZxIbChNnZXR0ZXJfb3BlcmF0aW9uX2lkGAEgASgJEhsKE3NldHRlcl9vcGVyYXRpb25faWQYAiABKAkSFQoNZG9jdW1lbnRfdHlwZRgDIAEoCRIWCg5iaW5kaW5nX2RpZ2VzdBgEIAEoCRInCgRtb2RlGAUgASgOMhkucXVpeG9zLkZpZWxkRWRpdGluZy5Nb2RlIi8KBE1vZGUSDwoLVU5TUEVDSUZJRUQQABIMCghSRUdJU1RFUhABEggKBENSRFQQAiKWAQoSQ29uZm9ybWFuY2VXaXRuZXNzEhEKCW9iamVjdF9pZBgBIAEoCRIdChVpbnRlcmZhY2VfcmV2aXNpb25faWQYAiABKAkSFgoOY29uZm9ybWFuY2VfaWQYAyABKAkSHQoVd29ya3NwYWNlX3JldmlzaW9uX2lkGAQgASgJEhcKD3dvcmtzcGFjZV9lcG9jaBgFIAEoCSJCChBQYWNrYWdlRXhwb3J0UmVmEhsKE3BhY2thZ2VfcmV2aXNpb25faWQYASABKAkSEQoJZXhwb3J0X2lkGAIgASgJIpUCChJJbmplY3RlZERlcGVuZGVuY3kSDwoHcG9ydF9pZBgBIAEoCRIXCg1zdGF0ZV9zbG90X2lkGAIgASgJSAASJgoEZWRnZRgDIAEoCzIWLnF1aXhvcy5FZGdlRGVwZW5kZW5jeUgAEh8KFWludGVyZmFjZV9yZXZpc2lvbl9pZBgEIAEoCUgAEh0KE2NvbnN0cnVjdG9yX2F0b21faWQYBSABKAlIABISCghxdWVyeV9pZBgHIAEoCUgAEjsKD3dvcmtzcGFjZV9xdWVyeRgIIAEoCzIgLnF1aXhvcy5Xb3Jrc3BhY2VRdWVyeURlcGVuZGVuY3lIABIRCglvYmplY3RfaWQYBiABKAlCCQoHYmluZGluZyKaAQoTV29ya3NwYWNlUXVlcnlTY29wZRIUCgx3b3Jrc3BhY2VfaWQYASABKAkSHQoVd29ya3NwYWNlX3JldmlzaW9uX2lkGAIgASgJEhcKD3dvcmtzcGFjZV9lcG9jaBgDIAEoCRIdChVpbnRlcmZhY2VfcmV2aXNpb25faWQYBCABKAkSFgoOYmluZGluZ19kaWdlc3QYBSABKAkiWAoYV29ya3NwYWNlUXVlcnlEZXBlbmRlbmN5EhAKCHF1ZXJ5X2lkGAEgASgJEioKBXNjb3BlGAIgASgLMhsucXVpeG9zLldvcmtzcGFjZVF1ZXJ5U2NvcGUiPQoORWRnZURlcGVuZGVuY3kSFAoMZWRnZV90eXBlX2lkGAEgASgJEhUKDXByb2plY3Rpb25faWQYAiABKAliBnByb3RvMw"); + fileDesc("ChFxdWl4b3MvcmVmcy5wcm90bxIGcXVpeG9zInUKDUNhcGFiaWxpdHlSZWYSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAEgASgJEhQKDG9wZXJhdGlvbl9pZBgCIAEoCRIvCgtjb25mb3JtYW5jZRgDIAEoCzIaLnF1aXhvcy5Db25mb3JtYW5jZVdpdG5lc3Mi0QEKDEZpZWxkRWRpdGluZxIbChNnZXR0ZXJfb3BlcmF0aW9uX2lkGAEgASgJEhsKE3NldHRlcl9vcGVyYXRpb25faWQYAiABKAkSFQoNZG9jdW1lbnRfdHlwZRgDIAEoCRIWCg5iaW5kaW5nX2RpZ2VzdBgEIAEoCRInCgRtb2RlGAUgASgOMhkucXVpeG9zLkZpZWxkRWRpdGluZy5Nb2RlIi8KBE1vZGUSDwoLVU5TUEVDSUZJRUQQABIMCghSRUdJU1RFUhABEggKBENSRFQQAiKWAQoSQ29uZm9ybWFuY2VXaXRuZXNzEhEKCW9iamVjdF9pZBgBIAEoCRIdChVpbnRlcmZhY2VfcmV2aXNpb25faWQYAiABKAkSFgoOY29uZm9ybWFuY2VfaWQYAyABKAkSHQoVd29ya3NwYWNlX3JldmlzaW9uX2lkGAQgASgJEhcKD3dvcmtzcGFjZV9lcG9jaBgFIAEoCSJCChBQYWNrYWdlRXhwb3J0UmVmEhsKE3BhY2thZ2VfcmV2aXNpb25faWQYASABKAkSEQoJZXhwb3J0X2lkGAIgASgJIskCChJJbmplY3RlZERlcGVuZGVuY3kSDwoHcG9ydF9pZBgBIAEoCRIXCg1zdGF0ZV9zbG90X2lkGAIgASgJSAASJgoEZWRnZRgDIAEoCzIWLnF1aXhvcy5FZGdlRGVwZW5kZW5jeUgAEh8KFWludGVyZmFjZV9yZXZpc2lvbl9pZBgEIAEoCUgAEh0KE2NvbnN0cnVjdG9yX2F0b21faWQYBSABKAlIABISCghxdWVyeV9pZBgHIAEoCUgAEjsKD3dvcmtzcGFjZV9xdWVyeRgIIAEoCzIgLnF1aXhvcy5Xb3Jrc3BhY2VRdWVyeURlcGVuZGVuY3lIABIyCgpyZWZsZWN0aW9uGAkgASgLMhwucXVpeG9zLlJlZmxlY3Rpb25EZXBlbmRlbmN5SAASEQoJb2JqZWN0X2lkGAYgASgJQgkKB2JpbmRpbmciWAoUUmVmbGVjdGlvbkRlcGVuZGVuY3kSFAoMd29ya3NwYWNlX2lkGAEgASgJEhcKD3dvcmtzcGFjZV9lcG9jaBgCIAEoCRIRCglzZWxlY3RvcnMYAyADKAkimgEKE1dvcmtzcGFjZVF1ZXJ5U2NvcGUSFAoMd29ya3NwYWNlX2lkGAEgASgJEh0KFXdvcmtzcGFjZV9yZXZpc2lvbl9pZBgCIAEoCRIXCg93b3Jrc3BhY2VfZXBvY2gYAyABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAQgASgJEhYKDmJpbmRpbmdfZGlnZXN0GAUgASgJIlgKGFdvcmtzcGFjZVF1ZXJ5RGVwZW5kZW5jeRIQCghxdWVyeV9pZBgBIAEoCRIqCgVzY29wZRgCIAEoCzIbLnF1aXhvcy5Xb3Jrc3BhY2VRdWVyeVNjb3BlIj0KDkVkZ2VEZXBlbmRlbmN5EhQKDGVkZ2VfdHlwZV9pZBgBIAEoCRIVCg1wcm9qZWN0aW9uX2lkGAIgASgJYgZwcm90bzM"); /** * @generated from message quixos.CapabilityRef @@ -213,6 +213,12 @@ export type InjectedDependency = Message<"quixos.InjectedDependency"> & { */ value: WorkspaceQueryDependency; case: "workspaceQuery"; + } | { + /** + * @generated from field: quixos.ReflectionDependency reflection = 9; + */ + value: ReflectionDependency; + case: "reflection"; } | { case: undefined; value?: undefined }; /** @@ -231,6 +237,33 @@ export type InjectedDependency = Message<"quixos.InjectedDependency"> & { export const InjectedDependencySchema: GenMessage = /*@__PURE__*/ messageDesc(file_quixos_refs, 4); +/** + * @generated from message quixos.ReflectionDependency + */ +export type ReflectionDependency = Message<"quixos.ReflectionDependency"> & { + /** + * @generated from field: string workspace_id = 1; + */ + workspaceId: string; + + /** + * @generated from field: string workspace_epoch = 2; + */ + workspaceEpoch: string; + + /** + * @generated from field: repeated string selectors = 3; + */ + selectors: string[]; +}; + +/** + * Describes the message quixos.ReflectionDependency. + * Use `create(ReflectionDependencySchema)` to create a new message. + */ +export const ReflectionDependencySchema: GenMessage = /*@__PURE__*/ + messageDesc(file_quixos_refs, 5); + /** * Scope evidence is not authority by itself. The caller must also hold the * matching workspace-query grant (or the authenticated workspace user grant). @@ -269,7 +302,7 @@ export type WorkspaceQueryScope = Message<"quixos.WorkspaceQueryScope"> & { * Use `create(WorkspaceQueryScopeSchema)` to create a new message. */ export const WorkspaceQueryScopeSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_refs, 5); + messageDesc(file_quixos_refs, 6); /** * @generated from message quixos.WorkspaceQueryDependency @@ -291,7 +324,7 @@ export type WorkspaceQueryDependency = Message<"quixos.WorkspaceQueryDependency" * Use `create(WorkspaceQueryDependencySchema)` to create a new message. */ export const WorkspaceQueryDependencySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_refs, 6); + messageDesc(file_quixos_refs, 7); /** * @generated from message quixos.EdgeDependency @@ -313,5 +346,5 @@ export type EdgeDependency = Message<"quixos.EdgeDependency"> & { * Use `create(EdgeDependencySchema)` to create a new message. */ export const EdgeDependencySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_quixos_refs, 7); + messageDesc(file_quixos_refs, 8); diff --git a/src/reflection.ts b/src/reflection.ts new file mode 100644 index 0000000..2afd057 --- /dev/null +++ b/src/reflection.ts @@ -0,0 +1,32 @@ +import type { DefinitionPage } from "./quixos/orch_pb.js"; +export type { + DefinitionPage, + DefinitionIdentity, + DefinitionRecord, + ReflectedAtom, + ReflectedInterface, + ReflectedConformance, + ReflectedQuery, + ReflectedIndex, +} from "./quixos/orch_pb.js"; +export type ReflectionKind = "active" | "atoms" | "interfaces" | "conformances" | "queries" | "indexes"; +export type ReflectionSelector = K extends "active" + ? { kind: K } + : K extends "atoms" + ? { kind: K; ids?: string[]; interfaceRevisionId?: string } + : K extends "conformances" + ? { kind: K; ids?: string[]; atomId?: string; interfaceRevisionId?: string } + : K extends "queries" + ? { kind: K; ids?: string[]; packageRevisionId?: string; interfaceRevisionId?: string } + : { kind: K; ids?: string[] }; +export type ReflectionRequest = { + selector: ReflectionSelector; + first?: number; + after?: string; + snapshot?: string; +}; +/** Read-only metadata. Returned capability IDs confer no invocation authority. */ +export type QxReflectionPort = { + read(request: ReflectionRequest): Promise; + watch(request: Omit, "after" | "snapshot">, signal: AbortSignal): AsyncIterable; +}; diff --git a/test/reflection.test.mjs b/test/reflection.test.mjs new file mode 100644 index 0000000..a26bdc9 --- /dev/null +++ b/test/reflection.test.mjs @@ -0,0 +1,58 @@ +import assert from "node:assert/strict"; +import test from "node:test"; +import { create } from "@bufbuild/protobuf"; +import { InjectedDependencySchema } from "../dist/quixos/refs_pb.js"; +import { DefinitionPageSchema } from "../dist/quixos/orch_pb.js"; +import { createRuntimeContext, bindQxHandler } from "../dist/index.js"; + +test("checked reflection bindings preserve injected scope, selector authority and cancellation", async () => { + const seen = []; + const page = create(DefinitionPageSchema, { identity: { workspaceId: "ws", workspaceEpoch: "7" } }); + const signal = new AbortController().signal; + const raw = createRuntimeContext( + {}, + { + readDefinitions: async (request) => { + seen.push(request); + return page; + }, + async *watchDefinitions(request, options) { + assert.equal(options.signal, signal); + seen.push(request); + yield page; + }, + }, + { + objectId: "", + input: {}, + dependencies: [ + create(InjectedDependencySchema, { + portId: "meta", + binding: { case: "reflection", value: { workspaceId: "ws", workspaceEpoch: "7", selectors: ["atoms"] } }, + }), + ], + }, + ); + const handler = bindQxHandler( + { + receiver: "none", + inputType: { kind: "builtin", name: "unit" }, + outputType: { kind: "builtin", name: "unit" }, + ports: { meta: { kind: "reflection", id: "meta", selectors: ["atoms"] } }, + }, + async (context) => { + await context.ports.meta.read({ selector: { kind: "atoms" }, workspaceId: "forged", workspaceEpoch: "9" }); + for await (const result of context.ports.meta.watch({ selector: { kind: "atoms" } }, signal)) + assert.equal(result, page); + assert.throws(() => context.ports.meta.read({ selector: { kind: "queries" } }), /Undeclared reflection/); + }, + {}, + ); + await handler(raw); + assert.equal(seen.length, 2); + for (const request of seen) { + assert.equal(request.workspaceId, "ws"); + assert.equal(request.workspaceEpoch, "7"); + } + assert.throws(() => raw.reflection("missing"), /Missing/); +});