@microsoft/agents-hosting 0.2.9-g361635b71c → 0.2.14

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 (70) hide show
  1. package/dist/src/activityHandler.d.ts +304 -46
  2. package/dist/src/activityHandler.js +298 -45
  3. package/dist/src/activityHandler.js.map +1 -1
  4. package/dist/src/agent-client/agentClient.d.ts +50 -0
  5. package/dist/src/agent-client/agentClient.js +28 -0
  6. package/dist/src/agent-client/agentClient.js.map +1 -1
  7. package/dist/src/app/agentApplication.d.ts +256 -3
  8. package/dist/src/app/agentApplication.js +256 -0
  9. package/dist/src/app/agentApplication.js.map +1 -1
  10. package/dist/src/app/agentApplicationBuilder.d.ts +32 -0
  11. package/dist/src/app/agentApplicationBuilder.js +32 -0
  12. package/dist/src/app/agentApplicationBuilder.js.map +1 -1
  13. package/dist/src/app/appMemory.d.ts +34 -0
  14. package/dist/src/app/{memory.js → appMemory.js} +1 -1
  15. package/dist/src/app/appMemory.js.map +1 -0
  16. package/dist/src/app/index.d.ts +3 -0
  17. package/dist/src/app/index.js +3 -0
  18. package/dist/src/app/index.js.map +1 -1
  19. package/dist/src/app/turnEvents.d.ts +6 -0
  20. package/dist/src/app/turnState.d.ts +2 -2
  21. package/dist/src/app/turnStateEntry.d.ts +32 -0
  22. package/dist/src/app/turnStateEntry.js +32 -0
  23. package/dist/src/app/turnStateEntry.js.map +1 -1
  24. package/dist/src/cards/index.d.ts +1 -0
  25. package/dist/src/cards/index.js +1 -0
  26. package/dist/src/cards/index.js.map +1 -1
  27. package/dist/src/cloudAdapter.d.ts +25 -3
  28. package/dist/src/cloudAdapter.js +25 -3
  29. package/dist/src/cloudAdapter.js.map +1 -1
  30. package/dist/src/getProductInfo.d.ts +6 -0
  31. package/dist/src/getProductInfo.js +6 -0
  32. package/dist/src/getProductInfo.js.map +1 -1
  33. package/dist/src/logger.d.ts +34 -2
  34. package/dist/src/logger.js +35 -0
  35. package/dist/src/logger.js.map +1 -1
  36. package/dist/src/state/agentState.d.ts +79 -27
  37. package/dist/src/state/agentState.js +58 -27
  38. package/dist/src/state/agentState.js.map +1 -1
  39. package/dist/src/state/agentStatePropertyAccesor.d.ts +67 -11
  40. package/dist/src/state/agentStatePropertyAccesor.js +58 -11
  41. package/dist/src/state/agentStatePropertyAccesor.js.map +1 -1
  42. package/dist/src/storage/memoryStorage.d.ts +48 -14
  43. package/dist/src/storage/memoryStorage.js +48 -14
  44. package/dist/src/storage/memoryStorage.js.map +1 -1
  45. package/dist/src/storage/storage.d.ts +43 -13
  46. package/dist/src/turnContext.d.ts +142 -56
  47. package/dist/src/turnContext.js +123 -53
  48. package/dist/src/turnContext.js.map +1 -1
  49. package/package.json +5 -5
  50. package/src/activityHandler.ts +304 -46
  51. package/src/agent-client/agentClient.ts +55 -5
  52. package/src/app/agentApplication.ts +259 -2
  53. package/src/app/agentApplicationBuilder.ts +32 -0
  54. package/src/app/appMemory.ts +38 -0
  55. package/src/app/index.ts +3 -0
  56. package/src/app/turnEvents.ts +6 -0
  57. package/src/app/turnState.ts +2 -2
  58. package/src/app/turnStateEntry.ts +32 -0
  59. package/src/cards/index.ts +1 -0
  60. package/src/cloudAdapter.ts +28 -3
  61. package/src/getProductInfo.ts +7 -0
  62. package/src/logger.ts +34 -1
  63. package/src/state/agentState.ts +81 -29
  64. package/src/state/agentStatePropertyAccesor.ts +67 -11
  65. package/src/storage/memoryStorage.ts +48 -14
  66. package/src/storage/storage.ts +51 -18
  67. package/src/turnContext.ts +142 -56
  68. package/dist/src/app/memory.d.ts +0 -10
  69. package/dist/src/app/memory.js.map +0 -1
  70. package/src/app/memory.ts +0 -14
