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
36 changed files with 1767 additions and 154 deletions
+3 -3
View File
@@ -1,8 +1,8 @@
{
"version": 1,
"sourceRepo": "https://gitea-external.egads.tutti.syntaxblitz.net/quixos/quixos",
"sourceCommit": "7efe88cdfc5244727d80239c79845b44d1e79ccb",
"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) => {
+35 -5
View File
@@ -1,6 +1,6 @@
import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
import type { PersistencePlan, QueryRelationalPlan, QuerySelection } from "./schema_pb.js";
import type { CapabilityRef, FieldEditing } from "../quixos/refs_pb.js";
import type { CapabilityRef, FieldEditing, WorkspaceQueryScope } from "../quixos/refs_pb.js";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file camino/api.proto.
@@ -915,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;
*/
@@ -1370,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
+1 -1
View File
File diff suppressed because one or more lines are too long
+127 -3
View File
@@ -460,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.
@@ -658,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
*/
@@ -701,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;
@@ -1071,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
*/
@@ -1109,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
*/
@@ -1126,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;
*/
@@ -1167,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.
@@ -1274,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"}
+361 -1
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, FieldEditing, 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
*/
@@ -478,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.
@@ -775,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 -30
View File
File diff suppressed because one or more lines are too long
+85
View File
@@ -170,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;
@@ -187,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":"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"}
{"version":3,"file":"refs_pb.d.ts","sourceRoot":"","sources":["../../src/quixos/refs_pb.ts"],"names":[],"mappings":"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"}
+17 -2
View File
@@ -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("ChFxdWl4b3MvcmVmcy5wcm90bxIGcXVpeG9zInUKDUNhcGFiaWxpdHlSZWYSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAEgASgJEhQKDG9wZXJhdGlvbl9pZBgCIAEoCRIvCgtjb25mb3JtYW5jZRgDIAEoCzIaLnF1aXhvcy5Db25mb3JtYW5jZVdpdG5lc3Mi0QEKDEZpZWxkRWRpdGluZxIbChNnZXR0ZXJfb3BlcmF0aW9uX2lkGAEgASgJEhsKE3NldHRlcl9vcGVyYXRpb25faWQYAiABKAkSFQoNZG9jdW1lbnRfdHlwZRgDIAEoCRIWCg5iaW5kaW5nX2RpZ2VzdBgEIAEoCRInCgRtb2RlGAUgASgOMhkucXVpeG9zLkZpZWxkRWRpdGluZy5Nb2RlIi8KBE1vZGUSDwoLVU5TUEVDSUZJRUQQABIMCghSRUdJU1RFUhABEggKBENSRFQQAiKWAQoSQ29uZm9ybWFuY2VXaXRuZXNzEhEKCW9iamVjdF9pZBgBIAEoCRIdChVpbnRlcmZhY2VfcmV2aXNpb25faWQYAiABKAkSFgoOY29uZm9ybWFuY2VfaWQYAyABKAkSHQoVd29ya3NwYWNlX3JldmlzaW9uX2lkGAQgASgJEhcKD3dvcmtzcGFjZV9lcG9jaBgFIAEoCSJCChBQYWNrYWdlRXhwb3J0UmVmEhsKE3BhY2thZ2VfcmV2aXNpb25faWQYASABKAkSEQoJZXhwb3J0X2lkGAIgASgJItgBChJJbmplY3RlZERlcGVuZGVuY3kSDwoHcG9ydF9pZBgBIAEoCRIXCg1zdGF0ZV9zbG90X2lkGAIgASgJSAASJgoEZWRnZRgDIAEoCzIWLnF1aXhvcy5FZGdlRGVwZW5kZW5jeUgAEh8KFWludGVyZmFjZV9yZXZpc2lvbl9pZBgEIAEoCUgAEh0KE2NvbnN0cnVjdG9yX2F0b21faWQYBSABKAlIABISCghxdWVyeV9pZBgHIAEoCUgAEhEKCW9iamVjdF9pZBgGIAEoCUIJCgdiaW5kaW5nIj0KDkVkZ2VEZXBlbmRlbmN5EhQKDGVkZ2VfdHlwZV9pZBgBIAEoCRIVCg1wcm9qZWN0aW9uX2lkGAIgASgJYgZwcm90bzM");
export const file_quixos_refs = /*@__PURE__*/ fileDesc("ChFxdWl4b3MvcmVmcy5wcm90bxIGcXVpeG9zInUKDUNhcGFiaWxpdHlSZWYSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAEgASgJEhQKDG9wZXJhdGlvbl9pZBgCIAEoCRIvCgtjb25mb3JtYW5jZRgDIAEoCzIaLnF1aXhvcy5Db25mb3JtYW5jZVdpdG5lc3Mi0QEKDEZpZWxkRWRpdGluZxIbChNnZXR0ZXJfb3BlcmF0aW9uX2lkGAEgASgJEhsKE3NldHRlcl9vcGVyYXRpb25faWQYAiABKAkSFQoNZG9jdW1lbnRfdHlwZRgDIAEoCRIWCg5iaW5kaW5nX2RpZ2VzdBgEIAEoCRInCgRtb2RlGAUgASgOMhkucXVpeG9zLkZpZWxkRWRpdGluZy5Nb2RlIi8KBE1vZGUSDwoLVU5TUEVDSUZJRUQQABIMCghSRUdJU1RFUhABEggKBENSRFQQAiKWAQoSQ29uZm9ybWFuY2VXaXRuZXNzEhEKCW9iamVjdF9pZBgBIAEoCRIdChVpbnRlcmZhY2VfcmV2aXNpb25faWQYAiABKAkSFgoOY29uZm9ybWFuY2VfaWQYAyABKAkSHQoVd29ya3NwYWNlX3JldmlzaW9uX2lkGAQgASgJEhcKD3dvcmtzcGFjZV9lcG9jaBgFIAEoCSJCChBQYWNrYWdlRXhwb3J0UmVmEhsKE3BhY2thZ2VfcmV2aXNpb25faWQYASABKAkSEQoJZXhwb3J0X2lkGAIgASgJIskCChJJbmplY3RlZERlcGVuZGVuY3kSDwoHcG9ydF9pZBgBIAEoCRIXCg1zdGF0ZV9zbG90X2lkGAIgASgJSAASJgoEZWRnZRgDIAEoCzIWLnF1aXhvcy5FZGdlRGVwZW5kZW5jeUgAEh8KFWludGVyZmFjZV9yZXZpc2lvbl9pZBgEIAEoCUgAEh0KE2NvbnN0cnVjdG9yX2F0b21faWQYBSABKAlIABISCghxdWVyeV9pZBgHIAEoCUgAEjsKD3dvcmtzcGFjZV9xdWVyeRgIIAEoCzIgLnF1aXhvcy5Xb3Jrc3BhY2VRdWVyeURlcGVuZGVuY3lIABIyCgpyZWZsZWN0aW9uGAkgASgLMhwucXVpeG9zLlJlZmxlY3Rpb25EZXBlbmRlbmN5SAASEQoJb2JqZWN0X2lkGAYgASgJQgkKB2JpbmRpbmciWAoUUmVmbGVjdGlvbkRlcGVuZGVuY3kSFAoMd29ya3NwYWNlX2lkGAEgASgJEhcKD3dvcmtzcGFjZV9lcG9jaBgCIAEoCRIRCglzZWxlY3RvcnMYAyADKAkimgEKE1dvcmtzcGFjZVF1ZXJ5U2NvcGUSFAoMd29ya3NwYWNlX2lkGAEgASgJEh0KFXdvcmtzcGFjZV9yZXZpc2lvbl9pZBgCIAEoCRIXCg93b3Jrc3BhY2VfZXBvY2gYAyABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAQgASgJEhYKDmJpbmRpbmdfZGlnZXN0GAUgASgJIlgKGFdvcmtzcGFjZVF1ZXJ5RGVwZW5kZW5jeRIQCghxdWVyeV9pZBgBIAEoCRIqCgVzY29wZRgCIAEoCzIbLnF1aXhvcy5Xb3Jrc3BhY2VRdWVyeVNjb3BlIj0KDkVkZ2VEZXBlbmRlbmN5EhQKDGVkZ2VfdHlwZV9pZBgBIAEoCRIVCg1wcm9qZWN0aW9uX2lkGAIgASgJYgZwcm90bzM");
/**
* Describes the message quixos.CapabilityRef.
* Use `create(CapabilityRefSchema)` to create a new message.
@@ -53,8 +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, 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, 5);
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": 1789723189,
"narHash": "sha256-IsiBSkuu/d2IgASVi4S1ZdKk1mTglS+HMJWrNYQohJM=",
"ref": "refs/tags/quixos-reachability/b0d31ba51c4c1c49ec2ba715c99e5f5327505d01",
"rev": "b0d31ba51c4c1c49ec2ba715c99e5f5327505d01",
"revCount": 92,
"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/b0d31ba51c4c1c49ec2ba715c99e5f5327505d01",
"rev": "b0d31ba51c4c1c49ec2ba715c99e5f5327505d01",
"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/b0d31ba51c4c1c49ec2ba715c99e5f5327505d01&rev=b0d31ba51c4c1c49ec2ba715c99e5f5327505d01";
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) => {
+30 -6
View File
File diff suppressed because one or more lines are too long
+156 -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;
+457 -31
View File
File diff suppressed because one or more lines are too long
+103 -2
View File
@@ -10,7 +10,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file quixos/refs.proto.
*/
export const file_quixos_refs: GenFile = /*@__PURE__*/
fileDesc("ChFxdWl4b3MvcmVmcy5wcm90bxIGcXVpeG9zInUKDUNhcGFiaWxpdHlSZWYSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAEgASgJEhQKDG9wZXJhdGlvbl9pZBgCIAEoCRIvCgtjb25mb3JtYW5jZRgDIAEoCzIaLnF1aXhvcy5Db25mb3JtYW5jZVdpdG5lc3Mi0QEKDEZpZWxkRWRpdGluZxIbChNnZXR0ZXJfb3BlcmF0aW9uX2lkGAEgASgJEhsKE3NldHRlcl9vcGVyYXRpb25faWQYAiABKAkSFQoNZG9jdW1lbnRfdHlwZRgDIAEoCRIWCg5iaW5kaW5nX2RpZ2VzdBgEIAEoCRInCgRtb2RlGAUgASgOMhkucXVpeG9zLkZpZWxkRWRpdGluZy5Nb2RlIi8KBE1vZGUSDwoLVU5TUEVDSUZJRUQQABIMCghSRUdJU1RFUhABEggKBENSRFQQAiKWAQoSQ29uZm9ybWFuY2VXaXRuZXNzEhEKCW9iamVjdF9pZBgBIAEoCRIdChVpbnRlcmZhY2VfcmV2aXNpb25faWQYAiABKAkSFgoOY29uZm9ybWFuY2VfaWQYAyABKAkSHQoVd29ya3NwYWNlX3JldmlzaW9uX2lkGAQgASgJEhcKD3dvcmtzcGFjZV9lcG9jaBgFIAEoCSJCChBQYWNrYWdlRXhwb3J0UmVmEhsKE3BhY2thZ2VfcmV2aXNpb25faWQYASABKAkSEQoJZXhwb3J0X2lkGAIgASgJItgBChJJbmplY3RlZERlcGVuZGVuY3kSDwoHcG9ydF9pZBgBIAEoCRIXCg1zdGF0ZV9zbG90X2lkGAIgASgJSAASJgoEZWRnZRgDIAEoCzIWLnF1aXhvcy5FZGdlRGVwZW5kZW5jeUgAEh8KFWludGVyZmFjZV9yZXZpc2lvbl9pZBgEIAEoCUgAEh0KE2NvbnN0cnVjdG9yX2F0b21faWQYBSABKAlIABISCghxdWVyeV9pZBgHIAEoCUgAEhEKCW9iamVjdF9pZBgGIAEoCUIJCgdiaW5kaW5nIj0KDkVkZ2VEZXBlbmRlbmN5EhQKDGVkZ2VfdHlwZV9pZBgBIAEoCRIVCg1wcm9qZWN0aW9uX2lkGAIgASgJYgZwcm90bzM");
fileDesc("ChFxdWl4b3MvcmVmcy5wcm90bxIGcXVpeG9zInUKDUNhcGFiaWxpdHlSZWYSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAEgASgJEhQKDG9wZXJhdGlvbl9pZBgCIAEoCRIvCgtjb25mb3JtYW5jZRgDIAEoCzIaLnF1aXhvcy5Db25mb3JtYW5jZVdpdG5lc3Mi0QEKDEZpZWxkRWRpdGluZxIbChNnZXR0ZXJfb3BlcmF0aW9uX2lkGAEgASgJEhsKE3NldHRlcl9vcGVyYXRpb25faWQYAiABKAkSFQoNZG9jdW1lbnRfdHlwZRgDIAEoCRIWCg5iaW5kaW5nX2RpZ2VzdBgEIAEoCRInCgRtb2RlGAUgASgOMhkucXVpeG9zLkZpZWxkRWRpdGluZy5Nb2RlIi8KBE1vZGUSDwoLVU5TUEVDSUZJRUQQABIMCghSRUdJU1RFUhABEggKBENSRFQQAiKWAQoSQ29uZm9ybWFuY2VXaXRuZXNzEhEKCW9iamVjdF9pZBgBIAEoCRIdChVpbnRlcmZhY2VfcmV2aXNpb25faWQYAiABKAkSFgoOY29uZm9ybWFuY2VfaWQYAyABKAkSHQoVd29ya3NwYWNlX3JldmlzaW9uX2lkGAQgASgJEhcKD3dvcmtzcGFjZV9lcG9jaBgFIAEoCSJCChBQYWNrYWdlRXhwb3J0UmVmEhsKE3BhY2thZ2VfcmV2aXNpb25faWQYASABKAkSEQoJZXhwb3J0X2lkGAIgASgJIskCChJJbmplY3RlZERlcGVuZGVuY3kSDwoHcG9ydF9pZBgBIAEoCRIXCg1zdGF0ZV9zbG90X2lkGAIgASgJSAASJgoEZWRnZRgDIAEoCzIWLnF1aXhvcy5FZGdlRGVwZW5kZW5jeUgAEh8KFWludGVyZmFjZV9yZXZpc2lvbl9pZBgEIAEoCUgAEh0KE2NvbnN0cnVjdG9yX2F0b21faWQYBSABKAlIABISCghxdWVyeV9pZBgHIAEoCUgAEjsKD3dvcmtzcGFjZV9xdWVyeRgIIAEoCzIgLnF1aXhvcy5Xb3Jrc3BhY2VRdWVyeURlcGVuZGVuY3lIABIyCgpyZWZsZWN0aW9uGAkgASgLMhwucXVpeG9zLlJlZmxlY3Rpb25EZXBlbmRlbmN5SAASEQoJb2JqZWN0X2lkGAYgASgJQgkKB2JpbmRpbmciWAoUUmVmbGVjdGlvbkRlcGVuZGVuY3kSFAoMd29ya3NwYWNlX2lkGAEgASgJEhcKD3dvcmtzcGFjZV9lcG9jaBgCIAEoCRIRCglzZWxlY3RvcnMYAyADKAkimgEKE1dvcmtzcGFjZVF1ZXJ5U2NvcGUSFAoMd29ya3NwYWNlX2lkGAEgASgJEh0KFXdvcmtzcGFjZV9yZXZpc2lvbl9pZBgCIAEoCRIXCg93b3Jrc3BhY2VfZXBvY2gYAyABKAkSHQoVaW50ZXJmYWNlX3JldmlzaW9uX2lkGAQgASgJEhYKDmJpbmRpbmdfZGlnZXN0GAUgASgJIlgKGFdvcmtzcGFjZVF1ZXJ5RGVwZW5kZW5jeRIQCghxdWVyeV9pZBgBIAEoCRIqCgVzY29wZRgCIAEoCzIbLnF1aXhvcy5Xb3Jrc3BhY2VRdWVyeVNjb3BlIj0KDkVkZ2VEZXBlbmRlbmN5EhQKDGVkZ2VfdHlwZV9pZBgBIAEoCRIVCg1wcm9qZWN0aW9uX2lkGAIgASgJYgZwcm90bzM");
/**
* @generated from message quixos.CapabilityRef
@@ -207,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 };
/**
@@ -225,6 +237,95 @@ export type InjectedDependency = Message<"quixos.InjectedDependency"> & {
export const InjectedDependencySchema: GenMessage<InjectedDependency> = /*@__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<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
*/
@@ -245,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, 5);
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/);
});