@livekit/agents 1.0.46 → 1.0.47
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/dist/cli.cjs +14 -20
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +14 -20
- package/dist/cli.js.map +1 -1
- package/dist/ipc/job_proc_lazy_main.cjs +14 -5
- package/dist/ipc/job_proc_lazy_main.cjs.map +1 -1
- package/dist/ipc/job_proc_lazy_main.js +14 -5
- package/dist/ipc/job_proc_lazy_main.js.map +1 -1
- package/dist/llm/chat_context.cjs +19 -0
- package/dist/llm/chat_context.cjs.map +1 -1
- package/dist/llm/chat_context.d.cts +4 -0
- package/dist/llm/chat_context.d.ts +4 -0
- package/dist/llm/chat_context.d.ts.map +1 -1
- package/dist/llm/chat_context.js +19 -0
- package/dist/llm/chat_context.js.map +1 -1
- package/dist/llm/provider_format/index.cjs +2 -0
- package/dist/llm/provider_format/index.cjs.map +1 -1
- package/dist/llm/provider_format/index.d.cts +1 -1
- package/dist/llm/provider_format/index.d.ts +1 -1
- package/dist/llm/provider_format/index.d.ts.map +1 -1
- package/dist/llm/provider_format/index.js +6 -1
- package/dist/llm/provider_format/index.js.map +1 -1
- package/dist/llm/provider_format/openai.cjs +82 -2
- package/dist/llm/provider_format/openai.cjs.map +1 -1
- package/dist/llm/provider_format/openai.d.cts +1 -0
- package/dist/llm/provider_format/openai.d.ts +1 -0
- package/dist/llm/provider_format/openai.d.ts.map +1 -1
- package/dist/llm/provider_format/openai.js +80 -1
- package/dist/llm/provider_format/openai.js.map +1 -1
- package/dist/llm/provider_format/openai.test.cjs +326 -0
- package/dist/llm/provider_format/openai.test.cjs.map +1 -1
- package/dist/llm/provider_format/openai.test.js +327 -1
- package/dist/llm/provider_format/openai.test.js.map +1 -1
- package/dist/llm/provider_format/utils.cjs +4 -3
- package/dist/llm/provider_format/utils.cjs.map +1 -1
- package/dist/llm/provider_format/utils.d.ts.map +1 -1
- package/dist/llm/provider_format/utils.js +4 -3
- package/dist/llm/provider_format/utils.js.map +1 -1
- package/dist/llm/realtime.cjs.map +1 -1
- package/dist/llm/realtime.d.cts +1 -0
- package/dist/llm/realtime.d.ts +1 -0
- package/dist/llm/realtime.d.ts.map +1 -1
- package/dist/llm/realtime.js.map +1 -1
- package/dist/log.cjs +5 -2
- package/dist/log.cjs.map +1 -1
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +5 -2
- package/dist/log.js.map +1 -1
- package/dist/stream/deferred_stream.cjs +15 -6
- package/dist/stream/deferred_stream.cjs.map +1 -1
- package/dist/stream/deferred_stream.d.ts.map +1 -1
- package/dist/stream/deferred_stream.js +15 -6
- package/dist/stream/deferred_stream.js.map +1 -1
- package/dist/utils.cjs +31 -2
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +7 -0
- package/dist/utils.d.ts +7 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +31 -2
- package/dist/utils.js.map +1 -1
- package/dist/utils.test.cjs +71 -0
- package/dist/utils.test.cjs.map +1 -1
- package/dist/utils.test.js +71 -0
- package/dist/utils.test.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.cts +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/voice/agent.cjs +144 -12
- package/dist/voice/agent.cjs.map +1 -1
- package/dist/voice/agent.d.cts +29 -4
- package/dist/voice/agent.d.ts +29 -4
- package/dist/voice/agent.d.ts.map +1 -1
- package/dist/voice/agent.js +140 -11
- package/dist/voice/agent.js.map +1 -1
- package/dist/voice/agent.test.cjs +120 -0
- package/dist/voice/agent.test.cjs.map +1 -1
- package/dist/voice/agent.test.js +122 -2
- package/dist/voice/agent.test.js.map +1 -1
- package/dist/voice/agent_activity.cjs +383 -298
- package/dist/voice/agent_activity.cjs.map +1 -1
- package/dist/voice/agent_activity.d.cts +34 -7
- package/dist/voice/agent_activity.d.ts +34 -7
- package/dist/voice/agent_activity.d.ts.map +1 -1
- package/dist/voice/agent_activity.js +383 -293
- package/dist/voice/agent_activity.js.map +1 -1
- package/dist/voice/agent_session.cjs +140 -40
- package/dist/voice/agent_session.cjs.map +1 -1
- package/dist/voice/agent_session.d.cts +19 -7
- package/dist/voice/agent_session.d.ts +19 -7
- package/dist/voice/agent_session.d.ts.map +1 -1
- package/dist/voice/agent_session.js +137 -37
- package/dist/voice/agent_session.js.map +1 -1
- package/dist/voice/audio_recognition.cjs +4 -0
- package/dist/voice/audio_recognition.cjs.map +1 -1
- package/dist/voice/audio_recognition.d.ts.map +1 -1
- package/dist/voice/audio_recognition.js +4 -0
- package/dist/voice/audio_recognition.js.map +1 -1
- package/dist/voice/generation.cjs +39 -19
- package/dist/voice/generation.cjs.map +1 -1
- package/dist/voice/generation.d.ts.map +1 -1
- package/dist/voice/generation.js +44 -20
- package/dist/voice/generation.js.map +1 -1
- package/dist/voice/index.cjs +2 -0
- package/dist/voice/index.cjs.map +1 -1
- package/dist/voice/index.d.cts +1 -1
- package/dist/voice/index.d.ts +1 -1
- package/dist/voice/index.d.ts.map +1 -1
- package/dist/voice/index.js +2 -1
- package/dist/voice/index.js.map +1 -1
- package/dist/voice/speech_handle.cjs +7 -1
- package/dist/voice/speech_handle.cjs.map +1 -1
- package/dist/voice/speech_handle.d.cts +2 -0
- package/dist/voice/speech_handle.d.ts +2 -0
- package/dist/voice/speech_handle.d.ts.map +1 -1
- package/dist/voice/speech_handle.js +8 -2
- package/dist/voice/speech_handle.js.map +1 -1
- package/dist/voice/testing/run_result.cjs +66 -15
- package/dist/voice/testing/run_result.cjs.map +1 -1
- package/dist/voice/testing/run_result.d.cts +14 -3
- package/dist/voice/testing/run_result.d.ts +14 -3
- package/dist/voice/testing/run_result.d.ts.map +1 -1
- package/dist/voice/testing/run_result.js +66 -15
- package/dist/voice/testing/run_result.js.map +1 -1
- package/package.json +1 -1
- package/src/cli.ts +20 -33
- package/src/ipc/job_proc_lazy_main.ts +16 -5
- package/src/llm/chat_context.ts +35 -0
- package/src/llm/provider_format/index.ts +7 -2
- package/src/llm/provider_format/openai.test.ts +385 -1
- package/src/llm/provider_format/openai.ts +103 -0
- package/src/llm/provider_format/utils.ts +6 -4
- package/src/llm/realtime.ts +1 -0
- package/src/log.ts +5 -2
- package/src/stream/deferred_stream.ts +17 -6
- package/src/utils.test.ts +87 -0
- package/src/utils.ts +36 -2
- package/src/version.ts +1 -1
- package/src/voice/agent.test.ts +140 -2
- package/src/voice/agent.ts +189 -10
- package/src/voice/agent_activity.ts +427 -289
- package/src/voice/agent_session.ts +178 -40
- package/src/voice/audio_recognition.ts +4 -0
- package/src/voice/generation.ts +52 -23
- package/src/voice/index.ts +1 -1
- package/src/voice/speech_handle.ts +9 -2
- package/src/voice/testing/run_result.ts +81 -23
package/dist/voice/agent.test.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
1
|
+
import { describe, expect, it, vi } from "vitest";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { tool } from "../llm/index.js";
|
|
4
|
-
import {
|
|
4
|
+
import { initializeLogger } from "../log.js";
|
|
5
|
+
import { Task } from "../utils.js";
|
|
6
|
+
import { Agent, AgentTask, _setActivityTaskInfo } from "./agent.js";
|
|
7
|
+
import { agentActivityStorage } from "./agent_activity.js";
|
|
8
|
+
initializeLogger({ pretty: false, level: "error" });
|
|
5
9
|
describe("Agent", () => {
|
|
6
10
|
it("should create agent with basic instructions", () => {
|
|
7
11
|
const instructions = "You are a helpful assistant";
|
|
@@ -56,5 +60,121 @@ describe("Agent", () => {
|
|
|
56
60
|
expect(tools1).toEqual(tools2);
|
|
57
61
|
expect(tools1).toEqual(tools);
|
|
58
62
|
});
|
|
63
|
+
it("should require AgentTask to run inside task context", async () => {
|
|
64
|
+
class TestTask extends AgentTask {
|
|
65
|
+
constructor() {
|
|
66
|
+
super({ instructions: "test task" });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const task = new TestTask();
|
|
70
|
+
await expect(task.run()).rejects.toThrow("must be executed inside a Task context");
|
|
71
|
+
});
|
|
72
|
+
it("should require AgentTask to run inside inline task context", async () => {
|
|
73
|
+
class TestTask extends AgentTask {
|
|
74
|
+
constructor() {
|
|
75
|
+
super({ instructions: "test task" });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const task = new TestTask();
|
|
79
|
+
const wrapper = Task.from(async () => {
|
|
80
|
+
return await task.run();
|
|
81
|
+
});
|
|
82
|
+
await expect(wrapper.result).rejects.toThrow(
|
|
83
|
+
"should only be awaited inside function tools or the onEnter/onExit methods of an Agent"
|
|
84
|
+
);
|
|
85
|
+
});
|
|
86
|
+
it("should allow AgentTask run from inline task context", async () => {
|
|
87
|
+
class TestTask extends AgentTask {
|
|
88
|
+
constructor() {
|
|
89
|
+
super({ instructions: "test task" });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const task = new TestTask();
|
|
93
|
+
const oldAgent = new Agent({ instructions: "old agent" });
|
|
94
|
+
const mockSession = {
|
|
95
|
+
currentAgent: oldAgent,
|
|
96
|
+
_globalRunState: void 0,
|
|
97
|
+
_updateActivity: async (agent) => {
|
|
98
|
+
if (agent === task) {
|
|
99
|
+
task.complete("ok");
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
const mockActivity = {
|
|
104
|
+
agent: oldAgent,
|
|
105
|
+
agentSession: mockSession,
|
|
106
|
+
_onEnterTask: void 0,
|
|
107
|
+
llm: void 0,
|
|
108
|
+
close: async () => {
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
const wrapper = Task.from(async () => {
|
|
112
|
+
const currentTask = Task.current();
|
|
113
|
+
if (!currentTask) {
|
|
114
|
+
throw new Error("expected task context");
|
|
115
|
+
}
|
|
116
|
+
_setActivityTaskInfo(currentTask, { inlineTask: true });
|
|
117
|
+
return await agentActivityStorage.run(mockActivity, () => task.run());
|
|
118
|
+
});
|
|
119
|
+
await expect(wrapper.result).resolves.toBe("ok");
|
|
120
|
+
});
|
|
121
|
+
it("should require AgentTask to run inside AgentActivity context", async () => {
|
|
122
|
+
class TestTask extends AgentTask {
|
|
123
|
+
constructor() {
|
|
124
|
+
super({ instructions: "test task" });
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const task = new TestTask();
|
|
128
|
+
const wrapper = Task.from(async () => {
|
|
129
|
+
const currentTask = Task.current();
|
|
130
|
+
if (!currentTask) {
|
|
131
|
+
throw new Error("expected task context");
|
|
132
|
+
}
|
|
133
|
+
_setActivityTaskInfo(currentTask, { inlineTask: true });
|
|
134
|
+
return await task.run();
|
|
135
|
+
});
|
|
136
|
+
await expect(wrapper.result).rejects.toThrow(
|
|
137
|
+
"must be executed inside an AgentActivity context"
|
|
138
|
+
);
|
|
139
|
+
});
|
|
140
|
+
it("should close old activity when current agent changes while AgentTask is pending", async () => {
|
|
141
|
+
class TestTask extends AgentTask {
|
|
142
|
+
constructor() {
|
|
143
|
+
super({ instructions: "test task" });
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
const task = new TestTask();
|
|
147
|
+
const oldAgent = new Agent({ instructions: "old agent" });
|
|
148
|
+
const switchedAgent = new Agent({ instructions: "switched agent" });
|
|
149
|
+
const closeOldActivity = vi.fn(async () => {
|
|
150
|
+
});
|
|
151
|
+
const mockSession = {
|
|
152
|
+
currentAgent: oldAgent,
|
|
153
|
+
_globalRunState: void 0,
|
|
154
|
+
_updateActivity: async (agent) => {
|
|
155
|
+
if (agent === task) {
|
|
156
|
+
mockSession.currentAgent = switchedAgent;
|
|
157
|
+
task.complete("ok");
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
const mockActivity = {
|
|
162
|
+
agent: oldAgent,
|
|
163
|
+
agentSession: mockSession,
|
|
164
|
+
_onEnterTask: void 0,
|
|
165
|
+
llm: void 0,
|
|
166
|
+
close: closeOldActivity
|
|
167
|
+
};
|
|
168
|
+
const wrapper = Task.from(async () => {
|
|
169
|
+
const currentTask = Task.current();
|
|
170
|
+
if (!currentTask) {
|
|
171
|
+
throw new Error("expected task context");
|
|
172
|
+
}
|
|
173
|
+
_setActivityTaskInfo(currentTask, { inlineTask: true });
|
|
174
|
+
return await agentActivityStorage.run(mockActivity, () => task.run());
|
|
175
|
+
});
|
|
176
|
+
await expect(wrapper.result).resolves.toBe("ok");
|
|
177
|
+
expect(closeOldActivity).toHaveBeenCalledTimes(1);
|
|
178
|
+
});
|
|
59
179
|
});
|
|
60
180
|
//# sourceMappingURL=agent.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/voice/agent.test.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { describe, expect, it } from 'vitest';\nimport { z } from 'zod';\nimport { tool } from '../llm/index.js';\nimport { Agent } from './agent.js';\n\ndescribe('Agent', () => {\n it('should create agent with basic instructions', () => {\n const instructions = 'You are a helpful assistant';\n const agent = new Agent({ instructions });\n\n expect(agent).toBeDefined();\n expect(agent.instructions).toBe(instructions);\n });\n\n it('should create agent with instructions and tools', () => {\n const instructions = 'You are a helpful assistant with tools';\n\n // Create mock tools using the tool function\n const mockTool1 = tool({\n description: 'First test tool',\n parameters: z.object({}),\n execute: async () => 'tool1 result',\n });\n\n const mockTool2 = tool({\n description: 'Second test tool',\n parameters: z.object({\n input: z.string().describe('Input parameter'),\n }),\n execute: async ({ input }) => `tool2: ${input}`,\n });\n\n const agent = new Agent({\n instructions,\n tools: {\n getTool1: mockTool1,\n getTool2: mockTool2,\n },\n });\n\n expect(agent).toBeDefined();\n expect(agent.instructions).toBe(instructions);\n\n // Assert tools are set correctly\n const agentTools = agent.toolCtx;\n expect(Object.keys(agentTools)).toHaveLength(2);\n expect(agentTools).toHaveProperty('getTool1');\n expect(agentTools).toHaveProperty('getTool2');\n\n // Verify tool properties with proper checks\n expect(agentTools.getTool1?.description).toBe('First test tool');\n expect(agentTools.getTool2?.description).toBe('Second test tool');\n });\n\n it('should return a copy of tools, not the original reference', () => {\n const instructions = 'You are a helpful assistant';\n const mockTool = tool({\n description: 'Test tool',\n parameters: z.object({}),\n execute: async () => 'result',\n });\n\n const tools = { testTool: mockTool };\n const agent = new Agent({ instructions, tools });\n\n const tools1 = agent.toolCtx;\n const tools2 = agent.toolCtx;\n\n // Should return different object references\n expect(tools1).not.toBe(tools2);\n expect(tools1).not.toBe(tools);\n\n // Should contain the same set of tools\n expect(tools1).toEqual(tools2);\n expect(tools1).toEqual(tools);\n });\n});\n"],"mappings":"AAGA,SAAS,UAAU,QAAQ,UAAU;AACrC,SAAS,SAAS;AAClB,SAAS,YAAY;AACrB,SAAS,aAAa;AAEtB,SAAS,SAAS,MAAM;AACtB,KAAG,+CAA+C,MAAM;AACtD,UAAM,eAAe;AACrB,UAAM,QAAQ,IAAI,MAAM,EAAE,aAAa,CAAC;AAExC,WAAO,KAAK,EAAE,YAAY;AAC1B,WAAO,MAAM,YAAY,EAAE,KAAK,YAAY;AAAA,EAC9C,CAAC;AAED,KAAG,mDAAmD,MAAM;AAjB9D;AAkBI,UAAM,eAAe;AAGrB,UAAM,YAAY,KAAK;AAAA,MACrB,aAAa;AAAA,MACb,YAAY,EAAE,OAAO,CAAC,CAAC;AAAA,MACvB,SAAS,YAAY;AAAA,IACvB,CAAC;AAED,UAAM,YAAY,KAAK;AAAA,MACrB,aAAa;AAAA,MACb,YAAY,EAAE,OAAO;AAAA,QACnB,OAAO,EAAE,OAAO,EAAE,SAAS,iBAAiB;AAAA,MAC9C,CAAC;AAAA,MACD,SAAS,OAAO,EAAE,MAAM,MAAM,UAAU,KAAK;AAAA,IAC/C,CAAC;AAED,UAAM,QAAQ,IAAI,MAAM;AAAA,MACtB;AAAA,MACA,OAAO;AAAA,QACL,UAAU;AAAA,QACV,UAAU;AAAA,MACZ;AAAA,IACF,CAAC;AAED,WAAO,KAAK,EAAE,YAAY;AAC1B,WAAO,MAAM,YAAY,EAAE,KAAK,YAAY;AAG5C,UAAM,aAAa,MAAM;AACzB,WAAO,OAAO,KAAK,UAAU,CAAC,EAAE,aAAa,CAAC;AAC9C,WAAO,UAAU,EAAE,eAAe,UAAU;AAC5C,WAAO,UAAU,EAAE,eAAe,UAAU;AAG5C,YAAO,gBAAW,aAAX,mBAAqB,WAAW,EAAE,KAAK,iBAAiB;AAC/D,YAAO,gBAAW,aAAX,mBAAqB,WAAW,EAAE,KAAK,kBAAkB;AAAA,EAClE,CAAC;AAED,KAAG,6DAA6D,MAAM;AACpE,UAAM,eAAe;AACrB,UAAM,WAAW,KAAK;AAAA,MACpB,aAAa;AAAA,MACb,YAAY,EAAE,OAAO,CAAC,CAAC;AAAA,MACvB,SAAS,YAAY;AAAA,IACvB,CAAC;AAED,UAAM,QAAQ,EAAE,UAAU,SAAS;AACnC,UAAM,QAAQ,IAAI,MAAM,EAAE,cAAc,MAAM,CAAC;AAE/C,UAAM,SAAS,MAAM;AACrB,UAAM,SAAS,MAAM;AAGrB,WAAO,MAAM,EAAE,IAAI,KAAK,MAAM;AAC9B,WAAO,MAAM,EAAE,IAAI,KAAK,KAAK;AAG7B,WAAO,MAAM,EAAE,QAAQ,MAAM;AAC7B,WAAO,MAAM,EAAE,QAAQ,KAAK;AAAA,EAC9B,CAAC;AACH,CAAC;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/voice/agent.test.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2025 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { describe, expect, it, vi } from 'vitest';\nimport { z } from 'zod';\nimport { tool } from '../llm/index.js';\nimport { initializeLogger } from '../log.js';\nimport { Task } from '../utils.js';\nimport { Agent, AgentTask, _setActivityTaskInfo } from './agent.js';\nimport { agentActivityStorage } from './agent_activity.js';\n\ninitializeLogger({ pretty: false, level: 'error' });\n\ndescribe('Agent', () => {\n it('should create agent with basic instructions', () => {\n const instructions = 'You are a helpful assistant';\n const agent = new Agent({ instructions });\n\n expect(agent).toBeDefined();\n expect(agent.instructions).toBe(instructions);\n });\n\n it('should create agent with instructions and tools', () => {\n const instructions = 'You are a helpful assistant with tools';\n\n // Create mock tools using the tool function\n const mockTool1 = tool({\n description: 'First test tool',\n parameters: z.object({}),\n execute: async () => 'tool1 result',\n });\n\n const mockTool2 = tool({\n description: 'Second test tool',\n parameters: z.object({\n input: z.string().describe('Input parameter'),\n }),\n execute: async ({ input }) => `tool2: ${input}`,\n });\n\n const agent = new Agent({\n instructions,\n tools: {\n getTool1: mockTool1,\n getTool2: mockTool2,\n },\n });\n\n expect(agent).toBeDefined();\n expect(agent.instructions).toBe(instructions);\n\n // Assert tools are set correctly\n const agentTools = agent.toolCtx;\n expect(Object.keys(agentTools)).toHaveLength(2);\n expect(agentTools).toHaveProperty('getTool1');\n expect(agentTools).toHaveProperty('getTool2');\n\n // Verify tool properties with proper checks\n expect(agentTools.getTool1?.description).toBe('First test tool');\n expect(agentTools.getTool2?.description).toBe('Second test tool');\n });\n\n it('should return a copy of tools, not the original reference', () => {\n const instructions = 'You are a helpful assistant';\n const mockTool = tool({\n description: 'Test tool',\n parameters: z.object({}),\n execute: async () => 'result',\n });\n\n const tools = { testTool: mockTool };\n const agent = new Agent({ instructions, tools });\n\n const tools1 = agent.toolCtx;\n const tools2 = agent.toolCtx;\n\n // Should return different object references\n expect(tools1).not.toBe(tools2);\n expect(tools1).not.toBe(tools);\n\n // Should contain the same set of tools\n expect(tools1).toEqual(tools2);\n expect(tools1).toEqual(tools);\n });\n\n it('should require AgentTask to run inside task context', async () => {\n class TestTask extends AgentTask<string> {\n constructor() {\n super({ instructions: 'test task' });\n }\n }\n\n const task = new TestTask();\n await expect(task.run()).rejects.toThrow('must be executed inside a Task context');\n });\n\n it('should require AgentTask to run inside inline task context', async () => {\n class TestTask extends AgentTask<string> {\n constructor() {\n super({ instructions: 'test task' });\n }\n }\n\n const task = new TestTask();\n const wrapper = Task.from(async () => {\n return await task.run();\n });\n\n await expect(wrapper.result).rejects.toThrow(\n 'should only be awaited inside function tools or the onEnter/onExit methods of an Agent',\n );\n });\n\n it('should allow AgentTask run from inline task context', async () => {\n class TestTask extends AgentTask<string> {\n constructor() {\n super({ instructions: 'test task' });\n }\n }\n\n const task = new TestTask();\n const oldAgent = new Agent({ instructions: 'old agent' });\n const mockSession = {\n currentAgent: oldAgent,\n _globalRunState: undefined,\n _updateActivity: async (agent: Agent) => {\n if (agent === task) {\n task.complete('ok');\n }\n },\n };\n\n const mockActivity = {\n agent: oldAgent,\n agentSession: mockSession,\n _onEnterTask: undefined,\n llm: undefined,\n close: async () => {},\n };\n\n const wrapper = Task.from(async () => {\n const currentTask = Task.current();\n if (!currentTask) {\n throw new Error('expected task context');\n }\n _setActivityTaskInfo(currentTask, { inlineTask: true });\n return await agentActivityStorage.run(mockActivity as any, () => task.run());\n });\n\n await expect(wrapper.result).resolves.toBe('ok');\n });\n\n it('should require AgentTask to run inside AgentActivity context', async () => {\n class TestTask extends AgentTask<string> {\n constructor() {\n super({ instructions: 'test task' });\n }\n }\n\n const task = new TestTask();\n const wrapper = Task.from(async () => {\n const currentTask = Task.current();\n if (!currentTask) {\n throw new Error('expected task context');\n }\n _setActivityTaskInfo(currentTask, { inlineTask: true });\n return await task.run();\n });\n\n await expect(wrapper.result).rejects.toThrow(\n 'must be executed inside an AgentActivity context',\n );\n });\n\n it('should close old activity when current agent changes while AgentTask is pending', async () => {\n class TestTask extends AgentTask<string> {\n constructor() {\n super({ instructions: 'test task' });\n }\n }\n\n const task = new TestTask();\n const oldAgent = new Agent({ instructions: 'old agent' });\n const switchedAgent = new Agent({ instructions: 'switched agent' });\n const closeOldActivity = vi.fn(async () => {});\n\n const mockSession = {\n currentAgent: oldAgent as Agent,\n _globalRunState: undefined,\n _updateActivity: async (agent: Agent) => {\n if (agent === task) {\n mockSession.currentAgent = switchedAgent;\n task.complete('ok');\n }\n },\n };\n\n const mockActivity = {\n agent: oldAgent,\n agentSession: mockSession,\n _onEnterTask: undefined,\n llm: undefined,\n close: closeOldActivity,\n };\n\n const wrapper = Task.from(async () => {\n const currentTask = Task.current();\n if (!currentTask) {\n throw new Error('expected task context');\n }\n _setActivityTaskInfo(currentTask, { inlineTask: true });\n return await agentActivityStorage.run(mockActivity as any, () => task.run());\n });\n\n await expect(wrapper.result).resolves.toBe('ok');\n expect(closeOldActivity).toHaveBeenCalledTimes(1);\n });\n});\n"],"mappings":"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","names":[]}
|