@dxos/plugin-assistant 0.8.4-main.1da679c → 0.8.4-main.1f223c7

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.
Files changed (149) hide show
  1. package/dist/lib/browser/{BlueprintContainer-6MZHBQ25.mjs → BlueprintContainer-BFNN6K46.mjs} +2 -2
  2. package/dist/lib/browser/{ChatCompanion-B4DLQE6Y.mjs → ChatCompanion-DOVN34C7.mjs} +6 -4
  3. package/dist/lib/{node-esm/ChatCompanion-DK6FULBU.mjs.map → browser/ChatCompanion-DOVN34C7.mjs.map} +1 -1
  4. package/dist/lib/browser/{ChatContainer-Z7A3RKOY.mjs → ChatContainer-XIVJTCC2.mjs} +4 -2
  5. package/dist/lib/browser/{ChatContainer-Z7A3RKOY.mjs.map → ChatContainer-XIVJTCC2.mjs.map} +1 -1
  6. package/dist/lib/browser/{ChatDialog-PL5TSGD5.mjs → ChatDialog-EJJMK3WL.mjs} +4 -2
  7. package/dist/lib/browser/{ChatDialog-PL5TSGD5.mjs.map → ChatDialog-EJJMK3WL.mjs.map} +1 -1
  8. package/dist/lib/browser/ai-service-YC2EQPHA.mjs +22 -0
  9. package/dist/lib/browser/ai-service-YC2EQPHA.mjs.map +7 -0
  10. package/dist/lib/browser/{app-graph-builder-BBDHBJXA.mjs → app-graph-builder-3C43MLCD.mjs} +4 -4
  11. package/dist/lib/browser/{app-graph-builder-BBDHBJXA.mjs.map → app-graph-builder-3C43MLCD.mjs.map} +1 -1
  12. package/dist/lib/browser/{blueprint-definition-3SATLYJW.mjs → blueprint-definition-VHFSRTEJ.mjs} +2 -2
  13. package/dist/lib/browser/{chunk-YOBHCEEI.mjs → chunk-C4Q2RYQM.mjs} +47 -14
  14. package/dist/lib/browser/chunk-C4Q2RYQM.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-YKODYEYR.mjs → chunk-EZUSNS2J.mjs} +4 -1
  16. package/dist/lib/browser/chunk-EZUSNS2J.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-BBT6KNXA.mjs → chunk-GLWD66TA.mjs} +5 -9
  18. package/dist/lib/browser/chunk-GLWD66TA.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-JDI4FEKA.mjs → chunk-QD4UUISH.mjs} +6 -6
  20. package/dist/lib/browser/{chunk-TMKK6VCA.mjs → chunk-R6LRGW3I.mjs} +3 -3
  21. package/dist/lib/browser/chunk-R6LRGW3I.mjs.map +7 -0
  22. package/dist/lib/browser/compute-runtime-X6IREJN3.mjs +155 -0
  23. package/dist/lib/browser/compute-runtime-X6IREJN3.mjs.map +7 -0
  24. package/dist/lib/browser/{edge-model-resolver-6YWYDPTS.mjs → edge-model-resolver-JNEB355N.mjs} +9 -5
  25. package/dist/lib/browser/edge-model-resolver-JNEB355N.mjs.map +7 -0
  26. package/dist/lib/browser/index.mjs +25 -21
  27. package/dist/lib/browser/index.mjs.map +4 -4
  28. package/dist/lib/browser/{intent-resolver-MRZJU255.mjs → intent-resolver-I6M3ZDAS.mjs} +5 -5
  29. package/dist/lib/browser/{intent-resolver-MRZJU255.mjs.map → intent-resolver-I6M3ZDAS.mjs.map} +1 -1
  30. package/dist/lib/browser/{local-model-resolver-QXLLTV2H.mjs → local-model-resolver-EUXSRZ7X.mjs} +9 -5
  31. package/dist/lib/browser/local-model-resolver-EUXSRZ7X.mjs.map +7 -0
  32. package/dist/lib/browser/meta.json +1 -1
  33. package/dist/lib/browser/{react-surface-UKMOARXR.mjs → react-surface-E4NAGB6R.mjs} +8 -6
  34. package/dist/lib/{node-esm/react-surface-5NDJAWA2.mjs.map → browser/react-surface-E4NAGB6R.mjs.map} +1 -1
  35. package/dist/lib/browser/{settings-4AJ34FKF.mjs → settings-36V3VUMW.mjs} +3 -3
  36. package/dist/lib/browser/{settings-4AJ34FKF.mjs.map → settings-36V3VUMW.mjs.map} +1 -1
  37. package/dist/lib/browser/{state-ABR7YSSA.mjs → state-AINRYS5W.mjs} +4 -4
  38. package/dist/lib/browser/{state-ABR7YSSA.mjs.map → state-AINRYS5W.mjs.map} +1 -1
  39. package/dist/lib/browser/{toolkit-U7SKGAIC.mjs → toolkit-MPUS3U64.mjs} +3 -3
  40. package/dist/lib/browser/{toolkit-U7SKGAIC.mjs.map → toolkit-MPUS3U64.mjs.map} +1 -1
  41. package/dist/lib/node-esm/{BlueprintContainer-MUHW5HNY.mjs → BlueprintContainer-X4MRBKDR.mjs} +2 -2
  42. package/dist/lib/node-esm/{ChatCompanion-DK6FULBU.mjs → ChatCompanion-ICWYVPRD.mjs} +6 -4
  43. package/dist/lib/{browser/ChatCompanion-B4DLQE6Y.mjs.map → node-esm/ChatCompanion-ICWYVPRD.mjs.map} +1 -1
  44. package/dist/lib/node-esm/{ChatContainer-7IN7ZICQ.mjs → ChatContainer-LMMMQD4K.mjs} +4 -2
  45. package/dist/lib/node-esm/{ChatContainer-7IN7ZICQ.mjs.map → ChatContainer-LMMMQD4K.mjs.map} +1 -1
  46. package/dist/lib/node-esm/{ChatDialog-LPE653RZ.mjs → ChatDialog-UUE3F7BT.mjs} +4 -2
  47. package/dist/lib/node-esm/{ChatDialog-LPE653RZ.mjs.map → ChatDialog-UUE3F7BT.mjs.map} +1 -1
  48. package/dist/lib/node-esm/{ai-service-I5JU4JN2.mjs → ai-service-XUMZVFCK.mjs} +10 -6
  49. package/dist/lib/node-esm/ai-service-XUMZVFCK.mjs.map +7 -0
  50. package/dist/lib/node-esm/{app-graph-builder-EMR5JF6Z.mjs → app-graph-builder-NM3JDLQ2.mjs} +4 -4
  51. package/dist/lib/node-esm/{app-graph-builder-EMR5JF6Z.mjs.map → app-graph-builder-NM3JDLQ2.mjs.map} +1 -1
  52. package/dist/lib/node-esm/{blueprint-definition-B6UDX5U3.mjs → blueprint-definition-4E6XTLVN.mjs} +2 -2
  53. package/dist/lib/node-esm/{chunk-GCNF3CQU.mjs → chunk-LVTG5JTW.mjs} +3 -3
  54. package/dist/lib/node-esm/chunk-LVTG5JTW.mjs.map +7 -0
  55. package/dist/lib/node-esm/{chunk-5MYWJPYA.mjs → chunk-QG2KT3AT.mjs} +5 -9
  56. package/dist/lib/node-esm/chunk-QG2KT3AT.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-X2YUKRBE.mjs → chunk-V44ZG7CU.mjs} +47 -14
  58. package/dist/lib/node-esm/chunk-V44ZG7CU.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-FHRJMZ7L.mjs → chunk-XD4CDA4R.mjs} +4 -1
  60. package/dist/lib/node-esm/chunk-XD4CDA4R.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-H3ZC4UL7.mjs → chunk-YU62ZWJN.mjs} +6 -6
  62. package/dist/lib/node-esm/compute-runtime-NRHLLTSC.mjs +156 -0
  63. package/dist/lib/node-esm/compute-runtime-NRHLLTSC.mjs.map +7 -0
  64. package/dist/lib/node-esm/{edge-model-resolver-A7B6QHLL.mjs → edge-model-resolver-UE5TLLJZ.mjs} +9 -5
  65. package/dist/lib/node-esm/edge-model-resolver-UE5TLLJZ.mjs.map +7 -0
  66. package/dist/lib/node-esm/index.mjs +25 -21
  67. package/dist/lib/node-esm/index.mjs.map +4 -4
  68. package/dist/lib/node-esm/{intent-resolver-CIXO3KMY.mjs → intent-resolver-VIINHFMT.mjs} +5 -5
  69. package/dist/lib/node-esm/{intent-resolver-CIXO3KMY.mjs.map → intent-resolver-VIINHFMT.mjs.map} +1 -1
  70. package/dist/lib/node-esm/{local-model-resolver-JCYDHAZY.mjs → local-model-resolver-JBEFVVZA.mjs} +9 -5
  71. package/dist/lib/node-esm/local-model-resolver-JBEFVVZA.mjs.map +7 -0
  72. package/dist/lib/node-esm/meta.json +1 -1
  73. package/dist/lib/node-esm/{react-surface-5NDJAWA2.mjs → react-surface-5WQLRTCH.mjs} +8 -6
  74. package/dist/lib/{browser/react-surface-UKMOARXR.mjs.map → node-esm/react-surface-5WQLRTCH.mjs.map} +1 -1
  75. package/dist/lib/node-esm/{settings-K2QW4ATZ.mjs → settings-7ZCZ6AS5.mjs} +3 -3
  76. package/dist/lib/node-esm/{settings-K2QW4ATZ.mjs.map → settings-7ZCZ6AS5.mjs.map} +1 -1
  77. package/dist/lib/node-esm/{state-6UHESJI5.mjs → state-EQS5KP6M.mjs} +4 -4
  78. package/dist/lib/node-esm/{state-6UHESJI5.mjs.map → state-EQS5KP6M.mjs.map} +1 -1
  79. package/dist/lib/node-esm/{toolkit-LNLRBVDU.mjs → toolkit-PKVYDZ4H.mjs} +3 -3
  80. package/dist/lib/node-esm/{toolkit-LNLRBVDU.mjs.map → toolkit-PKVYDZ4H.mjs.map} +1 -1
  81. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  82. package/dist/types/src/capabilities/ai-service.d.ts +3 -2
  83. package/dist/types/src/capabilities/ai-service.d.ts.map +1 -1
  84. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/capabilities.d.ts +21 -0
  86. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/compute-runtime.d.ts +5 -0
  88. package/dist/types/src/capabilities/compute-runtime.d.ts.map +1 -0
  89. package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/index.d.ts +1 -0
  91. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/local-model-resolver.d.ts.map +1 -1
  93. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  94. package/dist/types/src/hooks/index.d.ts +1 -0
  95. package/dist/types/src/hooks/index.d.ts.map +1 -1
  96. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts +8 -0
  97. package/dist/types/src/hooks/useComputeRuntimeCallback.d.ts.map +1 -0
  98. package/dist/types/src/stories/Chat.stories.d.ts +0 -1
  99. package/dist/types/src/stories/Chat.stories.d.ts.map +1 -1
  100. package/dist/types/src/stories/components/TriggersContainer.d.ts +12 -1
  101. package/dist/types/src/stories/components/TriggersContainer.d.ts.map +1 -1
  102. package/dist/types/src/stories/components/index.d.ts +2 -3
  103. package/dist/types/src/stories/components/index.d.ts.map +1 -1
  104. package/dist/types/src/stories/testing/testing.d.ts.map +1 -1
  105. package/dist/types/src/testing/test-data.d.ts +1 -1
  106. package/dist/types/src/testing/test-data.d.ts.map +1 -1
  107. package/dist/types/tsconfig.tsbuildinfo +1 -1
  108. package/package.json +90 -91
  109. package/src/AssistantPlugin.tsx +9 -8
  110. package/src/capabilities/ai-service.ts +5 -3
  111. package/src/capabilities/blueprint-definition.ts +1 -4
  112. package/src/capabilities/capabilities.ts +53 -0
  113. package/src/capabilities/compute-runtime.ts +124 -0
  114. package/src/capabilities/edge-model-resolver.ts +4 -2
  115. package/src/capabilities/index.ts +1 -0
  116. package/src/capabilities/local-model-resolver.ts +4 -2
  117. package/src/components/TemplateEditor/TemplateEditor.tsx +2 -2
  118. package/src/hooks/index.ts +1 -0
  119. package/src/hooks/useChatServices.ts +2 -2
  120. package/src/hooks/useComputeRuntimeCallback.ts +25 -0
  121. package/src/stories/Chat.stories.tsx +4 -151
  122. package/src/stories/components/TriggersContainer.tsx +67 -4
  123. package/src/stories/components/index.ts +2 -3
  124. package/src/stories/testing/testing.tsx +1 -6
  125. package/src/testing/test-data.ts +26 -36
  126. package/dist/lib/browser/ai-service-4VESSFNB.mjs +0 -18
  127. package/dist/lib/browser/ai-service-4VESSFNB.mjs.map +0 -7
  128. package/dist/lib/browser/chunk-BBT6KNXA.mjs.map +0 -7
  129. package/dist/lib/browser/chunk-TMKK6VCA.mjs.map +0 -7
  130. package/dist/lib/browser/chunk-YKODYEYR.mjs.map +0 -7
  131. package/dist/lib/browser/chunk-YOBHCEEI.mjs.map +0 -7
  132. package/dist/lib/browser/edge-model-resolver-6YWYDPTS.mjs.map +0 -7
  133. package/dist/lib/browser/local-model-resolver-QXLLTV2H.mjs.map +0 -7
  134. package/dist/lib/node-esm/ai-service-I5JU4JN2.mjs.map +0 -7
  135. package/dist/lib/node-esm/chunk-5MYWJPYA.mjs.map +0 -7
  136. package/dist/lib/node-esm/chunk-FHRJMZ7L.mjs.map +0 -7
  137. package/dist/lib/node-esm/chunk-GCNF3CQU.mjs.map +0 -7
  138. package/dist/lib/node-esm/chunk-X2YUKRBE.mjs.map +0 -7
  139. package/dist/lib/node-esm/edge-model-resolver-A7B6QHLL.mjs.map +0 -7
  140. package/dist/lib/node-esm/local-model-resolver-JCYDHAZY.mjs.map +0 -7
  141. package/dist/types/src/stories/components/ProjectContainer.d.ts +0 -4
  142. package/dist/types/src/stories/components/ProjectContainer.d.ts.map +0 -1
  143. package/src/stories/components/ProjectContainer.tsx +0 -17
  144. /package/dist/lib/browser/{BlueprintContainer-6MZHBQ25.mjs.map → BlueprintContainer-BFNN6K46.mjs.map} +0 -0
  145. /package/dist/lib/browser/{blueprint-definition-3SATLYJW.mjs.map → blueprint-definition-VHFSRTEJ.mjs.map} +0 -0
  146. /package/dist/lib/browser/{chunk-JDI4FEKA.mjs.map → chunk-QD4UUISH.mjs.map} +0 -0
  147. /package/dist/lib/node-esm/{BlueprintContainer-MUHW5HNY.mjs.map → BlueprintContainer-X4MRBKDR.mjs.map} +0 -0
  148. /package/dist/lib/node-esm/{blueprint-definition-B6UDX5U3.mjs.map → blueprint-definition-4E6XTLVN.mjs.map} +0 -0
  149. /package/dist/lib/node-esm/{chunk-H3ZC4UL7.mjs.map → chunk-YU62ZWJN.mjs.map} +0 -0
