@vscode/chat-lib 0.3.1-11 → 0.3.1-12

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 (75) hide show
  1. package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.d.ts +52 -8
  2. package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.d.ts.map +1 -1
  3. package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.js +208 -41
  4. package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.js.map +1 -1
  5. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts +3 -1
  6. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts.map +1 -1
  7. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js +14 -3
  8. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js.map +1 -1
  9. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.d.ts.map +1 -1
  10. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js +2 -1
  11. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js.map +1 -1
  12. package/dist/src/_internal/extension/xtab/common/promptCrafting.d.ts.map +1 -1
  13. package/dist/src/_internal/extension/xtab/common/promptCrafting.js +2 -0
  14. package/dist/src/_internal/extension/xtab/common/promptCrafting.js.map +1 -1
  15. package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts +31 -0
  16. package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts.map +1 -1
  17. package/dist/src/_internal/extension/xtab/node/xtabProvider.js +197 -4
  18. package/dist/src/_internal/extension/xtab/node/xtabProvider.js.map +1 -1
  19. package/dist/src/_internal/platform/chat/common/commonTypes.d.ts +1 -2
  20. package/dist/src/_internal/platform/chat/common/commonTypes.d.ts.map +1 -1
  21. package/dist/src/_internal/platform/chat/common/commonTypes.js +8 -8
  22. package/dist/src/_internal/platform/chat/common/commonTypes.js.map +1 -1
  23. package/dist/src/_internal/platform/configuration/common/configurationService.d.ts +3 -0
  24. package/dist/src/_internal/platform/configuration/common/configurationService.d.ts.map +1 -1
  25. package/dist/src/_internal/platform/configuration/common/configurationService.js +3 -0
  26. package/dist/src/_internal/platform/configuration/common/configurationService.js.map +1 -1
  27. package/dist/src/_internal/platform/endpoint/node/messagesApi.d.ts.map +1 -1
  28. package/dist/src/_internal/platform/endpoint/node/messagesApi.js +8 -4
  29. package/dist/src/_internal/platform/endpoint/node/messagesApi.js.map +1 -1
  30. package/dist/src/_internal/platform/env/common/envService.d.ts +6 -0
  31. package/dist/src/_internal/platform/env/common/envService.d.ts.map +1 -1
  32. package/dist/src/_internal/platform/env/common/envService.js.map +1 -1
  33. package/dist/src/_internal/platform/env/common/nullEnvService.d.ts +3 -0
  34. package/dist/src/_internal/platform/env/common/nullEnvService.d.ts.map +1 -1
  35. package/dist/src/_internal/platform/env/common/nullEnvService.js +4 -0
  36. package/dist/src/_internal/platform/env/common/nullEnvService.js.map +1 -1
  37. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.d.ts +79 -2
  38. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.d.ts.map +1 -1
  39. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.js +198 -1
  40. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.js.map +1 -1
  41. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.d.ts +7 -0
  42. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.d.ts.map +1 -1
  43. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.js +10 -0
  44. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.js.map +1 -1
  45. package/dist/src/_internal/platform/networking/common/networking.d.ts +2 -0
  46. package/dist/src/_internal/platform/networking/common/networking.d.ts.map +1 -1
  47. package/dist/src/_internal/platform/networking/common/networking.js.map +1 -1
  48. package/dist/src/_internal/platform/requestLogger/node/requestLogger.d.ts +4 -0
  49. package/dist/src/_internal/platform/requestLogger/node/requestLogger.d.ts.map +1 -1
  50. package/dist/src/_internal/platform/requestLogger/node/requestLogger.js +4 -1
  51. package/dist/src/_internal/platform/requestLogger/node/requestLogger.js.map +1 -1
  52. package/dist/src/_internal/platform/telemetry/common/telemetry.d.ts +2 -0
  53. package/dist/src/_internal/platform/telemetry/common/telemetry.d.ts.map +1 -1
  54. package/dist/src/_internal/platform/telemetry/common/telemetry.js +1 -0
  55. package/dist/src/_internal/platform/telemetry/common/telemetry.js.map +1 -1
  56. package/dist/src/_internal/platform/telemetry/common/telemetryData.d.ts.map +1 -1
  57. package/dist/src/_internal/platform/telemetry/common/telemetryData.js +3 -0
  58. package/dist/src/_internal/platform/telemetry/common/telemetryData.js.map +1 -1
  59. package/dist/src/_internal/util/common/test/shims/themes.d.ts +13 -0
  60. package/dist/src/_internal/util/common/test/shims/themes.d.ts.map +1 -0
  61. package/dist/src/_internal/util/common/test/shims/themes.js +27 -0
  62. package/dist/src/_internal/util/common/test/shims/themes.js.map +1 -0
  63. package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.d.ts.map +1 -1
  64. package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.js +3 -1
  65. package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.js.map +1 -1
  66. package/dist/src/_internal/vscodeTypes.d.ts +1 -0
  67. package/dist/src/_internal/vscodeTypes.d.ts.map +1 -1
  68. package/dist/src/_internal/vscodeTypes.js +3 -1
  69. package/dist/src/_internal/vscodeTypes.js.map +1 -1
  70. package/dist/src/main.d.ts +2 -1
  71. package/dist/src/main.d.ts.map +1 -1
  72. package/dist/src/main.js +1 -0
  73. package/dist/src/main.js.map +1 -1
  74. package/dist/src/package.json +13 -4
  75. package/package.json +2 -2
