@dxos/assistant 0.8.2-main.12df754 → 0.8.2-main.2f9c567
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-DEIGOD4U.mjs → chunk-OLO6SVOL.mjs} +21 -21
- package/dist/lib/browser/chunk-OLO6SVOL.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +272 -152
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +82 -86
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node/{chunk-7VH7NMIM.cjs → chunk-CI5Q7FBG.cjs} +6 -6
- package/dist/lib/node/chunk-CI5Q7FBG.cjs.map +7 -0
- package/dist/lib/node/index.cjs +300 -183
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +72 -77
- package/dist/lib/node/testing/index.cjs.map +3 -3
- package/dist/lib/node-esm/{chunk-7JI4MDGL.mjs → chunk-Y3SYOFFJ.mjs} +21 -21
- package/dist/lib/node-esm/chunk-Y3SYOFFJ.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +272 -152
- 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 +82 -86
- package/dist/lib/node-esm/testing/index.mjs.map +3 -3
- package/dist/types/src/ai-service/types.d.ts +133 -133
- package/dist/types/src/ai-service/types.d.ts.map +1 -1
- package/dist/types/src/conversation/types.d.ts +9 -9
- package/dist/types/src/conversation/types.d.ts.map +1 -1
- package/dist/types/src/cypher/echo-data-source.d.ts.map +1 -1
- package/dist/types/src/session/index.d.ts +1 -0
- package/dist/types/src/session/index.d.ts.map +1 -1
- package/dist/types/src/session/session.d.ts +32 -7
- package/dist/types/src/session/session.d.ts.map +1 -1
- package/dist/types/src/session/version-pin.d.ts +17 -0
- package/dist/types/src/session/version-pin.d.ts.map +1 -0
- package/dist/types/src/session/version-pin.test.d.ts +2 -0
- package/dist/types/src/session/version-pin.test.d.ts.map +1 -0
- package/dist/types/src/testing/query-promts.d.ts +3 -3
- package/dist/types/src/testing/query-promts.d.ts.map +1 -1
- package/dist/types/src/testing/test-data.d.ts +4 -4
- package/dist/types/src/testing/test-data.d.ts.map +1 -1
- package/dist/types/src/testing/test-schema.d.ts +25 -23
- package/dist/types/src/testing/test-schema.d.ts.map +1 -1
- package/package.json +15 -14
- package/src/ai-service/client.test.ts +5 -5
- package/src/ai-service/ollama-client.ts +7 -7
- package/src/ai-service/types.ts +14 -14
- package/src/bin/chat.ts +2 -2
- package/src/conversation/conversation.test.ts +3 -3
- package/src/conversation/types.ts +10 -10
- package/src/cypher/combinators.test.ts +4 -4
- package/src/cypher/echo-data-source.ts +7 -5
- package/src/cypher/execution-plan.test.ts +1 -1
- package/src/cypher/query-executor.test.ts +1 -1
- package/src/cypher/schema.test.ts +3 -3
- package/src/session/index.ts +1 -0
- package/src/session/session.test.ts +24 -17
- package/src/session/session.ts +285 -149
- package/src/session/version-pin.test.ts +26 -0
- package/src/session/version-pin.ts +43 -0
- package/src/testing/artifacts.test.ts +22 -22
- package/src/testing/query-promts.ts +5 -5
- package/src/testing/query.test.ts +3 -3
- package/src/testing/test-data.ts +62 -55
- package/src/testing/test-schema.ts +28 -29
- package/dist/lib/browser/chunk-DEIGOD4U.mjs.map +0 -7
- package/dist/lib/node/chunk-7VH7NMIM.cjs.map +0 -7
- package/dist/lib/node-esm/chunk-7JI4MDGL.mjs.map +0 -7
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
formatJsonSchemaForLLM,
|
|
8
8
|
formatNodeLabel,
|
|
9
9
|
trim
|
|
10
|
-
} from "../chunk-
|
|
10
|
+
} from "../chunk-Y3SYOFFJ.mjs";
|
|
11
11
|
|
|
12
12
|
// packages/experimental/assistant/src/testing/defs.ts
|
|
13
13
|
var AI_SERVICE_ENDPOINT = {
|
|
@@ -144,7 +144,7 @@ var createTestOllamaClient = (options) => {
|
|
|
144
144
|
};
|
|
145
145
|
|
|
146
146
|
// packages/experimental/assistant/src/testing/query-promts.ts
|
|
147
|
-
import { Schema
|
|
147
|
+
import { Schema } from "effect";
|
|
148
148
|
import { defineTool, ToolResult } from "@dxos/artifact";
|
|
149
149
|
import { toJsonSchema } from "@dxos/echo-schema";
|
|
150
150
|
import { log } from "@dxos/log";
|
|
@@ -154,8 +154,8 @@ var createCypherTool = (dataSource, schemaTypes = []) => defineTool("dxos.org/ec
|
|
|
154
154
|
description: "Query the ECHO graph database in cypher query language. Returns data from the database." + (schemaTypes.length > 0 ? `
|
|
155
155
|
|
|
156
156
|
${createSystemPrompt(schemaTypes)}` : ""),
|
|
157
|
-
schema:
|
|
158
|
-
query:
|
|
157
|
+
schema: Schema.Struct({
|
|
158
|
+
query: Schema.String.annotations({
|
|
159
159
|
description: `
|
|
160
160
|
A valid cypher query string to execute.
|
|
161
161
|
Query must have one MATCH clause.
|
|
@@ -231,9 +231,9 @@ var createSystemPrompt = (schemaTypes) => trim`
|
|
|
231
231
|
|
|
232
232
|
// packages/experimental/assistant/src/testing/test-data.ts
|
|
233
233
|
import { raise } from "@dxos/debug";
|
|
234
|
-
import { JSON_SCHEMA_ECHO_REF_ID, ObjectId, toJsonSchema as toJsonSchema2 } from "@dxos/echo-schema";
|
|
234
|
+
import { JSON_SCHEMA_ECHO_REF_ID, ObjectId, toJsonSchema as toJsonSchema2, Ref as RefImpl } from "@dxos/echo-schema";
|
|
235
235
|
import { invariant } from "@dxos/invariant";
|
|
236
|
-
import { live
|
|
236
|
+
import { live } from "@dxos/live-object";
|
|
237
237
|
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/experimental/assistant/src/testing/test-data.ts";
|
|
238
238
|
var seedTestData = (db) => {
|
|
239
239
|
const contactRich = db.add(live(Contact, {
|
|
@@ -259,68 +259,68 @@ var seedTestData = (db) => {
|
|
|
259
259
|
}));
|
|
260
260
|
const _taskComposer1 = db.add(live(Task, {
|
|
261
261
|
name: "Optimize startup performance",
|
|
262
|
-
project:
|
|
263
|
-
assignee:
|
|
262
|
+
project: RefImpl.make(projectComposer),
|
|
263
|
+
assignee: RefImpl.make(contactJosiah)
|
|
264
264
|
}));
|
|
265
265
|
const _taskComposer2 = db.add(live(Task, {
|
|
266
266
|
name: "Create form builder",
|
|
267
|
-
project:
|
|
268
|
-
assignee:
|
|
267
|
+
project: RefImpl.make(projectComposer),
|
|
268
|
+
assignee: RefImpl.make(contactRich)
|
|
269
269
|
}));
|
|
270
270
|
const _taskComposer3 = db.add(live(Task, {
|
|
271
271
|
name: "Add support for custom themes",
|
|
272
|
-
project:
|
|
273
|
-
assignee:
|
|
272
|
+
project: RefImpl.make(projectComposer),
|
|
273
|
+
assignee: RefImpl.make(contactJosiah)
|
|
274
274
|
}));
|
|
275
275
|
const _taskComposer5 = db.add(live(Task, {
|
|
276
276
|
name: "Implement community plugin",
|
|
277
|
-
project:
|
|
278
|
-
assignee:
|
|
277
|
+
project: RefImpl.make(projectComposer),
|
|
278
|
+
assignee: RefImpl.make(contactFred)
|
|
279
279
|
}));
|
|
280
280
|
const _taskComposer4 = db.add(live(Task, {
|
|
281
281
|
name: "Implement dark mode",
|
|
282
|
-
project:
|
|
283
|
-
assignee:
|
|
282
|
+
project: RefImpl.make(projectComposer),
|
|
283
|
+
assignee: RefImpl.make(contactRich)
|
|
284
284
|
}));
|
|
285
285
|
const _taskEcho1 = db.add(live(Task, {
|
|
286
286
|
name: "Implement cypher query engine",
|
|
287
|
-
project:
|
|
288
|
-
assignee:
|
|
287
|
+
project: RefImpl.make(projectEcho),
|
|
288
|
+
assignee: RefImpl.make(contactDima)
|
|
289
289
|
}));
|
|
290
290
|
const _taskEcho2 = db.add(live(Task, {
|
|
291
291
|
name: "Add schema editor",
|
|
292
|
-
project:
|
|
293
|
-
assignee:
|
|
292
|
+
project: RefImpl.make(projectEcho),
|
|
293
|
+
assignee: RefImpl.make(contactRich)
|
|
294
294
|
}));
|
|
295
295
|
const _taskDoodles1 = db.add(live(Task, {
|
|
296
296
|
name: "Add support for custom themes",
|
|
297
|
-
project:
|
|
298
|
-
assignee:
|
|
297
|
+
project: RefImpl.make(projectDoodles),
|
|
298
|
+
assignee: RefImpl.make(contactFred)
|
|
299
299
|
}));
|
|
300
300
|
const _taskDoodles2 = db.add(live(Task, {
|
|
301
301
|
name: "Implement dark mode",
|
|
302
|
-
project:
|
|
303
|
-
assignee:
|
|
302
|
+
project: RefImpl.make(projectDoodles),
|
|
303
|
+
assignee: RefImpl.make(contactJosiah)
|
|
304
304
|
}));
|
|
305
|
-
const _orgDxos = db.add(live(
|
|
305
|
+
const _orgDxos = db.add(live(Organization, {
|
|
306
306
|
name: "DXOS",
|
|
307
307
|
employees: [
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
308
|
+
RefImpl.make(contactRich),
|
|
309
|
+
RefImpl.make(contactJosiah),
|
|
310
|
+
RefImpl.make(contactDima)
|
|
311
311
|
],
|
|
312
312
|
projects: [
|
|
313
|
-
|
|
313
|
+
RefImpl.make(projectEcho)
|
|
314
314
|
]
|
|
315
315
|
}));
|
|
316
|
-
const _orgBraneframe = db.add(live(
|
|
316
|
+
const _orgBraneframe = db.add(live(Organization, {
|
|
317
317
|
name: "Braneframe",
|
|
318
318
|
employees: [
|
|
319
|
-
|
|
320
|
-
|
|
319
|
+
RefImpl.make(contactJosiah),
|
|
320
|
+
RefImpl.make(contactRich)
|
|
321
321
|
],
|
|
322
322
|
projects: [
|
|
323
|
-
|
|
323
|
+
RefImpl.make(projectComposer)
|
|
324
324
|
]
|
|
325
325
|
}));
|
|
326
326
|
};
|
|
@@ -357,78 +357,78 @@ var createTestData = () => {
|
|
|
357
357
|
const _taskComposer1 = dataSource.add(Task, {
|
|
358
358
|
id: ObjectId.random(),
|
|
359
359
|
name: "Optimize startup performance",
|
|
360
|
-
project:
|
|
361
|
-
assignee:
|
|
360
|
+
project: RefImpl.make(projectComposer),
|
|
361
|
+
assignee: RefImpl.make(contactJosiah)
|
|
362
362
|
});
|
|
363
363
|
const _taskComposer2 = dataSource.add(Task, {
|
|
364
364
|
id: ObjectId.random(),
|
|
365
365
|
name: "Create form builder",
|
|
366
|
-
project:
|
|
367
|
-
assignee:
|
|
366
|
+
project: RefImpl.make(projectComposer),
|
|
367
|
+
assignee: RefImpl.make(contactRich)
|
|
368
368
|
});
|
|
369
369
|
const _taskComposer3 = dataSource.add(Task, {
|
|
370
370
|
id: ObjectId.random(),
|
|
371
371
|
name: "Add support for custom themes",
|
|
372
|
-
project:
|
|
373
|
-
assignee:
|
|
372
|
+
project: RefImpl.make(projectComposer),
|
|
373
|
+
assignee: RefImpl.make(contactJosiah)
|
|
374
374
|
});
|
|
375
375
|
const _taskComposer5 = dataSource.add(Task, {
|
|
376
376
|
id: ObjectId.random(),
|
|
377
377
|
name: "Implement community plugin",
|
|
378
|
-
project:
|
|
379
|
-
assignee:
|
|
378
|
+
project: RefImpl.make(projectComposer),
|
|
379
|
+
assignee: RefImpl.make(contactFred)
|
|
380
380
|
});
|
|
381
381
|
const _taskComposer4 = dataSource.add(Task, {
|
|
382
382
|
id: ObjectId.random(),
|
|
383
383
|
name: "Implement dark mode",
|
|
384
|
-
project:
|
|
385
|
-
assignee:
|
|
384
|
+
project: RefImpl.make(projectComposer),
|
|
385
|
+
assignee: RefImpl.make(contactRich)
|
|
386
386
|
});
|
|
387
387
|
const _taskEcho1 = dataSource.add(Task, {
|
|
388
388
|
id: ObjectId.random(),
|
|
389
389
|
name: "Implement cypher query engine",
|
|
390
|
-
project:
|
|
391
|
-
assignee:
|
|
390
|
+
project: RefImpl.make(projectEcho),
|
|
391
|
+
assignee: RefImpl.make(contactDima)
|
|
392
392
|
});
|
|
393
393
|
const _taskEcho2 = dataSource.add(Task, {
|
|
394
394
|
id: ObjectId.random(),
|
|
395
395
|
name: "Add schema editor",
|
|
396
|
-
project:
|
|
397
|
-
assignee:
|
|
396
|
+
project: RefImpl.make(projectEcho),
|
|
397
|
+
assignee: RefImpl.make(contactRich)
|
|
398
398
|
});
|
|
399
399
|
const _taskDoodles1 = dataSource.add(Task, {
|
|
400
400
|
id: ObjectId.random(),
|
|
401
401
|
name: "Add support for custom themes",
|
|
402
|
-
project:
|
|
403
|
-
assignee:
|
|
402
|
+
project: RefImpl.make(projectDoodles),
|
|
403
|
+
assignee: RefImpl.make(contactFred)
|
|
404
404
|
});
|
|
405
405
|
const _taskDoodles2 = dataSource.add(Task, {
|
|
406
406
|
id: ObjectId.random(),
|
|
407
407
|
name: "Implement dark mode",
|
|
408
|
-
project:
|
|
409
|
-
assignee:
|
|
408
|
+
project: RefImpl.make(projectDoodles),
|
|
409
|
+
assignee: RefImpl.make(contactJosiah)
|
|
410
410
|
});
|
|
411
|
-
const _orgDxos = dataSource.add(
|
|
411
|
+
const _orgDxos = dataSource.add(Organization, {
|
|
412
412
|
id: ObjectId.random(),
|
|
413
413
|
name: "DXOS",
|
|
414
414
|
employees: [
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
415
|
+
RefImpl.make(contactRich),
|
|
416
|
+
RefImpl.make(contactJosiah),
|
|
417
|
+
RefImpl.make(contactDima)
|
|
418
418
|
],
|
|
419
419
|
projects: [
|
|
420
|
-
|
|
420
|
+
RefImpl.make(projectEcho)
|
|
421
421
|
]
|
|
422
422
|
});
|
|
423
|
-
const _orgBraneframe = dataSource.add(
|
|
423
|
+
const _orgBraneframe = dataSource.add(Organization, {
|
|
424
424
|
id: ObjectId.random(),
|
|
425
425
|
name: "Braneframe",
|
|
426
426
|
employees: [
|
|
427
|
-
|
|
428
|
-
|
|
427
|
+
RefImpl.make(contactJosiah),
|
|
428
|
+
RefImpl.make(contactRich)
|
|
429
429
|
],
|
|
430
430
|
projects: [
|
|
431
|
-
|
|
431
|
+
RefImpl.make(projectComposer)
|
|
432
432
|
]
|
|
433
433
|
});
|
|
434
434
|
dataSource.computeGraph();
|
|
@@ -450,7 +450,7 @@ var MockDataSource = class {
|
|
|
450
450
|
add(schema, data) {
|
|
451
451
|
invariant(typeof data.id === "string", "Data must have an id", {
|
|
452
452
|
F: __dxlog_file2,
|
|
453
|
-
L:
|
|
453
|
+
L: 284,
|
|
454
454
|
S: this,
|
|
455
455
|
A: [
|
|
456
456
|
"typeof data.id === 'string'",
|
|
@@ -534,20 +534,17 @@ var MockDataSource = class {
|
|
|
534
534
|
};
|
|
535
535
|
|
|
536
536
|
// packages/experimental/assistant/src/testing/test-schema.ts
|
|
537
|
-
import { Schema as
|
|
538
|
-
import { EntityKind, TypeAnnotationId, Ref } from "@dxos/echo-schema";
|
|
539
|
-
var
|
|
540
|
-
description: "The unique object identifier."
|
|
541
|
-
});
|
|
542
|
-
var Contact = S2.Struct({
|
|
537
|
+
import { Schema as Schema2 } from "effect";
|
|
538
|
+
import { EntityKind, TypeAnnotationId, Ref, ObjectId as ObjectId2 } from "@dxos/echo-schema";
|
|
539
|
+
var Contact = Schema2.Struct({
|
|
543
540
|
id: ObjectId2,
|
|
544
|
-
name:
|
|
541
|
+
name: Schema2.String.annotations({
|
|
545
542
|
description: "The name of the person."
|
|
546
543
|
}),
|
|
547
|
-
email:
|
|
544
|
+
email: Schema2.optional(Schema2.String).annotations({
|
|
548
545
|
description: "Email address."
|
|
549
546
|
})
|
|
550
|
-
}).pipe(
|
|
547
|
+
}).pipe(Schema2.mutable).annotations({
|
|
551
548
|
[TypeAnnotationId]: {
|
|
552
549
|
kind: EntityKind.Object,
|
|
553
550
|
typename: "example.com/type/Contact",
|
|
@@ -555,15 +552,15 @@ var Contact = S2.Struct({
|
|
|
555
552
|
},
|
|
556
553
|
description: "Contact information."
|
|
557
554
|
});
|
|
558
|
-
var Project =
|
|
555
|
+
var Project = Schema2.Struct({
|
|
559
556
|
id: ObjectId2,
|
|
560
|
-
name:
|
|
557
|
+
name: Schema2.String.annotations({
|
|
561
558
|
description: "The name of the project."
|
|
562
559
|
}),
|
|
563
|
-
description:
|
|
560
|
+
description: Schema2.optional(Schema2.String).annotations({
|
|
564
561
|
description: "The description of the project."
|
|
565
562
|
})
|
|
566
|
-
}).pipe(
|
|
563
|
+
}).pipe(Schema2.mutable).annotations({
|
|
567
564
|
[TypeAnnotationId]: {
|
|
568
565
|
kind: EntityKind.Object,
|
|
569
566
|
typename: "example.com/type/Project",
|
|
@@ -571,17 +568,17 @@ var Project = S2.Struct({
|
|
|
571
568
|
},
|
|
572
569
|
description: "Contact information."
|
|
573
570
|
});
|
|
574
|
-
var Task =
|
|
571
|
+
var Task = Schema2.Struct({
|
|
575
572
|
id: ObjectId2,
|
|
576
|
-
name:
|
|
573
|
+
name: Schema2.String.annotations({
|
|
577
574
|
description: "The name of the task."
|
|
578
575
|
}),
|
|
579
|
-
description:
|
|
576
|
+
description: Schema2.optional(Schema2.String).annotations({
|
|
580
577
|
description: "The description of the task."
|
|
581
578
|
}),
|
|
582
579
|
project: Ref(Project),
|
|
583
580
|
assignee: Ref(Contact)
|
|
584
|
-
}).pipe(
|
|
581
|
+
}).pipe(Schema2.mutable).annotations({
|
|
585
582
|
[TypeAnnotationId]: {
|
|
586
583
|
kind: EntityKind.Object,
|
|
587
584
|
typename: "example.com/type/Task",
|
|
@@ -589,17 +586,17 @@ var Task = S2.Struct({
|
|
|
589
586
|
},
|
|
590
587
|
description: "Contact information."
|
|
591
588
|
});
|
|
592
|
-
var
|
|
589
|
+
var Organization = Schema2.Struct({
|
|
593
590
|
id: ObjectId2,
|
|
594
|
-
name:
|
|
591
|
+
name: Schema2.String.annotations({
|
|
595
592
|
description: "The name of the organization."
|
|
596
593
|
}),
|
|
597
|
-
projects:
|
|
598
|
-
employees:
|
|
599
|
-
}).pipe(
|
|
594
|
+
projects: Schema2.Array(Ref(Project)),
|
|
595
|
+
employees: Schema2.Array(Ref(Contact))
|
|
596
|
+
}).pipe(Schema2.mutable).annotations({
|
|
600
597
|
[TypeAnnotationId]: {
|
|
601
598
|
kind: EntityKind.Object,
|
|
602
|
-
typename: "example.com/type/
|
|
599
|
+
typename: "example.com/type/Organization",
|
|
603
600
|
version: "0.1.0"
|
|
604
601
|
},
|
|
605
602
|
description: "Contact information."
|
|
@@ -608,8 +605,7 @@ export {
|
|
|
608
605
|
AI_SERVICE_ENDPOINT,
|
|
609
606
|
Contact,
|
|
610
607
|
MockDataSource,
|
|
611
|
-
|
|
612
|
-
Org,
|
|
608
|
+
Organization,
|
|
613
609
|
Project,
|
|
614
610
|
Task,
|
|
615
611
|
createCypherTool,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/testing/defs.ts", "../../../../src/testing/logger.ts", "../../../../src/testing/ollama.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\n// TODO(burdon): Remove/Reconcile with @dxos/assistant-testing.\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 '@dxos/artifact';\n\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} mediaType=${content.source?.mediaType}]`);\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 2025 DXOS.org\n//\n\nimport { DEFAULT_OLLAMA_MODEL, OllamaClient, type OllamaClientParams } from '../ai-service';\n\n/**\n * Create a test client with small local model and no temperature for predictable results.\n */\nexport const createTestOllamaClient = (options?: Pick<OllamaClientParams, 'tools'>) => {\n return new OllamaClient({\n tools: options?.tools,\n overrides: { model: DEFAULT_OLLAMA_MODEL, temperature: 0 },\n });\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Schema as S } from 'effect';\n\nimport { defineTool, ToolResult } from '@dxos/artifact';\nimport { toJsonSchema } from '@dxos/echo-schema';\nimport { log } from '@dxos/log';\n\nimport { executeQuery, formatJsonSchemaForLLM, type DataSource } from '../cypher';\nimport { trim } from '../util';\n\nexport const createCypherTool = (dataSource: DataSource, schemaTypes: S.Schema.Any[] = []) =>\n defineTool('dxos.org/echo', {\n name: 'query',\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 ToolResult.Success(results);\n } catch (e: any) {\n log.catch(e);\n return ToolResult.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';\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 { live, 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 live(Contact, {\n name: 'Rich',\n }),\n );\n const contactJosiah = db.add(\n live(Contact, {\n name: 'Josiah',\n }),\n );\n const contactDima = db.add(\n live(Contact, {\n name: 'Dima',\n }),\n );\n const contactFred = db.add(\n live(Contact, {\n name: 'Fred',\n }),\n );\n\n const projectComposer = db.add(\n live(Project, {\n name: 'Composer',\n }),\n );\n const projectEcho = db.add(\n live(Project, {\n name: 'ECHO',\n }),\n );\n const projectDoodles = db.add(\n live(Project, {\n name: 'Doodles',\n }),\n );\n\n const _taskComposer1 = db.add(\n live(Task, {\n name: 'Optimize startup performance',\n project: makeRef(projectComposer),\n assignee: makeRef(contactJosiah),\n }),\n );\n const _taskComposer2 = db.add(\n live(Task, {\n name: 'Create form builder',\n project: makeRef(projectComposer),\n assignee: makeRef(contactRich),\n }),\n );\n const _taskComposer3 = db.add(\n live(Task, {\n name: 'Add support for custom themes',\n project: makeRef(projectComposer),\n assignee: makeRef(contactJosiah),\n }),\n );\n const _taskComposer5 = db.add(\n live(Task, {\n name: 'Implement community plugin',\n project: makeRef(projectComposer),\n assignee: makeRef(contactFred),\n }),\n );\n const _taskComposer4 = db.add(\n live(Task, {\n name: 'Implement dark mode',\n project: makeRef(projectComposer),\n assignee: makeRef(contactRich),\n }),\n );\n const _taskEcho1 = db.add(\n live(Task, {\n name: 'Implement cypher query engine',\n project: makeRef(projectEcho),\n assignee: makeRef(contactDima),\n }),\n );\n const _taskEcho2 = db.add(\n live(Task, {\n name: 'Add schema editor',\n project: makeRef(projectEcho),\n assignee: makeRef(contactRich),\n }),\n );\n const _taskDoodles1 = db.add(\n live(Task, {\n name: 'Add support for custom themes',\n project: makeRef(projectDoodles),\n assignee: makeRef(contactFred),\n }),\n );\n const _taskDoodles2 = db.add(\n live(Task, {\n name: 'Implement dark mode',\n project: makeRef(projectDoodles),\n assignee: makeRef(contactJosiah),\n }),\n );\n\n const _orgDxos = db.add(\n live(Org, {\n name: 'DXOS',\n employees: [makeRef(contactRich), makeRef(contactJosiah), makeRef(contactDima)],\n projects: [makeRef(projectEcho)],\n }),\n );\n const _orgBraneframe = db.add(\n live(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 (\n propSchema.type === 'array' &&\n propSchema.items &&\n typeof propSchema.items === 'object' &&\n '$id' in propSchema.items &&\n propSchema.items.$id === JSON_SCHEMA_ECHO_REF_ID\n ) {\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';\n\nimport { EntityKind, TypeAnnotationId, 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 [TypeAnnotationId]: {\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 [TypeAnnotationId]: {\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 [TypeAnnotationId]: {\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 [TypeAnnotationId]: {\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": ["AI_SERVICE_ENDPOINT", "LOCAL", "REMOTE", "createLogger", "stream", "filter", "onImage", "images", "currentText", "event", "printContentBlock", "content", "type", "process", "stdout", "write", "text", "name", "id", "source", "mediaType", "onTextBlockPrinted", "imageMatch", "match", "description", "message", "role", "toUpperCase", "delta", "partial_json", "block", "JSON", "stringify", "input", "isError", "createTestOllamaClient", "options", "OllamaClient", "tools", "overrides", "model", "DEFAULT_OLLAMA_MODEL", "temperature", "Schema", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// TODO(burdon): Remove/Reconcile with @dxos/assistant-testing.\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 '@dxos/artifact';\n\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} mediaType=${content.source?.mediaType}]`);\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 2025 DXOS.org\n//\n\nimport { DEFAULT_OLLAMA_MODEL, OllamaClient, type OllamaClientParams } from '../ai-service';\n\n/**\n * Create a test client with small local model and no temperature for predictable results.\n */\nexport const createTestOllamaClient = (options?: Pick<OllamaClientParams, 'tools'>) => {\n return new OllamaClient({\n tools: options?.tools,\n overrides: { model: DEFAULT_OLLAMA_MODEL, temperature: 0 },\n });\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { defineTool, ToolResult } from '@dxos/artifact';\nimport { toJsonSchema } from '@dxos/echo-schema';\nimport { log } from '@dxos/log';\n\nimport { executeQuery, formatJsonSchemaForLLM, type DataSource } from '../cypher';\nimport { trim } from '../util';\n\nexport const createCypherTool = (dataSource: DataSource, schemaTypes: Schema.Schema.Any[] = []) =>\n defineTool('dxos.org/echo', {\n name: 'query',\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: Schema.Struct({\n query: Schema.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 ToolResult.Success(results);\n } catch (e: any) {\n log.catch(e);\n return ToolResult.Error(e.message);\n }\n },\n });\n\nexport const createSystemPrompt = (schemaTypes: Schema.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 } from 'effect';\n\nimport { raise } from '@dxos/debug';\nimport type { EchoDatabase } from '@dxos/echo-db';\nimport {\n JSON_SCHEMA_ECHO_REF_ID,\n ObjectId,\n toJsonSchema,\n type JsonSchemaType,\n type Ref,\n Ref as RefImpl,\n} from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { live } from '@dxos/live-object';\n\nimport {\n type DataSource,\n type Node,\n type Relationship,\n formatInferredRelationshipLabel,\n formatNodeLabel,\n} from '../cypher';\nimport { Contact, Organization, Project, Task } from '../testing';\n\nexport const seedTestData = (db: EchoDatabase) => {\n const contactRich = db.add(\n live(Contact, {\n name: 'Rich',\n }),\n );\n const contactJosiah = db.add(\n live(Contact, {\n name: 'Josiah',\n }),\n );\n const contactDima = db.add(\n live(Contact, {\n name: 'Dima',\n }),\n );\n const contactFred = db.add(\n live(Contact, {\n name: 'Fred',\n }),\n );\n\n const projectComposer = db.add(\n live(Project, {\n name: 'Composer',\n }),\n );\n const projectEcho = db.add(\n live(Project, {\n name: 'ECHO',\n }),\n );\n const projectDoodles = db.add(\n live(Project, {\n name: 'Doodles',\n }),\n );\n\n const _taskComposer1 = db.add(\n live(Task, {\n name: 'Optimize startup performance',\n project: RefImpl.make(projectComposer),\n assignee: RefImpl.make(contactJosiah),\n }),\n );\n const _taskComposer2 = db.add(\n live(Task, {\n name: 'Create form builder',\n project: RefImpl.make(projectComposer),\n assignee: RefImpl.make(contactRich),\n }),\n );\n const _taskComposer3 = db.add(\n live(Task, {\n name: 'Add support for custom themes',\n project: RefImpl.make(projectComposer),\n assignee: RefImpl.make(contactJosiah),\n }),\n );\n const _taskComposer5 = db.add(\n live(Task, {\n name: 'Implement community plugin',\n project: RefImpl.make(projectComposer),\n assignee: RefImpl.make(contactFred),\n }),\n );\n const _taskComposer4 = db.add(\n live(Task, {\n name: 'Implement dark mode',\n project: RefImpl.make(projectComposer),\n assignee: RefImpl.make(contactRich),\n }),\n );\n const _taskEcho1 = db.add(\n live(Task, {\n name: 'Implement cypher query engine',\n project: RefImpl.make(projectEcho),\n assignee: RefImpl.make(contactDima),\n }),\n );\n const _taskEcho2 = db.add(\n live(Task, {\n name: 'Add schema editor',\n project: RefImpl.make(projectEcho),\n assignee: RefImpl.make(contactRich),\n }),\n );\n const _taskDoodles1 = db.add(\n live(Task, {\n name: 'Add support for custom themes',\n project: RefImpl.make(projectDoodles),\n assignee: RefImpl.make(contactFred),\n }),\n );\n const _taskDoodles2 = db.add(\n live(Task, {\n name: 'Implement dark mode',\n project: RefImpl.make(projectDoodles),\n assignee: RefImpl.make(contactJosiah),\n }),\n );\n\n const _orgDxos = db.add(\n live(Organization, {\n name: 'DXOS',\n employees: [RefImpl.make(contactRich), RefImpl.make(contactJosiah), RefImpl.make(contactDima)],\n projects: [RefImpl.make(projectEcho)],\n }),\n );\n const _orgBraneframe = db.add(\n live(Organization, {\n name: 'Braneframe',\n employees: [RefImpl.make(contactJosiah), RefImpl.make(contactRich)],\n projects: [RefImpl.make(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: RefImpl.make(projectComposer),\n assignee: RefImpl.make(contactJosiah),\n });\n const _taskComposer2 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Create form builder',\n project: RefImpl.make(projectComposer),\n assignee: RefImpl.make(contactRich),\n });\n const _taskComposer3 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Add support for custom themes',\n project: RefImpl.make(projectComposer),\n assignee: RefImpl.make(contactJosiah),\n });\n const _taskComposer5 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Implement community plugin',\n project: RefImpl.make(projectComposer),\n assignee: RefImpl.make(contactFred),\n });\n const _taskComposer4 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Implement dark mode',\n project: RefImpl.make(projectComposer),\n assignee: RefImpl.make(contactRich),\n });\n const _taskEcho1 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Implement cypher query engine',\n project: RefImpl.make(projectEcho),\n assignee: RefImpl.make(contactDima),\n });\n const _taskEcho2 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Add schema editor',\n project: RefImpl.make(projectEcho),\n assignee: RefImpl.make(contactRich),\n });\n const _taskDoodles1 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Add support for custom themes',\n project: RefImpl.make(projectDoodles),\n assignee: RefImpl.make(contactFred),\n });\n const _taskDoodles2 = dataSource.add(Task, {\n id: ObjectId.random(),\n name: 'Implement dark mode',\n project: RefImpl.make(projectDoodles),\n assignee: RefImpl.make(contactJosiah),\n });\n\n const _orgDxos = dataSource.add(Organization, {\n id: ObjectId.random(),\n name: 'DXOS',\n employees: [RefImpl.make(contactRich), RefImpl.make(contactJosiah), RefImpl.make(contactDima)],\n projects: [RefImpl.make(projectEcho)],\n });\n const _orgBraneframe = dataSource.add(Organization, {\n id: ObjectId.random(),\n name: 'Braneframe',\n employees: [RefImpl.make(contactJosiah), RefImpl.make(contactRich)],\n projects: [RefImpl.make(projectComposer)],\n });\n dataSource.computeGraph();\n\n return dataSource;\n};\n\nexport class MockDataSource implements DataSource {\n objects: Record<\n string,\n {\n schema: Schema.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: Schema.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 Schema.Schema.All>(schema: S, data: Schema.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 (\n propSchema.type === 'array' &&\n propSchema.items &&\n typeof propSchema.items === 'object' &&\n '$id' in propSchema.items &&\n propSchema.items.$id === JSON_SCHEMA_ECHO_REF_ID\n ) {\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 } from 'effect';\n\nimport { EntityKind, TypeAnnotationId, Ref, ObjectId } from '@dxos/echo-schema';\n\n// TODO(burdon): Remove (use @dxos/schema DataType).\n\n/** @deprecated */\nexport const Contact = Schema.Struct({\n id: ObjectId,\n name: Schema.String.annotations({ description: 'The name of the person.' }),\n email: Schema.optional(Schema.String).annotations({ description: 'Email address.' }),\n})\n .pipe(Schema.mutable)\n .annotations({\n [TypeAnnotationId]: {\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 Schema.Schema.Type<typeof Contact> {}\n\n/** @deprecated */\nexport const Project = Schema.Struct({\n id: ObjectId,\n name: Schema.String.annotations({ description: 'The name of the project.' }),\n description: Schema.optional(Schema.String).annotations({ description: 'The description of the project.' }),\n})\n .pipe(Schema.mutable)\n .annotations({\n [TypeAnnotationId]: {\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 Schema.Schema.Type<typeof Project> {}\n\nexport const Task = Schema.Struct({\n id: ObjectId,\n name: Schema.String.annotations({ description: 'The name of the task.' }),\n description: Schema.optional(Schema.String).annotations({ description: 'The description of the task.' }),\n project: Ref(Project),\n assignee: Ref(Contact),\n})\n .pipe(Schema.mutable)\n .annotations({\n [TypeAnnotationId]: {\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 Schema.Schema.Type<typeof Task> {}\n\n/** @deprecated */\nexport const Organization = Schema.Struct({\n id: ObjectId,\n name: Schema.String.annotations({ description: 'The name of the organization.' }),\n projects: Schema.Array(Ref(Project)),\n employees: Schema.Array(Ref(Contact)),\n})\n .pipe(Schema.mutable)\n .annotations({\n [TypeAnnotationId]: {\n kind: EntityKind.Object,\n typename: 'example.com/type/Organization',\n version: '0.1.0',\n },\n description: 'Contact information.',\n });\nexport interface Organization extends Schema.Schema.Type<typeof Organization> {}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["AI_SERVICE_ENDPOINT", "LOCAL", "REMOTE", "createLogger", "stream", "filter", "onImage", "images", "currentText", "event", "printContentBlock", "content", "type", "process", "stdout", "write", "text", "name", "id", "source", "mediaType", "onTextBlockPrinted", "imageMatch", "match", "description", "message", "role", "toUpperCase", "delta", "partial_json", "block", "JSON", "stringify", "input", "isError", "createTestOllamaClient", "options", "OllamaClient", "tools", "overrides", "model", "DEFAULT_OLLAMA_MODEL", "temperature", "Schema", "defineTool", "ToolResult", "toJsonSchema", "log", "createCypherTool", "dataSource", "schemaTypes", "defineTool", "name", "description", "length", "createSystemPrompt", "schema", "Schema", "Struct", "query", "String", "annotations", "execute", "log", "results", "executeQuery", "ToolResult", "Success", "e", "catch", "Error", "message", "trim", "formatJsonSchemaForLLM", "map", "toJsonSchema", "raise", "JSON_SCHEMA_ECHO_REF_ID", "ObjectId", "toJsonSchema", "Ref", "RefImpl", "invariant", "live", "seedTestData", "db", "contactRich", "add", "live", "Contact", "name", "contactJosiah", "contactDima", "contactFred", "projectComposer", "Project", "projectEcho", "projectDoodles", "_taskComposer1", "Task", "project", "RefImpl", "make", "assignee", "_taskComposer2", "_taskComposer3", "_taskComposer5", "_taskComposer4", "_taskEcho1", "_taskEcho2", "_taskDoodles1", "_taskDoodles2", "_orgDxos", "Organization", "employees", "projects", "_orgBraneframe", "createTestData", "dataSource", "MockDataSource", "id", "ObjectId", "random", "computeGraph", "objects", "schema", "nodes", "relationships", "getNodes", "label", "filter", "node", "getRelationships", "relationship", "data", "invariant", "jsonSchema", "toJsonSchema", "$id", "json", "instance", "typenameDxn", "raise", "Error", "typeDxn", "object", "Object", "values", "push", "kind", "formatNodeLabel", "properties", "propSchema", "entries", "JSON_SCHEMA_ECHO_REF_ID", "formatInferredRelationshipLabel", "source", "find", "targetId", "target", "type", "items", "map", "x", "Schema", "EntityKind", "TypeAnnotationId", "Ref", "ObjectId", "Contact", "Schema", "Struct", "id", "ObjectId", "name", "String", "annotations", "description", "email", "optional", "pipe", "mutable", "TypeAnnotationId", "kind", "EntityKind", "Object", "typename", "version", "Project", "Task", "project", "Ref", "assignee", "Organization", "projects", "Array", "employees"]
|
|
7
7
|
}
|