@dxos/plugin-daily-summary 0.8.3 → 0.8.4-main.422d1c7879

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 (60) hide show
  1. package/dist/lib/browser/index.mjs +25 -20
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/types/src/DailySummaryPlugin.d.ts.map +1 -1
  5. package/dist/types/src/blueprints/functions/generate.d.ts.map +1 -1
  6. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  7. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  8. package/dist/types/src/capabilities/index.d.ts +4 -3
  9. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  10. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  11. package/dist/types/src/containers/DailySummarySettings/DailySummarySettings.d.ts +2 -5
  12. package/dist/types/src/containers/DailySummarySettings/DailySummarySettings.d.ts.map +1 -1
  13. package/dist/types/src/containers/DailySummarySettings/index.d.ts +1 -2
  14. package/dist/types/src/containers/DailySummarySettings/index.d.ts.map +1 -1
  15. package/dist/types/src/meta.d.ts.map +1 -1
  16. package/dist/types/src/translations.d.ts +5 -4
  17. package/dist/types/src/translations.d.ts.map +1 -1
  18. package/dist/types/tsconfig.tsbuildinfo +1 -1
  19. package/package.json +32 -25
  20. package/src/DailySummaryPlugin.tsx +3 -2
  21. package/src/blueprints/functions/generate.test.ts +8 -9
  22. package/src/blueprints/functions/generate.ts +14 -8
  23. package/src/capabilities/{app-graph-builder/app-graph-builder.ts → app-graph-builder.ts} +9 -12
  24. package/src/capabilities/{blueprint-definition/blueprint-definition.ts → blueprint-definition.ts} +1 -1
  25. package/src/capabilities/index.ts +6 -4
  26. package/src/capabilities/{react-surface/react-surface.tsx → react-surface.tsx} +5 -6
  27. package/src/containers/DailySummarySettings/DailySummarySettings.tsx +18 -24
  28. package/src/containers/DailySummarySettings/index.ts +1 -3
  29. package/src/meta.test.ts +1 -1
  30. package/src/translations.test.ts +5 -4
  31. package/src/translations.ts +5 -4
  32. package/dist/lib/browser/DailySummarySettings-RF6P6R5M.mjs +0 -63
  33. package/dist/lib/browser/DailySummarySettings-RF6P6R5M.mjs.map +0 -7
  34. package/dist/lib/browser/app-graph-builder-RHJEYETQ.mjs +0 -39
  35. package/dist/lib/browser/app-graph-builder-RHJEYETQ.mjs.map +0 -7
  36. package/dist/lib/browser/blueprint-definition-XOEDPUVU.mjs +0 -53
  37. package/dist/lib/browser/blueprint-definition-XOEDPUVU.mjs.map +0 -7
  38. package/dist/lib/browser/chunk-2TNDFGQB.mjs +0 -21
  39. package/dist/lib/browser/chunk-2TNDFGQB.mjs.map +0 -7
  40. package/dist/lib/browser/chunk-UYXGTD3T.mjs +0 -40
  41. package/dist/lib/browser/chunk-UYXGTD3T.mjs.map +0 -7
  42. package/dist/lib/browser/generate-FSSCIHAO.mjs +0 -172
  43. package/dist/lib/browser/generate-FSSCIHAO.mjs.map +0 -7
  44. package/dist/lib/browser/react-surface-WCGJVZCQ.mjs +0 -36
  45. package/dist/lib/browser/react-surface-WCGJVZCQ.mjs.map +0 -7
  46. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +0 -1
  47. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +0 -3
  48. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +0 -1
  49. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +0 -1
  50. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +0 -3
  51. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +0 -1
  52. package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
  53. package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
  54. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
  55. package/src/capabilities/app-graph-builder/index.ts +0 -7
  56. package/src/capabilities/blueprint-definition/index.ts +0 -7
  57. package/src/capabilities/react-surface/index.ts +0 -7
  58. /package/dist/types/src/capabilities/{app-graph-builder/app-graph-builder.d.ts → app-graph-builder.d.ts} +0 -0
  59. /package/dist/types/src/capabilities/{blueprint-definition/blueprint-definition.d.ts → blueprint-definition.d.ts} +0 -0
  60. /package/dist/types/src/capabilities/{react-surface/react-surface.d.ts → react-surface.d.ts} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-daily-summary",
3
- "version": "0.8.3",
3
+ "version": "0.8.4-main.422d1c7879",
4
4
  "description": "Daily activity summary plugin",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -12,6 +12,12 @@
12
12
  "author": "DXOS.org",
13
13
  "sideEffects": true,
14
14
  "type": "module",
