@dxos/assistant 0.8.0 → 0.8.1-main.013e445
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/chunk-BDMTBYIM.mjs +2285 -0
- package/dist/lib/browser/chunk-BDMTBYIM.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +328 -1206
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +17 -3
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/node/chunk-A44NGSCM.cjs +2296 -0
- package/dist/lib/node/chunk-A44NGSCM.cjs.map +7 -0
- package/dist/lib/node/index.cjs +335 -1206
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +40 -29
- package/dist/lib/node/testing/index.cjs.map +4 -4
- package/dist/lib/node-esm/chunk-J6DMSFSZ.mjs +2287 -0
- package/dist/lib/node-esm/chunk-J6DMSFSZ.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +328 -1206
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +17 -3
- package/dist/lib/node-esm/testing/index.mjs.map +4 -4
- package/dist/types/src/ai-service/defs.d.ts +8 -2
- package/dist/types/src/ai-service/defs.d.ts.map +1 -1
- package/dist/types/src/ai-service/edge-client.d.ts +19 -0
- package/dist/types/src/ai-service/edge-client.d.ts.map +1 -0
- package/dist/types/src/ai-service/index.d.ts +4 -1
- package/dist/types/src/ai-service/index.d.ts.map +1 -1
- package/dist/types/src/ai-service/message-collector.d.ts +88 -0
- package/dist/types/src/ai-service/message-collector.d.ts.map +1 -0
- package/dist/types/src/ai-service/ollama-client.d.ts +39 -0
- package/dist/types/src/ai-service/ollama-client.d.ts.map +1 -0
- package/dist/types/src/ai-service/parser.d.ts +11 -9
- package/dist/types/src/ai-service/parser.d.ts.map +1 -1
- package/dist/types/src/ai-service/service.d.ts +9 -0
- package/dist/types/src/ai-service/service.d.ts.map +1 -0
- package/dist/types/src/ai-service/stream.d.ts +2 -1
- package/dist/types/src/ai-service/stream.d.ts.map +1 -1
- package/dist/types/src/ai-service/testing/mock.d.ts +2 -2
- package/dist/types/src/ai-service/testing/mock.d.ts.map +1 -1
- package/dist/types/src/ai-service/types.d.ts +91 -157
- package/dist/types/src/ai-service/types.d.ts.map +1 -1
- package/dist/types/src/conversation/conversation.d.ts +11 -9
- package/dist/types/src/conversation/conversation.d.ts.map +1 -1
- package/dist/types/src/conversation/types.d.ts +1 -1
- package/dist/types/src/conversation/types.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/session/index.d.ts +2 -0
- package/dist/types/src/session/index.d.ts.map +1 -0
- package/dist/types/src/session/session.d.ts +215 -0
- package/dist/types/src/session/session.d.ts.map +1 -0
- package/dist/types/src/session/session.test.d.ts +2 -0
- package/dist/types/src/session/session.test.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +1 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/ollama.d.ts +6 -0
- package/dist/types/src/testing/ollama.d.ts.map +1 -0
- package/dist/types/src/testing/query-promts.d.ts +1 -1
- package/dist/types/src/testing/query-promts.d.ts.map +1 -1
- package/dist/types/src/testing/test-data.d.ts +1 -1
- package/dist/types/src/testing/test-data.d.ts.map +1 -1
- package/dist/types/src/testing/test-schema.d.ts +1 -1
- package/dist/types/src/testing/test-schema.d.ts.map +1 -1
- package/package.json +17 -14
- package/src/ai-service/client.test.ts +100 -13
- package/src/ai-service/defs.ts +18 -3
- package/src/ai-service/{client.ts → edge-client.ts} +18 -26
- package/src/ai-service/index.ts +4 -1
- package/src/ai-service/message-collector.ts +84 -0
- package/src/ai-service/ollama-client.ts +499 -0
- package/src/ai-service/parser.ts +8 -2
- package/src/ai-service/service.ts +15 -0
- package/src/ai-service/stream.ts +5 -3
- package/src/ai-service/testing/mock.ts +7 -2
- package/src/ai-service/types.ts +3 -3
- package/src/bin/chat.ts +3 -3
- package/src/conversation/conversation.test.ts +5 -5
- package/src/conversation/conversation.ts +3 -2
- package/src/conversation/types.ts +1 -1
- package/src/index.ts +1 -0
- package/src/session/index.ts +5 -0
- package/src/session/session.test.ts +256 -0
- package/src/session/session.ts +369 -0
- package/src/testing/artifacts.test.ts +4 -4
- package/src/testing/index.ts +1 -0
- package/src/testing/object-extraction.test.ts +1 -1
- package/src/testing/ollama.ts +15 -0
- package/src/testing/query-promts.ts +1 -1
- package/src/testing/query.test.ts +4 -4
- package/src/testing/test-data.ts +1 -1
- package/src/testing/test-schema.ts +1 -1
- package/dist/lib/browser/chunk-AXUUNA7O.mjs +0 -565
- package/dist/lib/browser/chunk-AXUUNA7O.mjs.map +0 -7
- package/dist/lib/node/chunk-QPHGQINW.cjs +0 -577
- package/dist/lib/node/chunk-QPHGQINW.cjs.map +0 -7
- package/dist/lib/node-esm/chunk-GOVFOBIB.mjs +0 -567
- package/dist/lib/node-esm/chunk-GOVFOBIB.mjs.map +0 -7
- package/dist/types/src/ai-service/client.d.ts +0 -25
- package/dist/types/src/ai-service/client.d.ts.map +0 -1
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/cypher/parjs.ts", "../../../src/cypher/combinators.ts", "../../../src/cypher/parser.ts", "../../../src/cypher/query-executor.ts", "../../../src/cypher/execution-plan.ts", "../../../src/cypher/schema.ts", "../../../src/util/trim.ts", "../../../src/cypher/echo-data-source.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\n// Workaround for https://github.com/vitest-dev/vitest/issues/7174.\nimport type { Parjser } from 'parjs';\n\nimport { parjsCombinators, parjs } from '#parjs';\n\nexport { type Parjser, parjsCombinators, parjs };\n", "//\n// Copyright 2024 DXOS.org\n//\n\n/* eslint-disable unused-imports/no-unused-vars */\n/* eslint-disable @typescript-eslint/consistent-type-imports */\n\nimport type {\n CypherQuery,\n EqualsPredicate,\n GraphPattern,\n GraphPatternConnector,\n Identifier,\n MatchClause,\n MemberExpression,\n NodePattern,\n Properties,\n Property,\n RelationshipPattern,\n ReturnClause,\n StringLiteral,\n WhereClause,\n} from './ast';\nimport { Parjser, parjs, parjsCombinators } from './parjs';\n\n// Helper parsers\nconst ws = parjs.whitespace(); // Parses whitespace\n\nconst nothing = parjs.string('').pipe(parjsCombinators.map(() => null)); // Parses nothing\n\nconst optional = <T>(parser: Parjser<T>) =>\n parser.pipe(\n parjsCombinators.recover(() => ({ kind: 'Soft' })),\n parjsCombinators.or(nothing),\n ); // Makes a parser optional\n\nconst keyword = (word: string) => parjs.string(word).pipe(parjsCombinators.map(() => word)); // Parses specific keywords\n\n// Identifiers (node labels, relationship types, variables, etc.)\nexport const identifier = parjs.regexp(/[a-zA-Z_][a-zA-Z0-9_]*/).pipe(\n parjsCombinators.map((match): Identifier => ({ astKind: 'Identifier', name: match[0] })), // Extract the matched string\n);\n\n// Literals (numbers and strings)\nconst numberLiteral = parjs.regexp(/-?\\d+(\\.\\d+)?/).pipe(parjsCombinators.map(Number)); // Numbers\nconst stringLiteral = parjs.regexp(/\"([^\"]*)\"|'([^']*)'/).pipe(\n parjsCombinators.map((match): StringLiteral => ({ astKind: 'StringLiteral', value: match[1] || match[2] })), // Extract content without quotes\n);\n\n// Node pattern (e.g., \"(n:Person {name: 'John'})\"\nconst variableTag = identifier.pipe(parjsCombinators.map((variable) => variable)).expects('variable tag');\nexport const label = identifier.pipe(parjsCombinators.map((name) => name));\nexport const property = identifier.pipe(\n parjsCombinators.then(parjs.string(':'), ws, stringLiteral),\n parjsCombinators.map(([key, , , value]): Property => ({ key, value })),\n);\nexport const properties = property.pipe(\n parjsCombinators.manySepBy(','),\n parjsCombinators.between('{', '}'),\n parjsCombinators.map((properties): Properties => ({ astKind: 'Properties', properties })),\n);\nexport const nodePattern = optional(variableTag).pipe(\n parjsCombinators.then(':'),\n parjsCombinators.then(ws, label, ws),\n parjsCombinators.then(optional(properties)),\n parjsCombinators.between('(', ')'),\n parjsCombinators.map(\n ([[[variable], _, label], properties]): NodePattern => ({ astKind: 'NodePattern', variable, label, properties }),\n ),\n);\n\nexport const relationshipPattern = optional(variableTag).pipe(\n parjsCombinators.then(':'),\n parjsCombinators.then(ws, label, ws),\n parjsCombinators.then(optional(properties)),\n parjsCombinators.between('[', ']'),\n parjsCombinators.map(\n ([[[variable], _, label], properties]): RelationshipPattern => ({\n astKind: 'RelationshipPattern',\n variable,\n label,\n properties,\n }),\n ),\n);\n\nconst graphPatternConnector = parjs.string('->').pipe(\n parjsCombinators.or('<-' as const, '-' as const),\n parjsCombinators.map((x): GraphPatternConnector => ({ astKind: 'GraphPatternConnector', direction: x })),\n);\n\nexport const graphPattern = nodePattern.pipe(\n parjsCombinators.or(relationshipPattern),\n parjsCombinators.manySepBy(graphPatternConnector),\n parjsCombinators.map((segments): GraphPattern => ({ astKind: 'GraphPattern', segments })),\n);\n\nexport const matchClause = keyword('MATCH').pipe(\n parjsCombinators.then(ws),\n parjsCombinators.then(graphPattern),\n parjsCombinators.map(([, pattern]): MatchClause => ({ astKind: 'MatchClause', pattern })),\n);\n\nconst memberExpression = identifier.pipe(\n parjsCombinators.manySepBy('.'),\n parjsCombinators.map((path): MemberExpression => ({ astKind: 'MemberExpression', path })),\n);\n\nconst equalsPredicate = memberExpression.pipe(\n parjsCombinators.then(ws, parjs.string('='), ws, stringLiteral),\n parjsCombinators.map(([left, , , , right]): EqualsPredicate => ({ astKind: 'EqualsPredicate', left, right })),\n);\n\nexport const whereClause = keyword('WHERE').pipe(\n parjsCombinators.then(\n ws,\n equalsPredicate.pipe(parjsCombinators.between(ws, ws), parjsCombinators.manySepBy(parjs.string('AND'))),\n ws,\n ),\n parjsCombinators.map(([, , predicates]): WhereClause => ({ astKind: 'WhereClause', predicates })),\n);\n\nexport const returnClause = keyword('RETURN').pipe(\n parjsCombinators.then(\n ws,\n memberExpression.pipe(\n parjsCombinators.then(\n optional(parjs.string('AS').pipe(parjsCombinators.between(ws), parjsCombinators.then(identifier))),\n ws,\n ),\n parjsCombinators.manySepBy(parjs.string(',').pipe(parjsCombinators.then(ws))),\n ),\n ws,\n ),\n parjsCombinators.map(([, , fields]): ReturnClause => ({ astKind: 'ReturnClause', fields: fields.map(([f]) => f) })),\n);\n\nexport const cypherQuery = ws.pipe(\n parjsCombinators.then(matchClause, ws, optional(whereClause), ws, returnClause, ws),\n parjsCombinators.map(\n ([, matchClause, , whereClause, , returnClause]): CypherQuery => ({\n astKind: 'CypherQuery',\n matchClause,\n whereClause,\n returnClause,\n }),\n ),\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type { CypherQuery } from './ast';\nimport { cypherQuery } from './combinators';\n\nexport type ParsedQuery = {\n ast: CypherQuery;\n};\n\nexport const parseCypherQuery = (query: string): ParsedQuery => {\n const parseResult = cypherQuery.parse(query);\n if (parseResult.isOk) {\n return { ast: parseResult.value };\n } else {\n throw new Error(`Failed to parse query: ${parseResult}`);\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type { JsonPath } from '@dxos/echo-schema';\nimport { log } from '@dxos/log';\nimport { mapValues } from '@dxos/util';\n\nimport { createExecutionPlan, type ExecutionPlan, type VariableName } from './execution-plan';\nimport { parseCypherQuery } from './parser';\n\nexport interface DataSource {\n getNodes: (params: { label?: string }) => Promise<Node[]>;\n getRelationships: (params: { label?: string }) => Promise<Relationship[]>;\n}\n\nexport type Node = {\n id: string;\n kind: 'node';\n label: string;\n properties: Record<string, unknown>;\n};\n\nexport type Relationship = {\n id: string;\n kind: 'relationship';\n label: string;\n properties: Record<string, unknown>;\n source: Node;\n target: Node;\n};\n\nexport const executeQueryPlan = async (\n dataSource: DataSource,\n plan: ExecutionPlan,\n): Promise<Record<string, unknown>[]> => {\n let buffer: Record<VariableName, Node | Relationship>[] = [];\n const results: Record<string, unknown>[] = [];\n\n for (const step of plan.steps) {\n log('begin step', { step });\n\n switch (step.type) {\n case 'NodeScan': {\n const nodes = await dataSource.getNodes({ label: step.label });\n buffer.push(...nodes.map((node) => ({ [step.into]: node })));\n break;\n }\n case 'FilterByLabel': {\n buffer = buffer.filter((item) => {\n const node = item[step.variable];\n return node && node.kind === 'node' && node.label === step.label;\n });\n break;\n }\n case 'FilterByProperty': {\n buffer = buffer.filter((item) => {\n const node = item[step.variable];\n return node && node.kind === 'node' && node.properties[step.property] === step.value;\n });\n break;\n }\n case 'RelationshipScan': {\n const relationships = await dataSource.getRelationships({ label: step.label });\n for (const tuple of [...buffer]) {\n if (tuple[step.anchor].kind !== 'node') {\n continue;\n }\n const filteredRelationships = relationships.filter((relationship) => {\n switch (step.direction) {\n case 'in':\n return relationship.target.id === tuple[step.anchor].id;\n case 'out':\n return relationship.source.id === tuple[step.anchor].id;\n case 'both':\n return (\n relationship.source.id === tuple[step.anchor].id || relationship.target.id === tuple[step.anchor].id\n );\n default:\n throw new Error(`Unknown direction: ${step.direction}`);\n }\n });\n for (let i = 0; i < filteredRelationships.length; i++) {\n const relationship = filteredRelationships[i];\n const newTuple = i === 0 ? tuple : { ...tuple };\n if (newTuple !== tuple) {\n buffer.push(newTuple);\n }\n newTuple[step.relationshipInto] = relationship;\n switch (step.direction) {\n case 'in':\n newTuple[step.nodeInto] = relationship.source;\n break;\n case 'out':\n newTuple[step.nodeInto] = relationship.target;\n break;\n case 'both':\n newTuple[step.nodeInto] =\n relationship.source.id === newTuple[step.anchor].id ? relationship.target : relationship.source;\n break;\n }\n }\n }\n break;\n }\n case 'ProduceResults': {\n for (const tuple of buffer) {\n const result: Record<string, unknown> = {};\n for (const field of step.fields) {\n result[field.name] = jsonPathGet(tuple[field.variable].properties, field.path);\n }\n results.push(result);\n }\n break;\n }\n }\n\n log('finish step', { buffer: buffer.map((tuple) => mapValues(tuple, (x) => x.id)), results });\n }\n\n return results;\n};\n\nexport const executeQuery = (dataSource: DataSource, query: string): Promise<Record<string, unknown>[]> => {\n const plan = createExecutionPlan(parseCypherQuery(query));\n return executeQueryPlan(dataSource, plan);\n};\n\n// TODO(dmaretskyi): Extract.\nconst jsonPathGet = (obj: Record<string, unknown>, path: JsonPath): unknown => {\n if (path === '' || path === '$') {\n return obj;\n }\n\n const parts = path.split('.');\n if (parts[0] === '$') {\n parts.shift();\n }\n\n let result: any = obj;\n for (const part of parts) {\n result = result?.[part];\n }\n return result;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type { JsonPath } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nimport type { GraphPatternConnector, MatchClause, ReturnClause, WhereClause } from './ast';\nimport type { ParsedQuery } from './parser';\n\nexport type VariableName = string & { __VariableName: never };\n\nexport type ExecutionPlanStep =\n | {\n type: 'NodeScan';\n label: string;\n into: VariableName;\n }\n | {\n type: 'FilterByLabel';\n variable: VariableName;\n label: string;\n }\n | {\n type: 'FilterByProperty';\n variable: VariableName;\n property: JsonPath;\n value: unknown;\n }\n | {\n /**\n * Scans (anchor)-[relationshipInto:label]->(nodeInto).\n */\n type: 'RelationshipScan';\n label: string;\n anchor: VariableName;\n relationshipInto: VariableName;\n nodeInto: VariableName;\n\n /**\n * `in`: (anchor)<-[relationshipInto:label]-(nodeInto)\n * `out`: (anchor)-[relationshipInto:label]->(nodeInto)\n * `both`: (anchor)-[relationshipInto:label]-(nodeInto)\n */\n direction: 'in' | 'out' | 'both';\n }\n | {\n type: 'ProduceResults';\n fields: {\n name: string;\n variable: VariableName;\n path: JsonPath;\n }[];\n };\n\nexport type ExecutionPlan = {\n steps: ExecutionPlanStep[];\n output: {\n fields: string[];\n };\n};\n\nexport const createExecutionPlan = (query: ParsedQuery): ExecutionPlan => {\n return new ExecutionPlanBuilder().build(query);\n};\n\nclass ExecutionPlanBuilder {\n private counter = 0;\n\n newVariable(): VariableName {\n return `anon_${this.counter++}` as VariableName;\n }\n\n build(query: ParsedQuery): ExecutionPlan {\n log('Creating execution plan for query', { query });\n return {\n steps: [\n ...this.createStepsForMatchClause(query.ast.matchClause),\n ...(query.ast.whereClause ? this.createStepsForWhereClause(query.ast.whereClause) : []),\n ...this.createStepsForReturnClause(query.ast.returnClause),\n ],\n output: {\n fields: this.getOutputFields(query.ast.returnClause),\n },\n };\n }\n\n createStepsForMatchClause(match: MatchClause): ExecutionPlanStep[] {\n invariant(match.pattern.segments.length > 0);\n const firstSegment = match.pattern.segments[0];\n invariant(firstSegment.astKind === 'NodePattern');\n let lastNodeVariable = (firstSegment.variable?.name as VariableName) ?? this.newVariable();\n\n const steps: ExecutionPlanStep[] = [];\n steps.push({\n type: 'NodeScan',\n label: firstSegment.label.name,\n into: lastNodeVariable,\n });\n\n if (firstSegment.properties) {\n for (const property of firstSegment.properties.properties) {\n steps.push({\n type: 'FilterByProperty',\n variable: lastNodeVariable,\n property: property.key.name as JsonPath,\n value: property.value.value,\n });\n }\n }\n\n for (let i = 1; i < match.pattern.segments.length; i++) {\n const relationshipSegment = match.pattern.segments[i++];\n invariant(relationshipSegment.astKind === 'RelationshipPattern');\n const nodeSegment = match.pattern.segments[i];\n invariant(nodeSegment.astKind === 'NodePattern');\n const leftSeparator = match.pattern.segments.separators[i - 2];\n const rightSeparator = match.pattern.segments.separators[i - 1];\n const direction = getDirection(leftSeparator.direction, rightSeparator.direction);\n\n const relationshipVariable = (relationshipSegment.variable?.name as VariableName) ?? this.newVariable();\n const nodeVariable = (nodeSegment.variable?.name as VariableName) ?? this.newVariable();\n\n steps.push({\n type: 'RelationshipScan',\n label: relationshipSegment.label.name,\n direction,\n anchor: lastNodeVariable,\n relationshipInto: relationshipVariable,\n nodeInto: nodeVariable,\n });\n\n if (relationshipSegment.properties) {\n for (const property of relationshipSegment.properties.properties) {\n steps.push({\n type: 'FilterByProperty',\n variable: relationshipVariable,\n property: property.key.name as JsonPath,\n value: property.value.value,\n });\n }\n }\n if (nodeSegment.label) {\n steps.push({\n type: 'FilterByLabel',\n variable: nodeVariable,\n label: nodeSegment.label.name,\n });\n }\n if (nodeSegment.properties) {\n for (const property of nodeSegment.properties.properties) {\n steps.push({\n type: 'FilterByProperty',\n variable: nodeVariable,\n property: property.key.name as JsonPath,\n value: property.value.value,\n });\n }\n }\n\n lastNodeVariable = nodeVariable;\n }\n\n return steps;\n }\n\n createStepsForWhereClause(where: WhereClause): ExecutionPlanStep[] {\n return [];\n }\n\n createStepsForReturnClause(returnClause: ReturnClause): ExecutionPlanStep[] {\n return [\n {\n type: 'ProduceResults',\n fields: returnClause.fields.map((field) => ({\n name: field.path.map((p) => p.name).join('_'),\n variable: field.path[0].name as VariableName,\n path:\n field.path.length > 1\n ? (field.path\n .slice(1)\n .map((p) => p.name)\n .join('.') as JsonPath)\n : ('$' as JsonPath),\n })),\n },\n ];\n }\n\n getOutputFields(returnClause: ReturnClause): string[] {\n return returnClause.fields.map((field) => field.path.map((p) => p.name).join('_'));\n }\n}\n\nconst getDirection = (\n left: GraphPatternConnector['direction'],\n right: GraphPatternConnector['direction'],\n): 'in' | 'out' | 'both' => {\n if (left === '-' && right === '->') {\n return 'out';\n } else if (left === '<-' && right === '-') {\n return 'in';\n } else if (left === '-' && right === '-') {\n return 'both';\n }\n throw new Error(`Invalid direction: ()${left}[]${right}()`);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { raise } from '@dxos/debug';\nimport { JSON_SCHEMA_ECHO_REF_ID, type JsonSchemaType } from '@dxos/echo-schema';\n\nimport { trim } from '../util';\n\n/**\n * Formats ECHO schema to be consumed by LLM.\n * Schema is formatted in cypher format.\n * Objects are represented as nodes.\n * References are represented as relationships.\n */\nexport const formatJsonSchemaForLLM = (schemaTypes: JsonSchemaType[]): string[] => {\n return schemaTypes.flatMap((schema) => [\n formatNodeSchema(schema),\n ...formatInferredRelationships(schema, schemaTypes),\n ]);\n};\n\nconst formatNodeSchema = (schema: JsonSchemaType) => {\n const label = formatNodeLabel(schema.typename ?? raise(new Error('Schema must have $id')));\n const properties = Object.entries(schema.properties!).filter(([key, prop]) => key !== 'id' && !isReference(prop));\n\n return trim`\n <node>\n (:${label})\n\n <description>${schema.description}</description>\n\n <properties>\n ${properties.map(([key, value]) => {\n return trim`\n <${key}>\n <type>${value.type}</type>\n <description>${value.description}</description>\n </${key}>\n `;\n })}\n </properties>\n </node>\n `;\n};\n\nconst formatInferredRelationships = (schema: JsonSchemaType, allSchema: JsonSchemaType[]): string[] => {\n const nodeLabel = formatNodeLabel(schema.typename ?? raise(new Error('Schema must have $id')));\n const relationships = Object.entries(schema.properties!).filter(([key, prop]) => isReference(prop));\n\n return relationships.map(([key, value]) => {\n const relationshipLabel = formatInferredRelationshipLabel(\n schema.typename ?? raise(new Error('Schema must have $id')),\n key,\n );\n\n // TODO(dmaretskyi): Registered schema don't get reference types updated.\n const targetSchema = allSchema.find((schema) => `dxn:type/${schema.typename}` === value.reference?.schema.$ref);\n const targetLabel = targetSchema ? formatNodeLabel(targetSchema?.typename ?? '') : '';\n\n return trim`\n <relationship>\n (:${nodeLabel})-[:${relationshipLabel}]->(:${targetLabel})\n\n <description>${value.description}</description>\n </relationship>\n `;\n });\n};\n\nexport const formatNodeLabel = (typename: string) => {\n return typename.replace(/^example\\.com\\/type\\//g, '');\n};\n\nexport const formatInferredRelationshipLabel = (typename: string, property: string) => {\n const nodeLabel = formatNodeLabel(typename);\n return `${nodeLabel}_${property}`.toUpperCase();\n};\n\nexport const isReference = (schema: JsonSchemaType) =>\n schema.$id === JSON_SCHEMA_ECHO_REF_ID ||\n (schema.type === 'array' &&\n !Array.isArray(schema.items) &&\n typeof schema.items === 'object' &&\n '$id' in schema.items &&\n schema.items.$id === JSON_SCHEMA_ECHO_REF_ID);\n", "//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * Trims multiline strings.\n */\n// TODO(burdon): Move to util.\nexport const trim = (strings: TemplateStringsArray, ...values: any[]) => {\n const combined = strings.reduce((acc, str, i) => {\n return acc + str + (values[i] || '');\n }, '');\n\n return combined.replace('/^\\n/', '').replace(/\\n$/, '');\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { raise } from '@dxos/debug';\nimport { type EchoDatabase, Filter, type ReactiveEchoObject } from '@dxos/echo-db';\nimport { type S, getSchemaTypename, StoredSchema, toJsonSchema } from '@dxos/echo-schema';\nimport { getSchema } from '@dxos/live-object';\nimport { log } from '@dxos/log';\n\nimport type { DataSource, Node, Relationship } from './query-executor';\nimport { formatInferredRelationshipLabel, formatNodeLabel, isReference } from './schema';\n\nexport class EchoDataSource implements DataSource {\n constructor(private readonly _db: EchoDatabase) {}\n\n @log.method()\n async getNodes({ label }: { label?: string }): Promise<Node[]> {\n if (!label) {\n const { objects } = await this._db.query().run();\n return objects.map(this._objectToNode);\n }\n\n const schema = (await this._getAllSchema()).find((s) => getSchemaTypename(s)?.endsWith(label));\n\n if (!schema) {\n return [];\n }\n\n const { objects } = await this._db.query(Filter.schema(schema)).run();\n return objects.map(this._objectToNode);\n }\n\n @log.method()\n async getRelationships({ label }: { label?: string }): Promise<Relationship[]> {\n const syntheticRefRelationships = (await this._getAllSchema())\n .filter((schema) => getSchemaTypename(schema) !== StoredSchema.typename)\n .flatMap((schema) => {\n const jsonSchema = toJsonSchema(schema);\n const relationships = Object.entries(jsonSchema.properties!).filter(([key, prop]) => isReference(prop));\n\n return relationships.map(([key, value]) => {\n const relationshipLabel = formatInferredRelationshipLabel(\n jsonSchema.typename ?? raise(new Error('Schema must have typename')),\n key,\n );\n\n return {\n label: relationshipLabel,\n schema,\n property: key,\n };\n });\n });\n const relationship = syntheticRefRelationships.find((r) => r.label === label);\n if (!relationship) {\n return []; // TODO(dmaretskyi): Handle real relationships.\n }\n\n const { objects } = await this._db.query(Filter.schema(relationship.schema)).run();\n return (\n await Promise.all(objects.map((object) => this._projectRefRelationship(object, relationship.property)))\n ).flat();\n }\n\n private async _getAllSchema(): Promise<S.Schema.AnyNoContext[]> {\n return [\n ...(await this._db.schemaRegistry.query().run()),\n // TODO(dmaretskyi): Remove once we can serialize recursive schema.\n ...this._db.graph.schemaRegistry.schemas.filter((s) => getSchemaTypename(s)?.startsWith('example.org')),\n ].filter((schema) => getSchemaTypename(schema) !== StoredSchema.typename);\n }\n\n private _objectToNode(object: ReactiveEchoObject<any>): Node {\n const { id, ...properties } = object;\n return {\n id,\n kind: 'node',\n label: formatNodeLabel(getSchemaTypename(getSchema(object)!)!),\n properties,\n };\n }\n\n private async _projectRefRelationship(object: ReactiveEchoObject<any>, prop: string): Promise<Relationship[]> {\n if (!object[prop]) {\n return [];\n }\n\n const value = Array.isArray(object[prop]) ? object[prop] : [object[prop]];\n\n return Promise.all(\n value.map(async (ref): Promise<Relationship> => {\n const target = await ref.load();\n return {\n id: `${object.id}-${prop}-${target.id}`,\n kind: 'relationship',\n label: formatInferredRelationshipLabel(getSchemaTypename(getSchema(object)!)!, prop),\n properties: {},\n source: this._objectToNode(object),\n target: this._objectToNode(target),\n };\n }),\n );\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["parjsCombinators", "parjs", "ws", "parjs", "whitespace", "nothing", "string", "pipe", "parjsCombinators", "map", "optional", "parser", "recover", "kind", "or", "keyword", "word", "identifier", "regexp", "match", "astKind", "name", "numberLiteral", "Number", "stringLiteral", "value", "variableTag", "variable", "expects", "label", "property", "then", "key", "properties", "manySepBy", "between", "nodePattern", "_", "relationshipPattern", "graphPatternConnector", "x", "direction", "graphPattern", "segments", "matchClause", "pattern", "memberExpression", "path", "equalsPredicate", "left", "right", "whereClause", "predicates", "returnClause", "fields", "f", "cypherQuery", "parseCypherQuery", "query", "parseResult", "cypherQuery", "parse", "isOk", "ast", "value", "Error", "log", "mapValues", "invariant", "log", "createExecutionPlan", "query", "ExecutionPlanBuilder", "build", "counter", "newVariable", "steps", "createStepsForMatchClause", "ast", "matchClause", "whereClause", "createStepsForWhereClause", "createStepsForReturnClause", "returnClause", "output", "fields", "getOutputFields", "match", "pattern", "segments", "length", "firstSegment", "astKind", "lastNodeVariable", "variable", "name", "push", "type", "label", "into", "properties", "property", "key", "value", "i", "relationshipSegment", "nodeSegment", "leftSeparator", "separators", "rightSeparator", "direction", "getDirection", "relationshipVariable", "nodeVariable", "anchor", "relationshipInto", "nodeInto", "where", "map", "field", "path", "p", "join", "slice", "left", "right", "Error", "executeQueryPlan", "dataSource", "plan", "buffer", "results", "step", "steps", "log", "type", "nodes", "getNodes", "label", "push", "map", "node", "into", "filter", "item", "variable", "kind", "properties", "property", "value", "relationships", "getRelationships", "tuple", "anchor", "filteredRelationships", "relationship", "direction", "target", "id", "source", "Error", "i", "length", "newTuple", "relationshipInto", "nodeInto", "result", "field", "fields", "name", "jsonPathGet", "path", "mapValues", "x", "executeQuery", "query", "createExecutionPlan", "parseCypherQuery", "obj", "parts", "split", "shift", "part", "raise", "JSON_SCHEMA_ECHO_REF_ID", "trim", "strings", "values", "combined", "reduce", "acc", "str", "i", "replace", "formatJsonSchemaForLLM", "schemaTypes", "flatMap", "schema", "formatNodeSchema", "formatInferredRelationships", "label", "formatNodeLabel", "typename", "raise", "Error", "properties", "Object", "entries", "filter", "key", "prop", "isReference", "trim", "description", "map", "value", "type", "allSchema", "nodeLabel", "relationships", "relationshipLabel", "formatInferredRelationshipLabel", "targetSchema", "find", "reference", "$ref", "targetLabel", "replace", "property", "toUpperCase", "$id", "JSON_SCHEMA_ECHO_REF_ID", "Array", "isArray", "items", "raise", "Filter", "getSchemaTypename", "StoredSchema", "toJsonSchema", "getSchema", "log", "EchoDataSource", "constructor", "_db", "getNodes", "label", "objects", "query", "run", "map", "_objectToNode", "schema", "_getAllSchema", "find", "s", "getSchemaTypename", "endsWith", "Filter", "getRelationships", "syntheticRefRelationships", "filter", "StoredSchema", "typename", "flatMap", "jsonSchema", "toJsonSchema", "relationships", "Object", "entries", "properties", "key", "prop", "isReference", "value", "relationshipLabel", "formatInferredRelationshipLabel", "raise", "Error", "property", "relationship", "r", "Promise", "all", "object", "_projectRefRelationship", "flat", "schemaRegistry", "graph", "schemas", "startsWith", "id", "kind", "formatNodeLabel", "getSchema", "Array", "isArray", "ref", "target", "load", "source", "log", "method"]
|
|
7
|
-
}
|