@dxos/plugin-thread 0.8.1-staging.5be625a → 0.8.1-staging.97aedb1

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 (152) hide show
  1. package/dist/lib/browser/ChatContainer-IOOAQW6S.mjs +138 -0
  2. package/dist/lib/browser/ChatContainer-IOOAQW6S.mjs.map +7 -0
  3. package/dist/lib/browser/app-graph-builder-6W4UKJDI.mjs +41 -0
  4. package/dist/lib/browser/app-graph-builder-6W4UKJDI.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-NOOMCX5E.mjs → chunk-EP6MRLY7.mjs} +1 -2
  6. package/dist/lib/browser/chunk-EP6MRLY7.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-SMQYULO6.mjs → chunk-QDJ3Y6WF.mjs} +15 -32
  8. package/dist/lib/browser/chunk-QDJ3Y6WF.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-S5ZR4FYW.mjs +17 -0
  10. package/dist/lib/browser/chunk-S5ZR4FYW.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-NRMJGYMA.mjs → chunk-TFVPUPOO.mjs} +19 -131
  12. package/dist/lib/browser/chunk-TFVPUPOO.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-SJPT347G.mjs → chunk-WOG72DWE.mjs} +8 -7
  14. package/dist/lib/browser/chunk-WOG72DWE.mjs.map +7 -0
  15. package/dist/lib/browser/index.mjs +16 -29
  16. package/dist/lib/browser/index.mjs.map +3 -3
  17. package/dist/lib/browser/{intent-resolver-FSG3ZOIM.mjs → intent-resolver-QAY4FLLM.mjs} +76 -39
  18. package/dist/lib/browser/intent-resolver-QAY4FLLM.mjs.map +7 -0
  19. package/dist/lib/browser/{markdown-MYZQDQFY.mjs → markdown-7KXBXCUS.mjs} +6 -7
  20. package/dist/lib/browser/{markdown-MYZQDQFY.mjs.map → markdown-7KXBXCUS.mjs.map} +3 -3
  21. package/dist/lib/browser/meta.json +1 -1
  22. package/dist/lib/browser/{react-surface-KOYRIK3E.mjs → react-surface-MT3OWULR.mjs} +47 -36
  23. package/dist/lib/browser/react-surface-MT3OWULR.mjs.map +7 -0
  24. package/dist/lib/browser/{settings-5CREE7BH.mjs → settings-4FEC7EAX.mjs} +2 -2
  25. package/dist/lib/browser/{state-HPUFZBB7.mjs → state-PNMSLKAH.mjs} +2 -2
  26. package/dist/lib/browser/types.mjs +1 -1
  27. package/dist/lib/node/ChatContainer-4FNDRF3G.cjs +163 -0
  28. package/dist/lib/node/ChatContainer-4FNDRF3G.cjs.map +7 -0
  29. package/dist/lib/node/app-graph-builder-HZNWT4QU.cjs +57 -0
  30. package/dist/lib/node/app-graph-builder-HZNWT4QU.cjs.map +7 -0
  31. package/dist/lib/node/{chunk-AXTPNGRI.cjs → chunk-46BSFPBV.cjs} +10 -9
  32. package/dist/lib/node/chunk-46BSFPBV.cjs.map +7 -0
  33. package/dist/lib/node/{chunk-JBOC6MIE.cjs → chunk-AKINTFBH.cjs} +17 -47
  34. package/dist/lib/node/chunk-AKINTFBH.cjs.map +7 -0
  35. package/dist/lib/node/chunk-E7Z3BKRQ.cjs +232 -0
  36. package/dist/lib/node/chunk-E7Z3BKRQ.cjs.map +7 -0
  37. package/dist/lib/node/{chunk-VEVJBOWK.cjs → chunk-NQ5DTPOY.cjs} +4 -5
  38. package/dist/lib/node/chunk-NQ5DTPOY.cjs.map +7 -0
  39. package/dist/lib/node/chunk-S2A6BXEA.cjs +53 -0
  40. package/dist/lib/node/chunk-S2A6BXEA.cjs.map +7 -0
  41. package/dist/lib/node/index.cjs +19 -34
  42. package/dist/lib/node/index.cjs.map +3 -3
  43. package/dist/lib/node/{intent-resolver-NBME5QSW.cjs → intent-resolver-S6FE5OR7.cjs} +99 -62
  44. package/dist/lib/node/intent-resolver-S6FE5OR7.cjs.map +7 -0
  45. package/dist/lib/node/{markdown-QBQTARMD.cjs → markdown-L2WMCQKM.cjs} +10 -11
  46. package/dist/lib/node/{markdown-QBQTARMD.cjs.map → markdown-L2WMCQKM.cjs.map} +3 -3
  47. package/dist/lib/node/meta.json +1 -1
  48. package/dist/lib/node/{react-surface-ICWYXRJU.cjs → react-surface-Z45BYECE.cjs} +54 -43
  49. package/dist/lib/node/react-surface-Z45BYECE.cjs.map +7 -0
  50. package/dist/lib/node/{settings-XOLYNUHH.cjs → settings-IXCPE55J.cjs} +6 -6
  51. package/dist/lib/node/{state-JMI5ZXZI.cjs → state-AT73KPGZ.cjs} +6 -6
  52. package/dist/lib/node/types.cjs +3 -3
  53. package/dist/lib/node/types.cjs.map +1 -1
  54. package/dist/lib/node-esm/ChatContainer-NYLCL6QA.mjs +139 -0
  55. package/dist/lib/node-esm/ChatContainer-NYLCL6QA.mjs.map +7 -0
  56. package/dist/lib/node-esm/app-graph-builder-M3KK5QJH.mjs +42 -0
  57. package/dist/lib/node-esm/app-graph-builder-M3KK5QJH.mjs.map +7 -0
  58. package/dist/lib/node-esm/{chunk-TW2NME6Z.mjs → chunk-ADTVMESP.mjs} +19 -131
  59. package/dist/lib/node-esm/chunk-ADTVMESP.mjs.map +7 -0
  60. package/dist/lib/node-esm/{chunk-FZXTP57V.mjs → chunk-E446MGLP.mjs} +8 -7
  61. package/dist/lib/node-esm/chunk-E446MGLP.mjs.map +7 -0
  62. package/dist/lib/node-esm/{chunk-XQO5DGHF.mjs → chunk-J56FORYF.mjs} +15 -32
  63. package/dist/lib/node-esm/chunk-J56FORYF.mjs.map +7 -0
  64. package/dist/lib/node-esm/{chunk-TXW5SIBN.mjs → chunk-WLY2HMDB.mjs} +1 -2
  65. package/dist/lib/node-esm/chunk-WLY2HMDB.mjs.map +7 -0
  66. package/dist/lib/node-esm/chunk-WSE23GSG.mjs +19 -0
  67. package/dist/lib/node-esm/chunk-WSE23GSG.mjs.map +7 -0
  68. package/dist/lib/node-esm/index.mjs +16 -29
  69. package/dist/lib/node-esm/index.mjs.map +3 -3
  70. package/dist/lib/node-esm/{intent-resolver-QQCCKVEW.mjs → intent-resolver-OURFRSSF.mjs} +76 -39
  71. package/dist/lib/node-esm/intent-resolver-OURFRSSF.mjs.map +7 -0
  72. package/dist/lib/node-esm/{markdown-QO5HK24O.mjs → markdown-ZKU23UVD.mjs} +6 -7
  73. package/dist/lib/node-esm/{markdown-QO5HK24O.mjs.map → markdown-ZKU23UVD.mjs.map} +3 -3
  74. package/dist/lib/node-esm/meta.json +1 -1
  75. package/dist/lib/node-esm/{react-surface-Z4CLCKTN.mjs → react-surface-KIJ767JK.mjs} +47 -36
  76. package/dist/lib/node-esm/react-surface-KIJ767JK.mjs.map +7 -0
  77. package/dist/lib/node-esm/{settings-32PBKVBB.mjs → settings-ZUJQ4LWI.mjs} +2 -2
  78. package/dist/lib/node-esm/{state-PSZO57LP.mjs → state-SSDX5O67.mjs} +2 -2
  79. package/dist/lib/node-esm/types.mjs +1 -1
  80. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/app-graph-builder.d.ts +181 -0
  82. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  83. package/dist/types/src/capabilities/capabilities.d.ts +0 -5
  84. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/index.d.ts +177 -0
  86. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  89. package/dist/types/src/components/ChatContainer.d.ts +1 -0
  90. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  91. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  92. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  93. package/dist/types/src/components/index.d.ts +1 -5
  94. package/dist/types/src/components/index.d.ts.map +1 -1
  95. package/dist/types/src/components/testing.d.ts +1 -0
  96. package/dist/types/src/components/testing.d.ts.map +1 -1
  97. package/dist/types/src/hooks/analytics.d.ts +0 -1
  98. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  99. package/dist/types/src/translations.d.ts +3 -3
  100. package/dist/types/src/types.d.ts +20 -5
  101. package/dist/types/src/types.d.ts.map +1 -1
  102. package/package.json +33 -33
  103. package/src/ThreadPlugin.tsx +8 -23
  104. package/src/capabilities/app-graph-builder.ts +34 -0
  105. package/src/capabilities/capabilities.ts +0 -6
  106. package/src/capabilities/index.ts +1 -0
  107. package/src/capabilities/intent-resolver.ts +59 -29
  108. package/src/capabilities/react-surface.tsx +27 -13
  109. package/src/components/ChatContainer.tsx +3 -1
  110. package/src/components/MessageContainer.tsx +5 -3
  111. package/src/components/ThreadComplementary.tsx +24 -31
  112. package/src/components/index.ts +1 -2
  113. package/src/components/testing.ts +2 -2
  114. package/src/extensions/threads.ts +1 -1
  115. package/src/hooks/analytics.ts +19 -19
  116. package/src/translations.ts +1 -1
  117. package/src/types.ts +5 -5
  118. package/src/util.ts +1 -1
  119. package/dist/lib/browser/ChannelContainer-ITIG7L7P.mjs +0 -75
  120. package/dist/lib/browser/ChannelContainer-ITIG7L7P.mjs.map +0 -7
  121. package/dist/lib/browser/chunk-NOOMCX5E.mjs.map +0 -7
  122. package/dist/lib/browser/chunk-NRMJGYMA.mjs.map +0 -7
  123. package/dist/lib/browser/chunk-SJPT347G.mjs.map +0 -7
  124. package/dist/lib/browser/chunk-SMQYULO6.mjs.map +0 -7
  125. package/dist/lib/browser/intent-resolver-FSG3ZOIM.mjs.map +0 -7
  126. package/dist/lib/browser/react-surface-KOYRIK3E.mjs.map +0 -7
  127. package/dist/lib/node/ChannelContainer-F7345XW2.cjs +0 -99
  128. package/dist/lib/node/ChannelContainer-F7345XW2.cjs.map +0 -7
  129. package/dist/lib/node/chunk-AXTPNGRI.cjs.map +0 -7
  130. package/dist/lib/node/chunk-DGV5ABT6.cjs +0 -338
  131. package/dist/lib/node/chunk-DGV5ABT6.cjs.map +0 -7
  132. package/dist/lib/node/chunk-JBOC6MIE.cjs.map +0 -7
  133. package/dist/lib/node/chunk-VEVJBOWK.cjs.map +0 -7
  134. package/dist/lib/node/intent-resolver-NBME5QSW.cjs.map +0 -7
  135. package/dist/lib/node/react-surface-ICWYXRJU.cjs.map +0 -7
  136. package/dist/lib/node-esm/ChannelContainer-GP6Y6JSN.mjs +0 -76
  137. package/dist/lib/node-esm/ChannelContainer-GP6Y6JSN.mjs.map +0 -7
  138. package/dist/lib/node-esm/chunk-FZXTP57V.mjs.map +0 -7
  139. package/dist/lib/node-esm/chunk-TW2NME6Z.mjs.map +0 -7
  140. package/dist/lib/node-esm/chunk-TXW5SIBN.mjs.map +0 -7
  141. package/dist/lib/node-esm/chunk-XQO5DGHF.mjs.map +0 -7
  142. package/dist/lib/node-esm/intent-resolver-QQCCKVEW.mjs.map +0 -7
  143. package/dist/lib/node-esm/react-surface-Z4CLCKTN.mjs.map +0 -7
  144. package/dist/types/src/components/ChannelContainer.d.ts +0 -9
  145. package/dist/types/src/components/ChannelContainer.d.ts.map +0 -1
  146. package/src/components/ChannelContainer.tsx +0 -80
  147. /package/dist/lib/browser/{settings-5CREE7BH.mjs.map → settings-4FEC7EAX.mjs.map} +0 -0
  148. /package/dist/lib/browser/{state-HPUFZBB7.mjs.map → state-PNMSLKAH.mjs.map} +0 -0
  149. /package/dist/lib/node/{settings-XOLYNUHH.cjs.map → settings-IXCPE55J.cjs.map} +0 -0
  150. /package/dist/lib/node/{state-JMI5ZXZI.cjs.map → state-AT73KPGZ.cjs.map} +0 -0
  151. /package/dist/lib/node-esm/{settings-32PBKVBB.mjs.map → settings-ZUJQ4LWI.mjs.map} +0 -0
  152. /package/dist/lib/node-esm/{state-PSZO57LP.mjs.map → state-SSDX5O67.mjs.map} +0 -0