@@ -1,15 +1,62 @@
1
1
  import { IConfigurationService } from '../../../platform/configuration/common/configurationService';
2
- import { AggressivenessLevel } from '../../../platform/inlineEdits/common/dataTypes/xtabPromptOptions';
2
+ import { AggressivenessLevel, UserHappinessScoreConfiguration } from '../../../platform/inlineEdits/common/dataTypes/xtabPromptOptions';
3
+ import { ILogService } from '../../../platform/log/common/logService';
3
4
  import { IExperimentationService } from '../../../platform/telemetry/common/nullExperimentationService';
5
+ import { ITelemetryService } from '../../../platform/telemetry/common/telemetry';
4
6
  import { DelaySession } from './delay';
7
+ export declare enum ActionKind {
8
+ Accepted = "accepted",
9
+ Rejected = "rejected",
10
+ Ignored = "ignored"
11
+ }
12
+ /**
13
+ * Represents a user interaction wrt an inline edit suggestion.
14
+ */
15
+ export interface NESUserAction {
16
+ time: number;
17
+ kind: ActionKind;
18
+ }
19
+ export declare const MAX_INTERACTIONS_CONSIDERED = 10;
20
+ export declare const MAX_INTERACTIONS_STORED = 30;
21
+ /**
22
+ * Get window of actions with ignored action limiting via window expansion.
23
+ *
24
+ * When ignored limit is reached, skip excess ignored actions but expand window
25
+ * further back to still get MAX_INTERACTIONS_CONSIDERED items.
26
+ */
27
+ export declare function getWindowWithIgnoredLimit(actions: NESUserAction[], config: UserHappinessScoreConfiguration): NESUserAction[];
28
+ /**
29
+ * Calculate user happiness score from actions.
30
+ * Value between 0 and 1 indicating user happiness.
31
+ * 1 means very happy, 0 means very unhappy.
32
+ *
33
+ * Uses position-weighted scoring with ignored action limiting:
34
+ * - More recent actions have higher weight
35
+ * - Ignored actions can be limited (consecutive or total) to prevent score dilution
36
+ * - Score is adjusted towards neutral (0.5) based on data confidence
37
+ */
38
+ export declare function getUserHappinessScore(actions: NESUserAction[], config: UserHappinessScoreConfiguration): number;
5
39
  export declare class UserInteractionMonitor {
6
40
  private readonly _configurationService;
7
41
  private readonly _experimentationService;
8
- private static readonly MAX_INTERACTIONS_CONSIDERED;
9
- private _recentUserActions;
10
- constructor(_configurationService: IConfigurationService, _experimentationService: IExperimentationService);
42
+ private readonly _logService;
43
+ private readonly _telemetryService;
44
+ /**
45
+ * Used for aggressiveness level calculation.
46
+ * Includes all action types (accepted, rejected, ignored).
47
+ */
48
+ protected _recentUserActionsForAggressiveness: NESUserAction[];
49
+ /**
50
+ * Used for timing/debounce calculation.
51
+ * Only includes accepted and rejected actions (ignored actions don't affect timing).
52
+ */
53
+ protected _recentUserActionsForTiming: (NESUserAction & {
54
+ kind: ActionKind.Accepted | ActionKind.Rejected;
55
+ })[];
56
+ constructor(_configurationService: IConfigurationService, _experimentationService: IExperimentationService, _logService: ILogService, _telemetryService: ITelemetryService);
11
57
  handleAcceptance(): void;
12
58
  handleRejection(): void;
59
+ handleIgnored(): void;
13
60
  private _recordUserAction;
14
61
  createDelaySession(requestTime: number | undefined): DelaySession;
15
62
  private _getExpectedTotalTime;
@@ -21,10 +68,7 @@ export declare class UserInteractionMonitor {
21
68
  aggressivenessLevel: AggressivenessLevel;
22
69
  userHappinessScore: number | undefined;
23
70
  };
24
- /**
25
- * Value between 0 and 1 indicating user happiness.
26
- * 1 means very happy, 0 means very unhappy.
27
- */
71
+ protected _getUserHappinessScoreConfiguration(): UserHappinessScoreConfiguration;
28
72
  private _getUserHappinessScore;
29
73
  }
30
74
  //# sourceMappingURL=userInteractionMonitor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"userInteractionMonitor.d.ts","sourceRoot":"","sources":["../../../../../../src/_internal/extension/inlineEdits/common/userInteractionMonitor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAa,qBAAqB,EAAE,MAAM,6DAA6D,CAAC;AAC/G,OAAO,EAAE,mBAAmB,EAAE,MAAM,kEAAkE,CAAC;AACvG,OAAO,EAAE,uBAAuB,EAAE,MAAM,+DAA+D,CAAC;AACxG,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,qBAAa,sBAAsB;IAOV,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACpC,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IANlE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAM;IAEzD,OAAO,CAAC,kBAAkB,CAAyD;gBAG1C,qBAAqB,EAAE,qBAAqB,EAC1C,uBAAuB,EAAE,uBAAuB;IAKpF,gBAAgB,IAAI,IAAI;IAIxB,eAAe,IAAI,IAAI;IAI9B,OAAO,CAAC,iBAAiB;IAQlB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY;IASxE,OAAO,CAAC,qBAAqB;IAgC7B;;;OAGG;IACI,sBAAsB,IAAI;QAAE,mBAAmB,EAAE,mBAAmB,CAAC;QAAC,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE;IAmBrH;;;OAGG;IACH,OAAO,CAAC,sBAAsB;CA4B9B"}