@@ -4,47 +4,81 @@
4
4
  */
5
5
  import { Storage, StoreItem } from './storage';
6
6
  /**
7
- * A simple in-memory storage provider.
7
+ * A simple in-memory storage provider that implements the Storage interface.
8
+ *
9
+ * This class provides a volatile storage solution that keeps data in memory,
10
+ * which means data is lost when the process terminates. It's primarily useful for:
11
+ * - Development and testing scenarios
12
+ * - Simple applications that don't require data persistence across restarts
13
+ * - Stateless environments where external storage isn't available
14
+ *
15
+ * MemoryStorage supports optimistic concurrency control through eTags and
16
+ * can be used as a singleton through the getSingleInstance() method to
17
+ * share state across different parts of an application.
8
18
  */
9
19
  export declare class MemoryStorage implements Storage {
10
20
  private memory;
11
21
  private static instance;
22
+ /**
23
+ * Counter used to generate unique eTags for stored items
24
+ */
12
25
  private etag;
13
26
  /**
14
27
  * Creates a new instance of the MemoryStorage class.
15
- * @param memory An optional initial memory store.
28
+ *
29
+ * @param memory An optional initial memory store to seed the storage with data
16
30
  */
17
31
  constructor(memory?: {
18
32
  [k: string]: string;
19
33
  });
20
34
  /**
21
- * Gets a single instance of the MemoryStorage class.
35
+ * Gets a single shared instance of the MemoryStorage class.
36
+ *
37
+ * Using this method ensures that the same storage instance is used across
38
+ * the application, allowing for shared state without passing references.
39
+ *
40
+ * @returns The singleton instance of MemoryStorage
22
41
  */
23
42
  static getSingleInstance(): MemoryStorage;
24
43
  /**
25
44
  * Reads storage items from memory.
26
- * @param keys The keys of the items to read.
27
- * @returns A promise that resolves to the read items.
28
- * @throws Will throw an error if keys are not provided.
45
+ *
46
+ * @param keys The keys of the items to read
47
+ * @returns A promise that resolves to the read items
48
+ * @throws Will throw an error if keys are not provided or the array is empty
29
49
  */
30
50
  read(keys: string[]): Promise<StoreItem>;
31
51
  /**
32
52
  * Writes storage items to memory.
33
- * @param changes The items to write.
34
- * @returns A promise that resolves when the write operation is complete.
35
- * @throws Will throw an error if changes are not provided.
53
+ *
54
+ * This method supports optimistic concurrency control through eTags.
55
+ * If an item has an eTag, it will only be updated if the existing item
56
+ * has the same eTag. If an item has an eTag of '*' or no eTag, it will
57
+ * always be written regardless of the current state.
58
+ *
59
+ * @param changes The items to write, indexed by key
60
+ * @returns A promise that resolves when the write operation is complete
61
+ * @throws Will throw an error if changes are not provided or if there's an eTag conflict
36
62
  */
37
63
  write(changes: StoreItem): Promise<void>;
38
64
  /**
39
65
  * Deletes storage items from memory.
40
- * @param keys The keys of the items to delete.
41
- * @returns A promise that resolves when the delete operation is complete.
66
+ *
67
+ * @param keys The keys of the items to delete
68
+ * @returns A promise that resolves when the delete operation is complete
42
69
  */
43
70
  delete(keys: string[]): Promise<void>;
44
71
  /**
45
- * Saves an item to memory.
46
- * @param key The key of the item to save.
47
- * @param item The item to save.
72
+ * Saves an item to memory with a new eTag.
73
+ *
74
+ * This private method handles the details of:
75
+ * - Creating a clone of the item to prevent modification of the original
76
+ * - Generating a new eTag for optimistic concurrency control
77
+ * - Converting the item to a JSON string for storage
78
+ *
79
+ * @param key The key of the item to save
80
+ * @param item The item to save
81
+ * @private
48
82
  */
49
83
  private saveItem;
50
84
  }