@@ -26,7 +26,7 @@ declare const _default: {
26
26
  'edit message label'?: undefined;
27
27
  'delete message label'?: undefined;
28
28
  'open comments panel label'?: undefined;
29
- 'comments panel label'?: undefined;
29
+ 'comments label'?: undefined;
30
30
  'show all label'?: undefined;
31
31
  'show unresolved label'?: undefined;
32
32
  } | {
@@ -53,7 +53,7 @@ declare const _default: {
53
53
  'edit message label': string;
54
54
  'delete message label': string;
55
55
  'open comments panel label': string;
56
- 'comments panel label': string;
56
+ 'comments label': string;
57
57
  'show all label': string;
58
58
  'show unresolved label': string;
59
59
  'typename label'?: undefined;
@@ -83,7 +83,7 @@ declare const _default: {
83
83
  'edit message label': string;
84
84
  'delete message label': string;
85
85
  'open comments panel label': string;
86
- 'comments panel label': string;
86
+ 'comments label': string;
87
87
  'show all label': string;
88
88
  'show unresolved label': string;
89
89
  };
@@ -34,7 +34,6 @@ export declare namespace ThreadAction {
34
34
  } & {
35
35
  input: S.Struct<{
36
36
  current: typeof S.String;
37
- skipOpen: S.optional<typeof S.Boolean>;
38
37
  }>;
39
38
  output: typeof S.Void;
40
39
  }>;
@@ -62,16 +61,32 @@ export declare namespace ThreadAction {
62
61
  }>;
63
62
  export class Delete extends Delete_base {
64
63
  }
65
- const OnMessageAdd_base: S.TaggedClass<OnMessageAdd, "dxos.org/plugin/thread/action/on-message-add", {
66
- readonly _tag: S.tag<"dxos.org/plugin/thread/action/on-message-add">;
64
+ const AddMessage_base: S.TaggedClass<AddMessage, "dxos.org/plugin/thread/action/add-message", {
65
+ readonly _tag: S.tag<"dxos.org/plugin/thread/action/add-message">;
67
66
  } & {
68
67
  input: S.Struct<{
69
- thread: typeof ThreadType;
70
68
  subject: S.Schema<import("@dxos/echo-db").ReactiveEchoObject<any>, import("@dxos/echo-db").ReactiveEchoObject<any>, never>;
69
+ thread: typeof ThreadType;
70
+ sender: S.Struct<{
71
+ contact: S.optional<import("@dxos/echo-schema").Ref$<{
72
+ readonly id: string;
73
+ name?: string | undefined;
74
+ identifiers: {
75
+ readonly value: string;
76
+ readonly type: string;
77
+ }[];
78
+ }>>;
79
+ identityDid: S.optional<typeof S.String>;
80
+ identityKey: S.optional<typeof S.String>;
81
+ email: S.optional<typeof S.String>;
82
+ name: S.optional<typeof S.String>;
83
+ role: S.optional<S.Literal<["user", "assistant"]>>;
84
+ }>;
85
+ text: typeof S.String;
71
86
  }>;
72
87
  output: typeof S.Void;
73
88
  }>;
74
- export class OnMessageAdd extends OnMessageAdd_base {
89
+ export class AddMessage extends AddMessage_base {
75
90
  }
76
91
  const DeleteMessage_base: S.TaggedClass<DeleteMessage, "dxos.org/plugin/thread/action/delete-message", {
77
92
  readonly _tag: S.tag<"dxos.org/plugin/thread/action/delete-message">;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAI3C,yBAAiB,YAAY,CAAC;;;;;;;;;;;;IAG5B,MAAM,OAAO,aAAc,SAAQ,kBASjC;KAAG;;;;;;;;;;;;;IAEL,MAAM,OAAO,MAAO,SAAQ,WAS1B;KAAG;;;;;;;;;;IAEL,MAAM,OAAO,MAAO,SAAQ,WAM1B;KAAG;;;;;;;;;IAEL,MAAM,OAAO,cAAe,SAAQ,mBAKlC;KAAG;;;;;;;;;;;IAEL,MAAM,OAAO,MAAO,SAAQ,WAO1B;KAAG;;;;;;;;;;IAGL,MAAM,OAAO,YAAa,SAAQ,iBAMhC;KAAG;;;;;;;;;;;;;IAEL,MAAM,OAAO,aAAc,SAAQ,kBASjC;KAAG;;CACN;AAED,eAAO,MAAM,oBAAoB,yBAA0B,CAAC;AAE5D,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE7E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,KAAK,SAAS,GAAG,MAAM,CAAC;AACxB,MAAM,MAAM,SAAS,GAAG;IAAE,mBAAmB,EAAE,OAAO,CAAA;CAAE,CAAC;AACzD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAErD,MAAM,MAAM,WAAW,GAAG;IACxB,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/C,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAe,WAAW,EAAE,MAAM,cAAc,CAAC;AAIxD,yBAAiB,YAAY,CAAC;;;;;;;;;;;;IAG5B,MAAM,OAAO,aAAc,SAAQ,kBASjC;KAAG;;;;;;;;;;;;;IAEL,MAAM,OAAO,MAAO,SAAQ,WAS1B;KAAG;;;;;;;;;IAEL,MAAM,OAAO,MAAO,SAAQ,WAK1B;KAAG;;;;;;;;;IAEL,MAAM,OAAO,cAAe,SAAQ,mBAKlC;KAAG;;;;;;;;;;;IAEL,MAAM,OAAO,MAAO,SAAQ,WAO1B;KAAG;;;;;;;;yBAvCU,EAAG,QAAQ,QACxB,mBACS;;wBAGR,CAAC;;;;;;6BAKM,EAAG,QAAQ,QACjB,EAAG,MAAM;6BAEC,EAAG,QACf,QAAO,EAAG,MAAM;uBAElB,EAAA,QAED,QAAQ,EAAE,MAAM;sBAAa,EAAE,QAAQ,QAAO,EAAG,MAAM;sBAAY,EAAG,QAAQ,CAAE,EAC7E,OAAE;;;;;;IAsBJ,MAAM,OAAO,UAAW,SAAQ,eAQ9B;KAAG;;;;;;;;;;;;;IAEL,MAAM,OAAO,aAAc,SAAQ,kBASjC;KAAG;;CACN;AAED,eAAO,MAAM,oBAAoB,yBAA0B,CAAC;AAE5D,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE7E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,KAAK,SAAS,GAAG,MAAM,CAAC;AACxB,MAAM,MAAM,SAAS,GAAG;IAAE,mBAAmB,EAAE,OAAO,CAAA;CAAE,CAAC;AACzD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAErD,MAAM,MAAM,WAAW,GAAG;IACxB,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/C,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-thread",
3
- "version": "0.8.1-staging.5be625a",
3
+ "version": "0.8.1-staging.97aedb1",
4
4
  "description": "DXOS Threads Surface plugin",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -39,32 +39,32 @@
39
39
  "@preact/signals-core": "^1.6.0",
40
40
  "date-fns": "^3.3.1",
41
41
  "lodash.get": "^4.4.2",
42
- "@dxos/app-framework": "0.8.1-staging.5be625a",
43
- "@dxos/display-name": "0.8.1-staging.5be625a",
44
- "@dxos/async": "0.8.1-staging.5be625a",
45
- "@dxos/invariant": "0.8.1-staging.5be625a",
46
- "@dxos/keys": "0.8.1-staging.5be625a",
47
- "@dxos/echo-schema": "0.8.1-staging.5be625a",
48
- "@dxos/live-object": "0.8.1-staging.5be625a",
49
- "@dxos/local-storage": "0.8.1-staging.5be625a",
50
- "@dxos/plugin-attention": "0.8.1-staging.5be625a",
51
- "@dxos/log": "0.8.1-staging.5be625a",
52
- "@dxos/plugin-client": "0.8.1-staging.5be625a",
53
- "@dxos/plugin-deck": "0.8.1-staging.5be625a",
54
- "@dxos/plugin-graph": "0.8.1-staging.5be625a",
55
- "@dxos/plugin-markdown": "0.8.1-staging.5be625a",
56
- "@dxos/plugin-observability": "0.8.1-staging.5be625a",
57
- "@dxos/plugin-space": "0.8.1-staging.5be625a",
58
- "@dxos/react-client": "0.8.1-staging.5be625a",
59
- "@dxos/react-ui-attention": "0.8.1-staging.5be625a",
60
- "@dxos/react-ui-form": "0.8.1-staging.5be625a",
61
- "@dxos/react-ui-menu": "0.8.1-staging.5be625a",
62
- "@dxos/react-ui-editor": "0.8.1-staging.5be625a",
63
- "@dxos/react-ui-stack": "0.8.1-staging.5be625a",
64
- "@dxos/react-ui-tabs": "0.8.1-staging.5be625a",
65
- "@dxos/react-ui-thread": "0.8.1-staging.5be625a",
66
- "@dxos/schema": "0.8.1-staging.5be625a",
67
- "@dxos/util": "0.8.1-staging.5be625a"
42
+ "@dxos/app-framework": "0.8.1-staging.97aedb1",
43
+ "@dxos/async": "0.8.1-staging.97aedb1",
44
+ "@dxos/display-name": "0.8.1-staging.97aedb1",
45
+ "@dxos/echo-schema": "0.8.1-staging.97aedb1",
46
+ "@dxos/invariant": "0.8.1-staging.97aedb1",
47
+ "@dxos/keys": "0.8.1-staging.97aedb1",
48
+ "@dxos/live-object": "0.8.1-staging.97aedb1",
49
+ "@dxos/log": "0.8.1-staging.97aedb1",
50
+ "@dxos/plugin-attention": "0.8.1-staging.97aedb1",
51
+ "@dxos/plugin-client": "0.8.1-staging.97aedb1",
52
+ "@dxos/plugin-deck": "0.8.1-staging.97aedb1",
53
+ "@dxos/plugin-graph": "0.8.1-staging.97aedb1",
54
+ "@dxos/plugin-markdown": "0.8.1-staging.97aedb1",
55
+ "@dxos/plugin-observability": "0.8.1-staging.97aedb1",
56
+ "@dxos/local-storage": "0.8.1-staging.97aedb1",
57
+ "@dxos/plugin-space": "0.8.1-staging.97aedb1",
58
+ "@dxos/react-client": "0.8.1-staging.97aedb1",
59
+ "@dxos/react-ui-attention": "0.8.1-staging.97aedb1",
60
+ "@dxos/react-ui-menu": "0.8.1-staging.97aedb1",
61
+ "@dxos/react-ui-form": "0.8.1-staging.97aedb1",
62
+ "@dxos/react-ui-stack": "0.8.1-staging.97aedb1",
63
+ "@dxos/react-ui-tabs": "0.8.1-staging.97aedb1",
64
+ "@dxos/react-ui-editor": "0.8.1-staging.97aedb1",
65
+ "@dxos/schema": "0.8.1-staging.97aedb1",
66
+ "@dxos/util": "0.8.1-staging.97aedb1",
67
+ "@dxos/react-ui-thread": "0.8.1-staging.97aedb1"
68
68
  },
69
69
  "devDependencies": {
70
70
  "@phosphor-icons/react": "^2.1.5",
@@ -74,17 +74,17 @@
74
74
  "react": "~18.2.0",
75
75
  "react-dom": "~18.2.0",
76
76
  "vite": "5.4.7",
77
- "@dxos/react-ui": "0.8.1-staging.5be625a",
78
- "@dxos/random": "0.8.1-staging.5be625a",
79
- "@dxos/storybook-utils": "0.8.1-staging.5be625a",
80
- "@dxos/react-ui-theme": "0.8.1-staging.5be625a"
77
+ "@dxos/random": "0.8.1-staging.97aedb1",
78
+ "@dxos/react-ui": "0.8.1-staging.97aedb1",
79
+ "@dxos/storybook-utils": "0.8.1-staging.97aedb1",
80
+ "@dxos/react-ui-theme": "0.8.1-staging.97aedb1"
81
81
  },
82
82
  "peerDependencies": {
83
83
  "@phosphor-icons/react": "^2.1.5",
84
84
  "react": "~18.2.0",
85
85
  "react-dom": "~18.2.0",
86
- "@dxos/react-ui": "0.8.1-staging.5be625a",
87
- "@dxos/react-ui-theme": "0.8.1-staging.5be625a"
86
+ "@dxos/react-ui": "0.8.1-staging.97aedb1",
87
+ "@dxos/react-ui-theme": "0.8.1-staging.97aedb1"
88
88
  },
89
89
  "publishConfig": {
90
90
  "access": "public"
@@ -4,7 +4,6 @@
4
4
 
5
5
  import { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from '@dxos/app-framework';
6
6
  import { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';
7
- import { DeckCapabilities, DeckEvents } from '@dxos/plugin-deck';
8
7
  import { MarkdownEvents } from '@dxos/plugin-markdown';
9
8
  import { SpaceCapabilities, ThreadEvents } from '@dxos/plugin-space';
10
9
  import { ChannelType, defineObjectForm, ThreadType } from '@dxos/plugin-space/types';
@@ -12,9 +11,9 @@ import { type ReactiveEchoObject, RefArray } from '@dxos/react-client/echo';
12
11
  import { translations as threadTranslations } from '@dxos/react-ui-thread';
13
12
  import { MessageType, MessageTypeV1, MessageTypeV1ToV2 } from '@dxos/schema';
14
13
 
15
- import { IntentResolver, Markdown, ReactSurface, ThreadState } from './capabilities';
14
+ import { AppGraphBuilder, IntentResolver, Markdown, ReactSurface, ThreadState } from './capabilities';
16
15
  import { ThreadEvents as LocalThreadEvents } from './events';
17
- import { meta, THREAD_ITEM, THREAD_PLUGIN } from './meta';
16
+ import { meta, THREAD_ITEM } from './meta';
18
17
  import translations from './translations';
19
18
  import { ThreadAction } from './types';
20
19
 
@@ -48,7 +47,7 @@ export const ThreadPlugin = () =>
48
47
  contributes(Capabilities.Metadata, {
49
48
  id: ChannelType.typename,
50
49
  metadata: {
51
- icon: 'ph--chat--regular',
50
+ icon: 'ph--hash--regular',
52
51
  },
53
52
  }),
54
53
  contributes(Capabilities.Metadata, {
@@ -104,25 +103,6 @@ export const ThreadPlugin = () =>
104
103
  activatesOn: ClientEvents.SetupMigration,
105
104
  activate: () => contributes(ClientCapabilities.Migration, [MessageTypeV1ToV2]),
106
105
  }),
107
- defineModule({
108
- id: `${meta.id}/module/complementary-panel`,
109
- activatesOn: DeckEvents.SetupComplementaryPanels,
110
- activate: () =>
111
- contributes(DeckCapabilities.ComplementaryPanel, {
112
- id: 'comments',
113
- label: ['comments panel label', { ns: THREAD_PLUGIN }],
114
- icon: 'ph--chat-text--regular',
115
- position: 'hoist',
116
- // TODO(wittjosiah): Support comments on any object.
117
- // filter: (node) => isEchoObject(node.data) && !!getSpace(node.data),
118
- filter: (node) =>
119
- !!node.data &&
120
- typeof node.data === 'object' &&
121
- 'threads' in node.data &&
122
- Array.isArray(node.data.threads) &&
123
- !(node.data instanceof ChannelType),
124
- }),
125
- }),
126
106
  defineModule({
127
107
  id: `${meta.id}/module/markdown`,
128
108
  activatesOn: MarkdownEvents.SetupExtensions,
@@ -140,4 +120,9 @@ export const ThreadPlugin = () =>
140
120
  activatesOn: Events.SetupIntentResolver,
141
121
  activate: IntentResolver,
142
122
  }),
123
+ defineModule({
124
+ id: `${meta.id}/module/app-graph-builder`,
125
+ activatesOn: Events.SetupAppGraph,
126
+ activate: AppGraphBuilder,
127
+ }),
143
128
  ]);
@@ -0,0 +1,34 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capabilities, contributes, type PluginsContext } from '@dxos/app-framework';
6
+ import { type ReactiveEchoObject } from '@dxos/client/echo';
7
+ import { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from '@dxos/plugin-deck/types';
8
+ import { createExtension, type Node } from '@dxos/plugin-graph';
9
+
10
+ import { meta } from '../meta';
11
+
12
+ export default (context: PluginsContext) =>
13
+ contributes(Capabilities.AppGraphBuilder, [
14
+ createExtension({
15
+ id: `${meta.id}/comments`,
16
+ // TODO(wittjosiah): Support comments on any object.
17
+ // filter: (node): node is Node<ReactiveEchoObject<any>> => isEchoObject(node.data),
18
+ filter: (node): node is Node<ReactiveEchoObject<any>> =>
19
+ !!node.data && typeof node.data === 'object' && 'threads' in node.data && Array.isArray(node.data.threads),
20
+ connector: ({ node }) => [
21
+ {
22
+ id: [node.id, 'comments'].join(ATTENDABLE_PATH_SEPARATOR),
23
+ type: PLANK_COMPANION_TYPE,
24
+ data: 'comments',
25
+ properties: {
26
+ label: ['comments label', { ns: meta.id }],
27
+ icon: 'ph--chat-text--regular',
28
+ disposition: 'hidden',
29
+ position: 'hoist',
30
+ },
31
+ },
32
+ ],
33
+ }),
34
+ ]);
@@ -3,7 +3,6 @@
3
3
  //
4
4
 
5
5
  import { defineCapability } from '@dxos/app-framework';
6
- import { type MenuActionProperties } from '@dxos/react-ui-menu';
7
6
  import { type DeepReadonly } from '@dxos/util';
8
7
 
9
8
  import { THREAD_PLUGIN } from '../meta';
@@ -17,9 +16,4 @@ export namespace ThreadCapabilities {
17
16
  export const MutableState = defineCapability<{ state: ThreadState; getViewState: GetViewState }>(
18
17
  `${THREAD_PLUGIN}/capability/state`,
19
18
  );
20
-
21
- export type Activity = Omit<MenuActionProperties, 'variant' | 'checked'> & {
22
- id: string;
23
- };
24
- export const Activity = defineCapability<Activity>(`${THREAD_PLUGIN}/capability/activity`);
25
19
  }
@@ -4,6 +4,7 @@
4
4
 
5
5
  import { lazy } from '@dxos/app-framework';
6
6
 
7
+ export const AppGraphBuilder = lazy(() => import('./app-graph-builder'));
7
8
  export const IntentResolver = lazy(() => import('./intent-resolver'));
8
9
  export const Markdown = lazy(() => import('./markdown'));
9
10
  export const ReactSurface = lazy(() => import('./react-surface'));
@@ -2,21 +2,17 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import {
6
- Capabilities,
7
- contributes,
8
- createIntent,
9
- createResolver,
10
- LayoutAction,
11
- type PluginsContext,
12
- } from '@dxos/app-framework';
5
+ import { Capabilities, contributes, createIntent, createResolver, type PluginsContext } from '@dxos/app-framework';
13
6
  import { ObjectId, Ref } from '@dxos/echo-schema';
7
+ import { invariant } from '@dxos/invariant';
14
8
  import { DXN, QueueSubspaceTags } from '@dxos/keys';
15
9
  import { refFromDXN } from '@dxos/live-object';
16
10
  import { log } from '@dxos/log';
11
+ import { ATTENDABLE_PATH_SEPARATOR, DeckAction } from '@dxos/plugin-deck/types';
17
12
  import { ObservabilityAction } from '@dxos/plugin-observability/types';
18
13
  import { ChannelType, ThreadType } from '@dxos/plugin-space/types';
19
14
  import { create, fullyQualifiedId, getSpace, makeRef } from '@dxos/react-client/echo';
15
+ import { MessageType } from '@dxos/schema';
20
16
 
21
17
  import { ThreadCapabilities } from './capabilities';
22
18
  import { THREAD_PLUGIN } from '../meta';
@@ -63,22 +59,19 @@ export default (context: PluginsContext) =>
63
59
  data: { object: thread },
64
60
  intents: [
65
61
  createIntent(ThreadAction.Select, { current: fullyQualifiedId(thread) }),
66
- createIntent(LayoutAction.UpdateComplementary, { part: 'complementary', subject: 'comments' }),
62
+ createIntent(DeckAction.ChangeCompanion, {
63
+ primary: subjectId,
64
+ companion: `${subjectId}${ATTENDABLE_PATH_SEPARATOR}comments`,
65
+ }),
67
66
  ],
68
67
  };
69
68
  },
70
69
  }),
71
70
  createResolver({
72
71
  intent: ThreadAction.Select,
73
- resolve: ({ current, skipOpen }) => {
72
+ resolve: ({ current }) => {
74
73
  const { state } = context.requestCapability(ThreadCapabilities.MutableState);
75
74
  state.current = current;
76
-
77
- return {
78
- intents: !skipOpen
79
- ? [createIntent(LayoutAction.UpdateComplementary, { part: 'complementary', subject: 'comments' })]
80
- : undefined,
81
- };
82
75
  },
83
76
  }),
84
77
  createResolver({
@@ -91,13 +84,17 @@ export default (context: PluginsContext) =>
91
84
  }
92
85
 
93
86
  const space = getSpace(thread);
94
- const spaceId = space?.id;
87
+ invariant(space, 'Space not found');
88
+ const spaceId = space.id;
95
89
 
96
90
  return {
97
91
  intents: [
98
92
  createIntent(ObservabilityAction.SendEvent, {
99
93
  name: 'threads.toggle-resolved',
100
- properties: { threadId: thread.id, spaceId },
94
+ properties: {
95
+ spaceId,
96
+ threadId: thread.id,
97
+ },
101
98
  }),
102
99
  ],
103
100
  };
@@ -140,7 +137,10 @@ export default (context: PluginsContext) =>
140
137
  intents: [
141
138
  createIntent(ObservabilityAction.SendEvent, {
142
139
  name: 'threads.delete',
143
- properties: { threadId: thread.id, spaceId: space.id },
140
+ properties: {
141
+ spaceId: space.id,
142
+ threadId: thread.id,
143
+ },
144
144
  }),
145
145
  ],
146
146
  };
@@ -153,7 +153,10 @@ export default (context: PluginsContext) =>
153
153
  intents: [
154
154
  createIntent(ObservabilityAction.SendEvent, {
155
155
  name: 'threads.undo-delete',
156
- properties: { threadId: thread.id, spaceId: space.id },
156
+ properties: {
157
+ spaceId: space.id,
158
+ threadId: thread.id,
159
+ },
157
160
  }),
158
161
  ],
159
162
  };
@@ -161,13 +164,22 @@ export default (context: PluginsContext) =>
161
164
  },