@@ -11,16 +11,9 @@ import React, { type FC, useCallback } from 'react';
11
11
  import { EXA_API_KEY } from '@dxos/ai/testing';
12
12
  import { Capabilities, Surface, useCapabilities } from '@dxos/app-framework';
13
13
  import { AiContextBinder } from '@dxos/assistant';
14
- import {
15
- LINEAR_BLUEPRINT,
16
- RESEARCH_BLUEPRINT,
17
- ResearchDataTypes,
18
- ResearchGraph,
19
- ResearchOn,
20
- agent,
21
- } from '@dxos/assistant-testing';
14
+ import { LINEAR_BLUEPRINT, RESEARCH_BLUEPRINT, ResearchDataTypes, ResearchGraph, agent } from '@dxos/assistant-testing';
22
15
  import { Blueprint, Prompt } from '@dxos/blueprints';
23
- import { Filter, Obj, Query, Ref, Relation, Type } from '@dxos/echo';
16
+ import { Filter, Obj, Query, Ref } from '@dxos/echo';
24
17
  import { FunctionTrigger, exampleFunctions, serializeFunction } from '@dxos/functions';
25
18
  import { log } from '@dxos/log';
26
19
  import { Board, BoardPlugin } from '@dxos/plugin-board';
@@ -32,7 +25,6 @@ import { Map, MapPlugin } from '@dxos/plugin-map';
32
25
  import { createLocationSchema } from '@dxos/plugin-map/testing';