1
+ {"version":3,"file":"userInteractionMonitor.d.ts","sourceRoot":"","sources":["../../../../../../src/_internal/extension/inlineEdits/common/userInteractionMonitor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAa,qBAAqB,EAAE,MAAM,6DAA6D,CAAC;AAC/G,OAAO,EAAE,mBAAmB,EAA0F,+BAA+B,EAAE,MAAM,kEAAkE,CAAC;AAChO,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+DAA+D,CAAC;AACxG,OAAO,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AAEjF,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,oBAAY,UAAU;IACrB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,OAAO,YAAY;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;CACjB;AAED,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAC9C,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,aAAa,EAAE,EACxB,MAAM,EAAE,+BAA+B,GACrC,aAAa,EAAE,CAyCjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACpC,OAAO,EAAE,aAAa,EAAE,EACxB,MAAM,EAAE,+BAA+B,GACrC,MAAM,CA0DR;AAED,qBAAa,sBAAsB;IAeV,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACpC,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAhBtD;;;OAGG;IACH,SAAS,CAAC,mCAAmC,EAAE,aAAa,EAAE,CAAM;IAEpE;;;OAGG;IACH,SAAS,CAAC,2BAA2B,EAAE,CAAC,aAAa,GAAG;QAAE,IAAI,EAAE,UAAU,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAA;KAAE,CAAC,EAAE,CAAM;gBAG3E,qBAAqB,EAAE,qBAAqB,EAC1C,uBAAuB,EAAE,uBAAuB,EAC5D,WAAW,EAAE,WAAW,EAClB,iBAAiB,EAAE,iBAAiB;IAKlE,gBAAgB,IAAI,IAAI;IAIxB,eAAe,IAAI,IAAI;IAIvB,aAAa,IAAI,IAAI;IAI5B,OAAO,CAAC,iBAAiB;IAgBlB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY;IASxE,OAAO,CAAC,qBAAqB;IAiC7B;;;OAGG;IACI,sBAAsB,IAAI;QAAE,mBAAmB,EAAE,mBAAmB,CAAC;QAAC,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE;IAoBrH,SAAS,CAAC,mCAAmC,IAAI,+BAA+B;IA2BhF,OAAO,CAAC,sBAAsB;CAG9B"}
@@ -3,41 +3,202 @@
3
3
  * Copyright (c) Microsoft Corporation. All rights reserved.
4
4
  * Licensed under the MIT License. See License.txt in the project root for license information.
5
5
  *--------------------------------------------------------------------------------------------*/
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
6
22
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
7
23
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
8
24
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
9
25
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
10
26
  return c > 3 && r && Object.defineProperty(target, key, r), r;
11
27
  };
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
12
45
  var __param = (this && this.__param) || function (paramIndex, decorator) {
13
46
  return function (target, key) { decorator(target, key, paramIndex); }
14
47
  };
15
- var UserInteractionMonitor_1;
16
48
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.UserInteractionMonitor = void 0;
49
+ exports.UserInteractionMonitor = exports.MAX_INTERACTIONS_STORED = exports.MAX_INTERACTIONS_CONSIDERED = exports.ActionKind = void 0;
50
+ exports.getWindowWithIgnoredLimit = getWindowWithIgnoredLimit;
51
+ exports.getUserHappinessScore = getUserHappinessScore;
18
52
  const configurationService_1 = require("../../../platform/configuration/common/configurationService");
19
53
  const xtabPromptOptions_1 = require("../../../platform/inlineEdits/common/dataTypes/xtabPromptOptions");
54
+ const logService_1 = require("../../../platform/log/common/logService");
20
55
  const nullExperimentationService_1 = require("../../../platform/telemetry/common/nullExperimentationService");
56
+ const telemetry_1 = require("../../../platform/telemetry/common/telemetry");
57
+ const errors = __importStar(require("../../../util/common/errors"));
21
58
  const delay_1 = require("./delay");