15
+ "imports": {
16
+ "#blueprints": "./src/blueprints/index.ts",
17
+ "#capabilities": "./src/capabilities/index.ts",
18
+ "#containers": "./src/containers/index.ts",
19
+ "#meta": "./src/meta.ts"
20
+ },
15
21
  "exports": {
16
22
  ".": {
17
23
  "source": "./src/index.ts",
@@ -27,26 +33,27 @@
27
33
  "dependencies": {
28
34
  "@effect/ai": "0.33.2",
29
35
  "effect": "3.20.0",
30
- "@dxos/ai": "0.8.3",
31
- "@dxos/app-toolkit": "0.8.3",
32
- "@dxos/app-framework": "0.8.3",
33
- "@dxos/client": "0.8.3",
34
- "@dxos/assistant": "0.8.3",
35
- "@dxos/client-protocol": "0.8.3",
36
- "@dxos/functions": "0.8.3",
37
- "@dxos/functions-runtime": "0.8.3",
38
- "@dxos/effect": "0.8.3",
39
- "@dxos/blueprints": "0.8.3",
40
- "@dxos/echo": "0.8.3",
41
- "@dxos/invariant": "0.8.3",
42
- "@dxos/operation": "0.8.3",
43
- "@dxos/keys": "0.8.3",
44
- "@dxos/plugin-space": "0.8.3",
45
- "@dxos/react-client": "0.8.3",
46
- "@dxos/types": "0.8.3",
47
- "@dxos/util": "0.8.3",
48
- "@dxos/plugin-graph": "0.8.3",
49
- "@dxos/schema": "0.8.3"
36
+ "@dxos/app-framework": "0.8.4-main.422d1c7879",
37
+ "@dxos/assistant": "0.8.4-main.422d1c7879",
38
+ "@dxos/ai": "0.8.4-main.422d1c7879",
39
+ "@dxos/blueprints": "0.8.4-main.422d1c7879",
40
+ "@dxos/client": "0.8.4-main.422d1c7879",
41
+ "@dxos/client-protocol": "0.8.4-main.422d1c7879",
42
+ "@dxos/app-toolkit": "0.8.4-main.422d1c7879",
43
+ "@dxos/echo": "0.8.4-main.422d1c7879",
44
+ "@dxos/invariant": "0.8.4-main.422d1c7879",
45
+ "@dxos/effect": "0.8.4-main.422d1c7879",
46
+ "@dxos/functions": "0.8.4-main.422d1c7879",
47
+ "@dxos/functions-runtime": "0.8.4-main.422d1c7879",
48
+ "@dxos/operation": "0.8.4-main.422d1c7879",
49
+ "@dxos/keys": "0.8.4-main.422d1c7879",
50
+ "@dxos/plugin-space": "0.8.4-main.422d1c7879",
51
+ "@dxos/plugin-graph": "0.8.4-main.422d1c7879",
52
+ "@dxos/schema": "0.8.4-main.422d1c7879",
53
+ "@dxos/types": "0.8.4-main.422d1c7879",
54
+ "@dxos/util": "0.8.4-main.422d1c7879",
55
+ "@dxos/react-client": "0.8.4-main.422d1c7879",
56
+ "@dxos/react-ui-form": "0.8.4-main.422d1c7879"
50
57
  },
51
58
  "devDependencies": {
52
59
  "@storybook/react-vite": "^10.2.12",
@@ -55,15 +62,15 @@
55
62
  "react": "~19.2.3",
56
63
  "react-dom": "~19.2.3",
57
64
  "vite": "^7.1.11",
58
- "@dxos/react-ui": "0.8.3",
59
- "@dxos/storybook-utils": "0.8.3",
60
- "@dxos/echo-db": "0.8.3"
65
+ "@dxos/echo-db": "0.8.4-main.422d1c7879",
66
+ "@dxos/react-ui": "0.8.4-main.422d1c7879",
67
+ "@dxos/storybook-utils": "0.8.4-main.422d1c7879"
61
68
  },
62
69
  "peerDependencies": {
63
70
  "effect": "3.20.0",
64
71
  "react": "~19.2.3",
65
72
  "react-dom": "~19.2.3",
66
- "@dxos/react-ui": "0.8.3"
73
+ "@dxos/react-ui": "0.8.4-main.422d1c7879"
67
74
  },
68
75
  "publishConfig": {
69
76
  "access": "public"
@@ -5,8 +5,9 @@
5
5
  import { Plugin } from '@dxos/app-framework';
6
6
  import { AppPlugin } from '@dxos/app-toolkit';
7
7
 
8
- import { AppGraphBuilder, BlueprintDefinition, ReactSurface } from './capabilities';
9
- import { meta } from './meta';
8
+ import { AppGraphBuilder, BlueprintDefinition, ReactSurface } from '#capabilities';
9
+ import { meta } from '#meta';
10
+
10
11
  import { translations } from './translations';
11
12
 
12
13
  export const DailySummaryPlugin = Plugin.define(meta).pipe(
@@ -3,21 +3,20 @@
3
3
  //
4
4
 
5
5
  import { describe, expect, it } from '@effect/vitest';
6
- import * as Schema from 'effect/Schema';
7
6
  import * as Effect from 'effect/Effect';
7
+ import * as Schema from 'effect/Schema';
8
8
 
9
9
  import { AssistantTestLayer } from '@dxos/assistant/testing';
10
10
  import { Blueprint } from '@dxos/blueprints';
11
11
  import { SpaceProperties } from '@dxos/client-protocol';
12
12
  import { Collection, DXN, Database, Obj, Query, Ref, Type } from '@dxos/echo';
13
13
  import { TestHelpers } from '@dxos/effect/testing';
14
- import { FunctionInvocationService } from '@dxos/functions';
15
14
  import { ObjectId } from '@dxos/keys';
15
+ import { Operation } from '@dxos/operation';
16
16
  import { Text } from '@dxos/schema';
17
17
  import { HasSubject } from '@dxos/types';
18
18
 
19
19
  import { DailySummaryHandlers } from '../daily-summary-blueprint';
20
-
21
20
  import { GenerateSummary } from './definitions';
22
21
 
23
22
  ObjectId.dangerouslyDisableRandomness();
@@ -50,7 +49,7 @@ describe('GenerateSummary', () => {
50
49
  'creates a Markdown document with summary content',
51
50
  Effect.fnUntraced(
52
51
  function* (_) {
53
- const result = yield* FunctionInvocationService.invokeFunction(GenerateSummary, {
52
+ const result = yield* Operation.invoke(GenerateSummary, {
54
53
  lookbackHours: 24,
55
54
  });
56
55
 
@@ -74,7 +73,7 @@ describe('GenerateSummary', () => {
74
73
  'creates a "Summaries" collection if none exists',
75
74
  Effect.fnUntraced(
76
75
  function* (_) {
77
- yield* FunctionInvocationService.invokeFunction(GenerateSummary, {});
76
+ yield* Operation.invoke(GenerateSummary, {});
78
77
 
79
78
  const collections = yield* Database.runQuery(Query.type(Collection.Collection, { name: 'Summaries' }));
80
79
  expect(collections.length).toBe(1);
@@ -90,8 +89,8 @@ describe('GenerateSummary', () => {
90
89
  'reuses existing "Summaries" collection on subsequent calls',
91
90
  Effect.fnUntraced(
92
91
  function* (_) {
93
- yield* FunctionInvocationService.invokeFunction(GenerateSummary, {});
94
- yield* FunctionInvocationService.invokeFunction(GenerateSummary, {});
92
+ yield* Operation.invoke(GenerateSummary, {});
93
+ yield* Operation.invoke(GenerateSummary, {});
95
94
 
96
95
  const collections = yield* Database.runQuery(Query.type(Collection.Collection, { name: 'Summaries' }));
97
96
  expect(collections.length).toBe(1);
@@ -108,7 +107,7 @@ describe('GenerateSummary', () => {
108
107
  Effect.fnUntraced(
109
108
  function* (_) {
110
109
  const previousSummary = 'Yesterday was productive. 10 objects edited.';
111
- const result = yield* FunctionInvocationService.invokeFunction(GenerateSummary, {
110
+ const result = yield* Operation.invoke(GenerateSummary, {
112
111
  previousSummary,
113
112
  lookbackHours: 24,
114
113
  });
@@ -128,7 +127,7 @@ describe('GenerateSummary', () => {
128
127
  'names document with today date',
129
128
  Effect.fnUntraced(
130
129
  function* (_) {
131
- const result = yield* FunctionInvocationService.invokeFunction(GenerateSummary, {});
130
+ const result = yield* Operation.invoke(GenerateSummary, {});
132
131
  const today = new Date().toISOString().slice(0, 10);
133
132
  expect(result.date).toBe(today);
134
133
 
@@ -10,8 +10,8 @@ import * as Schema from 'effect/Schema';
10
10
 
11
11
  import { AiService, ToolExecutionService, ToolResolverService } from '@dxos/ai';
12
12
  import { Collection, Database, Filter, Obj, Query, Ref, Type } from '@dxos/echo';
13
- import { FunctionInvocationService, TracingService } from '@dxos/functions';
14
- import { Operation } from '@dxos/operation';
13
+ import { Trace } from '@dxos/functions';
14
+ import { Operation, OperationRegistry } from '@dxos/operation';
15
15
  import { Text } from '@dxos/schema';
16
16
  import { CollectionModel } from '@dxos/schema';
17
17
  import { trim } from '@dxos/util';
@@ -109,8 +109,14 @@ export default GenerateSummary.pipe(
109
109
  AiService.model('@anthropic/claude-haiku-4-5'),
110
110
  ToolResolverService.layerEmpty,
111
111
  ToolExecutionService.layerEmpty,
112
- TracingService.layerNoop,
113
- FunctionInvocationService.layerNotAvailable,
112
+ Database.notAvailable,
113
+ Layer.succeed(Operation.Service, {
114
+ invoke: () => Effect.die('Not available.'),
115
+ schedule: () => Effect.die('Not available.'),
116
+ invokePromise: async () => ({ error: new Error('Not available.') }),
117
+ } as any),
118
+ Layer.succeed(OperationRegistry.Service, { resolve: () => Effect.succeed(undefined) } as any),
119
+ Trace.writerLayerNoop,
114
120
  ),
115
121
  ),
116
122
  ),
@@ -158,14 +164,14 @@ const updateDocContent = Effect.fn(function* (doc: MarkdownDoc, newContent: stri
158
164
  if (Ref.isRef(textRef)) {
159
165
  const text: Text.Text | undefined = yield* Effect.promise(() => textRef.load());
160
166
  if (text) {
161
- Obj.change(text, (mutable) => {
162
- mutable.content = newContent;
167
+ Obj.change(text, (text) => {
168
+ text.content = newContent;
163
169
  });
164
170
  return;
165
171
  }
166
172
  }
167
- Obj.change(doc, (mutable) => {
168
- mutable.content = Ref.make(Text.make(newContent));
173
+ Obj.change(doc, (doc) => {
174
+ doc.content = Ref.make(Text.make(newContent));
169
175
  });
170
176
  });
171
177
 
@@ -5,29 +5,26 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capability } from '@dxos/app-framework';
8
- import { AppCapabilities } from '@dxos/app-toolkit';
8
+ import { AppCapabilities, AppNode } from '@dxos/app-toolkit';
9
9
  import { GraphBuilder, NodeMatcher } from '@dxos/plugin-graph';
10
- import { meta as spaceMeta } from '@dxos/plugin-space';
10
+ import { meta as spaceMeta } from '@dxos/plugin-space/meta';
11
11
 
12
- import { meta } from '../../meta';
12
+ import { meta } from '#meta';
13
13
 
14
14
  export default Capability.makeModule(
15
15
  Effect.fnUntraced(function* () {
16
16
  const extensions = yield* Effect.all([
17
17
  GraphBuilder.createExtension({
18
- id: `${meta.id}.space-settings-daily-summary`,
18
+ id: 'space-settings-daily-summary',
19
19
  match: NodeMatcher.whenNodeType(`${spaceMeta.id}.settings`),
20
20
  connector: (node) =>
21
21
  Effect.succeed([
22
- {
23
- id: `${meta.id}.daily-summary`,
22
+ AppNode.makeSettingsPanel({
23
+ id: 'daily-summary',
24
24
  type: `${meta.id}.space-settings-daily-summary`,
25
- data: `${meta.id}.space-settings-daily-summary`,
26
- properties: {
27
- label: ['plugin name', { ns: meta.id }],
28
- icon: 'ph--calendar-check--regular',
29
- },
30
- },
25
+ label: ['plugin.name', { ns: meta.id }],
26
+ icon: 'ph--calendar-check--regular',
27
+ }),
31
28
  ]),
32
29
  }),
33
30
  ]);
@@ -7,7 +7,7 @@ import * as Effect from 'effect/Effect';
7
7
  import { Capability } from '@dxos/app-framework';
8
8
  import { AppCapabilities } from '@dxos/app-toolkit';
9
9
 
10
- import { DailySummaryBlueprint } from '../../blueprints';
10
+ import { DailySummaryBlueprint } from '#blueprints';
11
11
 
12
12
  const blueprintDefinition = Capability.makeModule<
13
13
  [],
@@ -1,7 +1,9 @@
1
1
  //
2
- // Copyright 2026 DXOS.org
2
+ // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- export * from './app-graph-builder';
6
- export * from './blueprint-definition';
7
- export * from './react-surface';
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const AppGraphBuilder = Capability.lazy('AppGraphBuilder', () => import('./app-graph-builder'));
8
+ export const BlueprintDefinition = Capability.lazy('BlueprintDefinition', () => import('./blueprint-definition'));
9
+ export const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));
@@ -7,18 +7,17 @@ import React from 'react';
7
7
 
8
8
  import { Capabilities, Capability } from '@dxos/app-framework';
9
9
  import { Surface } from '@dxos/app-framework/ui';
10
- import { useActiveSpace } from '@dxos/plugin-space';
10
+ import { AppSurface, useActiveSpace } from '@dxos/app-toolkit/ui';
11
11
 
12
- import { DailySummarySettings } from '../../containers';
13
- import { meta } from '../../meta';
12
+ import { DailySummarySettings } from '#containers';
13
+ import { meta } from '#meta';
14
14
 
15
15
  export default Capability.makeModule(() =>
16
16
  Effect.succeed(
17
17
  Capability.contributes(Capabilities.ReactSurface, [
18
18
  Surface.create({
19
- id: `${meta.id}.space-settings-daily-summary`,
20
- role: 'article',
21
- filter: (data): data is { subject: string } => data.subject === `${meta.id}.space-settings-daily-summary`,
19
+ id: 'space-settings-daily-summary',
20
+ filter: AppSurface.literal(AppSurface.Article, `${meta.id}.space-settings-daily-summary`),
22
21
  component: () => {
23
22
  const space = useActiveSpace();
24
23
  if (!space) {
@@ -4,21 +4,18 @@
4
4
 
5
5
  import React, { useCallback, useMemo } from 'react';
6
6
 
7
- import type { Space } from '@dxos/client/echo';
7
+ import { AppSurface } from '@dxos/app-toolkit/ui';
8
8
  import { Filter, Ref } from '@dxos/echo';
9
9
  import { Trigger } from '@dxos/functions';
10
10
  import { Operation } from '@dxos/operation';
11
11
  import { useQuery } from '@dxos/react-client/echo';
12
12
  import { IconButton, useTranslation } from '@dxos/react-ui';
13
+ import { Settings } from '@dxos/react-ui-form';
13
14
 
14
- import { GenerateSummary } from '../../blueprints/functions/definitions';
15
- import { meta } from '../../meta';
15
+ import { GenerateSummary } from '#blueprints';
16
+ import { meta } from '#meta';
16
17
 
17
- export type DailySummarySettingsProps = {
18
- space: Space;
19
- };
20
-
21
- export const DailySummarySettings = ({ space }: DailySummarySettingsProps) => {
18
+ export const DailySummarySettings = ({ space }: AppSurface.SpaceArticleProps) => {
22
19
  const { t } = useTranslation(meta.id);
23
20
 
24
21
  const triggers = useQuery(space.db, Filter.type(Trigger.Trigger));
@@ -42,27 +39,24 @@ export const DailySummarySettings = ({ space }: DailySummarySettingsProps) => {
42
39
  }
43
40
  const trigger = Trigger.make({
44
41
  enabled: true,
45
- spec: {
46
- kind: 'timer',
47
- cron: '0 21 * * *',
48
- },
42
+ spec: Trigger.specTimer('0 21 * * *'),
49
43
  function: Ref.make(Operation.serialize(GenerateSummary)),
50
44
  });
51
45
  space.db.add(trigger);
52
46
  }, [space, existingTrigger]);
53
47
 
54
48
  return (
55
- <div className='flex flex-col gap-4 p-4'>
56
- <h2 className='text-lg font-medium'>{t('plugin name')}</h2>
57
- <p className='text-sm text-description'>{t('create trigger description')}</p>
58
- <div>
59
- <IconButton
60
- icon={existingTrigger ? 'ph--check--regular' : 'ph--plus--regular'}
61
- label={t('create trigger label')}
62
- onClick={handleCreateTrigger}
63
- disabled={!!existingTrigger}
64
- />
65
- </div>
66
- </div>
49
+ <Settings.Viewport>
50
+ <Settings.Section title={t('settings.summary.label')}>
51
+ <Settings.Panel>
52
+ <IconButton
53
+ icon={existingTrigger ? 'ph--check--regular' : 'ph--plus--regular'}
54
+ label={t('create-trigger.label')}
55
+ onClick={handleCreateTrigger}
56
+ disabled={!!existingTrigger}
57
+ />
58
+ </Settings.Panel>
59
+ </Settings.Section>
60
+ </Settings.Viewport>
67
61
  );
68
62
  };
@@ -2,6 +2,4 @@
2
2
  // Copyright 2026 DXOS.org
3
3
  //
4
4
 
5
- import { DailySummarySettings } from './DailySummarySettings';
6
-
7
- export default DailySummarySettings;
5
+ export { DailySummarySettings as default } from './DailySummarySettings';
package/src/meta.test.ts CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { describe, expect, test } from 'vitest';
6
6
 
7
- import { meta } from './meta';
7
+ import { meta } from '#meta';
8
8
 
9
9
  describe('plugin meta', () => {
10
10
  test('has correct id', () => {
@@ -4,7 +4,8 @@
4
4
 
5
5
  import { describe, expect, test } from 'vitest';
6
6
 
7
- import { meta } from './meta';
7
+ import { meta } from '#meta';
8
+
8
9
  import { translations } from './translations';
9
10
 
10
11
  describe('translations', () => {
@@ -13,8 +14,8 @@ describe('translations', () => {
13
14
  test('has plugin translations', () => {
14
15
  const pluginTranslations = enUS[meta.id];
15
16
  expect(pluginTranslations).toBeDefined();
16
- expect(pluginTranslations['plugin name']).toBe('Daily Summary');
17
- expect(pluginTranslations['create trigger label']).toBeTruthy();
18
- expect(pluginTranslations['create trigger description']).toBeTruthy();
17
+ expect(pluginTranslations['plugin.name']).toBe('Daily Summary');
18
+ expect(pluginTranslations['create-trigger.label']).toBeTruthy();
19
+ expect(pluginTranslations['create-trigger.description']).toBeTruthy();
19
20
  });
20
21
  });
@@ -4,15 +4,16 @@
4
4
 
5
5
  import { type Resource } from '@dxos/react-ui';
6
6
 
7
- import { meta } from './meta';
7
+ import { meta } from '#meta';
8
8
 
9
9
  export const translations = [
10
10
  {
11
11
  'en-US': {
12
12
  [meta.id]: {
13
- 'plugin name': 'Daily Summary',
14
- 'create trigger label': 'Create daily summary trigger',
15
- 'create trigger description':
13
+ 'plugin.name': 'Daily Summary',
14
+ 'settings.summary.label': 'Manage Daily Summary',
15
+ 'create-trigger.label': 'Create daily summary trigger',
16
+ 'create-trigger.description':
16
17
  'Create a timer trigger that generates an AI-powered daily summary. After creation, edit the schedule in the Automation panel.',
17
18
  },
18
19
  },
@@ -1,63 +0,0 @@
1
- import {
2
- GenerateSummary
3
- } from "./chunk-UYXGTD3T.mjs";
4
- import {
5
- meta
6
- } from "./chunk-2TNDFGQB.mjs";
7
-
8
- // src/containers/DailySummarySettings/DailySummarySettings.tsx
9
- import React, { useCallback, useMemo } from "react";
10
- import { Filter, Ref } from "@dxos/echo";
11
- import { Trigger } from "@dxos/functions";
12
- import { Operation } from "@dxos/operation";
13
- import { useQuery } from "@dxos/react-client/echo";
14
- import { IconButton, useTranslation } from "@dxos/react-ui";
15
- var DailySummarySettings = ({ space }) => {
16
- const { t } = useTranslation(meta.id);
17
- const triggers = useQuery(space.db, Filter.type(Trigger.Trigger));
18
- const existingTrigger = useMemo(() => triggers.find((trigger) => {
19
- if (trigger.spec?.kind !== "timer") {
20
- return false;
21
- }
22
- const target = trigger.function?.target;
23
- return target != null && "key" in target && target.key === GenerateSummary.meta.key;
24
- }), [
25
- triggers
26
- ]);
27
- const handleCreateTrigger = useCallback(() => {
28
- if (existingTrigger) {
29
- return;
30
- }
31
- const trigger = Trigger.make({
32
- enabled: true,
33
- spec: {
34
- kind: "timer",
35
- cron: "0 21 * * *"
36
- },
37
- function: Ref.make(Operation.serialize(GenerateSummary))
38
- });
39
- space.db.add(trigger);
40
- }, [
41
- space,
42
- existingTrigger
43
- ]);
44
- return /* @__PURE__ */ React.createElement("div", {
45
- className: "flex flex-col gap-4 p-4"
46
- }, /* @__PURE__ */ React.createElement("h2", {
47
- className: "text-lg font-medium"
48
- }, t("plugin name")), /* @__PURE__ */ React.createElement("p", {
49
- className: "text-sm text-description"
50
- }, t("create trigger description")), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(IconButton, {
51
- icon: existingTrigger ? "ph--check--regular" : "ph--plus--regular",
52
- label: t("create trigger label"),
53
- onClick: handleCreateTrigger,
54
- disabled: !!existingTrigger
55
- })));
56
- };
57
-
58
- // src/containers/DailySummarySettings/index.ts
59
- var DailySummarySettings_default = DailySummarySettings;
60
- export {
61
- DailySummarySettings_default as default
62
- };
63
- //# sourceMappingURL=DailySummarySettings-RF6P6R5M.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/containers/DailySummarySettings/DailySummarySettings.tsx", "../../../src/containers/DailySummarySettings/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport type { Space } from '@dxos/client/echo';\nimport { Filter, Ref } from '@dxos/echo';\nimport { Trigger } from '@dxos/functions';\nimport { Operation } from '@dxos/operation';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { IconButton, useTranslation } from '@dxos/react-ui';\n\nimport { GenerateSummary } from '../../blueprints/functions/definitions';\nimport { meta } from '../../meta';\n\nexport type DailySummarySettingsProps = {\n space: Space;\n};\n\nexport const DailySummarySettings = ({ space }: DailySummarySettingsProps) => {\n const { t } = useTranslation(meta.id);\n\n const triggers = useQuery(space.db, Filter.type(Trigger.Trigger));\n const existingTrigger = useMemo(\n () =>\n triggers.find((trigger) => {\n if (trigger.spec?.kind !== 'timer') {\n return false;\n }\n const target = trigger.function?.target;\n return (\n target != null && 'key' in target && (target as Record<string, unknown>).key === GenerateSummary.meta.key\n );\n }),\n [triggers],\n );\n\n const handleCreateTrigger = useCallback(() => {\n if (existingTrigger) {\n return;\n }\n const trigger = Trigger.make({\n enabled: true,\n spec: {\n kind: 'timer',\n cron: '0 21 * * *',\n },\n function: Ref.make(Operation.serialize(GenerateSummary)),\n });\n space.db.add(trigger);\n }, [space, existingTrigger]);\n\n return (\n <div className='flex flex-col gap-4 p-4'>\n <h2 className='text-lg font-medium'>{t('plugin name')}</h2>\n <p className='text-sm text-description'>{t('create trigger description')}</p>\n <div>\n <IconButton\n icon={existingTrigger ? 'ph--check--regular' : 'ph--plus--regular'}\n label={t('create trigger label')}\n onClick={handleCreateTrigger}\n disabled={!!existingTrigger}\n />\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { DailySummarySettings } from './DailySummarySettings';\n\nexport default DailySummarySettings;\n"],
5
- "mappings": ";;;;;;;;AAIA,OAAOA,SAASC,aAAaC,eAAe;AAG5C,SAASC,QAAQC,WAAW;AAC5B,SAASC,eAAe;AACxB,SAASC,iBAAiB;AAC1B,SAASC,gBAAgB;AACzB,SAASC,YAAYC,sBAAsB;AASpC,IAAMC,uBAAuB,CAAC,EAAEC,MAAK,MAA6B;AACvE,QAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AAEpC,QAAMC,WAAWC,SAASN,MAAMO,IAAIC,OAAOC,KAAKC,QAAQA,OAAO,CAAA;AAC/D,QAAMC,kBAAkBC,QACtB,MACEP,SAASQ,KAAK,CAACC,YAAAA;AACb,QAAIA,QAAQC,MAAMC,SAAS,SAAS;AAClC,aAAO;IACT;AACA,UAAMC,SAASH,QAAQI,UAAUD;AACjC,WACEA,UAAU,QAAQ,SAASA,UAAWA,OAAmCE,QAAQC,gBAAgBjB,KAAKgB;EAE1G,CAAA,GACF;IAACd;GAAS;AAGZ,QAAMgB,sBAAsBC,YAAY,MAAA;AACtC,QAAIX,iBAAiB;AACnB;IACF;AACA,UAAMG,UAAUJ,QAAQa,KAAK;MAC3BC,SAAS;MACTT,MAAM;QACJC,MAAM;QACNS,MAAM;MACR;MACAP,UAAUQ,IAAIH,KAAKI,UAAUC,UAAUR,eAAAA,CAAAA;IACzC,CAAA;AACApB,UAAMO,GAAGsB,IAAIf,OAAAA;EACf,GAAG;IAACd;IAAOW;GAAgB;AAE3B,SACE,sBAAA,cAACmB,OAAAA;IAAIC,WAAU;KACb,sBAAA,cAACC,MAAAA;IAAGD,WAAU;KAAuB9B,EAAE,aAAA,CAAA,GACvC,sBAAA,cAACgC,KAAAA;IAAEF,WAAU;KAA4B9B,EAAE,4BAAA,CAAA,GAC3C,sBAAA,cAAC6B,OAAAA,MACC,sBAAA,cAACI,YAAAA;IACCC,MAAMxB,kBAAkB,uBAAuB;IAC/CyB,OAAOnC,EAAE,sBAAA;IACToC,SAAShB;IACTiB,UAAU,CAAC,CAAC3B;;AAKtB;;;AC7DA,IAAA,+BAAe4B;",
6
- "names": ["React", "useCallback", "useMemo", "Filter", "Ref", "Trigger", "Operation", "useQuery", "IconButton", "useTranslation", "DailySummarySettings", "space", "t", "useTranslation", "meta", "id", "triggers", "useQuery", "db", "Filter", "type", "Trigger", "existingTrigger", "useMemo", "find", "trigger", "spec", "kind", "target", "function", "key", "GenerateSummary", "handleCreateTrigger", "useCallback", "make", "enabled", "cron", "Ref", "Operation", "serialize", "add", "div", "className", "h2", "p", "IconButton", "icon", "label", "onClick", "disabled", "DailySummarySettings"]
7
- }
@@ -1,39 +0,0 @@
1
- import {
2
- meta
3
- } from "./chunk-2TNDFGQB.mjs";
4
-
5
- // src/capabilities/app-graph-builder/app-graph-builder.ts
6
- import * as Effect from "effect/Effect";
7
- import { Capability } from "@dxos/app-framework";
8
- import { AppCapabilities } from "@dxos/app-toolkit";
9
- import { GraphBuilder, NodeMatcher } from "@dxos/plugin-graph";
10
- import { meta as spaceMeta } from "@dxos/plugin-space";
11
- var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function* () {
12
- const extensions = yield* Effect.all([
13
- GraphBuilder.createExtension({
14
- id: `${meta.id}.space-settings-daily-summary`,
15
- match: NodeMatcher.whenNodeType(`${spaceMeta.id}.settings`),
16
- connector: (node) => Effect.succeed([
17
- {
18
- id: `${meta.id}.daily-summary`,
19
- type: `${meta.id}.space-settings-daily-summary`,
20
- data: `${meta.id}.space-settings-daily-summary`,
21
- properties: {
22
- label: [
23
- "plugin name",
24
- {
25
- ns: meta.id
26
- }
27
- ],
28
- icon: "ph--calendar-check--regular"
29
- }
30
- }
31
- ])
32
- })
33
- ]);
34
- return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);
35
- }));
36
- export {
37
- app_graph_builder_default as default
38
- };
39
- //# sourceMappingURL=app-graph-builder-RHJEYETQ.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/app-graph-builder/app-graph-builder.ts"],
4
- "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { GraphBuilder, NodeMatcher } from '@dxos/plugin-graph';\nimport { meta as spaceMeta } from '@dxos/plugin-space';\n\nimport { meta } from '../../meta';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const extensions = yield* Effect.all([\n GraphBuilder.createExtension({\n id: `${meta.id}.space-settings-daily-summary`,\n match: NodeMatcher.whenNodeType(`${spaceMeta.id}.settings`),\n connector: (node) =>\n Effect.succeed([\n {\n id: `${meta.id}.daily-summary`,\n type: `${meta.id}.space-settings-daily-summary`,\n data: `${meta.id}.space-settings-daily-summary`,\n properties: {\n label: ['plugin name', { ns: meta.id }],\n icon: 'ph--calendar-check--regular',\n },\n },\n ]),\n }),\n ]);\n\n return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);\n }),\n);\n"],
5
- "mappings": ";;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,uBAAuB;AAChC,SAASC,cAAcC,mBAAmB;AAC1C,SAASC,QAAQC,iBAAiB;AAIlC,IAAA,4BAAeC,WAAWC,WACjBC,kBAAW,aAAA;AAChB,QAAMC,aAAa,OAAcC,WAAI;IACnCC,aAAaC,gBAAgB;MAC3BC,IAAI,GAAGC,KAAKD,EAAE;MACdE,OAAOC,YAAYC,aAAa,GAAGC,UAAUL,EAAE,WAAW;MAC1DM,WAAW,CAACC,SACHC,eAAQ;QACb;UACER,IAAI,GAAGC,KAAKD,EAAE;UACdS,MAAM,GAAGR,KAAKD,EAAE;UAChBU,MAAM,GAAGT,KAAKD,EAAE;UAChBW,YAAY;YACVC,OAAO;cAAC;cAAe;gBAAEC,IAAIZ,KAAKD;cAAG;;YACrCc,MAAM;UACR;QACF;OACD;IACL,CAAA;GACD;AAED,SAAOrB,WAAWsB,YAAYC,gBAAgBC,iBAAiBrB,UAAAA;AACjE,CAAA,CAAA;",
6
- "names": ["Effect", "Capability", "AppCapabilities", "GraphBuilder", "NodeMatcher", "meta", "spaceMeta", "Capability", "makeModule", "fnUntraced", "extensions", "all", "GraphBuilder", "createExtension", "id", "meta", "match", "NodeMatcher", "whenNodeType", "spaceMeta", "connector", "node", "succeed", "type", "data", "properties", "label", "ns", "icon", "contributes", "AppCapabilities", "AppGraphBuilder"]
7
- }
@@ -1,53 +0,0 @@
1
- import {
2
- GenerateSummary
3
- } from "./chunk-UYXGTD3T.mjs";
4
-
5
- // src/capabilities/blueprint-definition/blueprint-definition.ts
6
- import * as Effect from "effect/Effect";
7
- import { Capability } from "@dxos/app-framework";
8
- import { AppCapabilities } from "@dxos/app-toolkit";
9
-
10
- // src/blueprints/daily-summary-blueprint.ts
11
- import { Blueprint, Template } from "@dxos/blueprints";
12
- import { trim } from "@dxos/util";
13
-
14
- // src/blueprints/functions/index.ts
15
- import { OperationHandlerSet } from "@dxos/operation";
16
- var DailySummaryHandlers = OperationHandlerSet.lazy(() => import("./generate-FSSCIHAO.mjs"));
17
-
18
- // src/blueprints/daily-summary-blueprint.ts
19
- var BLUEPRINT_KEY = "org.dxos.blueprint.daily-summary";
20
- var make = () => Blueprint.make({
21
- key: BLUEPRINT_KEY,
22
- name: "Daily Summary",
23
- tools: Blueprint.toolDefinitions({
24
- operations: [
25
- GenerateSummary
26
- ]
27
- }),
28
- instructions: Template.make({
29
- source: trim`
30
- {{! Daily Summary }}
31
-
32
- You generate concise daily activity summaries as Markdown documents.
33
- When asked to summarize, use the generate tool to query recent objects and produce a summary.
34
- The tool creates a Markdown document in a "Summaries" collection.
35
- If a summary for today already exists, it updates the existing document.
36
- `
37
- })
38
- });
39
- var blueprint = {
40
- key: BLUEPRINT_KEY,
41
- make
42
- };
43
- var daily_summary_blueprint_default = blueprint;
44
-
45
- // src/capabilities/blueprint-definition/blueprint-definition.ts
46
- var blueprintDefinition = Capability.makeModule(() => Effect.succeed([
47
- Capability.contributes(AppCapabilities.BlueprintDefinition, daily_summary_blueprint_default)
48
- ]));
49
- var blueprint_definition_default = blueprintDefinition;
50
- export {
51
- blueprint_definition_default as default
52
- };
53
- //# sourceMappingURL=blueprint-definition-XOEDPUVU.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/blueprint-definition/blueprint-definition.ts", "../../../src/blueprints/daily-summary-blueprint.ts", "../../../src/blueprints/functions/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\n\nimport { DailySummaryBlueprint } from '../../blueprints';\n\nconst blueprintDefinition = Capability.makeModule<\n [],\n Capability.Capability<typeof AppCapabilities.BlueprintDefinition>[]\n>(() => Effect.succeed([Capability.contributes(AppCapabilities.BlueprintDefinition, DailySummaryBlueprint)]));\n\nexport default blueprintDefinition;\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { type AppCapabilities } from '@dxos/app-toolkit';\nimport { Blueprint, Template } from '@dxos/blueprints';\nimport { trim } from '@dxos/util';\n\nimport { DailySummaryHandlers, GenerateSummary } from './functions';\n\nexport const BLUEPRINT_KEY = 'org.dxos.blueprint.daily-summary';\n\nexport { DailySummaryHandlers };\n\nconst make = () =>\n Blueprint.make({\n key: BLUEPRINT_KEY,\n name: 'Daily Summary',\n tools: Blueprint.toolDefinitions({ operations: [GenerateSummary] }),\n instructions: Template.make({\n source: trim`\n {{! Daily Summary }}\n\n You generate concise daily activity summaries as Markdown documents.\n When asked to summarize, use the generate tool to query recent objects and produce a summary.\n The tool creates a Markdown document in a \"Summaries\" collection.\n If a summary for today already exists, it updates the existing document.\n `,\n }),\n });\n\nconst blueprint: AppCapabilities.BlueprintDefinition = {\n key: BLUEPRINT_KEY,\n make,\n};\n\nexport default blueprint;\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/operation';\n\nexport * from './definitions';\n\nexport const DailySummaryHandlers = OperationHandlerSet.lazy(() => import('./generate'));\n"],
5
- "mappings": ";;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,uBAAuB;;;ACFhC,SAASC,WAAWC,gBAAgB;AACpC,SAASC,YAAY;;;ACFrB,SAASC,2BAA2B;AAI7B,IAAMC,uBAAuBC,oBAAoBC,KAAK,MAAM,OAAO,yBAAA,CAAA;;;ADEnE,IAAMC,gBAAgB;AAI7B,IAAMC,OAAO,MACXC,UAAUD,KAAK;EACbE,KAAKC;EACLC,MAAM;EACNC,OAAOJ,UAAUK,gBAAgB;IAAEC,YAAY;MAACC;;EAAiB,CAAA;EACjEC,cAAcC,SAASV,KAAK;IAC1BW,QAAQC;;;;;;;;EAQV,CAAA;AACF,CAAA;AAEF,IAAMC,YAAiD;EACrDX,KAAKC;EACLH;AACF;AAEA,IAAA,kCAAea;;;ADzBf,IAAMC,sBAAsBC,WAAWC,WAGrC,MAAaC,eAAQ;EAACF,WAAWG,YAAYC,gBAAgBC,qBAAqBC,+BAAAA;CAAuB,CAAA;AAE3G,IAAA,+BAAeP;",
6
- "names": ["Effect", "Capability", "AppCapabilities", "Blueprint", "Template", "trim", "OperationHandlerSet", "DailySummaryHandlers", "OperationHandlerSet", "lazy", "BLUEPRINT_KEY", "make", "Blueprint", "key", "BLUEPRINT_KEY", "name", "tools", "toolDefinitions", "operations", "GenerateSummary", "instructions", "Template", "source", "trim", "blueprint", "blueprintDefinition", "Capability", "makeModule", "succeed", "contributes", "AppCapabilities", "BlueprintDefinition", "DailySummaryBlueprint"]
7
- }