@@ -8,19 +8,38 @@ exports.MemoryStorage = void 0;
8
8
  const logger_1 = require("../logger");
9
9
  const logger = (0, logger_1.debug)('agents:memory-storage');
10
10
  /**
11
- * A simple in-memory storage provider.
11
+ * A simple in-memory storage provider that implements the Storage interface.
12
+ *
13
+ * This class provides a volatile storage solution that keeps data in memory,
14
+ * which means data is lost when the process terminates. It's primarily useful for:
15
+ * - Development and testing scenarios
16
+ * - Simple applications that don't require data persistence across restarts
17
+ * - Stateless environments where external storage isn't available
18
+ *
19
+ * MemoryStorage supports optimistic concurrency control through eTags and
20
+ * can be used as a singleton through the getSingleInstance() method to
21
+ * share state across different parts of an application.
12
22
  */
13
23
  class MemoryStorage {
14
24
  /**
15
25
  * Creates a new instance of the MemoryStorage class.
16
- * @param memory An optional initial memory store.
26
+ *
27
+ * @param memory An optional initial memory store to seed the storage with data
17
28
  */
18
29
  constructor(memory = {}) {
19
30
  this.memory = memory;
31
+ /**
32
+ * Counter used to generate unique eTags for stored items
33
+ */
20
34
  this.etag = 1;
21
35
  }
22
36
  /**
23
- * Gets a single instance of the MemoryStorage class.
37
+ * Gets a single shared instance of the MemoryStorage class.
38
+ *
39
+ * Using this method ensures that the same storage instance is used across
40
+ * the application, allowing for shared state without passing references.
41
+ *
42
+ * @returns The singleton instance of MemoryStorage
24
43
  */
25
44
  static getSingleInstance() {
26
45
  if (!MemoryStorage.instance) {
@@ -30,9 +49,10 @@ class MemoryStorage {
30
49
  }
31
50
  /**
32
51
  * Reads storage items from memory.
33
- * @param keys The keys of the items to read.
34
- * @returns A promise that resolves to the read items.
35
- * @throws Will throw an error if keys are not provided.
52
+ *
53
+ * @param keys The keys of the items to read
54
+ * @returns A promise that resolves to the read items
55
+ * @throws Will throw an error if keys are not provided or the array is empty
36
56
  */
37
57
  async read(keys) {
38
58
  if (!keys || keys.length === 0) {
@@ -50,9 +70,15 @@ class MemoryStorage {
50
70
  }
51
71
  /**
52
72
  * Writes storage items to memory.
53
- * @param changes The items to write.
54
- * @returns A promise that resolves when the write operation is complete.
55
- * @throws Will throw an error if changes are not provided.
73
+ *
74
+ * This method supports optimistic concurrency control through eTags.
75
+ * If an item has an eTag, it will only be updated if the existing item
76
+ * has the same eTag. If an item has an eTag of '*' or no eTag, it will
77
+ * always be written regardless of the current state.
78
+ *
79
+ * @param changes The items to write, indexed by key
80
+ * @returns A promise that resolves when the write operation is complete
81
+ * @throws Will throw an error if changes are not provided or if there's an eTag conflict
56
82
  */
57
83
  async write(changes) {
58
84
  if (!changes || changes.length === 0) {
@@ -77,8 +103,9 @@ class MemoryStorage {
77
103
  }
78
104
  /**
79
105
  * Deletes storage items from memory.
80
- * @param keys The keys of the items to delete.
81
- * @returns A promise that resolves when the delete operation is complete.
106
+ *
107
+ * @param keys The keys of the items to delete
108
+ * @returns A promise that resolves when the delete operation is complete
82
109
  */
83
110
  async delete(keys) {
84
111
  logger.info(`Deleting keys: ${keys.join(', ')}`);
@@ -87,9 +114,16 @@ class MemoryStorage {
87
114
  }
88
115
  }
89
116
  /**
90
- * Saves an item to memory.
91
- * @param key The key of the item to save.
92
- * @param item The item to save.
117
+ * Saves an item to memory with a new eTag.
118
+ *
119
+ * This private method handles the details of:
120
+ * - Creating a clone of the item to prevent modification of the original
121
+ * - Generating a new eTag for optimistic concurrency control
122
+ * - Converting the item to a JSON string for storage
123
+ *
124
+ * @param key The key of the item to save
125
+ * @param item The item to save
126
+ * @private
93
127
  */
94
128
  saveItem(key, item) {
95
129
  const clone = Object.assign({}, item, { eTag: (this.etag++).toString() });
@@ -1 +1 @@
1
- {"version":3,"file":"memoryStorage.js","sourceRoot":"","sources":["../../../src/storage/memoryStorage.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,sCAAiC;AAEjC,MAAM,MAAM,GAAG,IAAA,cAAK,EAAC,uBAAuB,CAAC,CAAA;AAE7C;;GAEG;AACH,MAAa,aAAa;IAIxB;;;OAGG;IACH,YAAqB,SAAkC,EAAE;QAApC,WAAM,GAAN,MAAM,CAA8B;QANjD,SAAI,GAAW,CAAC,CAAA;IAMqC,CAAC;IAE9D;;OAEG;IACH,MAAM,CAAC,iBAAiB;QACtB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC5B,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAA;QAC9C,CAAC;QACD,OAAO,aAAa,CAAC,QAAQ,CAAA;IAC/B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAE,IAAc;QACxB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,cAAc,CAAC,iCAAiC,CAAC,CAAA;QAC7D,CAAC;QAED,MAAM,IAAI,GAAc,EAAE,CAAA;QAC1B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAA;YAClC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAC7B,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CAAE,OAAkB;QAC7B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,cAAc,CAAC,oCAAoC,CAAC,CAAA;QAChE,CAAC;QAED,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAA;YAClC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACnC,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACzD,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YAC7B,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;gBACtC,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;oBAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;gBAC7B,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,yBAAyB,CAAC,CAAA;gBAC1E,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAE,IAAc;QAC1B,MAAM,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAChD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,QAAQ,CAAE,GAAW,EAAE,IAAa;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;QACzE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAC1C,CAAC;CACF;AA3FD,sCA2FC"}
1
+ {"version":3,"file":"memoryStorage.js","sourceRoot":"","sources":["../../../src/storage/memoryStorage.ts"],"names":[],"mappings":"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"}
@@ -4,44 +4,74 @@
4
4
  */
5
5
  import { TurnContext } from '../turnContext';
6
6
  /**
7
- * Represents an item to be stored.
7
+ * Represents an item to be stored in a storage provider.
8
+ * Each item can contain arbitrary data along with an optional eTag for optimistic concurrency control.
8
9
  */
9
10
  export interface StoreItem {
11
+ /**
12
+ * Optional eTag used for optimistic concurrency control.
13
+ * When set to '*', it indicates that the write should proceed regardless of existing data.
14
+ * When comparing eTags, exact string matching is used to determine if data has changed.
15
+ */
10
16
  eTag?: string;
17
+ /**
18
+ * Additional properties can be stored in the item.
19
+ * Each storage provider may have specific requirements or limitations on property names and values.
20
+ */
11
21
  [key: string]: any;
12
22
  }
13
23
  /**
14
- * Represents a collection of store items.
24
+ * Represents a collection of store items indexed by key.
25
+ * Used as the return type for storage read operations.
15
26
  */
16
27
  export interface StoreItems {
28
+ /**
29
+ * Keys are the storage item identifiers, and values are the stored items.
30
+ * If a requested key is not found during a read operation, it will not appear in this collection.
31
+ */
17
32
  [key: string]: any;
18
33
  }
19
34
  /**
20
- * A factory function to generate storage keys based on the context.
21
- * @param context The TurnContext for the current turn of conversation.
22
- * @returns A string key for storage.
35
+ * A factory function to generate storage keys based on the conversation context.
36
+ * Allows different storage strategies based on the conversation state.
37
+ *
38
+ * @param context The TurnContext for the current turn of conversation
39
+ * @returns A string key for storage that uniquely identifies where to store the data
23
40
  */
24
- export type StorageKeyFactory = (context: TurnContext) => string;
41
+ export type StorageKeyFactory = (context: TurnContext) => string | Promise<string>;
25
42
  /**
26
- * Defines the interface for storage operations.
43
+ * Defines the interface for storage operations in the Agents platform.
44
+ *
45
+ * Storage providers persist state data across conversation turns, enabling
46
+ * agents to maintain context over time. Different implementations may store
47
+ * data in memory, databases, blob storage, or other persistence mechanisms.
48
+ *
49
+ * The interface is designed to be simple with just three core operations:
50
+ * read, write, and delete. All operations are asynchronous to support both
51
+ * in-memory and remote storage providers.
27
52
  */
28
53
  export interface Storage {
29
54
  /**
30
55
  * Reads store items from storage.
31
- * @param keys The keys of the items to read.
32
- * @returns A promise that resolves to the store items.
56
+ *
57
+ * @param keys The keys of the items to read
58
+ * @returns A promise that resolves to the store items. Items that don't exist in storage will not be included in the result.
59
+ * @throws If the keys array is empty or undefined
33
60
  */
34
61
  read: (keys: string[]) => Promise<StoreItem>;
35
62
  /**
36
63
  * Writes store items to storage.
37
- * @param changes The items to write to storage.
38
- * @returns A promise that resolves when the write operation is complete.
64
+ *
65
+ * @param changes The items to write to storage, indexed by key
66
+ * @returns A promise that resolves when the write operation is complete
67
+ * @throws If the changes object is empty or undefined, or if an eTag conflict occurs and optimistic concurrency is enabled
39
68
  */
40
69
  write: (changes: StoreItem) => Promise<void>;
41
70
  /**
42
71
  * Deletes store items from storage.
43
- * @param keys The keys of the items to delete.
44
- * @returns A promise that resolves when the delete operation is complete.
72
+ *
73
+ * @param keys The keys of the items to delete
74
+ * @returns A promise that resolves when the delete operation is complete
45
75
  */
46
76
  delete: (keys: string[]) => Promise<void>;
47
77
  }
@@ -5,19 +5,34 @@ import { TurnContextStateCollection } from './turnContextStateCollection';
5
5
  import { AttachmentInfo } from './connector-client/attachmentInfo';
6
6
  import { AttachmentData } from './connector-client/attachmentData';
7
7
  /**
8
- * Defines a handler for sending activities.
8
+ * Defines a handler for processing and sending activities.
9
+ * Used for middleware that needs to intercept or modify activities being sent.
10
+ *
11
+ * @param context The current turn context
12
+ * @param activities The activities being sent
13
+ * @param next Function to call to continue the middleware chain
9
14
  */
10
15
  export type SendActivitiesHandler = (context: TurnContext, activities: Activity[], next: () => Promise<ResourceResponse[]>) => Promise<ResourceResponse[]>;
11
16
  /**
12
17
  * Defines a handler for updating an activity.
18
+ * Used for middleware that needs to intercept or modify activity updates.
19
+ *
20
+ * @param context The current turn context
21
+ * @param activity The activity being updated
22
+ * @param next Function to call to continue the middleware chain
13
23
  */
14
24
  export type UpdateActivityHandler = (context: TurnContext, activity: Activity, next: () => Promise<void>) => Promise<void>;
15
25
  /**
16
26
  * Defines a handler for deleting an activity.
27
+ * Used for middleware that needs to intercept or handle activity deletions.
28
+ *
29
+ * @param context The current turn context
30
+ * @param reference Reference to the activity being deleted
31
+ * @param next Function to call to continue the middleware chain
17
32
  */
18
33
  export type DeleteActivityHandler = (context: TurnContext, reference: ConversationReference, next: () => Promise<void>) => Promise<void>;
19
34
  /**
20
- * Key for the agent callback handler.
35
+ * Key for the agent callback handler in TurnState collection.
21
36
  */
22
37
  export declare const AgentCallbackHandlerKey = "agentCallbackHandler";
23
38
  /**
@@ -26,7 +41,20 @@ export declare const AgentCallbackHandlerKey = "agentCallbackHandler";
26
41
  export interface TurnContext {
27
42
  }
28
43
  /**
29
- * Represents the context object for a turn of an Agent.
44
+ * Represents the context for a single turn in a conversation between a user and an agent.
45
+ *
46
+ * TurnContext is a central concept in the Agents framework - it contains:
47
+ * - The incoming activity that started the turn
48
+ * - Access to the adapter that can be used to send responses
49
+ * - A state collection for storing information during the turn
50
+ * - Methods for sending, updating, and deleting activities
51
+ * - Middleware hooks for intercepting activity operations
52
+ *
53
+ * The TurnContext object is created by the adapter when an activity is received
54
+ * and is passed to the agent's logic to process the turn. It maintains information
55
+ * about the conversation and provides methods to send responses.
56
+ *
57
+ * This class follows the builder pattern for registering middleware handlers.
30
58
  */
31
59
  export declare class TurnContext {
32
60
  private readonly _adapter?;
@@ -40,121 +68,179 @@ export declare class TurnContext {
40
68
  private readonly _locale;
41
69
  /**
42
70
  * Initializes a new instance of the TurnContext class.
43
- * @param adapterOrContext The adapter or context for the turn.
44
- * @param request The activity for the turn.
71
+ *
72
+ * @param adapterOrContext The adapter that created this context, or another TurnContext to clone
73
+ * @param request The activity for the turn (required when first parameter is an adapter)
45
74
  */
46
75
  constructor(adapterOrContext: BaseAdapter, request: Activity);
47
76
  constructor(adapterOrContext: TurnContext);
48
77
  /**
49
- * A list of buffered reply activities.
78
+ * A list of reply activities that are buffered until the end of the turn.
79
+ *
80
+ * This is primarily used with the 'expectReplies' delivery mode where all
81
+ * activities during a turn are collected and returned as a single response.
50
82
  */
51
83
  readonly bufferedReplyActivities: Activity[];
52
84
  /**
53
- * Sends a trace activity.
54
- * @param name The name of the trace activity.
55
- * @param value The value of the trace activity.
56
- * @param valueType The value type of the trace activity.
57
- * @param label The label of the trace activity.
58
- * @returns The resource response.
85
+ * Sends a trace activity for debugging purposes.
86
+ *
87
+ * Trace activities are typically used for debugging and are only visible in
88
+ * channels that support them, like the Bot Framework Emulator.
89
+ *
90
+ * @param name The name/category of the trace
91
+ * @param value The value/data to include in the trace
92
+ * @param valueType Optional type name for the value
93
+ * @param label Optional descriptive label for the trace
94
+ * @returns A promise that resolves to the resource response or undefined
59
95
  */
60
96
  sendTraceActivity(name: string, value?: any, valueType?: string, label?: string): Promise<ResourceResponse | undefined>;
61
97
  /**
62
- * Sends an activity.
63
- * @param activityOrText The activity or text to send.
64
- * @param speak The text to speak.
65
- * @param inputHint The input hint.
66
- * @returns The resource response.
98
+ * Sends an activity to the sender of the incoming activity.
99
+ *
100
+ * This is the primary method used to respond to the user. It automatically
101
+ * addresses the response to the correct conversation and recipient using
102
+ * information from the incoming activity.
103
+ *
104
+ * @param activityOrText The activity to send or a string for a simple message
105
+ * @param speak Optional text to be spoken by the agent
106
+ * @param inputHint Optional input hint to indicate if the agent is expecting input
107
+ * @returns A promise that resolves to the resource response or undefined
67
108
  */
68
109
  sendActivity(activityOrText: string | Activity, speak?: string, inputHint?: string): Promise<ResourceResponse | undefined>;
69
110
  /**
70
- * Sends multiple activities.
71
- * @param activities The activities to send.
72
- * @returns The resource responses.
111
+ * Sends multiple activities to the sender of the incoming activity.
112
+ *
113
+ * This method applies conversation references to each activity and
114
+ * emits them through the middleware chain before sending them to
115
+ * the adapter.
116
+ *
117
+ * @param activities The array of activities to send
118
+ * @returns A promise that resolves to an array of resource responses
73
119
  */
74
120
  sendActivities(activities: Activity[]): Promise<ResourceResponse[]>;
75
121
  /**
76
- * Updates an activity.
77
- * @param activity The activity to update.
78
- * @returns A promise representing the asynchronous operation.
122
+ * Updates an existing activity in the conversation.
123
+ *
124
+ * This can be used to edit previously sent activities, for example to
125
+ * update the content of an adaptive card or change a message.
126
+ *
127
+ * @param activity The activity to update with its ID specified
128
+ * @returns A promise that resolves when the activity has been updated
79
129
  */
80
130
  updateActivity(activity: Activity): Promise<void>;
81
131
  /**
82
- * Deletes an activity.
83
- * @param idOrReference The ID or reference of the activity to delete.
84
- * @returns A promise representing the asynchronous operation.
132
+ * Deletes an activity from the conversation.
133
+ *
134
+ * @param idOrReference The ID of the activity to delete or a conversation reference
135
+ * @returns A promise that resolves when the activity has been deleted
85
136
  */
86
137
  deleteActivity(idOrReference: string | ConversationReference): Promise<void>;
87
138
  /**
88
- * Uploads an attachment.
89
- * @param conversationId The conversation ID.
90
- * @param attachmentData The attachment data.
91
- * @returns The resource response.
139
+ * Uploads an attachment to the conversation.
140
+ *
141
+ * @param conversationId The ID of the conversation
142
+ * @param attachmentData The attachment data to upload
143
+ * @returns A promise that resolves to the resource response
92
144
  */
93
145
  uploadAttachment(conversationId: string, attachmentData: AttachmentData): Promise<ResourceResponse>;
94
146
  /**
95
- * Gets attachment information.
96
- * @param attachmentId The attachment ID.
97
- * @returns The attachment information.
147
+ * Gets information about an attachment.
148
+ *
149
+ * @param attachmentId The ID of the attachment
150
+ * @returns A promise that resolves to the attachment information
98
151
  */
99
152
  getAttachmentInfo(attachmentId: string): Promise<AttachmentInfo>;
100
153
  /**
101
- * Gets an attachment.
102
- * @param attachmentId The attachment ID.
103
- * @param viewId The view ID.
104
- * @returns The readable stream of the attachment.
154
+ * Gets the content of an attachment.
155
+ *
156
+ * @param attachmentId The ID of the attachment
157
+ * @param viewId The view to get
158
+ * @returns A promise that resolves to a readable stream of the attachment content
105
159
  */
106
160
  getAttachment(attachmentId: string, viewId: string): Promise<NodeJS.ReadableStream>;
107
161
  /**
108
- * Registers a handler for sending activities.
109
- * @param handler The handler to register.
110
- * @returns The current TurnContext instance.
162
+ * Registers a handler for intercepting and processing activities being sent.
163
+ *
164
+ * This method follows a middleware pattern, allowing multiple handlers to
165
+ * be chained together. Handlers can modify activities or inject new ones.
166
+ *
167
+ * @param handler The handler to register
168
+ * @returns The current TurnContext instance for chaining
111
169
  */
112
170
  onSendActivities(handler: SendActivitiesHandler): this;
113
171
  /**
114
- * Registers a handler for updating activities.
115
- * @param handler The handler to register.
116
- * @returns The current TurnContext instance.
172
+ * Registers a handler for intercepting activity updates.
173
+ *
174
+ * @param handler The handler to register
175
+ * @returns The current TurnContext instance for chaining
117
176
  */
118
177
  onUpdateActivity(handler: UpdateActivityHandler): this;
119
178
  /**
120
- * Registers a handler for deleting activities.
121
- * @param handler The handler to register.
122
- * @returns The current TurnContext instance.
179
+ * Registers a handler for intercepting activity deletions.
180
+ *
181
+ * @param handler The handler to register
182
+ * @returns The current TurnContext instance for chaining
123
183
  */
124
184
  onDeleteActivity(handler: DeleteActivityHandler): this;
125
185
  /**
126
186
  * Copies the properties of this TurnContext to another TurnContext.
127
- * @param context The context to copy to.
187
+ *
188
+ * Used internally when cloning contexts.
189
+ *
190
+ * @param context The context to copy to
191
+ * @protected
128
192
  */
129
193
  protected copyTo(context: TurnContext): void;
130
194
  /**
131
- * Gets the adapter for the turn.
195
+ * Gets the adapter that created this context.
196
+ *
197
+ * The adapter is responsible for sending and receiving activities
198
+ * to and from the user's channel.
132
199
  */
133
200
  get adapter(): BaseAdapter;
134
201
  /**
135
- * Gets the activity for the turn.
202
+ * Gets the incoming activity that started this turn.
203
+ *
204
+ * This is the activity that was received from the user or channel
205
+ * and triggered the creation of this context.
136
206
  */
137
207
  get activity(): Activity;
138
208
  /**
139
- * Gets or sets whether the turn has responded.
209
+ * Gets or sets whether the turn has sent a response to the user.
210
+ *
211
+ * This is used to track whether the agent has responded to the user's
212
+ * activity. Once set to true, it cannot be set back to false.
140
213
  */
141
214
  get responded(): boolean;
142
215
  set responded(value: boolean);
143
216
  /**
144
217
  * Gets or sets the locale for the turn.
218
+ *
219
+ * The locale affects language-dependent operations like
220
+ * formatting dates or numbers.
145
221
  */
146
222
  get locale(): string | undefined;
147
223
  set locale(value: string | undefined);
148
224
  /**
149
- * Gets the turn state collection.
225
+ * Gets the turn state collection for storing data during the turn.
226
+ *
227
+ * The turn state collection provides a dictionary-like interface
228
+ * for storing arbitrary data that needs to be accessible during
229
+ * the processing of the current turn.
150
230
  */
151
231
  get turnState(): TurnContextStateCollection;
152
232
  /**
153
- * Emits events to the registered handlers.
154
- * @param handlers The handlers to emit to.
155
- * @param arg The argument to pass to the handlers.
156
- * @param next The next function to call.
157
- * @returns The result of the handlers.
233
+ * Emits events to registered middleware handlers.
234
+ *
235
+ * This internal method implements the middleware pattern, allowing
236
+ * handlers to be chained together with each having the option to
237
+ * short-circuit the chain.
238
+ *
239
+ * @param handlers Array of handlers to execute
240
+ * @param arg The argument to pass to each handler
241
+ * @param next The function to execute at the end of the middleware chain
242
+ * @returns A promise that resolves to the result from the handlers or next function
243
+ * @private
158
244
  */
159
245
  private emit;
160
246
  }