162
165
  }),
163
166
  createResolver({
164
- intent: ThreadAction.OnMessageAdd,
165
- resolve: ({ thread, subject }) => {
167
+ intent: ThreadAction.AddMessage,
168
+ resolve: ({ thread, subject, sender, text }) => {
166
169
  const { state } = context.requestCapability(ThreadCapabilities.MutableState);
167
170
  const subjectId = fullyQualifiedId(subject);
168
171
  const space = getSpace(subject);
172
+ invariant(space, 'Space not found');
169
173
  const intents = [];
170
- const analyticsProperties = { threadId: thread.id, spaceId: space?.id };
174
+
175
+ const message = create(MessageType, {
176
+ sender,
177
+ created: new Date().toISOString(),
178
+ blocks: [{ type: 'text', text }],
179
+ // TODO(wittjosiah): Context based on attention.
180
+ // context: context ? makeRef(context) : undefined,
181
+ });
182
+ thread.messages.push(makeRef(message));
171
183
 
172
184
  if (state.drafts[subjectId]?.find((t) => t === thread)) {
173
185
  // Move draft to document.
@@ -176,16 +188,25 @@ export default (context: PluginsContext) =>
176
188
  state.drafts[subjectId] = state.drafts[subjectId]?.filter(({ id }) => id !== thread.id);
177
189
  intents.push(
178
190
  createIntent(ObservabilityAction.SendEvent, {
179
- name: 'threads.thread-created',
180
- properties: analyticsProperties,
191
+ name: 'threads.create',
192
+ properties: {
193
+ spaceId: space.id,
194
+ threadId: thread.id,
195
+ },
181
196
  }),
182
197
  );
183
198
  }
184
199
 
185
200
  intents.push(
186
201
  createIntent(ObservabilityAction.SendEvent, {
187
- name: 'threads.message-added',
188
- properties: { ...analyticsProperties, threadLength: thread.messages.length },
202
+ name: 'threads.message.add',
203
+ properties: {
204
+ spaceId: space.id,
205
+ threadId: thread.id,
206
+ threadLength: thread.messages.length,
207
+ messageId: message.id,
208
+ messageLength: text.length,
209
+ },
189
210
  }),
190
211
  );
191
212
 
@@ -196,6 +217,7 @@ export default (context: PluginsContext) =>
196
217
  intent: ThreadAction.DeleteMessage,
197
218
  resolve: ({ subject, thread, messageId, message, messageIndex }, undo) => {
198
219
  const space = getSpace(subject);
220
+ invariant(space, 'Space not found');
199
221
 
200
222
  if (!undo) {
201
223
  const messageIndex = thread.messages.findIndex(Ref.hasObjectId(messageId));
@@ -221,7 +243,11 @@ export default (context: PluginsContext) =>
221
243
  intents: [
222
244
  createIntent(ObservabilityAction.SendEvent, {
223
245
  name: 'threads.message.delete',
224
- properties: { threadId: thread.id, spaceId: space?.id },
246
+ properties: {
247
+ spaceId: space.id,
248
+ threadId: thread.id,
249
+ messageId: message.id,
250
+ },
225
251
  }),
226
252
  ],
227
253
  };
@@ -235,7 +261,11 @@ export default (context: PluginsContext) =>
235
261
  intents: [
236
262
  createIntent(ObservabilityAction.SendEvent, {
237
263
  name: 'threads.message.undo-delete',
238
- properties: { threadId: thread.id, spaceId: space?.id },
264
+ properties: {
265
+ spaceId: space.id,
266
+ threadId: thread.id,
267
+ messageId: message.id,
268
+ },
239
269
  }),
240
270
  ],
241
271
  };
@@ -6,11 +6,12 @@ import React from 'react';
6
6
 
7
7
  import { Capabilities, contributes, createSurface, useLayout } from '@dxos/app-framework';
8
8
  import { type Ref } from '@dxos/echo-schema';
9
+ import { DXN } from '@dxos/keys';
9
10
  import { SettingsStore } from '@dxos/local-storage';
10
11
  import { ChannelType, type ThreadType } from '@dxos/plugin-space/types';
11
- import { getSpace } from '@dxos/react-client/echo';
12
+ import { getSpace, isSpace, type Space } from '@dxos/react-client/echo';
12
13
 
13
- import { ChannelContainer, ThreadComplementary, ThreadSettings } from '../components';
14
+ import { ChatContainer, ThreadComplementary, ThreadSettings } from '../components';
14
15
  import { THREAD_PLUGIN } from '../meta';
15
16
  import { type ThreadSettingsProps } from '../types';
16
17
 
@@ -25,22 +26,35 @@ export default () =>
25
26
  const currentPosition = layout.active.findIndex((id) => id === channel.id);
26
27
  const objectToTheLeft = layout.active[currentPosition - 1];
27
28
  const context = currentPosition > 0 ? getSpace(channel)?.db.getObjectById(objectToTheLeft) : undefined;
28
- return <ChannelContainer role={role} channel={channel} context={context} />;
29
+ const space = getSpace(channel);
30
+ if (!space) {
31
+ return null;
32
+ }
33
+
34
+ return <ChatContainer space={space} dxn={channel.queue.dxn} context={context} />;
29
35
  },
30
36
  }),
31
37
  createSurface({
32
- id: `${THREAD_PLUGIN}/thread`,
33
- role: 'complementary--comments',
34
- filter: (data): data is { subject: { threads: Ref<ThreadType>[] } } =>
35
- !!data.subject &&
36
- typeof data.subject === 'object' &&
37
- 'threads' in data.subject &&
38
- Array.isArray(data.subject.threads) &&
39
- !(data.subject instanceof ChannelType),
40
- component: ({ data }) => <ThreadComplementary subject={data.subject} />,
38
+ id: `${THREAD_PLUGIN}/comments`,
39
+ role: 'article',
40
+ filter: (data): data is { companionTo: { threads: Ref<ThreadType>[] } } =>
41
+ data.subject === 'comments' &&
42
+ !!data.companionTo &&
43
+ typeof data.companionTo === 'object' &&
44
+ 'threads' in data.companionTo &&
45
+ Array.isArray(data.companionTo.threads),
46
+ // TODO(wittjosiah): This isn't scrolling properly in a plank.
47
+ component: ({ data }) => <ThreadComplementary subject={data.companionTo} />,
48
+ }),
49
+ createSurface({
50
+ id: `${THREAD_PLUGIN}/tabpanel`,
51
+ role: 'tabpanel',
52
+ filter: (data): data is { subject: DXN; space: Space } =>
53
+ data.subject instanceof DXN && data.type === 'chat' && isSpace(data.space),
54
+ component: ({ data: { subject: dxn, space } }) => <ChatContainer dxn={dxn} space={space} />,
41
55
  }),
42
56
  createSurface({
43
- id: `${THREAD_PLUGIN}/settings`,
57
+ id: `${THREAD_PLUGIN}/plugin-settings`,
44
58
  role: 'article',
45
59
  filter: (data): data is { subject: SettingsStore<ThreadSettingsProps> } =>
46
60
  data.subject instanceof SettingsStore && data.subject.prefix === THREAD_PLUGIN,
@@ -85,7 +85,7 @@ export const ChatContainer = ({ space, dxn, context, current, autoFocusTextbox }
85
85
 
86
86
  queue.append([
87
87
  createStatic(MessageType, {
88
- sender: { identityKey: identity.identityKey.toHex() },
88
+ sender: { identityDid: identity.did },
89
89
  created: new Date().toISOString(),
90
90
  blocks: [{ type: 'text', text: messageRef.current }],
91
91
  properties: context ? { context: makeRef(context) } : undefined,
@@ -124,3 +124,5 @@ export const ChatContainer = ({ space, dxn, context, current, autoFocusTextbox }
124
124
  </Thread>
125
125
  );
126
126
  };
127
+
128
+ export default ChatContainer;
@@ -43,10 +43,12 @@ export const MessageContainer = ({
43
43
  onDelete?: (id: string) => void;
44
44
  }) => {
45
45
  const senderIdentity = members.find(
46
- (member) => message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey),
46
+ (member) =>
47
+ (message.sender.identityDid && member.identity.did === message.sender.identityDid) ||
48
+ (message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey)),
47
49
  )?.identity;
48
50
  const messageMetadata = getMessageMetadata(message.id, senderIdentity);
49
- const userIsAuthor = useIdentity()?.identityKey.toHex() === messageMetadata.authorId;
51
+ const userIsAuthor = useIdentity()?.did === messageMetadata.authorId;
50
52
  const [editing, setEditing] = useState(false);
51
53
  const handleDelete = useCallback(() => onDelete?.(message.id), [message, onDelete]);
52
54
  const { t } = useTranslation(THREAD_PLUGIN);
@@ -144,7 +146,7 @@ const TextboxBlock = ({
144
146
  () => ({
145
147
  initialValue: block.text,
146
148
  extensions: [
147
- createBasicExtensions({ readonly: !isAuthor || !editing }),
149
+ createBasicExtensions({ readOnly: !isAuthor || !editing }),
148
150
  createThemeExtensions({ themeMode }),
149
151
  command,
150
152
  EditorView.updateListener.of((update) => {