eve 0.40.0 → 0.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/src/channel/channel-operations.d.ts +2 -2
  3. package/dist/src/channel/channel-operations.js +1 -1
  4. package/dist/src/channel/session.d.ts +2 -2
  5. package/dist/src/channel/session.js +1 -1
  6. package/dist/src/chunks/{use-eve-agent-CTI9fHaO.js → use-eve-agent-C0SG1Ttk.js} +4 -1
  7. package/dist/src/chunks/{use-eve-agent-DlkXRQVo.js → use-eve-agent-D71oDil7.js} +4 -1
  8. package/dist/src/cli/dev/tui/tool-presentation.js +1 -1
  9. package/dist/src/client/index.d.ts +1 -1
  10. package/dist/src/client/index.js +1 -1
  11. package/dist/src/client/session.js +1 -1
  12. package/dist/src/compiled/.vendor-stamp.json +2 -1
  13. package/dist/src/compiled/@linqapp/chat-sdk-adapter/LICENSE +201 -0
  14. package/dist/src/compiled/@linqapp/chat-sdk-adapter/index.d.ts +3 -0
  15. package/dist/src/compiled/@linqapp/chat-sdk-adapter/index.js +8 -0
  16. package/dist/src/compiler/extension-compatibility.d.ts +4 -4
  17. package/dist/src/compiler/extension-compatibility.js +1 -1
  18. package/dist/src/execution/tasks/parent/hitl-proxy-steps.js +1 -1
  19. package/dist/src/execution/wire/session-inbox-wire.v1.js +1 -1
  20. package/dist/src/internal/application/package.js +1 -1
  21. package/dist/src/packages/eve-catalog/src/index.js +1 -1
  22. package/dist/src/public/channels/discord/hitl.d.ts +3 -3
  23. package/dist/src/public/channels/discord/hitl.js +1 -1
  24. package/dist/src/public/channels/eve.js +1 -1
  25. package/dist/src/public/channels/linq/inboundContent.d.ts +4 -0
  26. package/dist/src/public/channels/linq/inboundContent.js +1 -0
  27. package/dist/src/public/channels/linq/index.d.ts +1 -0
  28. package/dist/src/public/channels/linq/index.js +1 -0
  29. package/dist/src/public/channels/linq/linqChannel.d.ts +66 -0
  30. package/dist/src/public/channels/linq/linqChannel.js +1 -0
  31. package/dist/src/public/channels/mcp.js +1 -1
  32. package/dist/src/public/channels/slack/hitl.d.ts +4 -5
  33. package/dist/src/public/channels/slack/hitl.js +2 -2
  34. package/dist/src/public/channels/slack/interactions.js +1 -1
  35. package/dist/src/public/channels/slack/session-operations.d.ts +2 -2
  36. package/dist/src/public/channels/slack/slackChannel.d.ts +4 -4
  37. package/dist/src/public/channels/teams/api.js +2 -2
  38. package/dist/src/public/channels/teams/defaults.js +1 -1
  39. package/dist/src/public/channels/teams/hitl.d.ts +11 -2
  40. package/dist/src/public/channels/teams/hitl.js +1 -1
  41. package/dist/src/public/channels/teams/index.d.ts +1 -1
  42. package/dist/src/public/channels/teams/index.js +1 -1
  43. package/dist/src/public/channels/teams/teamsChannel.d.ts +8 -0
  44. package/dist/src/public/channels/teams/teamsChannel.js +1 -1
  45. package/dist/src/public/channels/telegram/hitl.d.ts +4 -4
  46. package/dist/src/public/channels/telegram/hitl.js +1 -1
  47. package/dist/src/runtime/framework-tools/ask-question.js +1 -1
  48. package/dist/src/runtime/framework-tools/tasks.d.ts +3 -11
  49. package/dist/src/runtime/framework-tools/tasks.js +1 -1
  50. package/dist/src/runtime/input/types.d.ts +19 -1
  51. package/dist/src/runtime/input/types.js +1 -1
  52. package/dist/src/runtime/prompt/compose.js +1 -1
  53. package/dist/src/runtime/session-callback-route.js +1 -1
  54. package/dist/src/setup/integrations/linq/connect.d.ts +32 -0
  55. package/dist/src/setup/integrations/linq/connect.js +1 -0
  56. package/dist/src/setup/integrations/linq/setup.d.ts +22 -0
  57. package/dist/src/setup/integrations/linq/setup.js +15 -0
  58. package/dist/src/setup/integrations/registry.js +1 -1
  59. package/dist/src/setup/scaffold/create/project.js +1 -1
  60. package/dist/src/setup/scaffold/create/web-template.d.ts +2 -2
  61. package/dist/src/setup/scaffold/create/web-template.js +74 -50
  62. package/dist/src/svelte/index.js +1 -1
  63. package/dist/src/svelte/use-eve-agent.js +1 -1
  64. package/dist/src/vue/index.js +1 -1
  65. package/dist/src/vue/use-eve-agent.js +1 -1
  66. package/docs/channels/custom.mdx +12 -0
  67. package/docs/channels/linq.mdx +67 -0
  68. package/docs/channels/meta.json +1 -0
  69. package/docs/channels/overview.mdx +3 -2
  70. package/docs/channels/teams.mdx +2 -0
  71. package/docs/guides/client/streaming.mdx +1 -1
  72. package/package.json +7 -1