59
+ var ActionKind;
60
+ (function (ActionKind) {
61
+ ActionKind["Accepted"] = "accepted";
62
+ ActionKind["Rejected"] = "rejected";
63
+ ActionKind["Ignored"] = "ignored";
64
+ })(ActionKind || (exports.ActionKind = ActionKind = {}));
65
+ exports.MAX_INTERACTIONS_CONSIDERED = 10;
66
+ exports.MAX_INTERACTIONS_STORED = 30;
67
+ /**
68
+ * Get window of actions with ignored action limiting via window expansion.
69
+ *
70
+ * When ignored limit is reached, skip excess ignored actions but expand window
71
+ * further back to still get MAX_INTERACTIONS_CONSIDERED items.
72
+ */
73
+ function getWindowWithIgnoredLimit(actions, config) {
74
+ const { limitConsecutiveIgnored, limitTotalIgnored, ignoredLimit } = config;
75
+ if (!limitConsecutiveIgnored && !limitTotalIgnored) {
76
+ // No limiting - just take last MAX_INTERACTIONS_CONSIDERED
77
+ return actions.slice(-exports.MAX_INTERACTIONS_CONSIDERED);
78
+ }
79
+ const result = [];
80
+ let consecutiveIgnored = 0;
81
+ let totalIgnored = 0;
82
+ // Walk backwards through history
83
+ for (let i = actions.length - 1; i >= 0 && result.length < exports.MAX_INTERACTIONS_CONSIDERED; i--) {
84
+ const action = actions[i];
85
+ if (action.kind === ActionKind.Ignored) {
86
+ let skip = false;
87
+ if (limitConsecutiveIgnored && consecutiveIgnored >= ignoredLimit) {
88
+ skip = true;
89
+ }
90
+ if (limitTotalIgnored && totalIgnored >= ignoredLimit) {
91
+ skip = true;
92
+ }
93
+ if (skip) {
94
+ continue;
95
+ }
96
+ consecutiveIgnored++;
97
+ totalIgnored++;
98
+ }
99
+ else {
100
+ consecutiveIgnored = 0; // Reset consecutive count on accept/reject
101
+ }
102
+ result.push(action);
103
+ }
104
+ // Reverse to get chronological order
105
+ result.reverse();
106
+ return result;
107
+ }
108
+ /**
109
+ * Calculate user happiness score from actions.
110
+ * Value between 0 and 1 indicating user happiness.
111
+ * 1 means very happy, 0 means very unhappy.
112
+ *
113
+ * Uses position-weighted scoring with ignored action limiting:
114
+ * - More recent actions have higher weight
115
+ * - Ignored actions can be limited (consecutive or total) to prevent score dilution
116
+ * - Score is adjusted towards neutral (0.5) based on data confidence
117
+ */
118
+ function getUserHappinessScore(actions, config) {
119
+ if (actions.length === 0) {
120
+ return 0.5; // neutral score when no data
121
+ }
122
+ // Get window of actions with ignored limiting
123
+ const window = getWindowWithIgnoredLimit(actions, config);
124
+ if (window.length === 0) {
125
+ return 0.5; // neutral score when no data after filtering
126
+ }
127
+ // Calculate weighted score
128
+ let weightedScore = 0; // Sum of weighted normalized scores
129
+ let totalWeight = 0; // Sum of weights applied
130
+ let scoredActionCount = 0; // Count of actions that contributed to score
131
+ for (let i = 0; i < window.length; i++) {
132
+ const action = window[i];
133
+ // Skip ignored actions if not included in score calculation
134
+ if (action.kind === ActionKind.Ignored && !config.includeIgnored) {
135
+ continue;
136
+ }
137
+ scoredActionCount++;
138
+ // Calculate weight based on position (more recent = higher weight)
139
+ // Position 0 (oldest) has lowest weight, last position has highest weight
140
+ const weight = i + 1;
141
+ // Get score based on action kind from configuration
142
+ let score;
143
+ switch (action.kind) {
144
+ case ActionKind.Accepted:
145
+ score = config.acceptedScore;
146
+ break;
147
+ case ActionKind.Rejected:
148
+ score = config.rejectedScore;
149
+ break;
150
+ case ActionKind.Ignored:
151
+ score = config.ignoredScore;
152
+ break;
153
+ }
154
+ // Normalize score to 0-1 range based on accept/reject weights
155
+ const normalized = (score - config.rejectedScore) / (config.acceptedScore - config.rejectedScore);
156
+ weightedScore += normalized * weight;
157
+ totalWeight += weight;
158
+ }
159
+ const rawScore = totalWeight > 0 ? weightedScore / totalWeight : 0.5;
160
+ // Adjust score towards neutral (0.5) when we have fewer data points
161
+ // This prevents extreme scores with limited data
162
+ const dataConfidence = scoredActionCount / exports.MAX_INTERACTIONS_CONSIDERED;
163
+ return 0.5 + (rawScore - 0.5) * dataConfidence;
164
+ }
22
165
  let UserInteractionMonitor = class UserInteractionMonitor {
23
- static { UserInteractionMonitor_1 = this; }
24
- static { this.MAX_INTERACTIONS_CONSIDERED = 10; }
25
- constructor(_configurationService, _experimentationService) {
166
+ constructor(_configurationService, _experimentationService, _logService, _telemetryService) {
26
167
  this._configurationService = _configurationService;
27
168
  this._experimentationService = _experimentationService;
28
- this._recentUserActions = [];
169
+ this._logService = _logService;
170
+ this._telemetryService = _telemetryService;
171
+ /**
172
+ * Used for aggressiveness level calculation.
173
+ * Includes all action types (accepted, rejected, ignored).
174
+ */
175
+ this._recentUserActionsForAggressiveness = [];
176
+ /**
177
+ * Used for timing/debounce calculation.
178
+ * Only includes accepted and rejected actions (ignored actions don't affect timing).
179
+ */
180
+ this._recentUserActionsForTiming = [];
29
181
  }
30
182
  // Capture user interactions
31
183
  handleAcceptance() {
32
- this._recordUserAction('accepted');
184
+ this._recordUserAction(ActionKind.Accepted);
33
185
  }
34
186
  handleRejection() {
35
- this._recordUserAction('rejected');
187
+ this._recordUserAction(ActionKind.Rejected);
188
+ }
189
+ handleIgnored() {
190
+ this._recordUserAction(ActionKind.Ignored);
36
191
  }
37
192
  _recordUserAction(kind) {
38
- this._recentUserActions.push({ time: Date.now(), kind });
39
- // keep at most 10 user actions
40
- this._recentUserActions = this._recentUserActions.slice(-UserInteractionMonitor_1.MAX_INTERACTIONS_CONSIDERED);
193
+ const now = Date.now();
194
+ // Always record for aggressiveness calculation
195
+ this._recentUserActionsForAggressiveness.push({ time: now, kind });
196
+ this._recentUserActionsForAggressiveness = this._recentUserActionsForAggressiveness.slice(-exports.MAX_INTERACTIONS_STORED);
197
+ // Only record accepts/rejects for timing calculation
198
+ if (kind !== ActionKind.Ignored) {
199
+ this._recentUserActionsForTiming.push({ time: now, kind });
200
+ this._recentUserActionsForTiming = this._recentUserActionsForTiming.slice(-exports.MAX_INTERACTIONS_CONSIDERED);
201
+ }
41
202
  }
42
203
  // Creates a DelaySession based on recent user interactions
43
204
  createDelaySession(requestTime) {
@@ -55,14 +216,15 @@ let UserInteractionMonitor = class UserInteractionMonitor {
55
216
  const now = Date.now();
56
217
  let multiplier = 1;
57
218
  // Calculate impact of each action with time decay
58
- for (const action of this._recentUserActions) {
219
+ // Uses timing-specific array which only contains accepts/rejects
220
+ for (const action of this._recentUserActionsForTiming) {
59
221
  const timeSinceAction = now - action.time;
60
222
  if (timeSinceAction > DEBOUNCE_DECAY_TIME_MS) {
61
223
  continue;
62
224
  }
63
225
  // Exponential decay: impact decreases as time passes
64
226
  const decayFactor = Math.exp(-timeSinceAction / DEBOUNCE_DECAY_TIME_MS);
65
- const actionWeight = action.kind === 'rejected' ? REJECTION_WEIGHT : ACCEPTANCE_WEIGHT;
227
+ const actionWeight = action.kind === ActionKind.Rejected ? REJECTION_WEIGHT : ACCEPTANCE_WEIGHT;
66
228
  multiplier *= 1 + ((actionWeight - 1) * decayFactor);
67
229
  }
68
230
  let debounceTime = baseDebounceTime * multiplier;
@@ -81,11 +243,12 @@ let UserInteractionMonitor = class UserInteractionMonitor {
81
243
  return { aggressivenessLevel: configuredAggressivenessLevel, userHappinessScore: undefined };
82
244
  }
83
245
  let level;
84
- const userHappinessScore = this._getUserHappinessScore();
85
- if (userHappinessScore >= 0.7) {
246
+ const config = this._getUserHappinessScoreConfiguration();
247
+ const userHappinessScore = this._getUserHappinessScore(config);
248
+ if (userHappinessScore >= config.highThreshold) {
86
249
  level = xtabPromptOptions_1.AggressivenessLevel.High;
87
250
  }
88
- else if (userHappinessScore >= 0.4) {
251
+ else if (userHappinessScore >= config.mediumThreshold) {
89
252
  level = xtabPromptOptions_1.AggressivenessLevel.Medium;
90
253
  }
91
254
  else {
@@ -93,36 +256,40 @@ let UserInteractionMonitor = class UserInteractionMonitor {
93
256
  }
94
257
  return { aggressivenessLevel: level, userHappinessScore };
95
258
  }
96
- /**
97
- * Value between 0 and 1 indicating user happiness.
98
- * 1 means very happy, 0 means very unhappy.
99
- */
100
- _getUserHappinessScore() {
101
- if (this._recentUserActions.length === 0) {
102
- return 0.5; // neutral score when no data
259
+ _getUserHappinessScoreConfiguration() {
260
+ const configKey = configurationService_1.ConfigKey.TeamInternal.InlineEditsUserHappinessScoreConfigurationString;
261
+ const configString = this._configurationService.getExperimentBasedConfig(configKey, this._experimentationService);
262
+ if (configString === undefined) {
263
+ return xtabPromptOptions_1.DEFAULT_USER_HAPPINESS_SCORE_CONFIGURATION;
103
264
  }
104
- let weightedScore = 0;
105
- let totalWeight = 0;
106
- for (let i = 0; i < this._recentUserActions.length; i++) {
107
- const action = this._recentUserActions[i];
108
- // Calculate weight based on position (more recent = higher weight)
109
- // Position 0 (oldest) has lowest weight, last position has highest weight
110
- const weight = i + 1;
111
- // Accepted = 1, Rejected = 0
112
- const score = action.kind === 'accepted' ? 1 : 0;
113
- weightedScore += score * weight;
114
- totalWeight += weight;
265
+ try {
266
+ return (0, xtabPromptOptions_1.parseUserHappinessScoreConfigurationString)(configString);
115
267
  }
116
- const rawScore = totalWeight > 0 ? weightedScore / totalWeight : 0.5;
117
- // Adjust score towards neutral (0.5) when we have fewer data points
118
- // This prevents extreme scores with limited data
119
- const dataConfidence = this._recentUserActions.length / UserInteractionMonitor_1.MAX_INTERACTIONS_CONSIDERED;
120
- return 0.5 + (rawScore - 0.5) * dataConfidence;
268
+ catch (e) {
269
+ this._logService.error(e, 'Failed to parse user happiness score configuration, using default config');
270
+ // Log to telemetry when we fail to parse an experimental config, but still offer the default config to avoid disruption.
271
+ /* __GDPR__
272
+ "incorrectNesAdaptiveAggressivenessConfig" : {
273
+ "owner": "bstee615",
274
+ "comment": "Capture if model configuration string is invalid JSON.",
275
+ "configName": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Name of the configuration that failed to parse." },
276
+ "errorMessage": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "Error message from JSON.parse." },
277
+ "configValue": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "The invalid JSON string." }
278
+ }
279
+ */
280
+ this._telemetryService.sendMSFTTelemetryEvent('incorrectNesAdaptiveAggressivenessConfig', { configName: configKey.id, errorMessage: errors.toString(errors.fromUnknown(e)), configValue: configString });
281
+ return xtabPromptOptions_1.DEFAULT_USER_HAPPINESS_SCORE_CONFIGURATION;
282
+ }
283
+ }
284
+ _getUserHappinessScore(config) {
285
+ return getUserHappinessScore(this._recentUserActionsForAggressiveness, config);
121
286
  }
122
287
  };
123
288
  exports.UserInteractionMonitor = UserInteractionMonitor;
124
- exports.UserInteractionMonitor = UserInteractionMonitor = UserInteractionMonitor_1 = __decorate([
289
+ exports.UserInteractionMonitor = UserInteractionMonitor = __decorate([
125
290
  __param(0, configurationService_1.IConfigurationService),
126
- __param(1, nullExperimentationService_1.IExperimentationService)
291
+ __param(1, nullExperimentationService_1.IExperimentationService),
292
+ __param(2, logService_1.ILogService),
293
+ __param(3, telemetry_1.ITelemetryService)
127
294
  ], UserInteractionMonitor);
128
295
  //# sourceMappingURL=userInteractionMonitor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"userInteractionMonitor.js","sourceRoot":"","sources":["../../../../../../src/_internal/extension/inlineEdits/common/userInteractionMonitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"userInteractionMonitor.js","sourceRoot":"","sources":["../../../../../../src/_internal/extension/inlineEdits/common/userInteractionMonitor.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiChG,8DA4CC;AAYD,sDA6DC;AApJD,sGAA+G;AAC/G,wGAAgO;AAChO,wEAAsE;AACtE,8GAAwG;AACxG,4EAAiF;AACjF,oEAAsD;AACtD,mCAAuC;AAEvC,IAAY,UAIX;AAJD,WAAY,UAAU;IACrB,mCAAqB,CAAA;IACrB,mCAAqB,CAAA;IACrB,iCAAmB,CAAA;AACpB,CAAC,EAJW,UAAU,0BAAV,UAAU,QAIrB;AAUY,QAAA,2BAA2B,GAAG,EAAE,CAAC;AACjC,QAAA,uBAAuB,GAAG,EAAE,CAAC;AAE1C;;;;;GAKG;AACH,SAAgB,yBAAyB,CACxC,OAAwB,EACxB,MAAuC;IAEvC,MAAM,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;IAE5E,IAAI,CAAC,uBAAuB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACpD,2DAA2D;QAC3D,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,mCAA2B,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,iCAAiC;IACjC,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,mCAA2B,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7F,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAE1B,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC;YACxC,IAAI,IAAI,GAAG,KAAK,CAAC;YACjB,IAAI,uBAAuB,IAAI,kBAAkB,IAAI,YAAY,EAAE,CAAC;gBACnE,IAAI,GAAG,IAAI,CAAC;YACb,CAAC;YACD,IAAI,iBAAiB,IAAI,YAAY,IAAI,YAAY,EAAE,CAAC;gBACvD,IAAI,GAAG,IAAI,CAAC;YACb,CAAC;YAED,IAAI,IAAI,EAAE,CAAC;gBACV,SAAS;YACV,CAAC;YAED,kBAAkB,EAAE,CAAC;YACrB,YAAY,EAAE,CAAC;QAChB,CAAC;aAAM,CAAC;YACP,kBAAkB,GAAG,CAAC,CAAC,CAAC,2CAA2C;QACpE,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IAED,qCAAqC;IACrC,MAAM,CAAC,OAAO,EAAE,CAAC;IACjB,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,qBAAqB,CACpC,OAAwB,EACxB,MAAuC;IAEvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC,CAAC,6BAA6B;IAC1C,CAAC;IAED,8CAA8C;IAC9C,MAAM,MAAM,GAAG,yBAAyB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAE1D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC,CAAC,6CAA6C;IAC1D,CAAC;IAED,2BAA2B;IAC3B,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC,oCAAoC;IAC3D,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC,yBAAyB;IAC9C,IAAI,iBAAiB,GAAG,CAAC,CAAC,CAAC,6CAA6C;IAExE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAEzB,4DAA4D;QAC5D,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAClE,SAAS;QACV,CAAC;QAED,iBAAiB,EAAE,CAAC;QAEpB,mEAAmE;QACnE,0EAA0E;QAC1E,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;QAErB,oDAAoD;QACpD,IAAI,KAAa,CAAC;QAClB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,UAAU,CAAC,QAAQ;gBACvB,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC;gBAC7B,MAAM;YACP,KAAK,UAAU,CAAC,QAAQ;gBACvB,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC;gBAC7B,MAAM;YACP,KAAK,UAAU,CAAC,OAAO;gBACtB,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;gBAC5B,MAAM;QACR,CAAC;QAED,8DAA8D;QAC9D,MAAM,UAAU,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;QAElG,aAAa,IAAI,UAAU,GAAG,MAAM,CAAC;QACrC,WAAW,IAAI,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;IAErE,oEAAoE;IACpE,iDAAiD;IACjD,MAAM,cAAc,GAAG,iBAAiB,GAAG,mCAA2B,CAAC;IACvE,OAAO,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,cAAc,CAAC;AAChD,CAAC;AAEM,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAclC,YACwB,qBAA6D,EAC3D,uBAAiE,EAC7E,WAAyC,EACnC,iBAAqD;QAHhC,0BAAqB,GAArB,qBAAqB,CAAuB;QAC1C,4BAAuB,GAAvB,uBAAuB,CAAyB;QAC5D,gBAAW,GAAX,WAAW,CAAa;QAClB,sBAAiB,GAAjB,iBAAiB,CAAmB;QAhBzE;;;WAGG;QACO,wCAAmC,GAAoB,EAAE,CAAC;QAEpE;;;WAGG;QACO,gCAA2B,GAA4E,EAAE,CAAC;IAOhH,CAAC;IAEL,4BAA4B;IAErB,gBAAgB;QACtB,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAEM,eAAe;QACrB,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAEM,aAAa;QACnB,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAEO,iBAAiB,CAAC,IAAgB;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,+CAA+C;QAC/C,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,mCAAmC,GAAG,IAAI,CAAC,mCAAmC,CAAC,KAAK,CAAC,CAAC,+BAAuB,CAAC,CAAC;QAEpH,qDAAqD;QACrD,IAAI,IAAI,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC,mCAA2B,CAAC,CAAC;QACzG,CAAC;IACF,CAAC;IAED,2DAA2D;IAEpD,kBAAkB,CAAC,WAA+B;QACxD,MAAM,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC,wBAAwB,CAAC,gCAAS,CAAC,YAAY,CAAC,mBAAmB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAEvJ,MAAM,sBAAsB,GAAG,IAAI,CAAC,qBAAqB,CAAC,wBAAwB,CAAC,gCAAS,CAAC,YAAY,CAAC,iCAAiC,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC3K,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE5G,OAAO,IAAI,oBAAY,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;IAC3E,CAAC;IAEO,qBAAqB,CAAC,gBAAwB;QACrD,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;QAC5D,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,YAAY;QAC5C,MAAM,iBAAiB,GAAG,EAAE,CAAC,CAAC,QAAQ;QACtC,MAAM,gBAAgB,GAAG,GAAG,CAAC;QAC7B,MAAM,iBAAiB,GAAG,GAAG,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,kDAAkD;QAClD,iEAAiE;QACjE,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,2BAA2B,EAAE,CAAC;YACvD,MAAM,eAAe,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC;YAC1C,IAAI,eAAe,GAAG,sBAAsB,EAAE,CAAC;gBAC9C,SAAS;YACV,CAAC;YAED,qDAAqD;YACrD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,eAAe,GAAG,sBAAsB,CAAC,CAAC;YACxE,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAC;YAChG,UAAU,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,YAAY,GAAG,gBAAgB,GAAG,UAAU,CAAC;QAEjD,+CAA+C;QAC/C,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC,CAAC;QAEtF,OAAO,YAAY,CAAC;IACrB,CAAC;IAED,4DAA4D;IAE5D;;;OAGG;IACI,sBAAsB;QAC5B,MAAM,6BAA6B,GAAG,IAAI,CAAC,qBAAqB,CAAC,wBAAwB,CAAC,gCAAS,CAAC,YAAY,CAAC,kCAAkC,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAEnL,IAAI,6BAA6B,KAAK,SAAS,EAAE,CAAC;YACjD,OAAO,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC;QAC9F,CAAC;QAED,IAAI,KAA0B,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,mCAAmC,EAAE,CAAC;QAC1D,MAAM,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,kBAAkB,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YAChD,KAAK,GAAG,uCAAmB,CAAC,IAAI,CAAC;QAClC,CAAC;aAAM,IAAI,kBAAkB,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YACzD,KAAK,GAAG,uCAAmB,CAAC,MAAM,CAAC;QACpC,CAAC;aAAM,CAAC;YACP,KAAK,GAAG,uCAAmB,CAAC,GAAG,CAAC;QACjC,CAAC;QACD,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC3D,CAAC;IAES,mCAAmC;QAC5C,MAAM,SAAS,GAAG,gCAAS,CAAC,YAAY,CAAC,gDAAgD,CAAC;QAC1F,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,wBAAwB,CAAC,SAAS,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAClH,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,8DAA0C,CAAC;QACnD,CAAC;QAED,IAAI,CAAC;YACJ,OAAO,IAAA,8DAA0C,EAAC,YAAY,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACV,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,0EAA0E,CAAC,CAAC;YACtG,yHAAyH;YACzH;;;;;;;;cAQE;YACF,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,0CAA0C,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;YACzM,OAAO,8DAA0C,CAAC;QACnD,CAAC;IACF,CAAC;IAEO,sBAAsB,CAAC,MAAuC;QACrE,OAAO,qBAAqB,CAAC,IAAI,CAAC,mCAAmC,EAAE,MAAM,CAAC,CAAC;IAChF,CAAC;CACD,CAAA;AAnJY,wDAAsB;iCAAtB,sBAAsB;IAehC,WAAA,4CAAqB,CAAA;IACrB,WAAA,oDAAuB,CAAA;IACvB,WAAA,wBAAW,CAAA;IACX,WAAA,6BAAiB,CAAA;GAlBP,sBAAsB,CAmJlC"}
@@ -26,7 +26,7 @@ export interface INextEditProvider<T extends INextEditResult, TTelemetry, TData
26
26
  handleShown(suggestion: T): void;
27
27
  handleAcceptance(docId: DocumentId, suggestion: T): void;
28
28
  handleRejection(docId: DocumentId, suggestion: T): void;
29
- handleIgnored(docId: DocumentId, suggestion: T, supersededByRequestUuid: INextEditResult | undefined): void;
29
+ handleIgnored(docId: DocumentId, suggestion: T, supersededBy: INextEditResult | undefined): void;
30
30
  lastRejectionTime: number;
31
31
  lastTriggerTime: number;
32
32
  }
@@ -52,6 +52,8 @@ export declare class NextEditProvider extends Disposable implements INextEditPro
52
52
  */
53
53
  private _speculativePendingRequest;
54
54
  private _lastShownTime;
55
+ /** The requestId of the last shown suggestion. We store only the requestId (not the object) to avoid preventing garbage collection. */
56
+ private _lastShownSuggestionId;
55
57
  private _lastRejectionTime;
56
58
  get lastRejectionTime(): number;
57
59
  private _lastTriggerTime;
@@ -1 +1 @@
1
- {"version":3,"file":"nextEditProvider.d.ts","sourceRoot":"","sources":["../../../../../../src/_internal/extension/inlineEdits/node/nextEditProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nextEditProvider.d.ts","sourceRoot":"","sources":["../../../../../../src/_internal/extension/inlineEdits/node/nextEditProvider.ts"],"names":[],"mappings":"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"}
@@ -134,6 +134,8 @@ let NextEditProvider = class NextEditProvider extends lifecycle_1.Disposable {
134
134
  */
135
135
  this._speculativePendingRequest = null;
136
136
  this._lastShownTime = 0;
137
+ /** The requestId of the last shown suggestion. We store only the requestId (not the object) to avoid preventing garbage collection. */
138
+ this._lastShownSuggestionId = undefined;
137
139
  this._lastRejectionTime = 0;
138
140
  this._lastTriggerTime = 0;
139
141
  this._shouldExpandEditWindow = false;
@@ -360,7 +362,7 @@ let NextEditProvider = class NextEditProvider extends lifecycle_1.Disposable {
360
362
  if (requestToReuse) {
361
363
  // Nice! No need to make another request, we can reuse the result from a pending request.
362
364
  if (speculativeRequest) {
363
- logger.trace('reusing speculative pending request');
365
+ logger.trace(`reusing speculative pending request (opportunityId=${speculativeRequest.opportunityId}, headerRequestId=${speculativeRequest.id})`);
364
366
  // Clear the speculative request since we're using it
365
367
  this._speculativePendingRequest = null;
366
368
  }
@@ -659,6 +661,7 @@ let NextEditProvider = class NextEditProvider extends lifecycle_1.Disposable {
659
661
  }
660
662
  handleShown(suggestion) {
661
663
  this._lastShownTime = Date.now();
664
+ this._lastShownSuggestionId = suggestion.requestId;
662
665
  // Trigger speculative request for the post-edit document state
663
666
  const speculativeRequestsEnabled = this._configService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.InlineEditsSpeculativeRequests, this._expService);
664
667
  if (speculativeRequestsEnabled) {
@@ -721,7 +724,6 @@ let NextEditProvider = class NextEditProvider extends lifecycle_1.Disposable {
721
724
  logger.trace('document not found for speculative request');
722
725
  return;
723
726
  }
724
- logger.trace('triggering speculative request for post-edit state');
725
727
  // Cancel any previous speculative request
726
728
  this._speculativePendingRequest?.request.cancellationTokenSource.cancel();
727
729
  this._speculativePendingRequest = null;
@@ -734,6 +736,7 @@ let NextEditProvider = class NextEditProvider extends lifecycle_1.Disposable {
734
736
  // Use a dummy version since this is speculative and we don't have the actual post-edit version
735
737
  const logContext = new inlineEditLogContext_1.InlineEditRequestLogContext(docId.uri, 0, undefined);
736
738
  const req = new NextEditFetchRequest(`sp-${suggestion.source.opportunityId}`, logContext, undefined);
739
+ logger.trace(`triggering speculative request for post-edit state (opportunityId=${req.opportunityId}, headerRequestId=${req.headerRequestId})`);
737
740
  try {
738
741
  const speculativeRequest = await this._createSpeculativeRequest(req, doc, historyContext, postEditContent, rootedEdit, result.edit, logger);
739
742
  if (speculativeRequest) {
@@ -897,7 +900,15 @@ let NextEditProvider = class NextEditProvider extends lifecycle_1.Disposable {
897
900
  this._lastRejectionTime = Date.now();
898
901
  this._statelessNextEditProvider.handleRejection?.();
899
902
  }
900
- handleIgnored(docId, suggestion, supersededBy) { }
903
+ handleIgnored(docId, suggestion, supersededBy) {
904
+ // Check if this was the last shown suggestion
905
+ const wasShown = this._lastShownSuggestionId === suggestion.requestId;
906
+ const wasSuperseded = supersededBy !== undefined;
907
+ if (wasShown && !wasSuperseded) {
908
+ // Was shown to the user
909
+ this._statelessNextEditProvider.handleIgnored?.();
910
+ }
911
+ }
901
912
  async runSnippy(docId, suggestion) {
902
913
  if (suggestion.result === undefined || suggestion.result.edit === undefined) {
903
914
  return;