@dxos/assistant 0.7.4 → 0.7.5-feature-compute.4d9d99a
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-AKP45LQH.mjs → chunk-LVLSJQB3.mjs} +506 -357
- package/dist/lib/browser/chunk-LVLSJQB3.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +17 -17
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +10 -3
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/node/{chunk-G6CGWEMO.cjs → chunk-SHOSAIOD.cjs} +507 -362
- package/dist/lib/node/chunk-SHOSAIOD.cjs.map +7 -0
- package/dist/lib/node/index.cjs +42 -42
- package/dist/lib/node/index.cjs.map +1 -1
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +18 -12
- package/dist/lib/node/testing/index.cjs.map +4 -4
- package/dist/lib/node-esm/{chunk-WUPUPEFB.mjs → chunk-ZLBTRSUY.mjs} +506 -357
- package/dist/lib/node-esm/chunk-ZLBTRSUY.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +17 -17
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +10 -3
- package/dist/lib/node-esm/testing/index.mjs.map +4 -4
- package/dist/types/src/ai-service/client.d.ts +15 -32
- package/dist/types/src/ai-service/client.d.ts.map +1 -1
- package/dist/types/src/ai-service/index.d.ts +2 -1
- package/dist/types/src/ai-service/index.d.ts.map +1 -1
- package/dist/types/src/ai-service/stream.d.ts +34 -0
- package/dist/types/src/ai-service/stream.d.ts.map +1 -0
- package/dist/types/src/ai-service/stream.test.d.ts +2 -0
- package/dist/types/src/ai-service/stream.test.d.ts.map +1 -0
- package/dist/types/src/ai-service/types/index.d.ts +3 -0
- package/dist/types/src/ai-service/types/index.d.ts.map +1 -0
- package/dist/types/src/ai-service/types/message.d.ts +191 -0
- package/dist/types/src/ai-service/types/message.d.ts.map +1 -0
- package/dist/types/src/ai-service/types/schema.d.ts +175 -0
- package/dist/types/src/ai-service/types/schema.d.ts.map +1 -0
- package/dist/types/src/ai-service/util/index.d.ts +2 -0
- package/dist/types/src/ai-service/util/index.d.ts.map +1 -0
- package/dist/types/src/ai-service/{sse.d.ts → util/sse.d.ts} +5 -0
- package/dist/types/src/ai-service/util/sse.d.ts.map +1 -0
- package/dist/types/src/conversation/conversation.d.ts +54 -4
- package/dist/types/src/conversation/conversation.d.ts.map +1 -1
- package/dist/types/src/conversation/types.d.ts +35 -4
- package/dist/types/src/conversation/types.d.ts.map +1 -1
- package/dist/types/src/cypher/combinators.d.ts.map +1 -1
- package/dist/types/src/cypher/parjs.d.ts +1 -1
- package/dist/types/src/cypher/parjs.d.ts.map +1 -1
- package/dist/types/src/cypher/schema.d.ts.map +1 -1
- package/dist/types/src/testing/artifacts.test.d.ts +1 -0
- package/dist/types/src/testing/artifacts.test.d.ts.map +1 -0
- package/dist/types/src/testing/data.d.ts +2 -0
- package/dist/types/src/testing/data.d.ts.map +1 -0
- package/dist/types/src/testing/defs.d.ts +5 -0
- package/dist/types/src/testing/defs.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/test-data.d.ts +1 -1
- package/dist/types/src/testing/test-data.d.ts.map +1 -1
- package/package.json +20 -18
- package/src/ai-service/client.test.ts +25 -26
- package/src/ai-service/client.ts +29 -177
- package/src/ai-service/index.ts +2 -1
- package/src/ai-service/stream.test.ts +186 -0
- package/src/ai-service/stream.ts +181 -0
- package/src/ai-service/types/index.ts +6 -0
- package/src/ai-service/types/message.ts +147 -0
- package/src/ai-service/types/schema.ts +128 -0
- package/src/ai-service/util/index.ts +5 -0
- package/src/ai-service/{sse.ts → util/sse.ts} +5 -0
- package/src/bin/chat.ts +6 -9
- package/src/conversation/conversation.test.ts +10 -14
- package/src/conversation/conversation.ts +109 -14
- package/src/conversation/types.ts +47 -6
- package/src/cypher/combinators.test.ts +3 -3
- package/src/cypher/combinators.ts +0 -1
- package/src/cypher/execution-plan.test.ts +5 -3
- package/src/cypher/parjs-shims.d.ts +4 -0
- package/src/cypher/parjs.ts +2 -2
- package/src/cypher/query-executor.test.ts +1 -1
- package/src/cypher/schema.ts +0 -1
- package/src/index.ts +1 -1
- package/src/testing/artifacts.test.ts +182 -0
- package/src/testing/data.ts +13 -0
- package/src/testing/defs.ts +8 -0
- package/src/testing/index.ts +1 -0
- package/src/testing/query.test.ts +9 -9
- package/src/testing/test-data.ts +1 -1
- package/vendor/parjs-browser.mjs +4 -0
- package/vendor/parjs-default.mjs +8 -0
- package/dist/lib/browser/chunk-AKP45LQH.mjs.map +0 -7
- package/dist/lib/node/chunk-G6CGWEMO.cjs.map +0 -7
- package/dist/lib/node-esm/chunk-WUPUPEFB.mjs.map +0 -7
- package/dist/types/src/ai-service/schema.d.ts +0 -296
- package/dist/types/src/ai-service/schema.d.ts.map +0 -1
- package/dist/types/src/ai-service/sse.d.ts.map +0 -1
- package/dist/types/src/sanity.test.d.ts +0 -2
- package/dist/types/src/sanity.test.d.ts.map +0 -1
- package/src/ai-service/schema.ts +0 -260
- package/src/sanity.test.ts +0 -9
|
@@ -18,6 +18,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var testing_exports = {};
|
|
20
20
|
__export(testing_exports, {
|
|
21
|
+
AI_SERVICE_ENDPOINT: () => AI_SERVICE_ENDPOINT,
|
|
21
22
|
Contact: () => Contact,
|
|
22
23
|
MockDataSource: () => MockDataSource,
|
|
23
24
|
ObjectId: () => ObjectId2,
|
|
@@ -31,7 +32,7 @@ __export(testing_exports, {
|
|
|
31
32
|
seedTestData: () => seedTestData
|
|
32
33
|
});
|
|
33
34
|
module.exports = __toCommonJS(testing_exports);
|
|
34
|
-
var
|
|
35
|
+
var import_chunk_SHOSAIOD = require("../chunk-SHOSAIOD.cjs");
|
|
35
36
|
var import_schema = require("@effect/schema");
|
|
36
37
|
var import_echo_schema = require("@dxos/echo-schema");
|
|
37
38
|
var import_log = require("@dxos/log");
|
|
@@ -41,6 +42,10 @@ var import_invariant = require("@dxos/invariant");
|
|
|
41
42
|
var import_live_object = require("@dxos/live-object");
|
|
42
43
|
var import_schema2 = require("@effect/schema");
|
|
43
44
|
var import_echo_schema3 = require("@dxos/echo-schema");
|
|
45
|
+
var AI_SERVICE_ENDPOINT = {
|
|
46
|
+
LOCAL: "http://localhost:8788",
|
|
47
|
+
REMOTE: "https://ai-service.dxos.workers.dev"
|
|
48
|
+
};
|
|
44
49
|
var createLogger = ({ stream, filter, onImage } = {}) => {
|
|
45
50
|
const images = {};
|
|
46
51
|
let currentText = "";
|
|
@@ -156,8 +161,8 @@ var createLogger = ({ stream, filter, onImage } = {}) => {
|
|
|
156
161
|
}
|
|
157
162
|
};
|
|
158
163
|
};
|
|
159
|
-
var __dxlog_file = "/
|
|
160
|
-
var createCypherTool = (dataSource, schemaTypes = []) => (0,
|
|
164
|
+
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/experimental/assistant/src/testing/query-promts.ts";
|
|
165
|
+
var createCypherTool = (dataSource, schemaTypes = []) => (0, import_chunk_SHOSAIOD.defineTool)({
|
|
161
166
|
name: "graphQuery",
|
|
162
167
|
description: "Query the ECHO graph database in cypher query language. Returns data from the database." + (schemaTypes.length > 0 ? `
|
|
163
168
|
|
|
@@ -197,7 +202,7 @@ ${createSystemPrompt(schemaTypes)}` : ""),
|
|
|
197
202
|
S: void 0,
|
|
198
203
|
C: (f, a) => f(...a)
|
|
199
204
|
});
|
|
200
|
-
const results = await (0,
|
|
205
|
+
const results = await (0, import_chunk_SHOSAIOD.executeQuery)(dataSource, query);
|
|
201
206
|
(0, import_log.log)("query complete", {
|
|
202
207
|
results
|
|
203
208
|
}, {
|
|
@@ -206,7 +211,7 @@ ${createSystemPrompt(schemaTypes)}` : ""),
|
|
|
206
211
|
S: void 0,
|
|
207
212
|
C: (f, a) => f(...a)
|
|
208
213
|
});
|
|
209
|
-
return
|
|
214
|
+
return import_chunk_SHOSAIOD.LLMToolResult.Success(results);
|
|
210
215
|
} catch (e) {
|
|
211
216
|
import_log.log.catch(e, void 0, {
|
|
212
217
|
F: __dxlog_file,
|
|
@@ -214,17 +219,17 @@ ${createSystemPrompt(schemaTypes)}` : ""),
|
|
|
214
219
|
S: void 0,
|
|
215
220
|
C: (f, a) => f(...a)
|
|
216
221
|
});
|
|
217
|
-
return
|
|
222
|
+
return import_chunk_SHOSAIOD.LLMToolResult.Error(e.message);
|
|
218
223
|
}
|
|
219
224
|
}
|
|
220
225
|
});
|
|
221
|
-
var createSystemPrompt = (schemaTypes) =>
|
|
226
|
+
var createSystemPrompt = (schemaTypes) => import_chunk_SHOSAIOD.trim`
|
|
222
227
|
You have access to ECHO graph database. You can query the database to get data to satisfy user prompts.
|
|
223
228
|
|
|
224
229
|
Database schema is defined in pseud-cypher syntax. The schema is:
|
|
225
230
|
|
|
226
231
|
<schema>
|
|
227
|
-
${(0,
|
|
232
|
+
${(0, import_chunk_SHOSAIOD.formatJsonSchemaForLLM)(schemaTypes.map((schema) => (0, import_echo_schema.toJsonSchema)(schema)))}
|
|
228
233
|
<schema>
|
|
229
234
|
|
|
230
235
|
Before replying always think step-by-step on how to proceed.
|
|
@@ -236,7 +241,7 @@ var createSystemPrompt = (schemaTypes) => import_chunk_G6CGWEMO.trim`
|
|
|
236
241
|
|
|
237
242
|
Before answering the user's question, decide what tools you need to use to answer the question.
|
|
238
243
|
`;
|
|
239
|
-
var __dxlog_file2 = "/
|
|
244
|
+
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/experimental/assistant/src/testing/test-data.ts";
|
|
240
245
|
var seedTestData = (db) => {
|
|
241
246
|
const contactRich = db.add((0, import_live_object.create)(Contact, {
|
|
242
247
|
name: "Rich"
|
|
@@ -482,7 +487,7 @@ var MockDataSource = class {
|
|
|
482
487
|
this.nodes.push({
|
|
483
488
|
kind: "node",
|
|
484
489
|
id: object.id,
|
|
485
|
-
label: (0,
|
|
490
|
+
label: (0, import_chunk_SHOSAIOD.formatNodeLabel)(object.typeDxn),
|
|
486
491
|
properties: object.data
|
|
487
492
|
});
|
|
488
493
|
}
|
|
@@ -491,7 +496,7 @@ var MockDataSource = class {
|
|
|
491
496
|
const typenameDxn = schema.$id ?? (0, import_debug.raise)(new Error("Schema must have $id"));
|
|
492
497
|
for (const [name, propSchema] of Object.entries(schema.properties)) {
|
|
493
498
|
if (propSchema.$id === import_echo_schema2.JSON_SCHEMA_ECHO_REF_ID) {
|
|
494
|
-
const label = (0,
|
|
499
|
+
const label = (0, import_chunk_SHOSAIOD.formatInferredRelationshipLabel)(typenameDxn, name);
|
|
495
500
|
const source = this.nodes.find((node) => node.id === object.id);
|
|
496
501
|
if (!source) {
|
|
497
502
|
continue;
|
|
@@ -510,7 +515,7 @@ var MockDataSource = class {
|
|
|
510
515
|
target
|
|
511
516
|
});
|
|
512
517
|
} else if (propSchema.type === "array" && propSchema.items?.$id === import_echo_schema2.JSON_SCHEMA_ECHO_REF_ID) {
|
|
513
|
-
const label = (0,
|
|
518
|
+
const label = (0, import_chunk_SHOSAIOD.formatInferredRelationshipLabel)(typenameDxn, name);
|
|
514
519
|
const source = this.nodes.find((node) => node.id === object.id);
|
|
515
520
|
if (!source) {
|
|
516
521
|
continue;
|
|
@@ -604,6 +609,7 @@ var Org = import_schema2.Schema.Struct({
|
|
|
604
609
|
});
|
|
605
610
|
// Annotate the CommonJS export names for ESM import in node:
|
|
606
611
|
0 && (module.exports = {
|
|
612
|
+
AI_SERVICE_ENDPOINT,
|
|
607
613
|
Contact,
|
|
608
614
|
MockDataSource,
|
|
609
615
|
ObjectId,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/testing/logger.ts", "../../../../src/testing/query-promts.ts", "../../../../src/testing/test-data.ts", "../../../../src/testing/test-schema.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport type { ImageSource, MessageContentBlock } from '../ai-service';\nimport type { ConversationEvent } from '../conversation';\n\nexport const createLogger = ({\n stream,\n filter,\n onImage,\n}: {\n stream?: boolean;\n filter?: (event: ConversationEvent) => boolean;\n onImage?: (img: { id: string; description?: string; source: ImageSource }) => void;\n} = {}) => {\n const images: Record<string, any> = {};\n let currentText = '';\n\n return (event: ConversationEvent) => {\n if (typeof filter === 'function' && !filter(event)) {\n return;\n }\n\n const printContentBlock = (content: MessageContentBlock) => {\n switch (content.type) {\n case 'text':\n process.stdout.write(content.text);\n break;\n case 'tool_use':\n process.stdout.write(`⚙️ [Tool Use] ${content.name}\\n`);\n break;\n case 'image': {\n if (content.id && content.source) {\n images[content.id] = content.source;\n }\n process.stdout.write(`[Image id=${content.id} media_type=${content.source?.media_type}]`);\n break;\n }\n }\n };\n\n const onTextBlockPrinted = (text: string) => {\n const imageMatch = text.match(/<image id=\"([^\"]+)\"(?:\\s+prompt=\"([^\"]+)\")?\\s*\\/>/);\n if (imageMatch && onImage && images[imageMatch[1]]) {\n onImage({\n id: imageMatch[1],\n description: imageMatch[2], // Extract prompt as description if present\n source: images[imageMatch[1]],\n });\n }\n };\n\n if (stream) {\n switch (event.type) {\n case 'message_start': {\n process.stdout.write(`${event.message.role.toUpperCase()}\\n\\n`);\n for (const content of event.message.content) {\n printContentBlock(content);\n }\n break;\n }\n case 'content_block_start': {\n currentText = '';\n printContentBlock(event.content);\n break;\n }\n case 'content_block_delta': {\n switch (event.delta.type) {\n case 'text_delta': {\n currentText += event.delta.text;\n process.stdout.write(event.delta.text);\n break;\n }\n case 'input_json_delta': {\n process.stdout.write(event.delta.partial_json);\n break;\n }\n }\n break;\n }\n case 'content_block_stop': {\n process.stdout.write('\\n');\n onTextBlockPrinted(currentText);\n currentText = '';\n break;\n }\n case 'message_delta': {\n break;\n }\n case 'message_stop': {\n process.stdout.write('\\n\\n');\n break;\n }\n }\n }\n\n switch (event.type) {\n case 'message': {\n if (!stream || event.message.role !== 'assistant') {\n process.stdout.write(`${event.message.role.toUpperCase()}\\n\\n`);\n for (const block of event.message.content) {\n switch (block.type) {\n case 'text':\n process.stdout.write(block.text + '\\n');\n onTextBlockPrinted(block.text);\n break;\n case 'tool_use':\n process.stdout.write(`⚙️ [Tool Use] ${block.name}\\n`);\n process.stdout.write(` ${JSON.stringify(block.input)}\\n`);\n break;\n case 'tool_result':\n if (block.isError) {\n process.stdout.write('❌ [Tool Error]\\n');\n process.stdout.write(block.content + '\\n');\n } else {\n process.stdout.write('✅ [Tool Success]\\n');\n process.stdout.write(block.content + '\\n');\n }\n }\n process.stdout.write('\\n\\n');\n }\n }\n break;\n }\n }\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Schema as S } from '@effect/schema';\n\nimport { toJsonSchema } from '@dxos/echo-schema';\nimport { log } from '@dxos/log';\n\nimport { defineTool, LLMToolResult } from '../conversation';\nimport { executeQuery, formatJsonSchemaForLLM, type DataSource } from '../cypher';\nimport { trim } from '../util';\n\nexport const createCypherTool = (dataSource: DataSource, schemaTypes: S.Schema.Any[] = []) =>\n defineTool({\n name: 'graphQuery',\n description:\n 'Query the ECHO graph database in cypher query language. Returns data from the database.' +\n (schemaTypes.length > 0 ? `\\n\\n${createSystemPrompt(schemaTypes)}` : ''),\n schema: S.Struct({\n query: S.String.annotations({\n description: `\n A valid cypher query string to execute.\n Query must have one MATCH clause.\n Match clause can have multiple patterns but they must all be connected via a relationship chain.\n Query might have zero or one WHERE clauses.\n Query must have one RETURN clause.\n RETURN clause can have multiple expressions separated by commas.\n DISTINCT keyword is not allowed.\n\n <example>\n MATCH (n:Person) RETURN n.name\n </example>\n\n <example>\n MATCH (s:Studio)-[:PRODUCED]->(m:Movie)-[:PRODUCED_IN]->(c:City {name: \"Las Vegas\"}) RETURN s\n </example>\n \n <example>\n MATCH (a:Actor)-[:STARRED_IN]->(m:Movie)<-[:PRODUCED]-(s:Studio {name: \"Cinema Pictures\"}) WHERE m.name = \"Once upon a time\" RETURN m.name, a.name\n </example>\n `,\n }),\n }),\n execute: async ({ query }) => {\n try {\n log('cypher query', { query });\n const results = await executeQuery(dataSource, query);\n log('query complete', { results });\n return LLMToolResult.Success(results);\n } catch (e: any) {\n log.catch(e);\n return LLMToolResult.Error(e.message);\n }\n },\n });\n\nexport const createSystemPrompt = (schemaTypes: S.Schema.Any[]) => trim`\n You have access to ECHO graph database. You can query the database to get data to satisfy user prompts.\n\n Database schema is defined in pseud-cypher syntax. The schema is:\n\n <schema>\n ${formatJsonSchemaForLLM(schemaTypes.map((schema) => toJsonSchema(schema)))}\n <schema>\n\n Before replying always think step-by-step on how to proceed.\n Print your thoughts inside <cot> tags.\n \n <example>\n <cot>To answer the question I need to ...</cot>\n </example>\n\n Before answering the user's question, decide what tools you need to use to answer the question.\n`;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Schema as S } from '@effect/schema';\n\nimport { raise } from '@dxos/debug';\nimport { JSON_SCHEMA_ECHO_REF_ID, ObjectId, toJsonSchema, type JsonSchemaType, type Ref } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { create, makeRef } from '@dxos/live-object';\n\nimport {\n type DataSource,\n type Node,\n type Relationship,\n formatInferredRelationshipLabel,\n formatNodeLabel,\n} from '../cypher';\nimport { Contact, Org, Project, Task } from '../testing';\nimport type { EchoDatabase } from '@dxos/echo-db';\n\nexport const seedTestData = (db: EchoDatabase) => {\n const contactRich = db.add(\n create(Contact, {\n name: 'Rich',\n }),\n );\n const contactJosiah = db.add(\n create(Contact, {\n name: 'Josiah',\n }),\n );\n const contactDima = db.add(\n create(Contact, {\n name: 'Dima',\n }),\n );\n const contactFred = db.add(\n create(Contact, {\n name: 'Fred',\n }),\n );\n\n const projectComposer = db.add(\n create(Project, {\n name: 'Composer',\n }),\n );\n const projectEcho = db.add(\n create(Project, {\n name: 'ECHO',\n }),\n );\n const projectDoodles = db.add(\n create(Project, {\n name: 'Doodles',\n }),\n );\n\n const _taskComposer1 = db.add(\n create(Task, {\n name: 'Optimize startup performance',\n project: makeRef(projectComposer),\n assignee: makeRef(contactJosiah),\n }),\n );\n const _taskComposer2 = db.add(\n create(Task, {\n name: 'Create form builder',\n project: makeRef(projectComposer),\n assignee: makeRef(contactRich),\n }),\n );\n const _taskComposer3 = db.add(\n create(Task, {\n name: 'Add support for custom themes',\n project: makeRef(projectComposer),\n assignee: makeRef(contactJosiah),\n }),\n );\n const _taskComposer5 = db.add(\n create(Task, {\n name: 'Implement community plugin',\n project: makeRef(projectComposer),\n assignee: makeRef(contactFred),\n }),\n );\n const _taskComposer4 = db.add(\n create(Task, {\n name: 'Implement dark mode',\n project: makeRef(projectComposer),\n assignee: makeRef(contactRich),\n }),\n );\n const _taskEcho1 = db.add(\n create(Task, {\n name: 'Implement cypher query engine',\n project: makeRef(projectEcho),\n assignee: makeRef(contactDima),\n }),\n );\n const _taskEcho2 = db.add(\n create(Task, {\n name: 'Add schema editor',\n project: makeRef(projectEcho),\n assignee: makeRef(contactRich),\n }),\n );\n const _taskDoodles1 = db.add(\n create(Task, {\n name: 'Add support for custom themes',\n project: makeRef(projectDoodles),\n assignee: makeRef(contactFred),\n }),\n );\n const _taskDoodles2 = db.add(\n create(Task, {\n name: 'Implement dark mode',\n project: makeRef(projectDoodles),\n assignee: makeRef(contactJosiah),\n }),\n );\n\n const _orgDxos = db.add(\n create(Org, {\n name: 'DXOS',\n employees: [makeRef(contactRich), makeRef(contactJosiah), makeRef(contactDima)],\n projects: [makeRef(projectEcho)],\n }),\n );\n const _orgBraneframe = db.add(\n create(Org, {\n name: 'Braneframe',\n employees: [makeRef(contactJosiah), makeRef(contactRich)],\n projects: [makeRef(projectComposer)],\n }),\n );\n};\n\n// TODO(burdon): Use schema/testing.\nexport const createTestData = (): MockDataSource => {\n const dataSource = new MockDataSource();\n\n const contactRich = dataSource.add(Contact, {\n id: ObjectId.random(),\n name: 'Rich',\n });\n const contactJosiah = dataSource.add(Contact, {\n id: ObjectId.random(),\n name: 'Josiah',\n });\n const contactDima = dataSource.add(Contact, {\n id: ObjectId.random(),\n name: 'Dima',\n });\n const contactFred = dataSource.add(Contact, {\n id: ObjectId.random(),\n name: 'Fred',\n });\n\n const projectComposer = dataSource.add(Project, {\n id: ObjectId.random(),\n name: 'Composer',\n });\n const projectEcho = dataSource.add(Project, {\n id: ObjectId.random(),\n name: 'ECHO',\n });\n const projectDoodles = dataSource.add(Project, {\n id: ObjectId.random(),\n name: 'Doodles',\n });\n\n const _taskComposer1 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Optimize startup performance',\n project: makeRef(projectComposer),\n assignee: makeRef(contactJosiah),\n });\n const _taskComposer2 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Create form builder',\n project: makeRef(projectComposer),\n assignee: makeRef(contactRich),\n });\n const _taskComposer3 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Add support for custom themes',\n project: makeRef(projectComposer),\n assignee: makeRef(contactJosiah),\n });\n const _taskComposer5 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Implement community plugin',\n project: makeRef(projectComposer),\n assignee: makeRef(contactFred),\n });\n const _taskComposer4 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Implement dark mode',\n project: makeRef(projectComposer),\n assignee: makeRef(contactRich),\n });\n const _taskEcho1 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Implement cypher query engine',\n project: makeRef(projectEcho),\n assignee: makeRef(contactDima),\n });\n const _taskEcho2 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Add schema editor',\n project: makeRef(projectEcho),\n assignee: makeRef(contactRich),\n });\n const _taskDoodles1 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Add support for custom themes',\n project: makeRef(projectDoodles),\n assignee: makeRef(contactFred),\n });\n const _taskDoodles2 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Implement dark mode',\n project: makeRef(projectDoodles),\n assignee: makeRef(contactJosiah),\n });\n\n const _orgDxos = dataSource.add(Org, {\n id: ObjectId.random(),\n name: 'DXOS',\n employees: [makeRef(contactRich), makeRef(contactJosiah), makeRef(contactDima)],\n projects: [makeRef(projectEcho)],\n });\n const _orgBraneframe = dataSource.add(Org, {\n id: ObjectId.random(),\n name: 'Braneframe',\n employees: [makeRef(contactJosiah), makeRef(contactRich)],\n projects: [makeRef(projectComposer)],\n });\n dataSource.computeGraph();\n\n return dataSource;\n};\n\nexport class MockDataSource implements DataSource {\n objects: Record<\n string,\n {\n schema: S.Schema.All;\n typeDxn: string;\n id: string;\n data: unknown;\n }\n > = {};\n\n schema: Record<\n string,\n {\n json: JsonSchemaType;\n instance: S.Schema.All;\n }\n > = {};\n\n nodes: Node[] = [];\n relationships: Relationship[] = [];\n\n async getNodes({ label }: { label?: string }) {\n return this.nodes.filter((node) => !label || node.label === label);\n }\n\n async getRelationships({ label }: { label?: string }) {\n return this.relationships.filter((relationship) => !label || relationship.label === label);\n }\n\n add<S extends S.Schema.All>(schema: S, data: S.Schema.Type<S>) {\n invariant(typeof data.id === 'string', 'Data must have an id');\n const jsonSchema = toJsonSchema(schema);\n if (!this.schema[jsonSchema.$id!]) {\n this.schema[jsonSchema.$id!] = {\n json: jsonSchema,\n instance: schema,\n };\n }\n\n const typenameDxn = jsonSchema.$id ?? raise(new Error('Schema must have $id'));\n\n this.objects[data.id] = {\n schema,\n id: data.id,\n typeDxn: typenameDxn,\n data,\n };\n\n return data;\n }\n\n computeGraph() {\n this.nodes = [];\n this.relationships = [];\n\n for (const object of Object.values(this.objects)) {\n this.nodes.push({\n kind: 'node',\n id: object.id,\n label: formatNodeLabel(object.typeDxn),\n properties: object.data as any,\n });\n }\n\n for (const object of Object.values(this.objects)) {\n const schema = this.schema[object.typeDxn].json;\n const typenameDxn = schema.$id ?? raise(new Error('Schema must have $id'));\n\n for (const [name, propSchema] of Object.entries(schema.properties!)) {\n if (propSchema.$id === JSON_SCHEMA_ECHO_REF_ID) {\n const label = formatInferredRelationshipLabel(typenameDxn, name);\n\n const source = this.nodes.find((node) => node.id === object.id);\n if (!source) {\n continue;\n }\n\n const { id: targetId } = (object.data as any)[name].target;\n\n const target = this.nodes.find((node) => node.id === targetId);\n if (!target) {\n continue;\n }\n\n this.relationships.push({\n kind: 'relationship',\n id: `${object.id}-${name}-${target.id}`,\n label,\n properties: {},\n source,\n target,\n });\n } else if (propSchema.type === 'array' && propSchema.items?.$id === JSON_SCHEMA_ECHO_REF_ID) {\n const label = formatInferredRelationshipLabel(typenameDxn, name);\n\n const source = this.nodes.find((node) => node.id === object.id);\n if (!source) {\n continue;\n }\n\n for (const { id: targetId } of (object.data as any)[name].map((x: Ref<any>) => x.target)) {\n const target = this.nodes.find((node) => node.id === targetId);\n if (!target) {\n continue;\n }\n\n this.relationships.push({\n kind: 'relationship',\n id: `${object.id}-${name}-${targetId}`,\n label,\n properties: {},\n source,\n target,\n });\n }\n }\n }\n }\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Schema as S } from '@effect/schema';\n\nimport { EntityKind, ObjectAnnotationId, Ref } from '@dxos/echo-schema';\n\n// TODO(burdon): Reconcile with sdk/schema/testing.\n// TODO(burdon): Convert interface to type.\n\n// TODO(dmaretskyi): Extract.\nexport const ObjectId = S.String.annotations({ description: 'The unique object identifier.' });\n\nexport const Contact = S.Struct({\n id: ObjectId,\n name: S.String.annotations({ description: 'The name of the person.' }),\n email: S.optional(S.String).annotations({ description: 'Email address.' }),\n})\n .pipe(S.mutable)\n .annotations({\n [ObjectAnnotationId]: {\n kind: EntityKind.Object,\n typename: 'example.com/type/Contact',\n version: '0.1.0',\n },\n description: 'Contact information.',\n });\nexport interface Contact extends S.Schema.Type<typeof Contact> {}\n\nexport const Project = S.Struct({\n id: ObjectId,\n name: S.String.annotations({ description: 'The name of the project.' }),\n description: S.optional(S.String).annotations({ description: 'The description of the project.' }),\n})\n .pipe(S.mutable)\n .annotations({\n [ObjectAnnotationId]: {\n kind: EntityKind.Object,\n typename: 'example.com/type/Project',\n version: '0.1.0',\n },\n description: 'Contact information.',\n });\nexport interface Project extends S.Schema.Type<typeof Project> {}\n\nexport const Task = S.Struct({\n id: ObjectId,\n name: S.String.annotations({ description: 'The name of the task.' }),\n description: S.optional(S.String).annotations({ description: 'The description of the task.' }),\n project: Ref(Project),\n assignee: Ref(Contact),\n})\n .pipe(S.mutable)\n .annotations({\n [ObjectAnnotationId]: {\n kind: EntityKind.Object,\n typename: 'example.com/type/Task',\n version: '0.1.0',\n },\n description: 'Contact information.',\n });\nexport interface Task extends S.Schema.Type<typeof Task> {}\n\nexport const Org = S.Struct({\n id: ObjectId,\n name: S.String.annotations({ description: 'The name of the organization.' }),\n projects: S.Array(Ref(Project)),\n employees: S.Array(Ref(Contact)),\n})\n .pipe(S.mutable)\n .annotations({\n [ObjectAnnotationId]: {\n kind: EntityKind.Object,\n typename: 'example.com/type/Org',\n version: '0.1.0',\n },\n description: 'Contact information.',\n });\nexport interface Org extends S.Schema.Type<typeof Org> {}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_echo_schema", "import_schema", "createLogger", "stream", "filter", "onImage", "images", "currentText", "event", "printContentBlock", "content", "type", "process", "stdout", "write", "text", "name", "id", "source", "media_type", "onTextBlockPrinted", "imageMatch", "match", "description", "message", "role", "toUpperCase", "delta", "partial_json", "block", "JSON", "stringify", "input", "isError", "createCypherTool", "dataSource", "schemaTypes", "defineTool", "length", "createSystemPrompt", "schema", "S", "Struct", "query", "String", "annotations", "execute", "log", "results", "executeQuery", "LLMToolResult", "Success", "e", "catch", "Error", "trim", "formatJsonSchemaForLLM", "map", "toJsonSchema", "seedTestData", "db", "contactRich", "add", "create", "Contact", "contactJosiah", "contactDima", "contactFred", "projectComposer", "Project", "projectEcho", "projectDoodles", "_taskComposer1", "Task", "project", "makeRef", "assignee", "_taskComposer2", "_taskComposer3", "_taskComposer5", "_taskComposer4", "_taskEcho1", "_taskEcho2", "_taskDoodles1", "_taskDoodles2", "_orgDxos", "Org", "employees", "projects", "_orgBraneframe", "createTestData", "MockDataSource", "ObjectId", "random", "computeGraph", "objects", "nodes", "relationships", "getNodes", "label", "node", "getRelationships", "relationship", "data", "invariant", "jsonSchema", "$id", "json", "instance", "typenameDxn", "raise", "typeDxn", "object", "Object", "values", "push", "kind", "formatNodeLabel", "properties", "propSchema", "entries", "JSON_SCHEMA_ECHO_REF_ID", "formatInferredRelationshipLabel", "find", "targetId", "target", "items", "x", "email", "optional", "pipe", "mutable", "ObjectAnnotationId", "EntityKind", "typename", "version", "Ref", "Array"]
|
|
3
|
+
"sources": ["../../../../src/testing/defs.ts", "../../../../src/testing/logger.ts", "../../../../src/testing/query-promts.ts", "../../../../src/testing/test-data.ts", "../../../../src/testing/test-schema.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nexport const AI_SERVICE_ENDPOINT = {\n LOCAL: 'http://localhost:8788',\n REMOTE: 'https://ai-service.dxos.workers.dev',\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type { ImageSource, MessageContentBlock } from '../ai-service';\nimport type { ConversationEvent } from '../conversation';\n\nexport const createLogger = ({\n stream,\n filter,\n onImage,\n}: {\n stream?: boolean;\n filter?: (event: ConversationEvent) => boolean;\n onImage?: (img: { id: string; description?: string; source: ImageSource }) => void;\n} = {}) => {\n const images: Record<string, any> = {};\n let currentText = '';\n\n return (event: ConversationEvent) => {\n if (typeof filter === 'function' && !filter(event)) {\n return;\n }\n\n const printContentBlock = (content: MessageContentBlock) => {\n switch (content.type) {\n case 'text':\n process.stdout.write(content.text);\n break;\n case 'tool_use':\n process.stdout.write(`⚙️ [Tool Use] ${content.name}\\n`);\n break;\n case 'image': {\n if (content.id && content.source) {\n images[content.id] = content.source;\n }\n process.stdout.write(`[Image id=${content.id} media_type=${content.source?.media_type}]`);\n break;\n }\n }\n };\n\n const onTextBlockPrinted = (text: string) => {\n const imageMatch = text.match(/<image id=\"([^\"]+)\"(?:\\s+prompt=\"([^\"]+)\")?\\s*\\/>/);\n if (imageMatch && onImage && images[imageMatch[1]]) {\n onImage({\n id: imageMatch[1],\n description: imageMatch[2], // Extract prompt as description if present\n source: images[imageMatch[1]],\n });\n }\n };\n\n if (stream) {\n switch (event.type) {\n case 'message_start': {\n process.stdout.write(`${event.message.role.toUpperCase()}\\n\\n`);\n for (const content of event.message.content) {\n printContentBlock(content);\n }\n break;\n }\n case 'content_block_start': {\n currentText = '';\n printContentBlock(event.content);\n break;\n }\n case 'content_block_delta': {\n switch (event.delta.type) {\n case 'text_delta': {\n currentText += event.delta.text;\n process.stdout.write(event.delta.text);\n break;\n }\n case 'input_json_delta': {\n process.stdout.write(event.delta.partial_json);\n break;\n }\n }\n break;\n }\n case 'content_block_stop': {\n process.stdout.write('\\n');\n onTextBlockPrinted(currentText);\n currentText = '';\n break;\n }\n case 'message_delta': {\n break;\n }\n case 'message_stop': {\n process.stdout.write('\\n\\n');\n break;\n }\n }\n }\n\n switch (event.type) {\n case 'message': {\n if (!stream || event.message.role !== 'assistant') {\n process.stdout.write(`${event.message.role.toUpperCase()}\\n\\n`);\n for (const block of event.message.content) {\n switch (block.type) {\n case 'text':\n process.stdout.write(block.text + '\\n');\n onTextBlockPrinted(block.text);\n break;\n case 'tool_use':\n process.stdout.write(`⚙️ [Tool Use] ${block.name}\\n`);\n process.stdout.write(` ${JSON.stringify(block.input)}\\n`);\n break;\n case 'tool_result':\n if (block.isError) {\n process.stdout.write('❌ [Tool Error]\\n');\n process.stdout.write(block.content + '\\n');\n } else {\n process.stdout.write('✅ [Tool Success]\\n');\n process.stdout.write(block.content + '\\n');\n }\n }\n process.stdout.write('\\n\\n');\n }\n }\n break;\n }\n }\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Schema as S } from '@effect/schema';\n\nimport { toJsonSchema } from '@dxos/echo-schema';\nimport { log } from '@dxos/log';\n\nimport { defineTool, LLMToolResult } from '../conversation';\nimport { executeQuery, formatJsonSchemaForLLM, type DataSource } from '../cypher';\nimport { trim } from '../util';\n\nexport const createCypherTool = (dataSource: DataSource, schemaTypes: S.Schema.Any[] = []) =>\n defineTool({\n name: 'graphQuery',\n description:\n 'Query the ECHO graph database in cypher query language. Returns data from the database.' +\n (schemaTypes.length > 0 ? `\\n\\n${createSystemPrompt(schemaTypes)}` : ''),\n schema: S.Struct({\n query: S.String.annotations({\n description: `\n A valid cypher query string to execute.\n Query must have one MATCH clause.\n Match clause can have multiple patterns but they must all be connected via a relationship chain.\n Query might have zero or one WHERE clauses.\n Query must have one RETURN clause.\n RETURN clause can have multiple expressions separated by commas.\n DISTINCT keyword is not allowed.\n\n <example>\n MATCH (n:Person) RETURN n.name\n </example>\n\n <example>\n MATCH (s:Studio)-[:PRODUCED]->(m:Movie)-[:PRODUCED_IN]->(c:City {name: \"Las Vegas\"}) RETURN s\n </example>\n \n <example>\n MATCH (a:Actor)-[:STARRED_IN]->(m:Movie)<-[:PRODUCED]-(s:Studio {name: \"Cinema Pictures\"}) WHERE m.name = \"Once upon a time\" RETURN m.name, a.name\n </example>\n `,\n }),\n }),\n execute: async ({ query }) => {\n try {\n log('cypher query', { query });\n const results = await executeQuery(dataSource, query);\n log('query complete', { results });\n return LLMToolResult.Success(results);\n } catch (e: any) {\n log.catch(e);\n return LLMToolResult.Error(e.message);\n }\n },\n });\n\nexport const createSystemPrompt = (schemaTypes: S.Schema.Any[]) => trim`\n You have access to ECHO graph database. You can query the database to get data to satisfy user prompts.\n\n Database schema is defined in pseud-cypher syntax. The schema is:\n\n <schema>\n ${formatJsonSchemaForLLM(schemaTypes.map((schema) => toJsonSchema(schema)))}\n <schema>\n\n Before replying always think step-by-step on how to proceed.\n Print your thoughts inside <cot> tags.\n \n <example>\n <cot>To answer the question I need to ...</cot>\n </example>\n\n Before answering the user's question, decide what tools you need to use to answer the question.\n`;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Schema as S } from '@effect/schema';\n\nimport { raise } from '@dxos/debug';\nimport type { EchoDatabase } from '@dxos/echo-db';\nimport { JSON_SCHEMA_ECHO_REF_ID, ObjectId, toJsonSchema, type JsonSchemaType, type Ref } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { create, makeRef } from '@dxos/live-object';\n\nimport {\n type DataSource,\n type Node,\n type Relationship,\n formatInferredRelationshipLabel,\n formatNodeLabel,\n} from '../cypher';\nimport { Contact, Org, Project, Task } from '../testing';\n\nexport const seedTestData = (db: EchoDatabase) => {\n const contactRich = db.add(\n create(Contact, {\n name: 'Rich',\n }),\n );\n const contactJosiah = db.add(\n create(Contact, {\n name: 'Josiah',\n }),\n );\n const contactDima = db.add(\n create(Contact, {\n name: 'Dima',\n }),\n );\n const contactFred = db.add(\n create(Contact, {\n name: 'Fred',\n }),\n );\n\n const projectComposer = db.add(\n create(Project, {\n name: 'Composer',\n }),\n );\n const projectEcho = db.add(\n create(Project, {\n name: 'ECHO',\n }),\n );\n const projectDoodles = db.add(\n create(Project, {\n name: 'Doodles',\n }),\n );\n\n const _taskComposer1 = db.add(\n create(Task, {\n name: 'Optimize startup performance',\n project: makeRef(projectComposer),\n assignee: makeRef(contactJosiah),\n }),\n );\n const _taskComposer2 = db.add(\n create(Task, {\n name: 'Create form builder',\n project: makeRef(projectComposer),\n assignee: makeRef(contactRich),\n }),\n );\n const _taskComposer3 = db.add(\n create(Task, {\n name: 'Add support for custom themes',\n project: makeRef(projectComposer),\n assignee: makeRef(contactJosiah),\n }),\n );\n const _taskComposer5 = db.add(\n create(Task, {\n name: 'Implement community plugin',\n project: makeRef(projectComposer),\n assignee: makeRef(contactFred),\n }),\n );\n const _taskComposer4 = db.add(\n create(Task, {\n name: 'Implement dark mode',\n project: makeRef(projectComposer),\n assignee: makeRef(contactRich),\n }),\n );\n const _taskEcho1 = db.add(\n create(Task, {\n name: 'Implement cypher query engine',\n project: makeRef(projectEcho),\n assignee: makeRef(contactDima),\n }),\n );\n const _taskEcho2 = db.add(\n create(Task, {\n name: 'Add schema editor',\n project: makeRef(projectEcho),\n assignee: makeRef(contactRich),\n }),\n );\n const _taskDoodles1 = db.add(\n create(Task, {\n name: 'Add support for custom themes',\n project: makeRef(projectDoodles),\n assignee: makeRef(contactFred),\n }),\n );\n const _taskDoodles2 = db.add(\n create(Task, {\n name: 'Implement dark mode',\n project: makeRef(projectDoodles),\n assignee: makeRef(contactJosiah),\n }),\n );\n\n const _orgDxos = db.add(\n create(Org, {\n name: 'DXOS',\n employees: [makeRef(contactRich), makeRef(contactJosiah), makeRef(contactDima)],\n projects: [makeRef(projectEcho)],\n }),\n );\n const _orgBraneframe = db.add(\n create(Org, {\n name: 'Braneframe',\n employees: [makeRef(contactJosiah), makeRef(contactRich)],\n projects: [makeRef(projectComposer)],\n }),\n );\n};\n\n// TODO(burdon): Use schema/testing.\nexport const createTestData = (): MockDataSource => {\n const dataSource = new MockDataSource();\n\n const contactRich = dataSource.add(Contact, {\n id: ObjectId.random(),\n name: 'Rich',\n });\n const contactJosiah = dataSource.add(Contact, {\n id: ObjectId.random(),\n name: 'Josiah',\n });\n const contactDima = dataSource.add(Contact, {\n id: ObjectId.random(),\n name: 'Dima',\n });\n const contactFred = dataSource.add(Contact, {\n id: ObjectId.random(),\n name: 'Fred',\n });\n\n const projectComposer = dataSource.add(Project, {\n id: ObjectId.random(),\n name: 'Composer',\n });\n const projectEcho = dataSource.add(Project, {\n id: ObjectId.random(),\n name: 'ECHO',\n });\n const projectDoodles = dataSource.add(Project, {\n id: ObjectId.random(),\n name: 'Doodles',\n });\n\n const _taskComposer1 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Optimize startup performance',\n project: makeRef(projectComposer),\n assignee: makeRef(contactJosiah),\n });\n const _taskComposer2 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Create form builder',\n project: makeRef(projectComposer),\n assignee: makeRef(contactRich),\n });\n const _taskComposer3 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Add support for custom themes',\n project: makeRef(projectComposer),\n assignee: makeRef(contactJosiah),\n });\n const _taskComposer5 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Implement community plugin',\n project: makeRef(projectComposer),\n assignee: makeRef(contactFred),\n });\n const _taskComposer4 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Implement dark mode',\n project: makeRef(projectComposer),\n assignee: makeRef(contactRich),\n });\n const _taskEcho1 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Implement cypher query engine',\n project: makeRef(projectEcho),\n assignee: makeRef(contactDima),\n });\n const _taskEcho2 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Add schema editor',\n project: makeRef(projectEcho),\n assignee: makeRef(contactRich),\n });\n const _taskDoodles1 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Add support for custom themes',\n project: makeRef(projectDoodles),\n assignee: makeRef(contactFred),\n });\n const _taskDoodles2 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Implement dark mode',\n project: makeRef(projectDoodles),\n assignee: makeRef(contactJosiah),\n });\n\n const _orgDxos = dataSource.add(Org, {\n id: ObjectId.random(),\n name: 'DXOS',\n employees: [makeRef(contactRich), makeRef(contactJosiah), makeRef(contactDima)],\n projects: [makeRef(projectEcho)],\n });\n const _orgBraneframe = dataSource.add(Org, {\n id: ObjectId.random(),\n name: 'Braneframe',\n employees: [makeRef(contactJosiah), makeRef(contactRich)],\n projects: [makeRef(projectComposer)],\n });\n dataSource.computeGraph();\n\n return dataSource;\n};\n\nexport class MockDataSource implements DataSource {\n objects: Record<\n string,\n {\n schema: S.Schema.All;\n typeDxn: string;\n id: string;\n data: unknown;\n }\n > = {};\n\n schema: Record<\n string,\n {\n json: JsonSchemaType;\n instance: S.Schema.All;\n }\n > = {};\n\n nodes: Node[] = [];\n relationships: Relationship[] = [];\n\n async getNodes({ label }: { label?: string }) {\n return this.nodes.filter((node) => !label || node.label === label);\n }\n\n async getRelationships({ label }: { label?: string }) {\n return this.relationships.filter((relationship) => !label || relationship.label === label);\n }\n\n add<S extends S.Schema.All>(schema: S, data: S.Schema.Type<S>) {\n invariant(typeof data.id === 'string', 'Data must have an id');\n const jsonSchema = toJsonSchema(schema);\n if (!this.schema[jsonSchema.$id!]) {\n this.schema[jsonSchema.$id!] = {\n json: jsonSchema,\n instance: schema,\n };\n }\n\n const typenameDxn = jsonSchema.$id ?? raise(new Error('Schema must have $id'));\n\n this.objects[data.id] = {\n schema,\n id: data.id,\n typeDxn: typenameDxn,\n data,\n };\n\n return data;\n }\n\n computeGraph() {\n this.nodes = [];\n this.relationships = [];\n\n for (const object of Object.values(this.objects)) {\n this.nodes.push({\n kind: 'node',\n id: object.id,\n label: formatNodeLabel(object.typeDxn),\n properties: object.data as any,\n });\n }\n\n for (const object of Object.values(this.objects)) {\n const schema = this.schema[object.typeDxn].json;\n const typenameDxn = schema.$id ?? raise(new Error('Schema must have $id'));\n\n for (const [name, propSchema] of Object.entries(schema.properties!)) {\n if (propSchema.$id === JSON_SCHEMA_ECHO_REF_ID) {\n const label = formatInferredRelationshipLabel(typenameDxn, name);\n\n const source = this.nodes.find((node) => node.id === object.id);\n if (!source) {\n continue;\n }\n\n const { id: targetId } = (object.data as any)[name].target;\n\n const target = this.nodes.find((node) => node.id === targetId);\n if (!target) {\n continue;\n }\n\n this.relationships.push({\n kind: 'relationship',\n id: `${object.id}-${name}-${target.id}`,\n label,\n properties: {},\n source,\n target,\n });\n } else if (propSchema.type === 'array' && propSchema.items?.$id === JSON_SCHEMA_ECHO_REF_ID) {\n const label = formatInferredRelationshipLabel(typenameDxn, name);\n\n const source = this.nodes.find((node) => node.id === object.id);\n if (!source) {\n continue;\n }\n\n for (const { id: targetId } of (object.data as any)[name].map((x: Ref<any>) => x.target)) {\n const target = this.nodes.find((node) => node.id === targetId);\n if (!target) {\n continue;\n }\n\n this.relationships.push({\n kind: 'relationship',\n id: `${object.id}-${name}-${targetId}`,\n label,\n properties: {},\n source,\n target,\n });\n }\n }\n }\n }\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Schema as S } from '@effect/schema';\n\nimport { EntityKind, ObjectAnnotationId, Ref } from '@dxos/echo-schema';\n\n// TODO(burdon): Reconcile with sdk/schema/testing.\n// TODO(burdon): Convert interface to type.\n\n// TODO(dmaretskyi): Extract.\nexport const ObjectId = S.String.annotations({ description: 'The unique object identifier.' });\n\nexport const Contact = S.Struct({\n id: ObjectId,\n name: S.String.annotations({ description: 'The name of the person.' }),\n email: S.optional(S.String).annotations({ description: 'Email address.' }),\n})\n .pipe(S.mutable)\n .annotations({\n [ObjectAnnotationId]: {\n kind: EntityKind.Object,\n typename: 'example.com/type/Contact',\n version: '0.1.0',\n },\n description: 'Contact information.',\n });\nexport interface Contact extends S.Schema.Type<typeof Contact> {}\n\nexport const Project = S.Struct({\n id: ObjectId,\n name: S.String.annotations({ description: 'The name of the project.' }),\n description: S.optional(S.String).annotations({ description: 'The description of the project.' }),\n})\n .pipe(S.mutable)\n .annotations({\n [ObjectAnnotationId]: {\n kind: EntityKind.Object,\n typename: 'example.com/type/Project',\n version: '0.1.0',\n },\n description: 'Contact information.',\n });\nexport interface Project extends S.Schema.Type<typeof Project> {}\n\nexport const Task = S.Struct({\n id: ObjectId,\n name: S.String.annotations({ description: 'The name of the task.' }),\n description: S.optional(S.String).annotations({ description: 'The description of the task.' }),\n project: Ref(Project),\n assignee: Ref(Contact),\n})\n .pipe(S.mutable)\n .annotations({\n [ObjectAnnotationId]: {\n kind: EntityKind.Object,\n typename: 'example.com/type/Task',\n version: '0.1.0',\n },\n description: 'Contact information.',\n });\nexport interface Task extends S.Schema.Type<typeof Task> {}\n\nexport const Org = S.Struct({\n id: ObjectId,\n name: S.String.annotations({ description: 'The name of the organization.' }),\n projects: S.Array(Ref(Project)),\n employees: S.Array(Ref(Contact)),\n})\n .pipe(S.mutable)\n .annotations({\n [ObjectAnnotationId]: {\n kind: EntityKind.Object,\n typename: 'example.com/type/Org',\n version: '0.1.0',\n },\n description: 'Contact information.',\n });\nexport interface Org extends S.Schema.Type<typeof Org> {}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_echo_schema", "import_schema", "AI_SERVICE_ENDPOINT", "LOCAL", "REMOTE", "createLogger", "stream", "filter", "onImage", "images", "currentText", "event", "printContentBlock", "content", "type", "process", "stdout", "write", "text", "name", "id", "source", "media_type", "onTextBlockPrinted", "imageMatch", "match", "description", "message", "role", "toUpperCase", "delta", "partial_json", "block", "JSON", "stringify", "input", "isError", "createCypherTool", "dataSource", "schemaTypes", "defineTool", "length", "createSystemPrompt", "schema", "S", "Struct", "query", "String", "annotations", "execute", "log", "results", "executeQuery", "LLMToolResult", "Success", "e", "catch", "Error", "trim", "formatJsonSchemaForLLM", "map", "toJsonSchema", "seedTestData", "db", "contactRich", "add", "create", "Contact", "contactJosiah", "contactDima", "contactFred", "projectComposer", "Project", "projectEcho", "projectDoodles", "_taskComposer1", "Task", "project", "makeRef", "assignee", "_taskComposer2", "_taskComposer3", "_taskComposer5", "_taskComposer4", "_taskEcho1", "_taskEcho2", "_taskDoodles1", "_taskDoodles2", "_orgDxos", "Org", "employees", "projects", "_orgBraneframe", "createTestData", "MockDataSource", "ObjectId", "random", "computeGraph", "objects", "nodes", "relationships", "getNodes", "label", "node", "getRelationships", "relationship", "data", "invariant", "jsonSchema", "$id", "json", "instance", "typenameDxn", "raise", "typeDxn", "object", "Object", "values", "push", "kind", "formatNodeLabel", "properties", "propSchema", "entries", "JSON_SCHEMA_ECHO_REF_ID", "formatInferredRelationshipLabel", "find", "targetId", "target", "items", "x", "email", "optional", "pipe", "mutable", "ObjectAnnotationId", "EntityKind", "typename", "version", "Ref", "Array"]
|
|
7
7
|
}
|