Compare commits

..
Author SHA1 Message Date
Quixos Subtree Publisher 19215d7ebf Publish camino-package-runtime from ca5b05584b89e90cb259b4596b1bc01d3d692136 2026-10-25 21:28:36 +00:00
Timothy J. Aveni fee8fa523a Restore current public toolchain exports and CI publication (#420) 2026-10-25 14:28:36 -07:00
Quixos Subtree Publisher 647264d4a5 Publish camino-package-runtime from be30143a326d5d7d7b0cbabea5bc5ac0301ef5b9 2026-10-06 06:59:27 +00:00
Timothy J. Aveni 2fe585ab69 Restore hosted workspace templates and refresh published runtime dependencies 2026-10-05 23:59:27 -07:00
Timothy J. Aveni 8859cf440b Add explicit CRDT edit contracts and structured query values 2026-09-19 22:33:20 -07:00
Timothy J. Aveni 06aca3d2c3 Add local-first execution contracts to the capability language 2026-09-19 22:09:40 -07:00
Timothy J. Aveni d0f9454532 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.
2026-09-19 10:18:47 -07:00
Timothy J. Aveni 696009f6fd Add native literal substring query predicates
Implement checked containsInsensitive string predicates in GraphQL, protobuf,
native SQL and bounded residual evaluation. ASCII folding is deterministic;
SQL pattern characters remain literal. Retain deferred full-text index design.

Studio migration awaits a decision on checked native getter forwarding across
conformances; do not duplicate titles or bypass private state ownership.
Compiler and local full-stack substring-query acceptance pass.
2026-09-19 10:18:47 -07:00
Timothy J. Aveni 6a17cd1ae0 Add checked workspace-interface query roots
Implement scoped interface extents across QX, generated bindings, SDK,
Orch, Camino and browser queries. Preserve native projection, aggregation,
pagination and watch invalidation without synthetic persisted objects.
Validate exact query grants and scope freshness on execution and replay.
Add local PostgreSQL, transport, browser and code-generation coverage.

C1 implementation slice only: full-text indexes and Studio search adoption
(C2/C3) remain tracked in the implementation handoff. No publication or deployment.
2026-09-19 10:18:47 -07:00
Timothy J. Aveni e69fe1b29e Publish live-field tracker template and dependency pins 2026-09-18 10:09:30 -07:00
Quixos Subtree Publisher 86933aa97f Publish camino-package-runtime from 7efe88cdfc5244727d80239c79845b44d1e79ccb 2026-09-18 17:08:27 +00:00
Timothy J. Aveni 437dbbc850 Publish live-field tracker template and dependency pins 2026-09-18 10:08:27 -07:00
Timothy J. Aveni 45477f3b07 Implement shared live fields and checked query hydration
Add native register acknowledgments and idempotent mutation replay, shared optimistic field controllers, overlapping custom setters, non-suspending hooks and explicit Suspense. Carry checked @live provenance through batched queries and hydrate shared browser fields with coverage leases. Update tracker/scaffolds/guides and verify compiler, PostgreSQL, browser and immutable workspace paths.
2026-09-18 02:19:49 -07:00
Quixos Subtree Publisher 446fd4e36e Publish camino-package-runtime from 8e42108f9ac903cca5f613fefbff3c147c775b81 2026-09-18 02:55:23 +00:00
Timothy J. Aveni dac9c48856 Publish final aggregation diagnostics and select toolchain pins 2026-09-17 19:55:23 -07:00
Timothy J. Aveni d0dca13ff9 Enforce aggregation contract budgets and expose residual timing 2026-09-17 19:52:55 -07:00
36 changed files with 2266 additions and 327 deletions
+3 -3
View File
@@ -1,8 +1,8 @@
{
"version": 1,
"sourceRepo": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos",
"sourceCommit": "460335e4e892a682e68b10f25abd81e65829538f",
"sourceRepo": "https://gitea.internal.quixos.org/quixos/quixos.git",
"sourceCommit": "ca5b05584b89e90cb259b4596b1bc01d3d692136",
"sourcePath": "quixos-instance/packages/camino-package-runtime",
"exportName": "camino-package-runtime",
"mirrorRemote": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/camino-package-runtime.git"
"mirrorRemote": "https://repos.quixos.org/quixos-toolchain/camino-package-runtime.git"
}
+4
View File
@@ -63,6 +63,10 @@ export type QxOperationSpec = {
outputType: QxValueType;
};
export type QxPortSpec = {
kind: "reflection";
id: string;
selectors: string[];
} | {
kind: "query";
id: string;
definitionDigest: string;
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../src/bindings.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../src/bindings.ts"],"names":[],"mappings":"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"}
+2
View File
@@ -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) => {
+122 -4
View File
@@ -1,5 +1,6 @@
import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
import type { PersistencePlan, QueryRelationalPlan, QuerySelection } from "./schema_pb.js";
import type { CapabilityRef, FieldEditing, WorkspaceQueryScope } from "../quixos/refs_pb.js";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file camino/api.proto.
@@ -207,12 +208,91 @@ export type Value = Message<"camino.Value"> & {
* @generated from field: camino.ValueSource source = 11;
*/
source?: ValueSource | undefined;
/**
* Trusted query coordinator annotation. Travels with values through residual
* row selection, then is removed in favor of final-path hydration metadata.
*
* @generated from field: camino.QueryFieldOrigin query_origin = 12;
*/
queryOrigin?: QueryFieldOrigin | undefined;
};
/**
* Describes the message camino.Value.
* Use `create(ValueSchema)` to create a new message.
*/
export declare const ValueSchema: GenMessage<Value>;
/**
* @generated from message camino.QueryFieldOrigin
*/
export type QueryFieldOrigin = Message<"camino.QueryFieldOrigin"> & {
/**
* @generated from field: string selection_id = 1;
*/
selectionId: string;
/**
* @generated from field: string atom_id = 2;
*/
atomId: string;
/**
* @generated from field: string interface_revision_id = 3;
*/
interfaceRevisionId: string;
/**
* @generated from field: string member_id = 4;
*/
memberId: string;
/**
* @generated from field: camino.StateValueSource source = 5;
*/
source?: StateValueSource | undefined;
};
/**
* Describes the message camino.QueryFieldOrigin.
* Use `create(QueryFieldOriginSchema)` to create a new message.
*/
export declare const QueryFieldOriginSchema: GenMessage<QueryFieldOrigin>;
/**
* @generated from message camino.QueryLiveField
*/
export type QueryLiveField = Message<"camino.QueryLiveField"> & {
/**
* @generated from field: repeated camino.QueryPathPart path = 1;
*/
path: QueryPathPart[];
/**
* @generated from field: string selection_id = 2;
*/
selectionId: string;
/**
* @generated from field: string object_id = 3;
*/
objectId: string;
/**
* @generated from field: quixos.CapabilityRef capability = 4;
*/
capability?: CapabilityRef | undefined;
/**
* @generated from field: string watch_operation_id = 5;
*/
watchOperationId: string;
/**
* @generated from field: string setter_operation_id = 6;
*/
setterOperationId: string;
/**
* @generated from field: quixos.FieldEditing editing = 7;
*/
editing?: FieldEditing | undefined;
/**
* @generated from field: camino.StateValueSource source = 8;
*/
source?: StateValueSource | undefined;
};
/**
* Describes the message camino.QueryLiveField.
* Use `create(QueryLiveFieldSchema)` to create a new message.
*/
export declare const QueryLiveFieldSchema: GenMessage<QueryLiveField>;
/**
* @generated from message camino.InstallPersistencePlanRequest
*/
@@ -835,9 +915,24 @@ export type QueryRequest = Message<"camino.QueryRequest"> & {
*/
queryId: string;
/**
* @generated from field: string object_id = 2;
* @generated from oneof camino.QueryRequest.root
*/
objectId: string;
root: {
/**
* @generated from field: string object_id = 2;
*/
value: string;
case: "objectId";
} | {
/**
* @generated from field: quixos.WorkspaceQueryScope workspace_scope = 5;
*/
value: WorkspaceQueryScope;
case: "workspaceScope";
} | {
case: undefined;
value?: undefined;
};
/**
* @generated from field: map<string, camino.Value> variables = 3;
*/
@@ -986,6 +1081,10 @@ export type QueryStats = Message<"camino.QueryStats"> & {
* @generated from field: double relational_ms = 10;
*/
relationalMs: number;
/**
* @generated from field: double residual_ms = 11;
*/
residualMs: number;
};
/**
* Describes the message camino.QueryStats.
@@ -1042,6 +1141,10 @@ export type QueryResponse = Message<"camino.QueryResponse"> & {
* @generated from field: repeated camino.QueryRelationalCapture relational_captures = 10;
*/
relationalCaptures: QueryRelationalCapture[];
/**
* @generated from field: repeated camino.QueryLiveField live_fields = 11;
*/
liveFields: QueryLiveField[];
};
/**
* Describes the message camino.QueryResponse.
@@ -1282,9 +1385,24 @@ export type QueryChangesRequest = Message<"camino.QueryChangesRequest"> & {
*/
queryId: string;
/**
* @generated from field: string object_id = 2;
* @generated from oneof camino.QueryChangesRequest.root
*/
objectId: string;
root: {
/**
* @generated from field: string object_id = 2;
*/
value: string;
case: "objectId";
} | {
/**
* @generated from field: quixos.WorkspaceQueryScope workspace_scope = 4;
*/
value: WorkspaceQueryScope;
case: "workspaceScope";
} | {
case: undefined;
value?: undefined;
};
/**
* @generated from field: string data_version = 3;
*/
+1 -1
View File
File diff suppressed because one or more lines are too long
+57 -46
View File
File diff suppressed because one or more lines are too long
+133 -3
View File
@@ -372,6 +372,12 @@ export type QuerySelection = Message<"camino.QuerySelection"> & {
* @generated from field: camino.QueryPredicate predicate = 10;
*/
predicate?: QueryPredicate | undefined;
/**
* Stable checked selection identity; empty for ordinary value projections.
*
* @generated from field: string live_selection_id = 11;
*/
liveSelectionId: string;
};
/**
* Describes the message camino.QuerySelection.
@@ -454,6 +460,10 @@ export type QueryFieldOperand = Message<"camino.QueryFieldOperand"> & {
* @generated from field: string member_id = 2;
*/
memberId: string;
/**
* @generated from field: repeated string value_path = 3;
*/
valuePath: string[];
};
/**
* Describes the message camino.QueryFieldOperand.
@@ -652,6 +662,24 @@ export type QueryReductionPredicate = Message<"camino.QueryReductionPredicate">
* Use `create(QueryReductionPredicateSchema)` to create a new message.
*/
export declare const QueryReductionPredicateSchema: GenMessage<QueryReductionPredicate>;
/**
* @generated from message camino.QueryInterfacePredicate
*/
export type QueryInterfacePredicate = Message<"camino.QueryInterfacePredicate"> & {
/**
* @generated from field: string interface_revision_id = 1;
*/
interfaceRevisionId: string;
/**
* @generated from field: camino.QueryPredicate predicate = 2;
*/
predicate?: QueryPredicate | undefined;
};
/**
* Describes the message camino.QueryInterfacePredicate.
* Use `create(QueryInterfacePredicateSchema)` to create a new message.
*/
export declare const QueryInterfacePredicateSchema: GenMessage<QueryInterfacePredicate>;
/**
* @generated from message camino.QueryPredicate
*/
@@ -695,6 +723,12 @@ export type QueryPredicate = Message<"camino.QueryPredicate"> & {
*/
value: QueryReductionPredicate;
case: "reduce";
} | {
/**
* @generated from field: camino.QueryInterfacePredicate as = 7;
*/
value: QueryInterfacePredicate;
case: "as";
} | {
case: undefined;
value?: undefined;
@@ -1065,6 +1099,42 @@ export type QueryReadBinding = Message<"camino.QueryReadBinding"> & {
* Use `create(QueryReadBindingSchema)` to create a new message.
*/
export declare const QueryReadBindingSchema: GenMessage<QueryReadBinding>;
/**
* Checked schema survives even when no atom currently implements an interface.
*
* @generated from message camino.QueryFieldContract
*/
export type QueryFieldContract = Message<"camino.QueryFieldContract"> & {
/**
* @generated from field: string interface_revision_id = 1;
*/
interfaceRevisionId: string;
/**
* @generated from field: string member_id = 2;
*/
memberId: string;
/**
* @generated from field: string field_name = 3;
*/
fieldName: string;
/**
* @generated from field: string value_type_json = 4;
*/
valueTypeJson: string;
/**
* @generated from field: camino.Cardinality cardinality = 5;
*/
cardinality: Cardinality;
/**
* @generated from field: string key_type = 6;
*/
keyType: string;
};
/**
* Describes the message camino.QueryFieldContract.
* Use `create(QueryFieldContractSchema)` to create a new message.
*/
export declare const QueryFieldContractSchema: GenMessage<QueryFieldContract>;
/**
* @generated from message camino.QueryBudgets
*/
@@ -1103,6 +1173,35 @@ export type QueryBudgets = Message<"camino.QueryBudgets"> & {
* Use `create(QueryBudgetsSchema)` to create a new message.
*/
export declare const QueryBudgetsSchema: GenMessage<QueryBudgets>;
/**
* @generated from message camino.QueryPlacement
*/
export type QueryPlacement = Message<"camino.QueryPlacement"> & {
/**
* @generated from oneof camino.QueryPlacement.kind
*/
kind: {
/**
* @generated from field: bool replica = 1;
*/
value: boolean;
case: "replica";
} | {
/**
* @generated from field: string local_source_query_id = 2;
*/
value: string;
case: "localSourceQueryId";
} | {
case: undefined;
value?: undefined;
};
};
/**
* Describes the message camino.QueryPlacement.
* Use `create(QueryPlacementSchema)` to create a new message.
*/
export declare const QueryPlacementSchema: GenMessage<QueryPlacement>;
/**
* @generated from message camino.InstalledQuery
*/
@@ -1120,9 +1219,24 @@ export type InstalledQuery = Message<"camino.InstalledQuery"> & {
*/
bindingDigest: string;
/**
* @generated from field: string root_interface_revision_id = 4;
* @generated from oneof camino.InstalledQuery.root
*/
rootInterfaceRevisionId: string;
root: {
/**
* @generated from field: string object_interface = 4;
*/
value: string;
case: "objectInterface";
} | {
/**
* @generated from field: string workspace_interface = 14;
*/
value: string;
case: "workspaceInterface";
} | {
case: undefined;
value?: undefined;
};
/**
* @generated from field: repeated camino.QuerySelection selection = 5;
*/
@@ -1161,6 +1275,18 @@ export type InstalledQuery = Message<"camino.InstalledQuery"> & {
* @generated from field: bool rpc_predicate_or_order = 13;
*/
rpcPredicateOrOrder: boolean;
/**
* @generated from field: repeated string root_atom_ids = 15;
*/
rootAtomIds: string[];
/**
* @generated from field: repeated camino.QueryFieldContract fields = 16;
*/
fields: QueryFieldContract[];
/**
* @generated from field: camino.QueryPlacement placement = 17;
*/
placement?: QueryPlacement | undefined;
};
/**
* Describes the message camino.InstalledQuery.
@@ -1268,7 +1394,11 @@ export declare enum QueryComparisonOperator {
/**
* @generated from enum value: QUERY_COMPARISON_OPERATOR_GTE = 7;
*/
GTE = 7
GTE = 7,
/**
* @generated from enum value: QUERY_COMPARISON_OPERATOR_CONTAINS_INSENSITIVE = 8;
*/
CONTAINS_INSENSITIVE = 8
}
/**
* Describes the enum camino.QueryComparisonOperator.
+1 -1
View File
File diff suppressed because one or more lines are too long
+35 -16
View File
File diff suppressed because one or more lines are too long
+7 -1
View File
@@ -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<string, Value>, expectedDefinitionDigest?: string): Promise<QueryResponse>;
watch(variables: Record<string, Value>, signal: AbortSignal, expectedDefinitionDigest?: string): AsyncIterable<import("./quixos/orch_pb.js").QueryEvent>;
};
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<InterfacePort | undefined>;
/** 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;
+1 -1
View File
File diff suppressed because one or more lines are too long
+26 -4
View File
@@ -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,12 +157,32 @@ export const createRuntimeContext = (camino, orch, request) => {
const ports = new Map();
for (const dependency of request.dependencies) {
switch (dependency.binding.case) {
case "queryId": {
const queryId = dependency.binding.value, objectId = dependency.objectId || request.objectId;
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)
throw new Error(`Workspace query port ${dependency.portId} has no scope`);
const queryId = dependency.binding.case === "queryId" ? dependency.binding.value : dependency.binding.value.queryId;
const root = dependency.binding.case === "queryId"
? { case: "objectId", value: dependency.objectId || request.objectId }
: { case: "workspaceScope", value: dependency.binding.value.scope };
ports.set(dependency.portId, {
queryId,
execute: (variables, expectedDefinitionDigest) => orch.executeQuery({ queryId, objectId, variables, expectedDefinitionDigest }),
watch: (variables, signal, expectedDefinitionDigest) => orch.watchQuery({ queryId, objectId, variables, expectedDefinitionDigest }, { signal }),
execute: (variables, expectedDefinitionDigest) => orch.executeQuery({ queryId, root, variables, expectedDefinitionDigest }),
watch: (variables, signal, expectedDefinitionDigest) => orch.watchQuery({ queryId, root, variables, expectedDefinitionDigest }, { signal }),
});
break;
}
@@ -309,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 });
+8 -2
View File
@@ -24,10 +24,16 @@ export type QxQuerySnapshot<T> = {
});
declare const queryTypes: unique symbol;
/** Generated shape evidence, not permission to run a query. */
export interface QxQueryDescriptor<Variables, Result, Root extends string = string> {
export interface QxQueryDescriptor<Variables, Result, Root extends {
kind: "object" | "workspace-interface";
interface: string;
} = {
kind: "object" | "workspace-interface";
interface: string;
}> {
readonly id: string;
readonly definitionDigest: string;
readonly rootInterfaceRevisionId: Root;
readonly root: Root;
readonly variables: QxValueType;
readonly output: QxValueType;
readonly watch: boolean;
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,SAAS,WAAW,GACjD,CAAC,GACD,CAAC,SAAS,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,GAC/B,cAAc,CAAC,IAAI,CAAC,EAAE,GACtB,CAAC,SAAS,MAAM,GACd;KAAG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CAAE,GAC7C,CAAC,CAAC;AACV,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QAAE,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/F,GAAG,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC,CAAC;AACpF,OAAO,CAAC,MAAM,UAAU,EAAE,OAAO,MAAM,CAAC;AACxC,+DAA+D;AAC/D,MAAM,WAAW,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,SAAS,MAAM,GAAG,MAAM;IAChF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,uBAAuB,EAAE,IAAI,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;CACvF;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,eAAe,CAAC,CAAC,CAAC,CA6CpB"}
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,SAAS,WAAW,GACjD,CAAC,GACD,CAAC,SAAS,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,GAC/B,cAAc,CAAC,IAAI,CAAC,EAAE,GACtB,CAAC,SAAS,MAAM,GACd;KAAG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CAAE,GAC7C,CAAC,CAAC;AACV,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QAAE,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/F,GAAG,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC,CAAC;AACpF,OAAO,CAAC,MAAM,UAAU,EAAE,OAAO,MAAM,CAAC;AACxC,+DAA+D;AAC/D,MAAM,WAAW,iBAAiB,CAChC,SAAS,EACT,MAAM,EACN,IAAI,SAAS;IAAE,IAAI,EAAE,QAAQ,GAAG,qBAAqB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG;IAC3E,IAAI,EAAE,QAAQ,GAAG,qBAAqB,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB;IAED,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;CACvF;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,eAAe,CAAC,CAAC,CAAC,CA6CpB"}
+380 -33
View File
@@ -2,13 +2,353 @@ import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegen
import type { CaminoObject, CrdtValue, QueryPathPart, QueryRequestSchema, QueryResponse, QueryResponseSchema, Value } from "../camino/api_pb.js";
import type { InstalledQuery } from "../camino/schema_pb.js";
import type { PackageDescriptor } from "./package_pb.js";
import type { CapabilityRef, ConformanceWitness, PackageExportRef } from "./refs_pb.js";
import type { CapabilityRef, ConformanceWitness, FieldEditing, PackageExportRef, WorkspaceQueryScope } from "./refs_pb.js";
import type { DerivedDependency } from "./runtime_pb.js";
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<DefinitionSelector>;
/**
* @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<DefinitionIdentity>;
/**
* @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<DefinitionRequest>;
/**
* @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<ReflectedAtom>;
/**
* @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<ReflectedInterface>;
/**
* @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<ReflectedConformance>;
/**
* @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<ReflectedQuery>;
/**
* @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<ReflectedIndex>;
/**
* @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<DefinitionRecord>;
/**
* @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<DefinitionPage>;
/**
* @generated from message quixos.orch.QueryEvent
*/
@@ -241,7 +581,7 @@ export type InvokeCapabilityResponse = Message<"quixos.orch.InvokeCapabilityResp
*/
dependencies: DerivedDependency[];
/**
* @generated from field: quixos.orch.FieldEditing field_editing = 7;
* @generated from field: quixos.FieldEditing field_editing = 7;
*/
fieldEditing?: FieldEditing | undefined;
};
@@ -250,34 +590,6 @@ export type InvokeCapabilityResponse = Message<"quixos.orch.InvokeCapabilityResp
* Use `create(InvokeCapabilityResponseSchema)` to create a new message.
*/
export declare const InvokeCapabilityResponseSchema: GenMessage<InvokeCapabilityResponse>;
/**
* Resolved from the checked native getter/setter binding, not Value.source.
*
* @generated from message quixos.orch.FieldEditing
*/
export type FieldEditing = Message<"quixos.orch.FieldEditing"> & {
/**
* @generated from field: string getter_operation_id = 1;
*/
getterOperationId: string;
/**
* @generated from field: string setter_operation_id = 2;
*/
setterOperationId: string;
/**
* @generated from field: string document_type = 3;
*/
documentType: string;
/**
* @generated from field: string binding_digest = 4;
*/
bindingDigest: string;
};
/**
* Describes the message quixos.orch.FieldEditing.
* Use `create(FieldEditingSchema)` to create a new message.
*/
export declare const FieldEditingSchema: GenMessage<FieldEditing>;
/**
* @generated from message quixos.orch.EditCapabilityFieldRequest
*/
@@ -301,9 +613,24 @@ export type EditCapabilityFieldRequest = Message<"quixos.orch.EditCapabilityFiel
*/
bindingDigest: string;
/**
* @generated from field: camino.CrdtValue update = 5;
* @generated from oneof quixos.orch.EditCapabilityFieldRequest.edit
*/
update?: CrdtValue | undefined;
edit: {
/**
* @generated from field: camino.CrdtValue update = 5;
*/
value: CrdtValue;
case: "update";
} | {
/**
* @generated from field: camino.Value replacement = 7;
*/
value: Value;
case: "replacement";
} | {
case: undefined;
value?: undefined;
};
/**
* @generated from field: string client_mutation_id = 6;
*/
@@ -371,7 +698,7 @@ export type WatchCapabilityEvent = Message<"quixos.orch.WatchCapabilityEvent"> &
*/
initial: boolean;
/**
* @generated from field: quixos.orch.FieldEditing field_editing = 8;
* @generated from field: quixos.FieldEditing field_editing = 8;
*/
fieldEditing?: FieldEditing | undefined;
};
@@ -491,6 +818,10 @@ export type QueryDescription = Message<"quixos.orch.QueryDescription"> & {
* @generated from field: camino.InstalledQuery plan = 8;
*/
plan?: InstalledQuery | undefined;
/**
* @generated from field: quixos.WorkspaceQueryScope workspace_scope = 9;
*/
workspaceScope?: WorkspaceQueryScope | undefined;
};
/**
* Describes the message quixos.orch.QueryDescription.
@@ -788,6 +1119,22 @@ export declare const PackageRuntimeStatusSchema: GenMessage<PackageRuntimeStatus
* @generated from service quixos.orch.OrchestratorRuntime
*/
export declare 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
*/
+1 -1
View File
File diff suppressed because one or more lines are too long
+80 -35
View File
File diff suppressed because one or more lines are too long
+139 -1
View File
@@ -1,4 +1,4 @@
import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file quixos/refs.proto.
@@ -28,6 +28,59 @@ export type CapabilityRef = Message<"quixos.CapabilityRef"> & {
* Use `create(CapabilityRefSchema)` to create a new message.
*/
export declare const CapabilityRefSchema: GenMessage<CapabilityRef>;
/**
* Resolved native editing semantics. A source snapshot alone grants no writer.
*
* @generated from message quixos.FieldEditing
*/
export type FieldEditing = Message<"quixos.FieldEditing"> & {
/**
* @generated from field: string getter_operation_id = 1;
*/
getterOperationId: string;
/**
* @generated from field: string setter_operation_id = 2;
*/
setterOperationId: string;
/**
* @generated from field: string document_type = 3;
*/
documentType: string;
/**
* @generated from field: string binding_digest = 4;
*/
bindingDigest: string;
/**
* @generated from field: quixos.FieldEditing.Mode mode = 5;
*/
mode: FieldEditing_Mode;
};
/**
* Describes the message quixos.FieldEditing.
* Use `create(FieldEditingSchema)` to create a new message.
*/
export declare const FieldEditingSchema: GenMessage<FieldEditing>;
/**
* @generated from enum quixos.FieldEditing.Mode
*/
export declare enum FieldEditing_Mode {
/**
* @generated from enum value: UNSPECIFIED = 0;
*/
UNSPECIFIED = 0,
/**
* @generated from enum value: REGISTER = 1;
*/
REGISTER = 1,
/**
* @generated from enum value: CRDT = 2;
*/
CRDT = 2
}
/**
* Describes the enum quixos.FieldEditing.Mode.
*/
export declare const FieldEditing_ModeSchema: GenEnum<FieldEditing_Mode>;
/**
* @generated from message quixos.ConformanceWitness
*/
@@ -117,6 +170,18 @@ export type InjectedDependency = Message<"quixos.InjectedDependency"> & {
*/
value: string;
case: "queryId";
} | {
/**
* @generated from field: quixos.WorkspaceQueryDependency workspace_query = 8;
*/
value: WorkspaceQueryDependency;
case: "workspaceQuery";
} | {
/**
* @generated from field: quixos.ReflectionDependency reflection = 9;
*/
value: ReflectionDependency;
case: "reflection";
} | {
case: undefined;
value?: undefined;
@@ -134,6 +199,79 @@ export type InjectedDependency = Message<"quixos.InjectedDependency"> & {
* Use `create(InjectedDependencySchema)` to create a new message.
*/
export declare const InjectedDependencySchema: GenMessage<InjectedDependency>;
/**
* @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<ReflectionDependency>;
/**
* Scope evidence is not authority by itself. The caller must also hold the
* matching workspace-query grant (or the authenticated workspace user grant).
*
* @generated from message quixos.WorkspaceQueryScope
*/
export type WorkspaceQueryScope = Message<"quixos.WorkspaceQueryScope"> & {
/**
* @generated from field: string workspace_id = 1;
*/
workspaceId: string;
/**
* @generated from field: string workspace_revision_id = 2;
*/
workspaceRevisionId: string;
/**
* @generated from field: string workspace_epoch = 3;
*/
workspaceEpoch: string;
/**
* @generated from field: string interface_revision_id = 4;
*/
interfaceRevisionId: string;
/**
* @generated from field: string binding_digest = 5;
*/
bindingDigest: string;
};
/**
* Describes the message quixos.WorkspaceQueryScope.
* Use `create(WorkspaceQueryScopeSchema)` to create a new message.
*/
export declare const WorkspaceQueryScopeSchema: GenMessage<WorkspaceQueryScope>;
/**
* @generated from message quixos.WorkspaceQueryDependency
*/
export type WorkspaceQueryDependency = Message<"quixos.WorkspaceQueryDependency"> & {
/**
* @generated from field: string query_id = 1;
*/
queryId: string;
/**
* @generated from field: quixos.WorkspaceQueryScope scope = 2;
*/
scope?: WorkspaceQueryScope | undefined;
};
/**
* Describes the message quixos.WorkspaceQueryDependency.
* Use `create(WorkspaceQueryDependencySchema)` to create a new message.
*/
export declare const WorkspaceQueryDependencySchema: GenMessage<WorkspaceQueryDependency>;
/**
* @generated from message quixos.EdgeDependency
*/
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"refs_pb.d.ts","sourceRoot":"","sources":["../../src/quixos/refs_pb.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAExE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,OAC21B,CAAC;AAE33B;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,sBAAsB,CAAC,GAAG;IAC5D;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;CAC9C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,UAAU,CAAC,aAAa,CACxB,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,2BAA2B,CAAC,GAAG;IACtE;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,UAAU,CAAC,kBAAkB,CAClC,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,yBAAyB,CAAC,GAAG;IAClE;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,UAAU,CAAC,gBAAgB,CAC9B,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,2BAA2B,CAAC,GAAG;IACtE;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,OAAO,EAAE;QACP;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,aAAa,CAAC;KACrB,GAAG;QACF;;WAEG;QACH,KAAK,EAAE,cAAc,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC;KACd,GAAG;QACF;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,qBAAqB,CAAC;KAC7B,GAAG;QACF;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,mBAAmB,CAAC;KAC3B,GAAG;QACF;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,SAAS,CAAC;KACjB,GAAG;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC;IAE3C;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,UAAU,CAAC,kBAAkB,CAClC,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC,GAAG;IAC9D;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,UAAU,CAAC,cAAc,CAC1B,CAAC"}
{"version":3,"file":"refs_pb.d.ts","sourceRoot":"","sources":["../../src/quixos/refs_pb.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAEjF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,OAC8sD,CAAC;AAE9uD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,sBAAsB,CAAC,GAAG;IAC5D;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;CAC9C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,UAAU,CAAC,aAAa,CACxB,CAAC;AAEnC;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,qBAAqB,CAAC,GAAG;IAC1D;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,IAAI,EAAE,iBAAiB,CAAC;CACzB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,UAAU,CAAC,YAAY,CACtB,CAAC;AAEnC;;GAEG;AACH,oBAAY,iBAAiB;IAC3B;;OAEG;IACH,WAAW,IAAI;IAEf;;OAEG;IACH,QAAQ,IAAI;IAEZ;;OAEG;IACH,IAAI,IAAI;CACT;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,OAAO,CAAC,iBAAiB,CAC7B,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,2BAA2B,CAAC,GAAG;IACtE;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,UAAU,CAAC,kBAAkB,CAClC,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,yBAAyB,CAAC,GAAG;IAClE;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,UAAU,CAAC,gBAAgB,CAC9B,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,2BAA2B,CAAC,GAAG;IACtE;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,OAAO,EAAE;QACP;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,aAAa,CAAC;KACrB,GAAG;QACF;;WAEG;QACH,KAAK,EAAE,cAAc,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC;KACd,GAAG;QACF;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,qBAAqB,CAAC;KAC7B,GAAG;QACF;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,mBAAmB,CAAC;KAC3B,GAAG;QACF;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,SAAS,CAAC;KACjB,GAAG;QACF;;WAEG;QACH,KAAK,EAAE,wBAAwB,CAAC;QAChC,IAAI,EAAE,gBAAgB,CAAC;KACxB,GAAG;QACF;;WAEG;QACH,KAAK,EAAE,oBAAoB,CAAC;QAC5B,IAAI,EAAE,YAAY,CAAC;KACpB,GAAG;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC;IAE3C;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,UAAU,CAAC,kBAAkB,CAClC,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,6BAA6B,CAAC,GAAG;IAC1E;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,EAAE,UAAU,CAAC,oBAAoB,CACtC,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,4BAA4B,CAAC,GAAG;IACxE;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,UAAU,CAAC,mBAAmB,CACpC,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,OAAO,CAAC,iCAAiC,CAAC,GAAG;IAClF;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,KAAK,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;CACzC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,8BAA8B,EAAE,UAAU,CAAC,wBAAwB,CAC9C,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC,GAAG;IAC9D;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,UAAU,CAAC,cAAc,CAC1B,CAAC"}
+48 -6
View File
@@ -1,33 +1,75 @@
// @generated by protoc-gen-es v2.12.1 with parameter "target=ts,import_extension=js"
// @generated from file quixos/refs.proto (package quixos, syntax proto3)
/* eslint-disable */
import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
/**
* Describes the file quixos/refs.proto.
*/
export const file_quixos_refs = /*@__PURE__*/ fileDesc("ChFxdWl4b3MvcmVmcy5wcm90bxIGcXVpeG9zInUKDUNhcGFiaWxpdHlSZWYSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAEgASgJEhQKDG9wZXJhdGlvbl9pZBgCIAEoCRIvCgtjb25mb3JtYW5jZRgDIAEoCzIaLnF1aXhvcy5Db25mb3JtYW5jZVdpdG5lc3MilgEKEkNvbmZvcm1hbmNlV2l0bmVzcxIRCglvYmplY3RfaWQYASABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAIgASgJEhYKDmNvbmZvcm1hbmNlX2lkGAMgASgJEh0KFXdvcmtzcGFjZV9yZXZpc2lvbl9pZBgEIAEoCRIXCg93b3Jrc3BhY2VfZXBvY2gYBSABKAkiQgoQUGFja2FnZUV4cG9ydFJlZhIbChNwYWNrYWdlX3JldmlzaW9uX2lkGAEgASgJEhEKCWV4cG9ydF9pZBgCIAEoCSLYAQoSSW5qZWN0ZWREZXBlbmRlbmN5Eg8KB3BvcnRfaWQYASABKAkSFwoNc3RhdGVfc2xvdF9pZBgCIAEoCUgAEiYKBGVkZ2UYAyABKAsyFi5xdWl4b3MuRWRnZURlcGVuZGVuY3lIABIfChVpbnRlcmZhY2VfcmV2aXNpb25faWQYBCABKAlIABIdChNjb25zdHJ1Y3Rvcl9hdG9tX2lkGAUgASgJSAASEgoIcXVlcnlfaWQYByABKAlIABIRCglvYmplY3RfaWQYBiABKAlCCQoHYmluZGluZyI9Cg5FZGdlRGVwZW5kZW5jeRIUCgxlZGdlX3R5cGVfaWQYASABKAkSFQoNcHJvamVjdGlvbl9pZBgCIAEoCWIGcHJvdG8z");
export const file_quixos_refs = /*@__PURE__*/ fileDesc("ChFxdWl4b3MvcmVmcy5wcm90bxIGcXVpeG9zInUKDUNhcGFiaWxpdHlSZWYSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAEgASgJEhQKDG9wZXJhdGlvbl9pZBgCIAEoCRIvCgtjb25mb3JtYW5jZRgDIAEoCzIaLnF1aXhvcy5Db25mb3JtYW5jZVdpdG5lc3Mi0QEKDEZpZWxkRWRpdGluZxIbChNnZXR0ZXJfb3BlcmF0aW9uX2lkGAEgASgJEhsKE3NldHRlcl9vcGVyYXRpb25faWQYAiABKAkSFQoNZG9jdW1lbnRfdHlwZRgDIAEoCRIWCg5iaW5kaW5nX2RpZ2VzdBgEIAEoCRInCgRtb2RlGAUgASgOMhkucXVpeG9zLkZpZWxkRWRpdGluZy5Nb2RlIi8KBE1vZGUSDwoLVU5TUEVDSUZJRUQQABIMCghSRUdJU1RFUhABEggKBENSRFQQAiKWAQoSQ29uZm9ybWFuY2VXaXRuZXNzEhEKCW9iamVjdF9pZBgBIAEoCRIdChVpbnRlcmZhY2VfcmV2aXNpb25faWQYAiABKAkSFgoOY29uZm9ybWFuY2VfaWQYAyABKAkSHQoVd29ya3NwYWNlX3JldmlzaW9uX2lkGAQgASgJEhcKD3dvcmtzcGFjZV9lcG9jaBgFIAEoCSJCChBQYWNrYWdlRXhwb3J0UmVmEhsKE3BhY2thZ2VfcmV2aXNpb25faWQYASABKAkSEQoJZXhwb3J0X2lkGAIgASgJIskCChJJbmplY3RlZERlcGVuZGVuY3kSDwoHcG9ydF9pZBgBIAEoCRIXCg1zdGF0ZV9zbG90X2lkGAIgASgJSAASJgoEZWRnZRgDIAEoCzIWLnF1aXhvcy5FZGdlRGVwZW5kZW5jeUgAEh8KFWludGVyZmFjZV9yZXZpc2lvbl9pZBgEIAEoCUgAEh0KE2NvbnN0cnVjdG9yX2F0b21faWQYBSABKAlIABISCghxdWVyeV9pZBgHIAEoCUgAEjsKD3dvcmtzcGFjZV9xdWVyeRgIIAEoCzIgLnF1aXhvcy5Xb3Jrc3BhY2VRdWVyeURlcGVuZGVuY3lIABIyCgpyZWZsZWN0aW9uGAkgASgLMhwucXVpeG9zLlJlZmxlY3Rpb25EZXBlbmRlbmN5SAASEQoJb2JqZWN0X2lkGAYgASgJQgkKB2JpbmRpbmciWAoUUmVmbGVjdGlvbkRlcGVuZGVuY3kSFAoMd29ya3NwYWNlX2lkGAEgASgJEhcKD3dvcmtzcGFjZV9lcG9jaBgCIAEoCRIRCglzZWxlY3RvcnMYAyADKAkimgEKE1dvcmtzcGFjZVF1ZXJ5U2NvcGUSFAoMd29ya3NwYWNlX2lkGAEgASgJEh0KFXdvcmtzcGFjZV9yZXZpc2lvbl9pZBgCIAEoCRIXCg93b3Jrc3BhY2VfZXBvY2gYAyABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAQgASgJEhYKDmJpbmRpbmdfZGlnZXN0GAUgASgJIlgKGFdvcmtzcGFjZVF1ZXJ5RGVwZW5kZW5jeRIQCghxdWVyeV9pZBgBIAEoCRIqCgVzY29wZRgCIAEoCzIbLnF1aXhvcy5Xb3Jrc3BhY2VRdWVyeVNjb3BlIj0KDkVkZ2VEZXBlbmRlbmN5EhQKDGVkZ2VfdHlwZV9pZBgBIAEoCRIVCg1wcm9qZWN0aW9uX2lkGAIgASgJYgZwcm90bzM");
/**
* Describes the message quixos.CapabilityRef.
* Use `create(CapabilityRefSchema)` to create a new message.
*/
export const CapabilityRefSchema = /*@__PURE__*/ messageDesc(file_quixos_refs, 0);
/**
* Describes the message quixos.FieldEditing.
* Use `create(FieldEditingSchema)` to create a new message.
*/
export const FieldEditingSchema = /*@__PURE__*/ messageDesc(file_quixos_refs, 1);
/**
* @generated from enum quixos.FieldEditing.Mode
*/
export var FieldEditing_Mode;
(function (FieldEditing_Mode) {
/**
* @generated from enum value: UNSPECIFIED = 0;
*/
FieldEditing_Mode[FieldEditing_Mode["UNSPECIFIED"] = 0] = "UNSPECIFIED";
/**
* @generated from enum value: REGISTER = 1;
*/
FieldEditing_Mode[FieldEditing_Mode["REGISTER"] = 1] = "REGISTER";
/**
* @generated from enum value: CRDT = 2;
*/
FieldEditing_Mode[FieldEditing_Mode["CRDT"] = 2] = "CRDT";
})(FieldEditing_Mode || (FieldEditing_Mode = {}));
/**
* Describes the enum quixos.FieldEditing.Mode.
*/
export const FieldEditing_ModeSchema = /*@__PURE__*/ enumDesc(file_quixos_refs, 1, 0);
/**
* Describes the message quixos.ConformanceWitness.
* Use `create(ConformanceWitnessSchema)` to create a new message.
*/
export const ConformanceWitnessSchema = /*@__PURE__*/ messageDesc(file_quixos_refs, 1);
export const ConformanceWitnessSchema = /*@__PURE__*/ messageDesc(file_quixos_refs, 2);
/**
* Describes the message quixos.PackageExportRef.
* Use `create(PackageExportRefSchema)` to create a new message.
*/
export const PackageExportRefSchema = /*@__PURE__*/ messageDesc(file_quixos_refs, 2);
export const PackageExportRefSchema = /*@__PURE__*/ messageDesc(file_quixos_refs, 3);
/**
* Describes the message quixos.InjectedDependency.
* Use `create(InjectedDependencySchema)` to create a new message.
*/
export const InjectedDependencySchema = /*@__PURE__*/ messageDesc(file_quixos_refs, 3);
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, 6);
/**
* Describes the message quixos.WorkspaceQueryDependency.
* Use `create(WorkspaceQueryDependencySchema)` to create a new message.
*/
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, 4);
export const EdgeDependencySchema = /*@__PURE__*/ messageDesc(file_quixos_refs, 8);
+35
View File
@@ -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 string = ReflectionKind> = 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<K extends string = ReflectionKind> = {
selector: ReflectionSelector<K>;
first?: number;
after?: string;
snapshot?: string;
};
/** Read-only metadata. Returned capability IDs confer no invocation authority. */
export type QxReflectionPort<K extends string = ReflectionKind> = {
read(request: ReflectionRequest<K>): Promise<DefinitionPage>;
watch(request: Omit<ReflectionRequest<K>, "after" | "snapshot">, signal: AbortSignal): AsyncIterable<DefinitionPage>;
};
//# sourceMappingURL=reflection.d.ts.map
+1
View File
@@ -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"}
+1
View File
@@ -0,0 +1 @@
export {};
Generated
+11 -11
View File
@@ -74,19 +74,19 @@
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1789699426,
"narHash": "sha256-dTbMFLHCjh5KlGzy34lcaFeKbBrCsPS2D5Pz+gw9v7k=",
"ref": "refs/tags/quixos-reachability/aadc35581dfb2016a43383ab3aec6c51f2f8ce06",
"rev": "aadc35581dfb2016a43383ab3aec6c51f2f8ce06",
"revCount": 86,
"lastModified": 1791261504,
"narHash": "sha256-QSk9DWR7n5KL6cMHzmSKKXNIyaFA0s8Nu+wXjhhlENI=",
"ref": "refs/tags/quixos-reachability/5b44c8154dc038efd87cf1cbdd2c00b66bfd4f87",
"rev": "5b44c8154dc038efd87cf1cbdd2c00b66bfd4f87",
"revCount": 184,
"type": "git",
"url": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-protocol.git"
"url": "https://repos.quixos.org/quixos-toolchain/quixos-protocol.git"
},
"original": {
"ref": "refs/tags/quixos-reachability/aadc35581dfb2016a43383ab3aec6c51f2f8ce06",
"rev": "aadc35581dfb2016a43383ab3aec6c51f2f8ce06",
"ref": "refs/tags/quixos-reachability/5b44c8154dc038efd87cf1cbdd2c00b66bfd4f87",
"rev": "5b44c8154dc038efd87cf1cbdd2c00b66bfd4f87",
"type": "git",
"url": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-protocol.git"
"url": "https://repos.quixos.org/quixos-toolchain/quixos-protocol.git"
}
},
"quixosNixHelpers": {
@@ -98,13 +98,13 @@
"rev": "7177130c0365f2fa58ea4877366e1c5d17db4c01",
"revCount": 4,
"type": "git",
"url": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-nix-helpers.git"
"url": "https://repos.quixos.org/quixos-toolchain/quixos-nix-helpers.git"
},
"original": {
"ref": "refs/tags/quixos-reachability/7177130c0365f2fa58ea4877366e1c5d17db4c01",
"rev": "7177130c0365f2fa58ea4877366e1c5d17db4c01",
"type": "git",
"url": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-nix-helpers.git"
"url": "https://repos.quixos.org/quixos-toolchain/quixos-nix-helpers.git"
}
},
"root": {
+2 -2
View File
@@ -4,9 +4,9 @@
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
quixos-protocol.url = "git+https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-protocol.git?ref=refs/tags/quixos-reachability/aadc35581dfb2016a43383ab3aec6c51f2f8ce06&rev=aadc35581dfb2016a43383ab3aec6c51f2f8ce06";
quixos-protocol.url = "git+https://repos.quixos.org/quixos-toolchain/quixos-protocol.git?ref=refs/tags/quixos-reachability/5b44c8154dc038efd87cf1cbdd2c00b66bfd4f87&rev=5b44c8154dc038efd87cf1cbdd2c00b66bfd4f87";
quixosNixHelpers = {
url = "git+https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos-nix-helpers.git?ref=refs/tags/quixos-reachability/7177130c0365f2fa58ea4877366e1c5d17db4c01&rev=7177130c0365f2fa58ea4877366e1c5d17db4c01";
url = "git+https://repos.quixos.org/quixos-toolchain/quixos-nix-helpers.git?ref=refs/tags/quixos-reachability/7177130c0365f2fa58ea4877366e1c5d17db4c01&rev=7177130c0365f2fa58ea4877366e1c5d17db4c01";
flake = false;
};
};
+3
View File
@@ -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 = <C, O>(
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) => {
+183 -50
View File
File diff suppressed because one or more lines are too long
+163 -18
View File
File diff suppressed because one or more lines are too long
+31 -6
View File
@@ -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<import("./quixos/orch_pb.js").QueryEvent>;
};
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<InterfacePort | undefined>;
@@ -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,15 +289,35 @@ export const createRuntimeContext = (
const ports = new Map<string, RuntimePort>();
for (const dependency of request.dependencies) {
switch (dependency.binding.case) {
case "queryId": {
const queryId = dependency.binding.value,
objectId = dependency.objectId || request.objectId;
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)
throw new Error(`Workspace query port ${dependency.portId} has no scope`);
const queryId =
dependency.binding.case === "queryId" ? dependency.binding.value : dependency.binding.value.queryId;
const root =
dependency.binding.case === "queryId"
? { case: "objectId" as const, value: dependency.objectId || request.objectId }
: { case: "workspaceScope" as const, value: dependency.binding.value.scope! };
ports.set(dependency.portId, {
queryId,
execute: (variables, expectedDefinitionDigest) =>
orch.executeQuery({ queryId, objectId, variables, expectedDefinitionDigest }),
orch.executeQuery({ queryId, root, variables, expectedDefinitionDigest }),
watch: (variables, signal, expectedDefinitionDigest) =>
orch.watchQuery({ queryId, objectId, variables, expectedDefinitionDigest }, { signal }),
orch.watchQuery({ queryId, root, variables, expectedDefinitionDigest }, { signal }),
});
break;
}
@@ -446,6 +470,7 @@ export const createRuntimeContext = (
interface: (portId: string) => requirePort<InterfacePort>(portId, "interfaceRevisionId"),
constructor: (portId: string) => requirePort<ConstructorPort>(portId, "atomId"),
query: (portId: string) => requirePort<QueryPort>(portId, "queryId"),
reflection: (portId: string) => requirePort<ReflectionPort>(portId, "reflection"),
};
};
+9 -2
View File
@@ -19,10 +19,17 @@ export type QxQuerySnapshot<T> = {
} & ({ status: "ready"; data: T } | { status: "partial"; data: QxQueryPartial<T> });
declare const queryTypes: unique symbol;
/** Generated shape evidence, not permission to run a query. */
export interface QxQueryDescriptor<Variables, Result, Root extends string = string> {
export interface QxQueryDescriptor<
Variables,
Result,
Root extends { kind: "object" | "workspace-interface"; interface: string } = {
kind: "object" | "workspace-interface";
interface: string;
},
> {
readonly id: string;
readonly definitionDigest: string;
readonly rootInterfaceRevisionId: Root;
readonly root: Root;
readonly variables: QxValueType;
readonly output: QxValueType;
readonly watch: boolean;
+473 -69
View File
File diff suppressed because one or more lines are too long
+173 -7
View File
@@ -2,15 +2,15 @@
// @generated from file quixos/refs.proto (package quixos, syntax proto3)
/* eslint-disable */
import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file quixos/refs.proto.
*/
export const file_quixos_refs: GenFile = /*@__PURE__*/
fileDesc("ChFxdWl4b3MvcmVmcy5wcm90bxIGcXVpeG9zInUKDUNhcGFiaWxpdHlSZWYSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAEgASgJEhQKDG9wZXJhdGlvbl9pZBgCIAEoCRIvCgtjb25mb3JtYW5jZRgDIAEoCzIaLnF1aXhvcy5Db25mb3JtYW5jZVdpdG5lc3MilgEKEkNvbmZvcm1hbmNlV2l0bmVzcxIRCglvYmplY3RfaWQYASABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAIgASgJEhYKDmNvbmZvcm1hbmNlX2lkGAMgASgJEh0KFXdvcmtzcGFjZV9yZXZpc2lvbl9pZBgEIAEoCRIXCg93b3Jrc3BhY2VfZXBvY2gYBSABKAkiQgoQUGFja2FnZUV4cG9ydFJlZhIbChNwYWNrYWdlX3JldmlzaW9uX2lkGAEgASgJEhEKCWV4cG9ydF9pZBgCIAEoCSLYAQoSSW5qZWN0ZWREZXBlbmRlbmN5Eg8KB3BvcnRfaWQYASABKAkSFwoNc3RhdGVfc2xvdF9pZBgCIAEoCUgAEiYKBGVkZ2UYAyABKAsyFi5xdWl4b3MuRWRnZURlcGVuZGVuY3lIABIfChVpbnRlcmZhY2VfcmV2aXNpb25faWQYBCABKAlIABIdChNjb25zdHJ1Y3Rvcl9hdG9tX2lkGAUgASgJSAASEgoIcXVlcnlfaWQYByABKAlIABIRCglvYmplY3RfaWQYBiABKAlCCQoHYmluZGluZyI9Cg5FZGdlRGVwZW5kZW5jeRIUCgxlZGdlX3R5cGVfaWQYASABKAkSFQoNcHJvamVjdGlvbl9pZBgCIAEoCWIGcHJvdG8z");
fileDesc("ChFxdWl4b3MvcmVmcy5wcm90bxIGcXVpeG9zInUKDUNhcGFiaWxpdHlSZWYSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAEgASgJEhQKDG9wZXJhdGlvbl9pZBgCIAEoCRIvCgtjb25mb3JtYW5jZRgDIAEoCzIaLnF1aXhvcy5Db25mb3JtYW5jZVdpdG5lc3Mi0QEKDEZpZWxkRWRpdGluZxIbChNnZXR0ZXJfb3BlcmF0aW9uX2lkGAEgASgJEhsKE3NldHRlcl9vcGVyYXRpb25faWQYAiABKAkSFQoNZG9jdW1lbnRfdHlwZRgDIAEoCRIWCg5iaW5kaW5nX2RpZ2VzdBgEIAEoCRInCgRtb2RlGAUgASgOMhkucXVpeG9zLkZpZWxkRWRpdGluZy5Nb2RlIi8KBE1vZGUSDwoLVU5TUEVDSUZJRUQQABIMCghSRUdJU1RFUhABEggKBENSRFQQAiKWAQoSQ29uZm9ybWFuY2VXaXRuZXNzEhEKCW9iamVjdF9pZBgBIAEoCRIdChVpbnRlcmZhY2VfcmV2aXNpb25faWQYAiABKAkSFgoOY29uZm9ybWFuY2VfaWQYAyABKAkSHQoVd29ya3NwYWNlX3JldmlzaW9uX2lkGAQgASgJEhcKD3dvcmtzcGFjZV9lcG9jaBgFIAEoCSJCChBQYWNrYWdlRXhwb3J0UmVmEhsKE3BhY2thZ2VfcmV2aXNpb25faWQYASABKAkSEQoJZXhwb3J0X2lkGAIgASgJIskCChJJbmplY3RlZERlcGVuZGVuY3kSDwoHcG9ydF9pZBgBIAEoCRIXCg1zdGF0ZV9zbG90X2lkGAIgASgJSAASJgoEZWRnZRgDIAEoCzIWLnF1aXhvcy5FZGdlRGVwZW5kZW5jeUgAEh8KFWludGVyZmFjZV9yZXZpc2lvbl9pZBgEIAEoCUgAEh0KE2NvbnN0cnVjdG9yX2F0b21faWQYBSABKAlIABISCghxdWVyeV9pZBgHIAEoCUgAEjsKD3dvcmtzcGFjZV9xdWVyeRgIIAEoCzIgLnF1aXhvcy5Xb3Jrc3BhY2VRdWVyeURlcGVuZGVuY3lIABIyCgpyZWZsZWN0aW9uGAkgASgLMhwucXVpeG9zLlJlZmxlY3Rpb25EZXBlbmRlbmN5SAASEQoJb2JqZWN0X2lkGAYgASgJQgkKB2JpbmRpbmciWAoUUmVmbGVjdGlvbkRlcGVuZGVuY3kSFAoMd29ya3NwYWNlX2lkGAEgASgJEhcKD3dvcmtzcGFjZV9lcG9jaBgCIAEoCRIRCglzZWxlY3RvcnMYAyADKAkimgEKE1dvcmtzcGFjZVF1ZXJ5U2NvcGUSFAoMd29ya3NwYWNlX2lkGAEgASgJEh0KFXdvcmtzcGFjZV9yZXZpc2lvbl9pZBgCIAEoCRIXCg93b3Jrc3BhY2VfZXBvY2gYAyABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAQgASgJEhYKDmJpbmRpbmdfZGlnZXN0GAUgASgJIlgKGFdvcmtzcGFjZVF1ZXJ5RGVwZW5kZW5jeRIQCghxdWVyeV9pZBgBIAEoCRIqCgVzY29wZRgCIAEoCzIbLnF1aXhvcy5Xb3Jrc3BhY2VRdWVyeVNjb3BlIj0KDkVkZ2VEZXBlbmRlbmN5EhQKDGVkZ2VfdHlwZV9pZBgBIAEoCRIVCg1wcm9qZWN0aW9uX2lkGAIgASgJYgZwcm90bzM");
/**
* @generated from message quixos.CapabilityRef
@@ -41,6 +41,71 @@ export type CapabilityRef = Message<"quixos.CapabilityRef"> & {
export const CapabilityRefSchema: GenMessage<CapabilityRef> = /*@__PURE__*/
messageDesc(file_quixos_refs, 0);
/**
* Resolved native editing semantics. A source snapshot alone grants no writer.
*
* @generated from message quixos.FieldEditing
*/
export type FieldEditing = Message<"quixos.FieldEditing"> & {
/**
* @generated from field: string getter_operation_id = 1;
*/
getterOperationId: string;
/**
* @generated from field: string setter_operation_id = 2;
*/
setterOperationId: string;
/**
* @generated from field: string document_type = 3;
*/
documentType: string;
/**
* @generated from field: string binding_digest = 4;
*/
bindingDigest: string;
/**
* @generated from field: quixos.FieldEditing.Mode mode = 5;
*/
mode: FieldEditing_Mode;
};
/**
* Describes the message quixos.FieldEditing.
* Use `create(FieldEditingSchema)` to create a new message.
*/
export const FieldEditingSchema: GenMessage<FieldEditing> = /*@__PURE__*/
messageDesc(file_quixos_refs, 1);
/**
* @generated from enum quixos.FieldEditing.Mode
*/
export enum FieldEditing_Mode {
/**
* @generated from enum value: UNSPECIFIED = 0;
*/
UNSPECIFIED = 0,
/**
* @generated from enum value: REGISTER = 1;
*/
REGISTER = 1,
/**
* @generated from enum value: CRDT = 2;
*/
CRDT = 2,
}
/**
* Describes the enum quixos.FieldEditing.Mode.
*/
export const FieldEditing_ModeSchema: GenEnum<FieldEditing_Mode> = /*@__PURE__*/
enumDesc(file_quixos_refs, 1, 0);
/**
* @generated from message quixos.ConformanceWitness
*/
@@ -76,7 +141,7 @@ export type ConformanceWitness = Message<"quixos.ConformanceWitness"> & {
* Use `create(ConformanceWitnessSchema)` to create a new message.
*/
export const ConformanceWitnessSchema: GenMessage<ConformanceWitness> = /*@__PURE__*/
messageDesc(file_quixos_refs, 1);
messageDesc(file_quixos_refs, 2);
/**
* @generated from message quixos.PackageExportRef
@@ -98,7 +163,7 @@ export type PackageExportRef = Message<"quixos.PackageExportRef"> & {
* Use `create(PackageExportRefSchema)` to create a new message.
*/
export const PackageExportRefSchema: GenMessage<PackageExportRef> = /*@__PURE__*/
messageDesc(file_quixos_refs, 2);
messageDesc(file_quixos_refs, 3);
/**
* @generated from message quixos.InjectedDependency
@@ -142,6 +207,18 @@ export type InjectedDependency = Message<"quixos.InjectedDependency"> & {
*/
value: string;
case: "queryId";
} | {
/**
* @generated from field: quixos.WorkspaceQueryDependency workspace_query = 8;
*/
value: WorkspaceQueryDependency;
case: "workspaceQuery";
} | {
/**
* @generated from field: quixos.ReflectionDependency reflection = 9;
*/
value: ReflectionDependency;
case: "reflection";
} | { case: undefined; value?: undefined };
/**
@@ -158,7 +235,96 @@ export type InjectedDependency = Message<"quixos.InjectedDependency"> & {
* Use `create(InjectedDependencySchema)` to create a new message.
*/
export const InjectedDependencySchema: GenMessage<InjectedDependency> = /*@__PURE__*/
messageDesc(file_quixos_refs, 3);
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<ReflectionDependency> = /*@__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).
*
* @generated from message quixos.WorkspaceQueryScope
*/
export type WorkspaceQueryScope = Message<"quixos.WorkspaceQueryScope"> & {
/**
* @generated from field: string workspace_id = 1;
*/
workspaceId: string;
/**
* @generated from field: string workspace_revision_id = 2;
*/
workspaceRevisionId: string;
/**
* @generated from field: string workspace_epoch = 3;
*/
workspaceEpoch: string;
/**
* @generated from field: string interface_revision_id = 4;
*/
interfaceRevisionId: string;
/**
* @generated from field: string binding_digest = 5;
*/
bindingDigest: string;
};
/**
* Describes the message quixos.WorkspaceQueryScope.
* Use `create(WorkspaceQueryScopeSchema)` to create a new message.
*/
export const WorkspaceQueryScopeSchema: GenMessage<WorkspaceQueryScope> = /*@__PURE__*/
messageDesc(file_quixos_refs, 6);
/**
* @generated from message quixos.WorkspaceQueryDependency
*/
export type WorkspaceQueryDependency = Message<"quixos.WorkspaceQueryDependency"> & {
/**
* @generated from field: string query_id = 1;
*/
queryId: string;
/**
* @generated from field: quixos.WorkspaceQueryScope scope = 2;
*/
scope?: WorkspaceQueryScope | undefined;
};
/**
* Describes the message quixos.WorkspaceQueryDependency.
* Use `create(WorkspaceQueryDependencySchema)` to create a new message.
*/
export const WorkspaceQueryDependencySchema: GenMessage<WorkspaceQueryDependency> = /*@__PURE__*/
messageDesc(file_quixos_refs, 7);
/**
* @generated from message quixos.EdgeDependency
@@ -180,5 +346,5 @@ export type EdgeDependency = Message<"quixos.EdgeDependency"> & {
* Use `create(EdgeDependencySchema)` to create a new message.
*/
export const EdgeDependencySchema: GenMessage<EdgeDependency> = /*@__PURE__*/
messageDesc(file_quixos_refs, 4);
messageDesc(file_quixos_refs, 8);
+32
View File
@@ -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 string = ReflectionKind> = 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<K extends string = ReflectionKind> = {
selector: ReflectionSelector<K>;
first?: number;
after?: string;
snapshot?: string;
};
/** Read-only metadata. Returned capability IDs confer no invocation authority. */
export type QxReflectionPort<K extends string = ReflectionKind> = {
read(request: ReflectionRequest<K>): Promise<DefinitionPage>;
watch(request: Omit<ReflectionRequest<K>, "after" | "snapshot">, signal: AbortSignal): AsyncIterable<DefinitionPage>;
};
+40 -1
View File
@@ -37,12 +37,51 @@ test("query ports carry only an injected query identity and root", async () => {
);
await context.query("list").execute({ first: jsToProtoValue(30) }, "checked-definition");
assert.equal(seen.expectedDefinitionDigest, "checked-definition");
assert.equal(seen.objectId, "obj:collection");
assert.deepEqual(seen.root, { case: "objectId", value: "obj:collection" });
assert.equal(seen.queryId, "pkg@1:upcoming");
assert.equal(protoValueToJs(seen.variables.first), 30);
assert.throws(() => context.query("not-injected"), /Missing/);
});
test("workspace query ports carry explicit scoped evidence, never their receiver", async () => {
let seen;
const dependency = create(InjectedDependencySchema, {
portId: "search",
binding: {
case: "workspaceQuery",
value: {
queryId: "pkg@1:search",
scope: {
workspaceId: "ws",
workspaceRevisionId: "ws@1",
workspaceEpoch: "1",
interfaceRevisionId: "searchable",
bindingDigest: "digest",
},
},
},
});
const context = createRuntimeContext(
{},
{
executeQuery: async (request) => {
seen = request;
return create(QueryResponseSchema);
},
},
{ objectId: "obj:receiver", input: {}, dependencies: [dependency] },
);
await context.query("search").execute({});
assert.equal(seen.root.case, "workspaceScope");
assert.equal(seen.root.value.workspaceId, "ws");
assert.equal(seen.objectId, undefined);
dependency.binding.value.scope = undefined;
assert.throws(
() => createRuntimeContext({}, {}, { objectId: "obj:receiver", input: {}, dependencies: [dependency] }),
/has no scope/,
);
});
test("query snapshots distinguish an unavailable scalar from a successful null", () => {
const output = {
kind: "record",
+58
View File
@@ -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/);
});