@atlaskit/collab-provider 28.0.0 → 28.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # @atlaskit/collab-provider
2
2
 
3
+ ## 28.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`9461b21b24472`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/9461b21b24472) -
8
+ Add the recovery:required provider event with a reason payload so Confluence can reset an NCS
9
+ document on request. NCS sends the event to the document's current socket. Rollout is controlled
10
+ by NCS emitting the event.
11
+
12
+ ### Patch Changes
13
+
14
+ - Updated dependencies
15
+
16
+ ## 28.1.0
17
+
18
+ ### Minor Changes
19
+
20
+ - [`36e3ed7c27a98`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/36e3ed7c27a98) -
21
+ Fix missing userIds in steps by using the already known confluence userId, gated by
22
+ `confluence_ncs_step_diffing_version_history`.
23
+
24
+ ### Patch Changes
25
+
26
+ - [`6f50f448a393e`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/6f50f448a393e) -
27
+ Stop deriving agent participants from editor steps when platform_editor_agent_edit_presence is
28
+ enabled.
29
+ - Updated dependencies
30
+
3
31
  ## 28.0.0
4
32
 
5
33
  ### Patch Changes
@@ -637,6 +637,9 @@ var Channel = exports.Channel = /*#__PURE__*/function (_Emitter) {
637
637
  this.socket.on('steps:added', function (data) {
638
638
  _this2.emit('steps:added', data);
639
639
  });
640
+ this.socket.on('recovery:required', function (data) {
641
+ _this2.emit('recovery:required', data);
642
+ });
640
643
  this.socket.on('participant:telepointer', function (_ref7) {
641
644
  var timestamp = _ref7.timestamp,
642
645
  data = _ref7.data;
@@ -17,6 +17,7 @@ var _prosemirrorCollab = require("@atlaskit/prosemirror-collab");
17
17
  var _state = require("@atlaskit/editor-prosemirror/state");
18
18
  var _JSONTransformer = require("@atlaskit/editor-json-transformer/JSONTransformer-2");
19
19
  var _unsafeExpValNoExposure = require("@atlaskit/platform-feature-experiments/unsafe-exp-val-no-exposure");
20
+ var _fg = require("@atlaskit/platform-feature-flags/fg");
20
21
  var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
21
22
  var _const = require("../helpers/const");
22
23
  var _performance = require("../analytics/performance");
@@ -953,10 +954,12 @@ var DocumentService = exports.DocumentService = /*#__PURE__*/function () {
953
954
  * milestone independently — the milestone attributes its own local steps, which are echoed back
954
955
  * to this client, so it needs the facepile without the backend streaming visuals.
955
956
  *
957
+ * When agent edit presence is enabled, the canonical presence channel owns agent participants.
958
+ * Skip this step-derived fallback entirely in that cohort to avoid duplicate or stale participants.
959
+ *
956
960
  * The milestone value is read without logging an exposure: this runs on every received step
957
961
  * batch, whereas the canonical exposure is logged at the action-driven call sites that decide
958
- * whether to attribute a step. The backend experiment is evaluated first so its exposure
959
- * population is unchanged.
962
+ * whether to attribute a step.
960
963
  *
961
964
  * Known limitation (PoC): steps replayed via catch-up/reconnect can briefly re-surface an agent
962
965
  * whose activity is stale — a freshness guard is a follow-up.
@@ -965,7 +968,7 @@ var DocumentService = exports.DocumentService = /*#__PURE__*/function () {
965
968
  key: "maybeAddAgentPresenceFromSteps",
966
969
  value: function maybeAddAgentPresenceFromSteps(steps) {
967
970
  var _this3 = this;
968
- if (!(0, _expValEquals.expValEquals)('platform_editor_agent_be_streaming', 'isEnabled', true) && !(0, _unsafeExpValNoExposure.UNSAFE_expValNoExposure)('platform_editor_ai_streaming_ux_experience_m1', 'isEnabled', false)) {
971
+ if ((0, _fg.fg)('platform_editor_agent_edit_presence') || !(0, _expValEquals.expValEquals)('platform_editor_agent_be_streaming', 'isEnabled', true) && !(0, _unsafeExpValNoExposure.UNSAFE_expValNoExposure)('platform_editor_ai_streaming_ux_experience_m1', 'isEnabled', false)) {
969
972
  return;
970
973
  }
971
974
  try {
@@ -859,9 +859,9 @@ var ParticipantsService = exports.ParticipantsService = /*#__PURE__*/function ()
859
859
  (0, _defineProperty2.default)(this, "onPresence", function (payload) {
860
860
  try {
861
861
  logger('onPresence userId: ', payload.userId);
862
- // Ignored via go/ees005
863
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
864
- _this.setUserId(payload.userId);
862
+ if (payload.userId) {
863
+ _this.setUserId(payload.userId);
864
+ }
865
865
  _this.sendPresence();
866
866
  _this.sendPresenceJoined();
867
867
  } catch (error) {
@@ -194,7 +194,11 @@ var Provider = exports.Provider = /*#__PURE__*/function (_Emitter) {
194
194
  }).on('restore', _this.documentService.onRestore).on('permission', function (permit) {
195
195
  _this.permit = Object.assign(_this.permit, permit);
196
196
  _this.emit('permission', permit);
197
- }).on('steps:added', _this.documentService.onStepsAdded).on('metadata:changed', _this.metadataService.onMetadataChanged).on('participant:telepointer', function (payload) {
197
+ }).on('steps:added', _this.documentService.onStepsAdded).on('recovery:required', function (payload) {
198
+ if (typeof (payload === null || payload === void 0 ? void 0 : payload.reason) === 'string') {
199
+ _this.emit('recovery:required', payload);
200
+ }
201
+ }).on('metadata:changed', _this.metadataService.onMetadataChanged).on('participant:telepointer', function (payload) {
198
202
  return _this.participantsService.onParticipantTelepointer(payload, _this.sessionId);
199
203
  }).on('presence:joined', _this.participantsService.onPresenceJoined).on('presence', _this.participantsService.onPresence).on('participant:left', _this.participantsService.onParticipantLeft).on('participant:updated', _this.participantsService.onParticipantUpdated).on('disconnect', _this.onDisconnected.bind(_this)).on('error', _this.onErrorHandled).on('status', /*#__PURE__*/function () {
200
204
  var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(status) {
@@ -444,6 +448,7 @@ var Provider = exports.Provider = /*#__PURE__*/function (_Emitter) {
444
448
  _this.channel = new _channel.Channel(config, _this.analyticsHelper);
445
449
  _this.isChannelInitialized = false;
446
450
  _this.initialDraft = _this.config.initialDraft;
451
+ _this.userId = _this.config.userId;
447
452
  _this.isBufferingEnabled = Boolean(_this.config.isBufferingEnabled);
448
453
  _this.isProviderInitialized = false;
449
454
  _this.participantsService = new _participantsService.ParticipantsService(_this.analyticsHelper, undefined, _this.emitCallback, _this.config.getUser, _this.config.batchProps, _this.channel.broadcast, _this.channel.sendPresenceJoined, _this.getPresenceData, _this.setUserId, _this.getAIProviderActiveIds, _this.config.fetchAnonymousAsset);
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.version = exports.nextMajorVersion = exports.name = void 0;
7
7
  var name = exports.name = "@atlaskit/collab-provider";
8
- var version = exports.version = "27.0.12";
8
+ var version = exports.version = "28.1.0";
9
9
  var nextMajorVersion = exports.nextMajorVersion = function nextMajorVersion() {
10
10
  return [Number(version.split('.')[0]) + 1, 0, 0].join('.');
11
11
  };
@@ -459,6 +459,9 @@ export class Channel extends Emitter {
459
459
  this.socket.on('steps:added', data => {
460
460
  this.emit('steps:added', data);
461
461
  });
462
+ this.socket.on('recovery:required', data => {
463
+ this.emit('recovery:required', data);
464
+ });
462
465
  this.socket.on('participant:telepointer', ({
463
466
  timestamp,
464
467
  data
@@ -5,6 +5,7 @@ import { getCollabState, sendableSteps } from '@atlaskit/prosemirror-collab';
5
5
  import { Transaction } from '@atlaskit/editor-prosemirror/state';
6
6
  import { JSONTransformer } from '@atlaskit/editor-json-transformer/JSONTransformer-2';
7
7
  import { UNSAFE_expValNoExposure } from '@atlaskit/platform-feature-experiments/unsafe-exp-val-no-exposure';
8
+ import { fg } from '@atlaskit/platform-feature-flags/fg';
8
9
  import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
9
10
  import { ACK_MAX_TRY, EVENT_ACTION, EVENT_STATUS, CatchupEventReason } from '../helpers/const';
10
11
  import { MEASURE_NAME, startMeasure, stopMeasure } from '../analytics/performance';
@@ -831,16 +832,18 @@ export class DocumentService {
831
832
  * milestone independently — the milestone attributes its own local steps, which are echoed back
832
833
  * to this client, so it needs the facepile without the backend streaming visuals.
833
834
  *
835
+ * When agent edit presence is enabled, the canonical presence channel owns agent participants.
836
+ * Skip this step-derived fallback entirely in that cohort to avoid duplicate or stale participants.
837
+ *
834
838
  * The milestone value is read without logging an exposure: this runs on every received step
835
839
  * batch, whereas the canonical exposure is logged at the action-driven call sites that decide
836
- * whether to attribute a step. The backend experiment is evaluated first so its exposure
837
- * population is unchanged.
840
+ * whether to attribute a step.
838
841
  *
839
842
  * Known limitation (PoC): steps replayed via catch-up/reconnect can briefly re-surface an agent
840
843
  * whose activity is stale — a freshness guard is a follow-up.
841
844
  */
842
845
  maybeAddAgentPresenceFromSteps(steps) {
843
- if (!expValEquals('platform_editor_agent_be_streaming', 'isEnabled', true) && !UNSAFE_expValNoExposure('platform_editor_ai_streaming_ux_experience_m1', 'isEnabled', false)) {
846
+ if (fg('platform_editor_agent_edit_presence') || !expValEquals('platform_editor_agent_be_streaming', 'isEnabled', true) && !UNSAFE_expValNoExposure('platform_editor_ai_streaming_ux_experience_m1', 'isEnabled', false)) {
844
847
  return;
845
848
  }
846
849
  try {
@@ -698,9 +698,9 @@ export class ParticipantsService {
698
698
  _defineProperty(this, "onPresence", payload => {
699
699
  try {
700
700
  logger('onPresence userId: ', payload.userId);
701
- // Ignored via go/ees005
702
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
703
- this.setUserId(payload.userId);
701
+ if (payload.userId) {
702
+ this.setUserId(payload.userId);
703
+ }
704
704
  this.sendPresence();
705
705
  this.sendPresenceJoined();
706
706
  } catch (error) {
@@ -175,7 +175,11 @@ export class Provider extends Emitter {
175
175
  }).on('restore', this.documentService.onRestore).on('permission', permit => {
176
176
  this.permit = Object.assign(this.permit, permit);
177
177
  this.emit('permission', permit);
178
- }).on('steps:added', this.documentService.onStepsAdded).on('metadata:changed', this.metadataService.onMetadataChanged).on('participant:telepointer', payload => this.participantsService.onParticipantTelepointer(payload, this.sessionId)).on('presence:joined', this.participantsService.onPresenceJoined).on('presence', this.participantsService.onPresence).on('participant:left', this.participantsService.onParticipantLeft).on('participant:updated', this.participantsService.onParticipantUpdated).on('disconnect', this.onDisconnected.bind(this)).on('error', this.onErrorHandled).on('status', async status => {
178
+ }).on('steps:added', this.documentService.onStepsAdded).on('recovery:required', payload => {
179
+ if (typeof (payload === null || payload === void 0 ? void 0 : payload.reason) === 'string') {
180
+ this.emit('recovery:required', payload);
181
+ }
182
+ }).on('metadata:changed', this.metadataService.onMetadataChanged).on('participant:telepointer', payload => this.participantsService.onParticipantTelepointer(payload, this.sessionId)).on('presence:joined', this.participantsService.onPresenceJoined).on('presence', this.participantsService.onPresence).on('participant:left', this.participantsService.onParticipantLeft).on('participant:updated', this.participantsService.onParticipantUpdated).on('disconnect', this.onDisconnected.bind(this)).on('error', this.onErrorHandled).on('status', async status => {
179
183
  await this.namespaceService.onNamespaceStatusChanged(status);
180
184
  const isLocked = this.namespaceService.getIsNamespaceLocked();
181
185
  this.emit('namespace-lock:check', {
@@ -361,6 +365,7 @@ export class Provider extends Emitter {
361
365
  this.channel = new Channel(config, this.analyticsHelper);
362
366
  this.isChannelInitialized = false;
363
367
  this.initialDraft = this.config.initialDraft;
368
+ this.userId = this.config.userId;
364
369
  this.isBufferingEnabled = Boolean(this.config.isBufferingEnabled);
365
370
  this.isProviderInitialized = false;
366
371
  this.participantsService = new ParticipantsService(this.analyticsHelper, undefined, this.emitCallback, this.config.getUser, this.config.batchProps, this.channel.broadcast, this.channel.sendPresenceJoined, this.getPresenceData, this.setUserId, this.getAIProviderActiveIds, this.config.fetchAnonymousAsset);
@@ -1,5 +1,5 @@
1
1
  export const name = "@atlaskit/collab-provider";
2
- export const version = "27.0.12";
2
+ export const version = "28.1.0";
3
3
  export const nextMajorVersion = () => {
4
4
  return [Number(version.split('.')[0]) + 1, 0, 0].join('.');
5
5
  };
@@ -630,6 +630,9 @@ export var Channel = /*#__PURE__*/function (_Emitter) {
630
630
  this.socket.on('steps:added', function (data) {
631
631
  _this2.emit('steps:added', data);
632
632
  });
633
+ this.socket.on('recovery:required', function (data) {
634
+ _this2.emit('recovery:required', data);
635
+ });
633
636
  this.socket.on('participant:telepointer', function (_ref7) {
634
637
  var timestamp = _ref7.timestamp,
635
638
  data = _ref7.data;
@@ -15,6 +15,7 @@ import { getCollabState, sendableSteps } from '@atlaskit/prosemirror-collab';
15
15
  import { Transaction } from '@atlaskit/editor-prosemirror/state';
16
16
  import { JSONTransformer } from '@atlaskit/editor-json-transformer/JSONTransformer-2';
17
17
  import { UNSAFE_expValNoExposure } from '@atlaskit/platform-feature-experiments/unsafe-exp-val-no-exposure';
18
+ import { fg } from '@atlaskit/platform-feature-flags/fg';
18
19
  import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
19
20
  import { ACK_MAX_TRY, EVENT_ACTION, EVENT_STATUS, CatchupEventReason } from '../helpers/const';
20
21
  import { MEASURE_NAME, startMeasure, stopMeasure } from '../analytics/performance';
@@ -947,10 +948,12 @@ export var DocumentService = /*#__PURE__*/function () {
947
948
  * milestone independently — the milestone attributes its own local steps, which are echoed back
948
949
  * to this client, so it needs the facepile without the backend streaming visuals.
949
950
  *
951
+ * When agent edit presence is enabled, the canonical presence channel owns agent participants.
952
+ * Skip this step-derived fallback entirely in that cohort to avoid duplicate or stale participants.
953
+ *
950
954
  * The milestone value is read without logging an exposure: this runs on every received step
951
955
  * batch, whereas the canonical exposure is logged at the action-driven call sites that decide
952
- * whether to attribute a step. The backend experiment is evaluated first so its exposure
953
- * population is unchanged.
956
+ * whether to attribute a step.
954
957
  *
955
958
  * Known limitation (PoC): steps replayed via catch-up/reconnect can briefly re-surface an agent
956
959
  * whose activity is stale — a freshness guard is a follow-up.
@@ -959,7 +962,7 @@ export var DocumentService = /*#__PURE__*/function () {
959
962
  key: "maybeAddAgentPresenceFromSteps",
960
963
  value: function maybeAddAgentPresenceFromSteps(steps) {
961
964
  var _this3 = this;
962
- if (!expValEquals('platform_editor_agent_be_streaming', 'isEnabled', true) && !UNSAFE_expValNoExposure('platform_editor_ai_streaming_ux_experience_m1', 'isEnabled', false)) {
965
+ if (fg('platform_editor_agent_edit_presence') || !expValEquals('platform_editor_agent_be_streaming', 'isEnabled', true) && !UNSAFE_expValNoExposure('platform_editor_ai_streaming_ux_experience_m1', 'isEnabled', false)) {
963
966
  return;
964
967
  }
965
968
  try {
@@ -852,9 +852,9 @@ export var ParticipantsService = /*#__PURE__*/function () {
852
852
  _defineProperty(this, "onPresence", function (payload) {
853
853
  try {
854
854
  logger('onPresence userId: ', payload.userId);
855
- // Ignored via go/ees005
856
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
857
- _this.setUserId(payload.userId);
855
+ if (payload.userId) {
856
+ _this.setUserId(payload.userId);
857
+ }
858
858
  _this.sendPresence();
859
859
  _this.sendPresenceJoined();
860
860
  } catch (error) {
@@ -188,7 +188,11 @@ export var Provider = /*#__PURE__*/function (_Emitter) {
188
188
  }).on('restore', _this.documentService.onRestore).on('permission', function (permit) {
189
189
  _this.permit = Object.assign(_this.permit, permit);
190
190
  _this.emit('permission', permit);
191
- }).on('steps:added', _this.documentService.onStepsAdded).on('metadata:changed', _this.metadataService.onMetadataChanged).on('participant:telepointer', function (payload) {
191
+ }).on('steps:added', _this.documentService.onStepsAdded).on('recovery:required', function (payload) {
192
+ if (typeof (payload === null || payload === void 0 ? void 0 : payload.reason) === 'string') {
193
+ _this.emit('recovery:required', payload);
194
+ }
195
+ }).on('metadata:changed', _this.metadataService.onMetadataChanged).on('participant:telepointer', function (payload) {
192
196
  return _this.participantsService.onParticipantTelepointer(payload, _this.sessionId);
193
197
  }).on('presence:joined', _this.participantsService.onPresenceJoined).on('presence', _this.participantsService.onPresence).on('participant:left', _this.participantsService.onParticipantLeft).on('participant:updated', _this.participantsService.onParticipantUpdated).on('disconnect', _this.onDisconnected.bind(_this)).on('error', _this.onErrorHandled).on('status', /*#__PURE__*/function () {
194
198
  var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(status) {
@@ -438,6 +442,7 @@ export var Provider = /*#__PURE__*/function (_Emitter) {
438
442
  _this.channel = new Channel(config, _this.analyticsHelper);
439
443
  _this.isChannelInitialized = false;
440
444
  _this.initialDraft = _this.config.initialDraft;
445
+ _this.userId = _this.config.userId;
441
446
  _this.isBufferingEnabled = Boolean(_this.config.isBufferingEnabled);
442
447
  _this.isProviderInitialized = false;
443
448
  _this.participantsService = new ParticipantsService(_this.analyticsHelper, undefined, _this.emitCallback, _this.config.getUser, _this.config.batchProps, _this.channel.broadcast, _this.channel.sendPresenceJoined, _this.getPresenceData, _this.setUserId, _this.getAIProviderActiveIds, _this.config.fetchAnonymousAsset);
@@ -1,5 +1,5 @@
1
1
  export var name = "@atlaskit/collab-provider";
2
- export var version = "27.0.12";
2
+ export var version = "28.1.0";
3
3
  export var nextMajorVersion = function nextMajorVersion() {
4
4
  return [Number(version.split('.')[0]) + 1, 0, 0].join('.');
5
5
  };
@@ -104,10 +104,12 @@ export declare class DocumentService implements DocumentServiceInterface {
104
104
  * milestone independently — the milestone attributes its own local steps, which are echoed back
105
105
  * to this client, so it needs the facepile without the backend streaming visuals.
106
106
  *
107
+ * When agent edit presence is enabled, the canonical presence channel owns agent participants.
108
+ * Skip this step-derived fallback entirely in that cohort to avoid duplicate or stale participants.
109
+ *
107
110
  * The milestone value is read without logging an exposure: this runs on every received step
108
111
  * batch, whereas the canonical exposure is logged at the action-driven call sites that decide
109
- * whether to attribute a step. The backend experiment is evaluated first so its exposure
110
- * population is unchanged.
112
+ * whether to attribute a step.
111
113
  *
112
114
  * Known limitation (PoC): steps replayed via catch-up/reconnect can briefly re-surface an agent
113
115
  * whose activity is stale — a freshness guard is a follow-up.
@@ -5,7 +5,7 @@ import type { InternalError } from './errors/internal-errors';
5
5
  import type { JSONDocNode } from '@atlaskit/editor-json-transformer/types';
6
6
  import type { BatchProps, GetUserType } from './participants/participants-helper';
7
7
  import type AnalyticsHelper from './analytics/analytics-helper';
8
- import type { StepJson, CollabSendableSelection, Metadata, UserPermitType, PresenceActivity } from '@atlaskit/editor-common/collab';
8
+ import type { StepJson, CollabSendableSelection, Metadata, UserPermitType, PresenceActivity, CollabRecoveryRequiredPayload } from '@atlaskit/editor-common/collab';
9
9
  import type { CatchupEventReason } from './helpers/const';
10
10
  import type { EditorState } from '@atlaskit/editor-prosemirror/state';
11
11
  export interface CollabEventDisconnectedData {
@@ -86,6 +86,8 @@ export interface Config {
86
86
  * multiple websocket connections, the presenceId is used to correlate the two.
87
87
  */
88
88
  presenceId?: string;
89
+ /** The authenticated account ID used to attribute locally committed steps. */
90
+ userId?: string;
89
91
  productInfo?: ProductInformation;
90
92
  /**
91
93
  * Configure the client side circuit breaker in the event that abnormal behaviour causes the client to flood
@@ -242,6 +244,7 @@ export type ChannelEvent = {
242
244
  presence: PresencePayload;
243
245
  'presence:joined': PresencePayload;
244
246
  reconnected: null;
247
+ 'recovery:required': CollabRecoveryRequiredPayload;
245
248
  restore: InitPayload;
246
249
  status: NamespaceStatus;
247
250
  'steps:added': StepsPayload;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/collab-provider",
3
- "version": "28.0.0",
3
+ "version": "28.2.0",
4
4
  "description": "A provider for collaborative editing.",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -20,7 +20,7 @@
20
20
  "dependencies": {
21
21
  "@atlaskit/adf-utils": "^20.9.0",
22
22
  "@atlaskit/analytics-gas-types": "^6.2.0",
23
- "@atlaskit/analytics-listeners": "^11.3.0",
23
+ "@atlaskit/analytics-listeners": "^11.4.0",
24
24
  "@atlaskit/anonymous-assets": "^2.9.0",
25
25
  "@atlaskit/atlassian-context": "^1.2.0",
26
26
  "@atlaskit/editor-json-transformer": "^9.8.0",
@@ -29,8 +29,8 @@
29
29
  "@atlaskit/platform-feature-experiments": "^0.3.0",
30
30
  "@atlaskit/platform-feature-flags": "^2.2.0",
31
31
  "@atlaskit/prosemirror-collab": "^1.1.0",
32
- "@atlaskit/react-ufo": "^7.12.0",
33
- "@atlaskit/tmp-editor-statsig": "^199.0.0",
32
+ "@atlaskit/react-ufo": "^7.13.0",
33
+ "@atlaskit/tmp-editor-statsig": "^200.0.0",
34
34
  "@atlaskit/ufo": "^1.2.0",
35
35
  "@atlaskit/util-service-support": "^7.4.0",
36
36
  "@babel/runtime": "^7.0.0",
@@ -57,6 +57,10 @@
57
57
  "type": "boolean",
58
58
  "referenceOnly": true
59
59
  },
60
+ "platform_editor_agent_edit_presence": {
61
+ "type": "boolean",
62
+ "referenceOnly": true
63
+ },
60
64
  "platform_editor_agentic_step_attribution": {
61
65
  "type": "boolean"
62
66
  },
@@ -71,6 +75,6 @@
71
75
  }
72
76
  },
73
77
  "peerDependencies": {
74
- "@atlaskit/editor-common": "^123.0.0"
78
+ "@atlaskit/editor-common": "^123.1.0"
75
79
  }
76
80
  }