33
26
  import { Markdown, MarkdownPlugin } from '@dxos/plugin-markdown';
34
27
  import { PreviewPlugin } from '@dxos/plugin-preview';
35
- import { ProjectPlugin } from '@dxos/plugin-project';
36
28
  import { TablePlugin } from '@dxos/plugin-table';
37
29
  import { ThreadPlugin } from '@dxos/plugin-thread';
38
30
  import { TokenManagerPlugin } from '@dxos/plugin-token-manager';
@@ -43,7 +35,7 @@ import { useQuery, useSpace } from '@dxos/react-client/echo';
43
35
  import { useAsyncEffect, useSignalsMemo } from '@dxos/react-ui';
44
36
  import { Stack, StackItem } from '@dxos/react-ui-stack';
45
37
  import { Table } from '@dxos/react-ui-table/types';
46
- import { DataType, createView } from '@dxos/schema';
38
+ import { DataType } from '@dxos/schema';
47
39
  import { render } from '@dxos/storybook-utils';
48
40
  import { isNonNullable, trim } from '@dxos/util';
49
41
 
@@ -63,7 +55,6 @@ import {
63
55
  InvocationsContainer,
64
56
  LoggingContainer,
65
57
  MessageContainer,
66
- ProjectContainer,
67
58
  PromptContainer,
68
59
  ResearchInputStack,
69
60
  ResearchOutputStack,
@@ -634,8 +625,7 @@ export const WithResearchQueue: Story = {
634
625
  }),
635
626
  output: Schema.Any,
636
627
 
637
- instructions:
638
- 'Research the organization provided as input. Create a research note for it at the end. NOTE: Do mocked reseach (set mockSearch to true).',
628
+ instructions: 'Research the organization provided as input.',
639
629
  blueprints: [Ref.make(RESEARCH_BLUEPRINT)],
640
630
  }),
641
631
  );
@@ -665,140 +655,3 @@ export const WithResearchQueue: Story = {
665
655
  blueprints: [RESEARCH_BLUEPRINT.key],
666
656
  },
667
657
  };
668
-
669
- export const WithProject: Story = {
670
- decorators: getDecorators({
671
- plugins: [InboxPlugin(), MarkdownPlugin(), ProjectPlugin()],
672
- config: config.remote,
673
- accessTokens: [Obj.make(DataType.AccessToken, { source: 'exa.ai', token: EXA_API_KEY })],
674
- types: [
675
- DataType.Employer,
676
- DataType.HasConnection,
677
- DataType.Message,
678
- DataType.Organization,
679
- DataType.Person,
680
- DataType.Project,
681
- DataType.View,
682
- Mailbox.Mailbox,
683
- ResearchOn,
684
- ],
685
- onInit: async ({ space }) => {
686
- await addTestData(space);
687
- const { objects: people } = await space.db.query(Filter.type(DataType.Person)).run();
688
- const { objects: organizations } = await space.db.query(Filter.type(DataType.Organization)).run();
689
-
690
- people.slice(0, 4).forEach((person) => {
691
- person.notes = 'Project';
692
- });
693
-
694
- const queue = space.queues.create();
695
- const messages = createTestMailbox(people);
696
- await queue.append(messages);
697
- const mailbox = space.db.add(Mailbox.make({ name: 'Mailbox', queue: queue.dxn }));
698
-
699
- const dxosResearch = space.db.add(
700
- Markdown.makeDocument({
701
- name: 'DXOS Research',
702
- content: 'DXOS builds Composer, an open-source AI-powered malleable application.',
703
- }),
704
- );
705
- const blueyardResearch = space.db.add(
706
- Markdown.makeDocument({
707
- name: 'Blue Yard Research',
708
- content: 'Blue Yard is a venture capital firm that invests in early-stage startups.',
709
- }),
710
- );
711
-
712
- const dxos = organizations.find((org) => org.name === 'DXOS')!;
713
- const blueyard = organizations.find((org) => org.name === 'Blue Yard')!;
714
- console.log(dxos, blueyard);
715
- space.db.add(
716
- Relation.make(ResearchOn, {
717
- [Relation.Source]: dxosResearch,
718
- [Relation.Target]: dxos,
719
- completedAt: new Date().toISOString(),
720
- }),
721
- );
722
- space.db.add(
723
- Relation.make(ResearchOn, {
724
- [Relation.Source]: blueyardResearch,
725
- [Relation.Target]: blueyard,
726
- completedAt: new Date().toISOString(),
727
- }),
728
- );
729
-
730
- const contactsQuery = Query.select(Filter.type(DataType.Person, { notes: 'Project' }));
731
- const organizationsQuery = contactsQuery.sourceOf(DataType.Employer, { active: true }).target();
732
- const notesQuery = organizationsQuery.targetOf(ResearchOn).source();
733
-
734
- const researchPrompt = space.db.add(
735
- Prompt.make({
736
- name: 'Research',
737
- description: 'Research organization',
738
- input: Schema.Struct({
739
- org: Schema.Any,
740
- }),
741
- output: Schema.Any,
742
-
743
- instructions:
744
- 'Research the organization provided as input. Absolutely, in all cases, create a research note for it at the end. NOTE: Do mocked reseach (set mockSearch to true).',
745
- blueprints: [Ref.make(RESEARCH_BLUEPRINT)],
746
- }),
747
- );
748
-
749
- const researchTrigger = Obj.make(FunctionTrigger, {
750
- function: Ref.make(serializeFunction(agent)),
751
- enabled: true,
752
- spec: {
753
- kind: 'subscription',
754
- query: organizationsQuery.ast,
755
- },
756
- input: {
757
- prompt: Ref.make(researchPrompt),
758
- input: '{{event.subject}}',
759
- },
760
- });
761
- space.db.add(researchTrigger);
762
-
763
- const mailboxView = createView({
764
- name: 'Mailbox',
765
- query: Query.select(
766
- Filter.type(DataType.Message, { properties: { labels: Filter.contains('Project') } }),
767
- ).options({
768
- queues: [mailbox.queue.dxn.toString()],
769
- }),
770
- jsonSchema: Type.toJsonSchema(DataType.Message),
771
- presentation: Obj.make(DataType.Collection, { objects: [] }),
772
- });
773
- const contactsView = createView({
774
- name: 'Contacts',
775
- query: contactsQuery,
776
- jsonSchema: Type.toJsonSchema(DataType.Person),
777
- presentation: Obj.make(DataType.Collection, { objects: [] }),
778
- });
779
- const organizationsView = createView({
780
- name: 'Organizations',
781
- query: organizationsQuery,
782
- jsonSchema: Type.toJsonSchema(DataType.Organization),
783
- presentation: Obj.make(DataType.Collection, { objects: [] }),
784
- });
785
- const notesView = createView({
786
- name: 'Notes',
787
- query: notesQuery,
788
- jsonSchema: Type.toJsonSchema(Markdown.Document),
789
- presentation: Obj.make(DataType.Collection, { objects: [] }),
790
- });
791
-
792
- space.db.add(
793
- DataType.makeProject({
794
- name: 'Investor Research',
795
- collections: [mailboxView, contactsView, organizationsView, notesView].map((view) => Ref.make(view)),
796
- }),
797
- );
798
- },
799
- }),
800
- args: {
801
- deckComponents: [[ProjectContainer], [TriggersContainer, InvocationsContainer]],
802
- blueprints: [],
803
- },
804
- };
@@ -2,11 +2,74 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ import { Effect } from 'effect';
5
6
  import React from 'react';