@@ -17,32 +17,40 @@ export default eveChannel({
17
17
 
18
18
  import type { UserContent } from "ai";
19
19
  import { useEveAgent } from "eve/react";
20
- import { AlertCircleIcon } from "lucide-react";
20
+ import { AlertCircleIcon, BrainIcon } from "lucide-react";
21
21
  import { useState } from "react";
22
22
  import {
23
23
  Conversation,
24
24
  ConversationContent,
25
25
  ConversationScrollButton,
26
26
  } from "@/components/ai-elements/conversation";
27
+ import { Message, MessageContent } from "@/components/ai-elements/message";
27
28
  import {
28
29
  PromptInput,
29
30
  type PromptInputMessage,
30
31
  PromptInputSubmit,
31
32
  PromptInputTextarea,
32
33
  } from "@/components/ai-elements/prompt-input";
34
+ import { Shimmer } from "@/components/ai-elements/shimmer";
33
35
  import { cn } from "@/lib/utils";
34
36
  import { AgentMessage } from "./agent-message";
35
37
 
36
38
  const AGENT_NAME = "__EVE_INIT_APP_NAME__";
37
39
 
38
- type AgentStatus = ReturnType<typeof useEveAgent>["status"];
39
-
40
40
  export function AgentChat() {
41
41
  const [cancellationError, setCancellationError] = useState<string>();
42
42
  const agent = useEveAgent();
43
43
  const isBusy = agent.status === "submitted" || agent.status === "streaming";
44
44
  const isEmpty = agent.data.messages.length === 0;
45
- const errorMessage = cancellationError ?? agent.error?.message;
45
+ const lastMessage = agent.data.messages.at(-1);
46
+ const isPendingAssistantShell =
47
+ lastMessage?.role === "assistant" &&
48
+ lastMessage.parts.every((part) => part.type === "step-start");
49
+ const showPendingThinking =
50
+ isBusy &&
51
+ (agent.status === "submitted" || lastMessage?.role !== "assistant" || isPendingAssistantShell);
52
+ const turnFailure = isBusy ? undefined : getLatestTurnFailure(agent.events);
53
+ const errorMessage = cancellationError ?? agent.error?.message ?? turnFailure;
46
54
 
47
55
  const requestCancellation = () => {
48
56
  setCancellationError(undefined);
@@ -80,7 +88,7 @@ export function AgentChat() {
80
88
 
81
89
  const composer = (
82
90
  <PromptInput onSubmit={handleSubmit}>
83
- <PromptInputTextarea placeholder="Send a message…" />
91
+ <PromptInputTextarea disabled={isBusy} placeholder="Send a message…" />
84
92
  <PromptInputSubmit onStop={requestCancellation} status={agent.status} />
85
93
  </PromptInput>
86
94
  );
@@ -88,17 +96,17 @@ export function AgentChat() {
88
96
  return (
89
97
  <main className="flex h-dvh flex-col overflow-hidden bg-background text-foreground">
90
98
  {isEmpty ? null : (
91
- <header className="flex h-14 shrink-0 items-center justify-center gap-3 pl-4 pr-2">
92
- <span className="flex min-w-0 items-center gap-2">
93
- <span className="truncate text-muted-foreground text-sm">{AGENT_NAME}</span>
94
- <StatusDot status={agent.status} />
95
- </span>
99
+ <header className="flex h-14 shrink-0 items-center justify-center pl-4 pr-2">
100
+ <span className="truncate text-muted-foreground text-sm">{AGENT_NAME}</span>
96
101
  </header>
97
102
  )}
98
103
 
99
104
  {errorMessage ? (
100
105
  <div className="mx-auto w-full max-w-3xl shrink-0 px-4 pt-2 sm:px-6">
101
- <div className="flex items-start gap-3 rounded-lg border border-destructive/30 bg-destructive/5 px-3 py-2.5 text-sm">
106
+ <div
107
+ className="flex items-start gap-3 rounded-lg border border-destructive/30 bg-destructive/5 px-3 py-2.5 text-sm"
108
+ role="alert"
109
+ >
102
110
  <AlertCircleIcon className="mt-0.5 size-4 shrink-0 text-destructive" />
103
111
  <div>
104
112
  <p className="font-medium">Request failed</p>
@@ -111,20 +119,25 @@ export function AgentChat() {
111
119
  {isEmpty ? null : (
112
120
  <Conversation className="min-h-0 flex-1">
113
121
  <ConversationContent className="mx-auto w-full max-w-3xl gap-6 px-4 py-6 sm:px-6">
114
- {agent.data.messages.map((message, index) => (
115
- <AgentMessage
116
- canRespond={!isBusy}
117
- isStreaming={
118
- agent.status === "streaming" && index === agent.data.messages.length - 1
119
- }
120
- key={message.id}
121
- message={message}
122
- onInputResponses={(inputResponses) => {
123
- setCancellationError(undefined);
124
- return agent.respond(inputResponses);
125
- }}
126
- />
127
- ))}
122
+ {agent.data.messages.map((message, index) =>
123
+ showPendingThinking &&
124
+ isPendingAssistantShell &&
125
+ message.id === lastMessage.id ? null : (
126
+ <AgentMessage
127
+ canRespond={!isBusy}
128
+ isStreaming={
129
+ agent.status === "streaming" && index === agent.data.messages.length - 1
130
+ }
131
+ key={message.id}
132
+ message={message}
133
+ onInputResponses={(inputResponses) => {
134
+ setCancellationError(undefined);
135
+ return agent.respond(inputResponses);
136
+ }}
137
+ />
138
+ ),
139
+ )}
140
+ {showPendingThinking ? <PendingThinking /> : null}
128
141
  </ConversationContent>
129
142
  <ConversationScrollButton />
130
143
  </Conversation>
@@ -149,34 +162,45 @@ export function AgentChat() {
149
162
  );
150
163
  }
151
164
 
165
+ function PendingThinking() {
166
+ return (
167
+ <Message aria-live="polite" from="assistant">
168
+ <MessageContent>
169
+ <div className="mb-4 flex w-full items-center gap-2 text-muted-foreground text-sm">
170
+ <BrainIcon className="size-4" />
171
+ <Shimmer duration={1}>Thinking</Shimmer>
172
+ </div>
173
+ </MessageContent>
174
+ </Message>
175
+ );
176
+ }
177
+
152
178
  function toErrorMessage(error: unknown): string {
153
179
  return error instanceof Error ? error.message : "Unable to cancel the response.";
154
180
  }
155
181
 
156
- function StatusDot({ status }: { readonly status: AgentStatus }) {
157
- const isLive = status === "submitted" || status === "streaming";
158
- const tone =
159
- status === "error"
160
- ? "bg-destructive"
161
- : isLive
162
- ? "bg-emerald-500"
163
- : status === "ready"
164
- ? "bg-muted-foreground"
165
- : "bg-muted-foreground/50";
182
+ function getLatestTurnFailure(
183
+ events: ReturnType<typeof useEveAgent>["events"],
184
+ ): string | undefined {
185
+ for (let index = events.length - 1; index >= 0; index -= 1) {
186
+ const event = events[index];
166
187
 
167
- return (
168
- <span className="relative flex size-1">
169
- {isLive ? (
170
- <span
171
- className={cn(
172
- "absolute inline-flex size-full animate-ping rounded-full opacity-75",
173
- tone,
174
- )}
175
- />
176
- ) : null}
177
- <span className={cn("relative inline-flex size-1 rounded-full transition-colors", tone)} />
178
- </span>
179
- );
188
+ if (event.type === "turn.failed") {
189
+ return event.data.code === "MODEL_CALL_FAILED"
190
+ ? "The model is temporarily unavailable. Please try again."
191
+ : event.data.message;
192
+ }
193
+
194
+ if (event.type === "turn.completed" || event.type === "turn.cancelled") {
195
+ return undefined;
196
+ }
197
+
198
+ if (event.type === "message.received") {
199
+ return undefined;
200
+ }
201
+ }
202
+
203
+ return undefined;
180
204
  }
181
205
  `,"app/_components/agent-message.tsx":`"use client";
182
206
 
@@ -1845,7 +1869,7 @@ import { Spinner } from "@/components/ui/spinner";
1845
1869
  import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip";
1846
1870
  import { cn } from "@/lib/utils";
1847
1871
  import type { ChatStatus, FileUIPart, SourceDocumentUIPart } from "ai";
1848
- import { ArrowUpIcon, ImageIcon, Monitor, PlusIcon, SquareIcon, XIcon } from "lucide-react";
1872
+ import { ArrowUpIcon, ImageIcon, Monitor, PlusIcon, XIcon } from "lucide-react";
1849
1873
  import { nanoid } from "nanoid";
1850
1874
  import type {
1851
1875
  ChangeEvent,
@@ -2954,7 +2978,7 @@ export const PromptInputSubmit = ({
2954
2978
  if (status === "submitted") {
2955
2979
  Icon = <Spinner />;
2956
2980
  } else if (status === "streaming") {
2957
- Icon = <SquareIcon className="size-4" />;
2981
+ Icon = <span aria-hidden className="size-2.5 rounded-[2px] bg-current" />;
2958
2982
  } else if (status === "error") {
2959
2983
  Icon = <XIcon className="size-4" />;
2960
2984
  }
@@ -1,3 +1,3 @@
1
- import { n as defaultMessageReducer, t as useEveAgent } from "../chunks/use-eve-agent-CTI9fHaO.js";
1
+ import { n as defaultMessageReducer, t as useEveAgent } from "../chunks/use-eve-agent-C0SG1Ttk.js";
2
2
 
3
3
  export { defaultMessageReducer, useEveAgent };
@@ -1,3 +1,3 @@
1
- import { t as useEveAgent } from "../chunks/use-eve-agent-CTI9fHaO.js";
1
+ import { t as useEveAgent } from "../chunks/use-eve-agent-C0SG1Ttk.js";
2
2
 
3
3
  export { useEveAgent };
@@ -1,3 +1,3 @@
1
- import { n as defaultMessageReducer, t as useEveAgent } from "../chunks/use-eve-agent-DlkXRQVo.js";
1
+ import { n as defaultMessageReducer, t as useEveAgent } from "../chunks/use-eve-agent-D71oDil7.js";
2
2
 
3
3
  export { defaultMessageReducer, useEveAgent };
@@ -1,3 +1,3 @@
1
- import { t as useEveAgent } from "../chunks/use-eve-agent-DlkXRQVo.js";
1
+ import { t as useEveAgent } from "../chunks/use-eve-agent-D71oDil7.js";
2
2
 
3
3
  export { useEveAgent };
@@ -111,6 +111,18 @@ await session.reset({ reason: "Retire this session" });
111
111
  await session.getEventStream({ startIndex: 12 });
112
112
  ```
113
113
 
114
+ `respond()` accepts exact response literals directly. If responses have already
115
+ been widened to `InputResponse[]`—for example, after decoding a platform
116
+ payload—validate them with eve's strict schema before delivery. The validated
117
+ type preserves that proof across channel wrappers:
118
+
119
+ ```ts
120
+ import { parseInputResponses } from "eve/client";
121
+
122
+ const inputResponses = parseInputResponses(decodedResponses);
123
+ await source.respond(inputResponses, { auth });
124
+ ```
125
+
114
126
  Message sends use the channel's `turnPolicy`, which defaults to `"steer"`. An accepted message arriving during an active turn is durably buffered before eve cancels that turn and starts the message as a replacement turn. Configure `turnPolicy: "queue"` on `defineChannel(...)` when active turns should finish in order, or override one send:
115
127
 
116
128
  ```ts
@@ -0,0 +1,67 @@
1
+ ---
2
+ title: Linq
3
+ description: Connect an eve agent to iMessage and SMS through Linq.
4
+ ---
5
+
6
+ Use `linqChannel` to receive and reply to iMessage and SMS conversations through Linq.
7
+
8
+ Run `eve add channel/linq` to choose Vercel Connect or portable credentials. With Vercel Connect, eve signs you in and creates or links a Vercel project when needed. Then choose whether to create a managed Linq account and line or connect an existing Linq account with its partner API token and phone numbers. eve configures the connector and webhook through Connect:
9
+
10
+ ```ts title="agent/channels/linq.ts"
11
+ import { connectLinqCredentials } from "@vercel/connect/eve";
12
+ import { linqChannel } from "eve/channels/linq";
13
+
14
+ export default linqChannel({
15
+ credentials: connectLinqCredentials("linq/my-agent"),
16
+ });
17
+ ```
18
+
19
+ The default webhook route is `/eve/v1/linq`. The channel verifies forwarded webhooks with same-project Vercel OIDC by default, marks accepted messages as read, and continues the same eve session for every message in a Linq conversation. A new accepted message cooperatively cancels an active turn and steers its replacement turn.
20
+
21
+ Set `turnPolicy: "queue"` when every response should finish before Linq starts the next message.
22
+
23
+ Customize inbound dispatch with `onMessage`. Return `null` to ignore a message, or return `title` alongside `auth` to set the title when the dispatch starts a run:
24
+
25
+ ```ts
26
+ export default linqChannel({
27
+ credentials: connectLinqCredentials("linq/my-agent"),
28
+ onMessage(_ctx, message) {
29
+ if (message.author.isBot) return null;
30
+ return {
31
+ auth: null,
32
+ context: [`The sender is ${message.author.fullName}.`],
33
+ };
34
+ },
35
+ });
36
+ ```
37
+
38
+ Set `route` to override the webhook path or `webhookVerifier` to use a different trusted-forwarder verifier.
39
+
40
+ ## Other hosts
41
+
42
+ For a host without Vercel Connect, choose **Use portable credentials** during `eve add channel/linq`. eve writes `LINQ_API_KEY` and `LINQ_WEBHOOK_SECRET` to `.env.local`.
43
+
44
+ After deploying the agent:
45
+
46
+ 1. Create a Linq webhook for your public `https://…/eve/v1/linq` URL with `message.received`, `reaction.added`, and `reaction.removed` events.
47
+ 2. Set `LINQ_API_KEY` and `LINQ_WEBHOOK_SECRET` in the host's encrypted environment variables.
48
+
49
+ To configure the channel by hand, pass the API key and webhook signing secret:
50
+
51
+ ```ts title="agent/channels/linq.ts"
52
+ import { linqChannel } from "eve/channels/linq";
53
+
54
+ export default linqChannel({
55
+ credentials: {
56
+ apiKey: process.env.LINQ_API_KEY!,
57
+ signingSecret: process.env.LINQ_WEBHOOK_SECRET!,
58
+ },
59
+ });
60
+ ```
61
+
62
+ For direct Linq webhooks, pass `signingSecret`. A supplied `webhookVerifier` takes precedence over it.
63
+
64
+ ## What to read next
65
+
66
+ - [Channels overview](./overview): the channel contract and every built-in channel
67
+ - [Auth & route protection](../guides/auth-and-route-protection): authenticating inbound traffic
@@ -6,6 +6,7 @@
6
6
  "eve",
7
7
  "mcp",
8
8
  "slack",
9
+ "linq",
9
10
  "photon",
10
11
  "discord",
11
12
  "teams",
@@ -47,7 +47,7 @@ agent/
47
47
  intake.ts
48
48
  ```
49
49
 
50
- Install a channel from the registry with `eve add channel/photon-imessage`, `eve add channel/slack`, or `eve add channel/web`. You can also author the file by hand.
50
+ Install a channel from the registry with `eve add channel/<name>`, such as `eve add channel/slack` or `eve add channel/web`. You can also author the file by hand.
51
51
 
52
52
  ## The eve HTTP channel (default)
53
53
 
@@ -73,6 +73,7 @@ eve's first-class channels use eve-owned runtimes for webhook handling, verifica
73
73
  | Local tooling, SDK clients, `curl` | [eve HTTP channel](./eve) (default) |
74
74
  | MCP clients delegating durable work | [MCP](./mcp) |
75
75
  | Slack mentions, DMs, buttons | [Slack](./slack) |
76
+ | iMessage and SMS | [Linq](./linq) |
76
77
  | iMessage | [Photon](./photon) |
77
78
  | Discord slash commands, components | [Discord](./discord) |
78
79
  | Microsoft Teams messages + Adaptive Cards | [Teams](./teams) |
@@ -94,7 +95,7 @@ Where an eve agent communicates with people, you may be required to disclose tha
94
95
  - [eve HTTP channel](./eve): the default session API behind the TUI, SDK clients, and browser UIs
95
96
  - [Slack](./slack): the most common platform channel, end to end
96
97
  - [MCP](./mcp): expose the agent as a durable invocation service
97
- - [Photon](./photon), [Discord](./discord), [Teams](./teams), [Telegram](./telegram), [Twilio](./twilio), [GitHub](./github), and [Linear](./linear): the other first-class platform channels
98
+ - [Linq](./linq), [Photon](./photon), [Discord](./discord), [Teams](./teams), [Telegram](./telegram), [Twilio](./twilio), [GitHub](./github), and [Linear](./linear): the other first-class platform channels
98
99
  - [Chat SDK adapters](./chat-sdk): reach services eve has no first-class channel for
99
100
  - [Custom channels](./custom): build a channel for any surface with `defineChannel`
100
101
  - [Durable cross-channel notifications](../patterns/durable-cross-channel-notifications): post to another platform without starting an agent turn
@@ -56,6 +56,8 @@ A human-in-the-loop (HITL) `input.requested` event renders as an Adaptive Card.
56
56
 
57
57
  By default, submissions use the Teams identity of the user who clicked the card. If you customize `onMessage` for an allowlist, configure the same policy in `onInputResponse`; eve otherwise rejects HITL submissions rather than bypassing the message gate.
58
58
 
59
+ When a tool approval settles, eve replaces its Adaptive Card with the outcome and responder name. A response rejected by an approval policy leaves the shared card unchanged.
60
+
59
61
  For invokes that aren't HITL, handle them in `onInvoke(ctx, activity)`.
60
62
 
61
63
  ### Proactive sessions
@@ -124,7 +124,7 @@ client-resolvable `http(s)` and `data:` URLs.
124
124
 
125
125
  `authorization.required` is different from the normal `session.waiting` boundary. It means a connection needs OAuth or another authorization challenge before the parked turn can continue. Chat UIs should render the authorization prompt, disable ordinary text input for that session, and persist the event with the rest of the chat history.
126
126
 
127
- If you support refresh while an authorization prompt is pending, keep the session cursor from the started session and rehydrate the saved events on load. Do not treat a missing `session.waiting` after `authorization.required` as a finished conversation; the callback or a structured decline should resume the same eve session.
127
+ The stream can emit an interim `session.waiting` while the authorization callback is pending. An active `send()` or `respond()` response stays attached across that parking boundary until the authorization resolves and the resumed turn reaches its next boundary. If you support refresh while an authorization prompt is pending, keep the session cursor from the started session and rehydrate the saved events on load; the callback or a structured decline resumes the same eve session.
128
128
 
129
129
  ## Reconnection
130
130
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eve",
3
- "version": "0.40.0",
3
+ "version": "0.42.0",
4
4
  "private": false,
5
5
  "description": "Filesystem-first framework for durable backend AI agents that run anywhere.",
6
6
  "keywords": [
@@ -251,6 +251,11 @@
251
251
  "import": "./dist/src/public/channels/photon/index.js",
252
252
  "default": "./dist/src/public/channels/photon/index.js"
253
253
  },
254
+ "./channels/linq": {
255
+ "types": "./dist/src/public/channels/linq/index.d.ts",
256
+ "import": "./dist/src/public/channels/linq/index.js",
257
+ "default": "./dist/src/public/channels/linq/index.js"
258
+ },
254
259
  "./channels/github": {
255
260
  "types": "./dist/src/public/channels/github/index.d.ts",
256
261
  "import": "./dist/src/public/channels/github/index.js",
@@ -315,6 +320,7 @@
315
320
  "@chat-adapter/state-memory": "4.34.0",
316
321
  "@chat-adapter/twilio": "4.34.0",
317
322
  "@clack/core": "1.3.1",
323
+ "@linqapp/chat-sdk-adapter": "^0.3.0",
318
324
  "@modelcontextprotocol/server": "2.0.0",
319
325
  "@nuxt/kit": "^4.0.0",
320
326
  "@opentelemetry/context-async-hooks": "2.6.1",