6
7
 
7
- import { Surface } from '@dxos/app-framework';
8
- import { meta as automationMeta } from '@dxos/plugin-automation';
8
+ import { Filter } from '@dxos/echo';
9
+ import { FunctionTrigger, TriggerDispatcher } from '@dxos/functions';
10
+ import { AutomationPanel } from '@dxos/plugin-automation';
11
+ import { type Space, useQuery } from '@dxos/react-client/echo';
12
+ import { Input, Toolbar, useAsyncState } from '@dxos/react-ui';
13
+ import { useTranslation } from '@dxos/react-ui';
9
14
 
10
- export const TriggersContainer = () => {
11
- return <Surface role='article' data={{ subject: `${automationMeta.id}/space-settings-automation` }} />;
15
+ import { useComputeRuntimeCallback } from '../../hooks';
16
+ import { meta } from '../../meta';
17
+
18
+ import type { ComponentProps } from './types';
19
+
20
+ export const TriggersContainer = ({ space }: ComponentProps) => {
21
+ const { t } = useTranslation(meta.id);
22
+ const { triggers, isRunning, start, stop } = useTriggerRuntimeControls(space);
23
+ return (
24
+ <div className='flex flex-col p-2'>
25
+ <Toolbar.Root>
26
+ <Input.Root>
27
+ <div>{isRunning ? t('trigger dispatcher running') : t('trigger dispatcher stopped')}</div>
28
+ <Input.Switch classNames='mis-2 mie-2' checked={isRunning} onCheckedChange={isRunning ? stop : start} />
29
+ </Input.Root>
30
+ </Toolbar.Root>
31
+
32
+ <AutomationPanel classNames='p-2' space={space} />
33
+ </div>
34
+ );
35
+ };
36
+
37
+ interface TriggerRuntimeControls {
38
+ triggers: FunctionTrigger[];
39
+ isRunning: boolean;
40
+ start: () => void;
41
+ stop: () => void;
42
+ }
43
+
44
+ export const useTriggerRuntimeControls = (space: Space): TriggerRuntimeControls => {
45
+ const triggers = useQuery(space, Filter.type(FunctionTrigger));
46
+
47
+ const [isRunningState, setIsRunningState] = useAsyncState(
48
+ useComputeRuntimeCallback(space, () => TriggerDispatcher.pipe(Effect.map((t) => t.running))),
49
+ );
50
+
51
+ const start = useComputeRuntimeCallback(
52
+ space,
53
+ Effect.fnUntraced(function* () {
54
+ const dispatcher = yield* TriggerDispatcher;
55
+ yield* dispatcher.start();
56
+ setIsRunningState(true);
57
+ }),
58
+ );
59
+
60
+ const stop = useComputeRuntimeCallback(
61
+ space,
62
+ Effect.fnUntraced(function* () {
63
+ const dispatcher = yield* TriggerDispatcher;
64
+ yield* dispatcher.stop();
65
+ setIsRunningState(false);
66
+ }),
67
+ );
68
+
69
+ return {
70
+ triggers,
71
+ isRunning: isRunningState ?? false,
72
+ start: () => void start(),
73
+ stop: () => void stop(),
74
+ };
12
75
  };
@@ -6,16 +6,15 @@ export * from './types';
6
6
 
7
7
  export * from './BlueprintContainer';
8
8
  export * from './ChatContainer';
9
- export * from './ChessContainer';
10
9
  export * from './CommentsContainer';
11
10
  export * from './GraphContainer';
12
11
  export * from './InvocationsContainer';
13
12
  export * from './LoggingContainer';
14
13
  export * from './MessageContainer';
15
- export * from './ProjectContainer';
16
- export * from './PromptContainer';
17
14
  export * from './ResearchInputStack';
18
15
  export * from './ResearchOutputStack';
16
+ export * from './PromptContainer';
19
17
  export * from './TasksContainer';
20
18
  export * from './TokenManagerContainer';
21
19
  export * from './TriggersContainer';
20
+ export * from './ChessContainer';
@@ -26,8 +26,6 @@ import { AiContextBinder, ArtifactId } from '@dxos/assistant';
26
26
  import {
27
27
  DESIGN_BLUEPRINT,
28
28
  PLANNING_BLUEPRINT,
29
- agent,
30
- createResearchNote,
31
29
  readDocument,
32
30
  readTasks,
33
31
  research,
@@ -40,7 +38,6 @@ import { Obj, Ref } from '@dxos/echo';
40
38
  import { FunctionTrigger, FunctionType, exampleFunctions } from '@dxos/functions';
41
39
  import { log } from '@dxos/log';
42
40
  import { AttentionPlugin } from '@dxos/plugin-attention';
43
- import { AutomationPlugin } from '@dxos/plugin-automation';
44
41
  import { ClientCapabilities, ClientEvents, ClientPlugin } from '@dxos/plugin-client';
45
42
  import { type ClientPluginOptions } from '@dxos/plugin-client/types';
46
43
  import { DeckAction } from '@dxos/plugin-deck/types';
@@ -123,7 +120,6 @@ export const getDecorators = ({
123
120
  plugins: [
124
121
  // System plugins.
125
122
  AttentionPlugin(),
126
- AutomationPlugin(),
127
123
  GraphPlugin(),
128
124
  IntentPlugin(),
129
125
  SettingsPlugin(),
@@ -184,10 +180,9 @@ export const getDecorators = ({
184
180
  // TODO(burdon): Move into assistnat?
185
181
  contributes(Capabilities.BlueprintDefinition, DESIGN_BLUEPRINT),
186
182
  contributes(Capabilities.BlueprintDefinition, PLANNING_BLUEPRINT),
187
- contributes(Capabilities.Functions, [agent]),
188
183
  contributes(Capabilities.Functions, [readDocument, updateDocument]),
189
184
  contributes(Capabilities.Functions, [readTasks, updateTasks]),
190
- contributes(Capabilities.Functions, [research, createResearchNote]),
185
+ contributes(Capabilities.Functions, [research]),
191
186
  contributes(Capabilities.Functions, [exampleFunctions.reply]),
192
187
  ],
193
188
  }),
@@ -3,7 +3,7 @@
3
3
  //
4
4
 
5
5
  import { type Live, type Space } from '@dxos/client/echo';
6
- import { Obj, Ref, Relation, type Type } from '@dxos/echo';
6
+ import { Obj, Relation, type Type } from '@dxos/echo';
7
7
  import { invariant } from '@dxos/invariant';
8
8
  import { DataType } from '@dxos/schema';
9
9
 
@@ -41,7 +41,7 @@ export const organizations: (Type.Properties<DataType.Organization> & { id: stri
41
41
  export const people: (Type.Properties<DataType.Person> & { id: string })[] = [
42
42
  { id: 'rich_burdon', fullName: 'Rich Burdon' },
43
43
  { id: 'josiah_witt', fullName: 'Josiah Witt' },
44
- { id: 'dima_maretskyi', fullName: 'Dima Maretskyi' },
44
+ { id: 'dima_dmaretskyi', fullName: 'Dima Maretskyi' },
45
45
  { id: 'chad_fowler', fullName: 'Chad Fowler' },
46
46
  { id: 'ciaran_oleary', fullName: "Ciarán O'Leary" },
47
47
  { id: 'jason_whitmire', fullName: 'Jason Whitmire' },
@@ -68,23 +68,23 @@ const testRelationships: Record<
68
68
  > = {
69
69
  [DataType.Employer.typename]: [
70
70
  // prettier-ignore
71
- { source: 'rich_burdon', target: 'dxos', active: true },
71
+ { source: 'rich_burdon', target: 'dxos' },
72
72
  { source: 'rich_burdon', target: 'google', active: false }, // TODO(burdon): Should not contribute to force.
73
73
  { source: 'rich_burdon', target: 'deshaw', active: false },
74
- { source: 'josiah_witt', target: 'dxos', active: true },
75
- { source: 'dima_maretskyi', target: 'dxos', active: true },
76
- { source: 'chad_fowler', target: 'blueyard', active: true },
74
+ { source: 'josiah_witt', target: 'dxos' },
75
+ { source: 'dima_dmaretskyi', target: 'dxos' },
76
+ { source: 'chad_fowler', target: 'blueyard' },
77
77
  { source: 'chad_fowler', target: 'microsoft', active: false },
78
- { source: 'ciaran_oleary', target: 'blueyard', active: true },
79
- { source: 'jason_whitmire', target: 'blueyard', active: true },
80
- { source: 'juan_benet', target: 'protocol_labs', active: true },
81
- { source: 'alex_brunicki', target: 'backed', active: true },
82
- { source: 'andre_de_haes', target: 'backed', active: true },
83
- { source: 'scott_cohen', target: 'newlab', active: true },
84
- { source: 'satya_nadella', target: 'microsoft', active: true },
85
- { source: 'kevin_scott', target: 'microsoft', active: true },
78
+ { source: 'ciaran_oleary', target: 'blueyard' },
79
+ { source: 'jason_whitmire', target: 'blueyard' },
80
+ { source: 'juan_benet', target: 'protocol_labs' },
81
+ { source: 'alex_brunicki', target: 'backed' },
82
+ { source: 'andre_de_haes', target: 'backed' },
83
+ { source: 'scott_cohen', target: 'newlab' },
84
+ { source: 'satya_nadella', target: 'microsoft' },
85
+ { source: 'kevin_scott', target: 'microsoft' },
86
86
  { source: 'kevin_scott', target: 'google', active: false },
87
- { source: 'jeff_bezos', target: 'amazon', active: true },
87
+ { source: 'jeff_bezos', target: 'amazon' },
88
88
  { source: 'jeff_bezos', target: 'deshaw', active: false },
89
89
  ],
90
90
 
@@ -193,61 +193,51 @@ export const createTestTranscription = (): DataType.Message[] => {
193
193
  };
194
194
 
195
195
  // TODO(wittjosiah): Find way to use data generator to generate substantive messages that could be summarized.
196
- export const createTestMailbox = (contacts?: DataType.Person[]): DataType.Message[] => {
196
+ export const createTestMailbox = (): DataType.Message[] => {
197
197
  const timeInterval = 1000;
198
198
  const messages: DataType.Message[] = [
199
199
  {
200
200
  text: 'Subject: Project Kickoff\n\nHi team,\n\nWe are excited to announce the kickoff of the Apollo project. Please review the attached roadmap and be prepared for our first meeting on Monday.\n\nBest,\nAlice',
201
- sender: contacts?.[0] ?? 'alice.johnson@acme-corp.com',
202
- labels: ['Project'],
201
+ sender: 'alice.johnson@acme-corp.com',
203
202
  },
204
203
  {
205
204
  text: 'Subject: Sales Update\n\nDear all,\n\nQ2 sales numbers have exceeded expectations. Congratulations to everyone for their hard work!\n\nRegards,\nBob',
206
- sender: contacts?.[1] ?? 'bob.smith@salesforce.biz',
207
- labels: ['Project'],
205
+ sender: 'bob.smith@salesforce.biz',
208
206
  },
209
207
  {
210
208
  text: 'Subject: Invoice Reminder\n\nHello,\n\nThis is a friendly reminder that invoice #12345 is due next week. Please let us know if you have any questions.\n\nThank you,\nCarol',
211
- sender: contacts?.[2] ?? 'carol.finance@invoicesolutions.com',
212
- labels: ['Project'],
209
+ sender: 'carol.finance@invoicesolutions.com',
213
210
  },
214
211
  {
215
212
  text: 'Subject: Meeting Rescheduled\n\nHi team,\n\nTomorrow’s product design meeting has been moved to Friday at 2pm. Please update your calendars.\n\nThanks,\nDavid',
216
- sender: contacts?.[3] ?? 'david.lee@productdesign.io',
217
- labels: ['Project'],
213
+ sender: 'david.lee@productdesign.io',
218
214
  },
219
215
  {
220
216
  text: 'Subject: Welcome Aboard!\n\nWelcome to the company, Emily! We are thrilled to have you join the marketing department.\n\nBest,\nFiona',
221
- sender: contacts?.[4] ?? 'fiona.hr@enterpriseco.com',
222
- labels: [],
217
+ sender: 'fiona.hr@enterpriseco.com',
223
218
  },
224
219
  {
225
220
  text: 'Subject: IT Maintenance\n\nDear colleagues,\n\nScheduled IT maintenance will occur this Saturday from 1am to 5am. Please save your work accordingly.\n\nSincerely,\nGreg',
226
- sender: contacts?.[5] ?? 'greg.it@supporthub.net',
227
- labels: [],
221
+ sender: 'greg.it@supporthub.net',
228
222
  },
229
223
  {
230
224
  text: 'Subject: Lunch & Learn\n\nJoin us for a Lunch & Learn session on cloud security this Thursday in the main conference room.\n\nSee you there,\nHelen',
231
- sender: contacts?.[6] ?? 'helen.training@acme-corp.com',
232
- labels: [],
225
+ sender: 'helen.training@acme-corp.com',
233
226
  },
234
227
  {
235
228
  text: 'Subject: Client Feedback\n\nHi,\n\nOur client, InnovateX, sent positive feedback on the recent deployment. Great job, everyone!\n\nCheers,\nIvan',
236
- sender: contacts?.[7] ?? 'ivan.account@consultingpartners.org',
237
- labels: [],
229
+ sender: 'ivan.account@consultingpartners.org',
238
230
  },
239
231
  {
240
232
  text: 'Subject: Policy Update\n\nPlease review the updated remote work policy attached to this email. Let us know if you have any questions.\n\nBest regards,\nJulia',
241
- sender: contacts?.[8] ?? 'julia.admin@acme-corp.com',
242
- labels: [],
233
+ sender: 'julia.admin@acme-corp.com',
243
234
  },
244
235
  ].map((message, index, array) => {
245
236
  const created = new Date(Date.now() - (array.length - index) * timeInterval);
246
237
  return Obj.make(DataType.Message, {
247
238
  created: created.toISOString(),
248
239
  blocks: [{ _tag: 'text', text: message.text }],
249
- sender: typeof message.sender === 'string' ? { email: message.sender } : { contact: Ref.make(message.sender) },
250
- properties: { labels: message.labels },
240
+ sender: { email: message.sender },
251
241
  });
252
242
  });
253
243
 
@@ -1,18 +0,0 @@
1
- import "./chunk-J5LGTIGS.mjs";
2
-
3
- // src/capabilities/ai-service.ts
4
- import { Effect, Layer } from "effect";
5
- import { AiServiceRouter } from "@dxos/ai";
6
- import { Capabilities, contributes } from "@dxos/app-framework";
7
- var ai_service_default = ((context) => {
8
- const resolvers = context.getCapabilities(Capabilities.AiModelResolver);
9
- const combinedLayer = resolvers.reduce((acc, resolver) => resolver.pipe(Layer.provide(acc)), AiServiceRouter.AiModelResolver.fromModelMap(Effect.succeed({})));
10
- return [
11
- // TODO(dmaretskyi): Read config from settings.
12
- contributes(Capabilities.AiServiceLayer, AiServiceRouter.AiModelResolver.buildAiService.pipe(Layer.provide(combinedLayer)))
13
- ];
14
- });
15
- export {
16
- ai_service_default as default
17
- };
18
- //# sourceMappingURL=ai-service-4VESSFNB.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/ai-service.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Effect, Layer } from 'effect';\n\nimport { AiServiceRouter } from '@dxos/ai';\nimport { Capabilities, type PluginContext, contributes } from '@dxos/app-framework';\n\nexport default (context: PluginContext) => {\n const resolvers = context.getCapabilities(Capabilities.AiModelResolver);\n\n // TODO(dmaretskyi): Extract function to reduce them.\n const combinedLayer = resolvers.reduce(\n (acc, resolver) => resolver.pipe(Layer.provide(acc)),\n AiServiceRouter.AiModelResolver.fromModelMap(Effect.succeed({})), // Empty resolver as fallback.\n );\n\n return [\n // TODO(dmaretskyi): Read config from settings.\n contributes(\n Capabilities.AiServiceLayer,\n AiServiceRouter.AiModelResolver.buildAiService.pipe(Layer.provide(combinedLayer)),\n ),\n ];\n};\n"],
5
- "mappings": ";;;AAIA,SAASA,QAAQC,aAAa;AAE9B,SAASC,uBAAuB;AAChC,SAASC,cAAkCC,mBAAmB;AAE9D,IAAA,sBAAe,CAACC,YAAAA;AACd,QAAMC,YAAYD,QAAQE,gBAAgBC,aAAaC,eAAe;AAGtE,QAAMC,gBAAgBJ,UAAUK,OAC9B,CAACC,KAAKC,aAAaA,SAASC,KAAKC,MAAMC,QAAQJ,GAAAA,CAAAA,GAC/CK,gBAAgBR,gBAAgBS,aAAaC,OAAOC,QAAQ,CAAC,CAAA,CAAA,CAAA;AAG/D,SAAO;;IAELC,YACEb,aAAac,gBACbL,gBAAgBR,gBAAgBc,eAAeT,KAAKC,MAAMC,QAAQN,aAAAA,CAAAA,CAAAA;;AAGxE;",
6
- "names": ["Effect", "Layer", "AiServiceRouter", "Capabilities", "contributes", "context", "resolvers", "getCapabilities", "Capabilities", "AiModelResolver", "combinedLayer", "reduce", "acc", "resolver", "pipe", "Layer", "provide", "AiServiceRouter", "fromModelMap", "Effect", "succeed", "contributes", "AiServiceLayer", "buildAiService"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/blueprint-definition.ts", "../../../src/functions/analysis.ts", "../../../src/functions/list.ts", "../../../src/functions/load.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, type Capability, contributes } from '@dxos/app-framework';\nimport { templates } from '@dxos/assistant';\nimport {\n DISCORD_BLUEPRINT,\n LINEAR_BLUEPRINT,\n RESEARCH_BLUEPRINT,\n agent,\n createResearchNote,\n fetchDiscordMessages,\n research,\n syncLinearIssues,\n} from '@dxos/assistant-testing';\nimport { Blueprint } from '@dxos/blueprints';\nimport { type FunctionDefinition } from '@dxos/functions';\n\nimport { analysis, list, load } from '../functions';\n\nconst functions: FunctionDefinition[] = [analysis, list, load];\nconst tools = [\n 'add-to-context',\n // TODO(wittjosiah): Factor out to an ECHO blueprint.\n 'get-schemas',\n 'add-schema',\n 'create-record',\n // TODO(wittjosiah): Factor out to a generic app-framework blueprint.\n 'open-item',\n // TODO(burdon): Anthropic only.\n // https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/text-editor-tool#example-str-replace-command\n // AI_TOOL_NOT_FOUND: str_replace_based_edit_tool\n // 'str_replace_based_edit_tool',\n];\n\nexport const BLUEPRINT_KEY = 'dxos.org/blueprint/assistant';\n\nexport const createBlueprint = (): Blueprint.Blueprint =>\n Blueprint.make({\n key: BLUEPRINT_KEY,\n name: 'Assistant',\n tools: Blueprint.toolDefinitions({ functions, tools }),\n instructions: templates.system,\n });\n\nconst blueprint = createBlueprint();\n\n// TODO(dmaretskyi): Consider splitting into multiple modules.\nexport default (): Capability<any>[] => [\n contributes(Capabilities.Functions, functions),\n contributes(Capabilities.Functions, [agent]),\n contributes(Capabilities.Functions, [research, createResearchNote]),\n contributes(Capabilities.BlueprintDefinition, blueprint),\n contributes(Capabilities.BlueprintDefinition, RESEARCH_BLUEPRINT),\n // TODO(burdon): Move out of assistant.\n contributes(Capabilities.Functions, [syncLinearIssues]),\n contributes(Capabilities.Functions, [fetchDiscordMessages]),\n contributes(Capabilities.BlueprintDefinition, LINEAR_BLUEPRINT),\n contributes(Capabilities.BlueprintDefinition, DISCORD_BLUEPRINT),\n];\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Effect, Schema } from 'effect';\n\nimport { defineFunction } from '@dxos/functions';\nimport { log } from '@dxos/log';\n\nexport default defineFunction({\n name: 'dxos.org/function/assistant-analysis',\n description: 'Enter analysis analysis mode.',\n inputSchema: Schema.Struct({\n enable: Schema.Boolean.annotations({ description: 'Enable or disable analysis mode.' }),\n }),\n outputSchema: Schema.Void,\n handler: Effect.fn(function* ({ context, data: { enable } }) {\n log.info('analysis mode', { space: context.space?.id, enable });\n }),\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Effect, Schema } from 'effect';\n\nimport { Filter, Obj, Query } from '@dxos/echo';\nimport { DatabaseService, defineFunction } from '@dxos/functions';\nimport { trim } from '@dxos/util';\n\n// TODO(burdon): Factor out to space plugin.\nexport default defineFunction({\n name: 'dxos.org/function/assistant/list',\n description:\n // TODO(wittjosiah): Find a better way to prompt for looking up typenames before querying with them.\n trim`\n Lists the objects of the given type.\n Check the list-schemas tool for available types before calling this function.\n `,\n inputSchema: Schema.Struct({\n typename: Schema.String.annotations({\n description: 'The typename of the objects to list.',\n }),\n }),\n outputSchema: Schema.Struct({\n results: Schema.Array(\n Schema.Struct({\n dxn: Schema.String.annotations({ description: 'The DXN of the object.' }),\n label: Schema.optional(Schema.String.annotations({ description: 'The label of the object.' })),\n }),\n ),\n }),\n handler: Effect.fn(function* ({ data: { typename } }) {\n // TODO(wittjosiah): Typename query is not working for dynamic schemas.\n const [schema] = yield* DatabaseService.runSchemaQuery({ typename });\n const filter = schema ? Filter.type(schema) : Filter.typename(typename);\n\n const { objects } = yield* DatabaseService.runQuery(Query.select(filter));\n const results = objects.map((object) => ({\n dxn: Obj.getDXN(object).toString(),\n label: Obj.getLabel(object),\n }));\n\n return { results };\n }),\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Effect, Option, Schema, pipe } from 'effect';\n\nimport { ArtifactId } from '@dxos/assistant';\nimport { Obj } from '@dxos/echo';\nimport { DatabaseService, defineFunction } from '@dxos/functions';\n\n// TODO(burdon): Common error handling.\n// TODO(burdon): Factor out to space plugin.\nexport default defineFunction({\n name: 'dxos.org/function/assistant/load',\n description: 'Loads the object.',\n inputSchema: Schema.Struct({\n id: ArtifactId.annotations({\n description: 'The ID of the object.',\n }),\n typename: Schema.String.annotations({\n description: 'The typename of the object.',\n }),\n }),\n outputSchema: Schema.Struct({\n // TODO(wittjosiah): Type.Obj.Any | Type.Relation.Any\n object: Schema.Any,\n }),\n handler: Effect.fn(function* ({ data: { id, typename } }) {\n const object = yield* DatabaseService.resolve(ArtifactId.toDXN(id));\n return yield* pipe(\n Option.fromNullable(object),\n Option.flatMap((object) => (Obj.getTypename(object) === typename ? Option.some(object) : Option.none())),\n Option.match({\n onNone: () => Effect.fail('Object not found.'),\n onSome: (object) => {\n // log.info('object', { object });\n return Effect.succeed({ object });\n },\n }),\n );\n }),\n});\n"],
5
- "mappings": "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",
6
- "names": ["Capabilities", "contributes", "templates", "DISCORD_BLUEPRINT", "LINEAR_BLUEPRINT", "RESEARCH_BLUEPRINT", "agent", "createResearchNote", "fetchDiscordMessages", "research", "syncLinearIssues", "Blueprint", "Effect", "Schema", "defineFunction", "log", "name", "description", "inputSchema", "Struct", "enable", "Boolean", "annotations", "outputSchema", "Void", "handler", "fn", "context", "data", "info", "space", "id", "Effect", "Schema", "Filter", "Obj", "Query", "DatabaseService", "defineFunction", "trim", "defineFunction", "name", "description", "trim", "inputSchema", "Schema", "Struct", "typename", "String", "annotations", "outputSchema", "results", "Array", "dxn", "label", "optional", "handler", "Effect", "fn", "data", "schema", "DatabaseService", "runSchemaQuery", "filter", "Filter", "type", "objects", "runQuery", "Query", "select", "map", "object", "Obj", "getDXN", "toString", "getLabel", "Effect", "Option", "Schema", "pipe", "ArtifactId", "Obj", "DatabaseService", "defineFunction", "defineFunction", "name", "description", "inputSchema", "Schema", "Struct", "id", "ArtifactId", "annotations", "typename", "String", "outputSchema", "object", "Any", "handler", "Effect", "fn", "data", "DatabaseService", "resolve", "toDXN", "pipe", "Option", "fromNullable", "flatMap", "Obj", "getTypename", "some", "none", "match", "onNone", "fail", "onSome", "succeed", "functions", "analysis", "list", "load", "tools", "BLUEPRINT_KEY", "createBlueprint", "Blueprint", "make", "key", "name", "toolDefinitions", "instructions", "templates", "system", "blueprint", "contributes", "Capabilities", "Functions", "agent", "research", "createResearchNote", "BlueprintDefinition", "RESEARCH_BLUEPRINT", "syncLinearIssues", "fetchDiscordMessages", "LINEAR_BLUEPRINT", "DISCORD_BLUEPRINT"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/TemplateEditor/TemplateEditor.tsx", "../../../src/components/TemplateEditor/handlebars-extension.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Template } from '@dxos/blueprints';\nimport { createDocAccessor } from '@dxos/react-client/echo';\nimport { type ThemedClassName, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport {\n createBasicExtensions,\n createDataExtensions,\n createMarkdownExtensions,\n createThemeExtensions,\n decorateMarkdown,\n useTextEditor,\n} from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\nimport { isNotFalsy } from '@dxos/util';\n\nimport { meta } from '../../meta';\n\nimport { handlebars } from './handlebars-extension';\n\nexport type TemplateEditorProps = ThemedClassName<{\n id: string;\n template: Template.Template;\n}>;\n\nexport const TemplateEditor = ({ id, classNames, template }: TemplateEditorProps) => {\n const { t } = useTranslation(meta.id);\n const { themeMode } = useThemeContext();\n const { parentRef } = useTextEditor(() => {\n const text = template.source?.target;\n if (!text) {\n return {};\n }\n\n return {\n initialValue: text.content ?? '',\n extensions: [\n createDataExtensions({ id, text: createDocAccessor(text, ['content']) }),\n createBasicExtensions({\n bracketMatching: false,\n lineNumbers: true,\n lineWrapping: true,\n placeholder: t('template placeholder'),\n }),\n createThemeExtensions({ themeMode }),\n createMarkdownExtensions(),\n decorateMarkdown(),\n handlebars(),\n ].filter(isNotFalsy),\n };\n }, [themeMode, template.source?.target]);\n\n return <div ref={parentRef} className={mx('bs-full overflow-hidden', classNames)} />;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport {\n type CompletionContext,\n type CompletionResult,\n autocompletion,\n completionKeymap,\n} from '@codemirror/autocomplete';\nimport { type Extension } from '@codemirror/state';\nimport { Decoration, type DecorationSet, type EditorView, ViewPlugin, type ViewUpdate, keymap } from '@codemirror/view';\n\nexport type HandlebarsOptions = {};\n\n/**\n * Simple Handlebars plugin for CodeMirror.\n * Supports:\n * - Comments: {{! comment }}\n * - Commands: {{#command}} {{/command}}\n * - Variables: {{var}}\n * - Commands with variables: {{#each items}} {{/each}}\n */\nexport const handlebars = (_: HandlebarsOptions = {}): Extension => {\n return [\n handlebarsHighlightPlugin,\n autocompletion({\n activateOnTyping: true,\n aboveCursor: true,\n closeOnBlur: true,\n override: [handlebarsCompletions],\n }),\n keymap.of(completionKeymap),\n ];\n};\n\nconst regex = {\n comment: /\\{\\{!\\s*[^}]*\\}\\}/g,\n brackets: /\\{\\{[^}]*\\}\\}/g,\n command: /\\{\\{[#/]([^}]+)\\}\\}/g,\n var: /\\{\\{(?!\\s*!)(\\w[^}]*)\\}\\}/g,\n};\n\n/**\n * ViewPlugin that decorates Handlebars syntax.\n */\nconst handlebarsHighlightPlugin = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = this.buildDecorations(view);\n }\n\n buildDecorations(view: EditorView) {\n const widgets: any[] = [];\n\n for (const { from, to } of view.visibleRanges) {\n const text = view.state.doc.sliceString(from, to);\n\n // Match comments: {{! comment }}\n {\n let match;\n while ((match = regex.comment.exec(text)) !== null) {\n const start = from + match.index;\n const end = start + match[0].length;\n widgets.push(Decoration.mark({ class: 'text-subdued' }).range(start, end));\n }\n }\n\n // Match brackets: {{ and }}\n {\n let match;\n while ((match = regex.brackets.exec(text)) !== null) {\n const start = from + match.index;\n const end = start + match[0].length;\n widgets.push(Decoration.mark({ class: 'text-subdued' }).range(start, end));\n }\n }\n\n // Match commands: {{#command}} and {{/command}}\n {\n let match;\n while ((match = regex.command.exec(text)) !== null) {\n const start = from + match.index + 2;\n let end = start + match[0].length - 4;\n const text = view.state.doc.sliceString(start, end);\n const parts = text.split(/\\s+/);\n if (parts.length > 1) {\n const idx = start + parts[0].length;\n widgets.push(Decoration.mark({ class: 'text-greenText' }).range(idx, end));\n end = idx;\n }\n widgets.push(Decoration.mark({ class: 'text-blueText' }).range(start, end));\n }\n }\n\n // Match variables: {{var}}\n {\n let match;\n while ((match = regex.var.exec(text)) !== null) {\n const start = from + match.index + 2;\n const end = start + match[0].length - 4;\n widgets.push(Decoration.mark({ class: 'text-greenText' }).range(start, end));\n }\n }\n }\n\n // Sort decorations by position to avoid \"Ranges must be added sorted\" error.\n widgets.sort((a, b) => a.from - b.from || a.startSide - b.startSide);\n return Decoration.set(widgets);\n }\n\n update(update: ViewUpdate) {\n if (update.docChanged || update.viewportChanged) {\n this.decorations = this.buildDecorations(update.view);\n }\n }\n },\n {\n decorations: (v) => v.decorations,\n },\n);\n\n// TODO(burdon): Pass in variables.\nconst variables = ['this'];\nconst commands = ['this', 'each', 'if', 'unless', 'with'];\n\n/**\n * Provides completions for Handlebars variables.\n */\nfunction handlebarsCompletions(context: CompletionContext): CompletionResult | null {\n const match = context.matchBefore(/\\{\\{[^}]*/);\n if (!match || match.from === match.to) {\n return null;\n }\n\n let type = 'variable';\n let text = match.text.slice(2);\n let from = match.from + 2;\n let matches = [];\n if (text.startsWith('#') || text.startsWith('/')) {\n const idx = text.lastIndexOf(' ');\n if (idx !== -1) {\n type = 'variable';\n matches = variables;\n text = text.slice(idx + 1);\n from += idx + 1;\n } else {\n type = 'command';\n text = text.slice(1);\n matches = commands;\n from += 1;\n }\n } else {\n type = 'variable';\n matches = variables;\n }\n\n const options = matches.filter((name) => name.startsWith(text)).map((name) => ({ type, label: name }));\n return {\n from,\n options,\n };\n}\n"],
5
- "mappings": "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",
6
- "names": ["React", "createDocAccessor", "useThemeContext", "useTranslation", "createBasicExtensions", "createDataExtensions", "createMarkdownExtensions", "createThemeExtensions", "decorateMarkdown", "useTextEditor", "mx", "isNotFalsy", "autocompletion", "completionKeymap", "Decoration", "ViewPlugin", "keymap", "handlebars", "_", "handlebarsHighlightPlugin", "autocompletion", "activateOnTyping", "aboveCursor", "closeOnBlur", "override", "handlebarsCompletions", "keymap", "of", "completionKeymap", "regex", "comment", "brackets", "command", "var", "ViewPlugin", "fromClass", "buildDecorations", "view", "widgets", "from", "to", "visibleRanges", "text", "state", "doc", "sliceString", "match", "exec", "start", "index", "end", "length", "push", "Decoration", "mark", "class", "range", "parts", "split", "idx", "sort", "a", "b", "startSide", "set", "update", "docChanged", "viewportChanged", "decorations", "v", "variables", "commands", "context", "matchBefore", "type", "slice", "matches", "startsWith", "lastIndexOf", "options", "filter", "name", "map", "label", "TemplateEditor", "id", "classNames", "template", "t", "useTranslation", "meta", "themeMode", "useThemeContext", "parentRef", "useTextEditor", "text", "source", "target", "initialValue", "content", "extensions", "createDataExtensions", "createDocAccessor", "createBasicExtensions", "bracketMatching", "lineNumbers", "lineWrapping", "placeholder", "createThemeExtensions", "createMarkdownExtensions", "decorateMarkdown", "handlebars", "filter", "isNotFalsy", "div", "ref", "className", "mx"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/capabilities.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineCapability } from '@dxos/app-framework';\nimport { type DeepReadonly } from '@dxos/util';\n\nimport { meta } from '../meta';\nimport { type Assistant } from '../types';\n\nexport namespace AssistantCapabilities {\n export type AssistantState = {\n /** Map of primary object fq id to current chat. */\n currentChat: Record<string, Assistant.Chat>;\n };\n export const State = defineCapability<DeepReadonly<AssistantState>>(`${meta.id}/capability/state`);\n export const MutableState = defineCapability<AssistantState>(`${meta.id}/capability/state`);\n}\n"],
5
- "mappings": ";;;;;AAIA,SAASA,wBAAwB;UAMhBC,wBAAAA;yBAKFC,QAAQC,iBAA+C,GAAGC,KAAKC,EAAE,mBAAmB;yBACpFC,eAAeH,iBAAiC,GAAGC,KAAKC,EAAE,mBAAmB;AAC5F,GAPiBJ,0BAAAA,wBAAAA,CAAAA,EAAAA;;",
6
- "names": ["defineCapability", "AssistantCapabilities", "State", "defineCapability", "meta", "id", "MutableState"]
7
- }