@elizaos/plugin-line 2.0.0-alpha.7 → 2.0.0-beta.1
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/README.md +185 -0
- package/dist/actions/index.d.ts +0 -6
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +2 -6
- package/dist/actions/index.js.map +1 -1
- package/dist/connector-account-provider.d.ts +16 -0
- package/dist/connector-account-provider.d.ts.map +1 -0
- package/dist/connector-account-provider.js +82 -0
- package/dist/connector-account-provider.js.map +1 -0
- package/dist/index.d.ts +2 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -12
- package/dist/index.js.map +1 -1
- package/dist/providers/index.d.ts +3 -2
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +4 -2
- package/dist/providers/index.js.map +1 -1
- package/dist/service.d.ts +10 -2
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +347 -14
- package/dist/service.js.map +1 -1
- package/dist/workflow-credential-provider.d.ts +21 -0
- package/dist/workflow-credential-provider.d.ts.map +1 -0
- package/dist/workflow-credential-provider.js +32 -0
- package/dist/workflow-credential-provider.js.map +1 -0
- package/package.json +10 -10
- package/dist/actions/sendFlexMessage.d.ts +0 -6
- package/dist/actions/sendFlexMessage.d.ts.map +0 -1
- package/dist/actions/sendFlexMessage.js +0 -204
- package/dist/actions/sendFlexMessage.js.map +0 -1
- package/dist/actions/sendLocation.d.ts +0 -6
- package/dist/actions/sendLocation.d.ts.map +0 -1
- package/dist/actions/sendLocation.js +0 -181
- package/dist/actions/sendLocation.js.map +0 -1
- package/dist/actions/sendMessage.d.ts +0 -6
- package/dist/actions/sendMessage.d.ts.map +0 -1
- package/dist/actions/sendMessage.js +0 -172
- package/dist/actions/sendMessage.js.map +0 -1
- package/dist/providers/chatContext.d.ts +0 -6
- package/dist/providers/chatContext.d.ts.map +0 -1
- package/dist/providers/chatContext.js +0 -86
- package/dist/providers/chatContext.js.map +0 -1
- package/dist/providers/userContext.d.ts +0 -6
- package/dist/providers/userContext.d.ts.map +0 -1
- package/dist/providers/userContext.js +0 -71
- package/dist/providers/userContext.js.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# @elizaos/plugin-line
|
|
2
|
+
|
|
3
|
+
LINE Messaging API plugin for ElizaOS agents. Enables chatbot integration with LINE, a popular messaging platform in Japan, Taiwan, and Thailand.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Text Messages**: Send and receive text messages
|
|
8
|
+
- **Rich Messages (Flex)**: Create visually rich card messages
|
|
9
|
+
- **Location Messages**: Share locations with map pins
|
|
10
|
+
- **Quick Replies**: Provide suggested reply options
|
|
11
|
+
- **Group/Room Support**: Operate in groups and multi-user rooms
|
|
12
|
+
- **User Profiles**: Access user display names, pictures, and language
|
|
13
|
+
- **Webhook Integration**: Receive messages via LINE webhooks
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# npm
|
|
19
|
+
npm install @elizaos/plugin-line
|
|
20
|
+
|
|
21
|
+
# bun
|
|
22
|
+
bun add @elizaos/plugin-line
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Configuration
|
|
26
|
+
|
|
27
|
+
### Environment Variables
|
|
28
|
+
|
|
29
|
+
| Variable | Description | Required |
|
|
30
|
+
|----------|-------------|----------|
|
|
31
|
+
| `LINE_CHANNEL_ACCESS_TOKEN` | Channel access token from LINE Developers Console | Yes |
|
|
32
|
+
| `LINE_CHANNEL_SECRET` | Channel secret for webhook verification | Yes |
|
|
33
|
+
| `LINE_WEBHOOK_PATH` | Webhook endpoint path | No |
|
|
34
|
+
| `LINE_DM_POLICY` | DM policy: open, pairing, allowlist, disabled | No |
|
|
35
|
+
| `LINE_GROUP_POLICY` | Group policy: open, allowlist, disabled | No |
|
|
36
|
+
| `LINE_ALLOW_FROM` | Comma-separated user IDs for allowlist | No |
|
|
37
|
+
| `LINE_ENABLED` | Enable/disable the plugin | No |
|
|
38
|
+
|
|
39
|
+
### Agent Configuration
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"plugins": ["@elizaos/plugin-line"],
|
|
44
|
+
"pluginParameters": {
|
|
45
|
+
"LINE_CHANNEL_ACCESS_TOKEN": "your-channel-access-token",
|
|
46
|
+
"LINE_CHANNEL_SECRET": "your-channel-secret",
|
|
47
|
+
"LINE_DM_POLICY": "pairing",
|
|
48
|
+
"LINE_GROUP_POLICY": "allowlist"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Setup
|
|
54
|
+
|
|
55
|
+
1. Create a LINE Developers account at https://developers.line.biz/
|
|
56
|
+
2. Create a new Messaging API channel
|
|
57
|
+
3. Get your Channel Access Token (issue a long-lived token)
|
|
58
|
+
4. Get your Channel Secret
|
|
59
|
+
5. Set up webhook URL pointing to your server
|
|
60
|
+
|
|
61
|
+
## Usage
|
|
62
|
+
|
|
63
|
+
### Actions
|
|
64
|
+
|
|
65
|
+
LINE messaging routes through the canonical `MESSAGE` action using
|
|
66
|
+
`source: "line"`.
|
|
67
|
+
|
|
68
|
+
| Primary action | Operation | Description |
|
|
69
|
+
|----------------|-----------|-------------|
|
|
70
|
+
| `MESSAGE` | `send` | Send text, flex, or location content to a user, group, or room |
|
|
71
|
+
| `MESSAGE` | `read_channel` | Read recent LINE conversation history when available |
|
|
72
|
+
| `MESSAGE` | `list_channels` | List recent LINE targets when available |
|
|
73
|
+
|
|
74
|
+
### Providers
|
|
75
|
+
|
|
76
|
+
LINE does not register standalone planner providers. Chat and user context is
|
|
77
|
+
exposed through the LINE message connector hooks.
|
|
78
|
+
|
|
79
|
+
## LINE ID Formats
|
|
80
|
+
|
|
81
|
+
- **User IDs**: Start with `U` followed by 32 hex characters (e.g., `U1234567890abcdef1234567890abcdef`)
|
|
82
|
+
- **Group IDs**: Start with `C` followed by 32 hex characters
|
|
83
|
+
- **Room IDs**: Start with `R` followed by 32 hex characters
|
|
84
|
+
|
|
85
|
+
## Message Limits
|
|
86
|
+
|
|
87
|
+
- Text messages: 5000 characters max
|
|
88
|
+
- Alt text (for flex/template): 400 characters max
|
|
89
|
+
- Location title/address: 100 characters max
|
|
90
|
+
- Messages per push: 5 max (batched automatically)
|
|
91
|
+
|
|
92
|
+
## Webhook Setup
|
|
93
|
+
|
|
94
|
+
1. Configure your webhook URL in the LINE Developers Console
|
|
95
|
+
2. Ensure your server verifies webhook signatures using the channel secret
|
|
96
|
+
3. The plugin provides middleware for Express-style webhook handling
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
import { LineService } from "@elizaos/plugin-line";
|
|
100
|
+
|
|
101
|
+
// Get the middleware
|
|
102
|
+
const middleware = lineService.createMiddleware();
|
|
103
|
+
|
|
104
|
+
// Use with Express
|
|
105
|
+
app.post("/webhooks/line", middleware, async (req, res) => {
|
|
106
|
+
const events = req.body.events;
|
|
107
|
+
await lineService.handleWebhookEvents(events);
|
|
108
|
+
res.status(200).end();
|
|
109
|
+
});
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Flex Messages
|
|
113
|
+
|
|
114
|
+
LINE Flex Messages allow rich visual content. The plugin supports creating info card bubbles:
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
const flexMessage = {
|
|
118
|
+
altText: "Update Notification",
|
|
119
|
+
contents: {
|
|
120
|
+
type: "bubble",
|
|
121
|
+
body: {
|
|
122
|
+
type: "box",
|
|
123
|
+
layout: "vertical",
|
|
124
|
+
contents: [
|
|
125
|
+
{ type: "text", text: "Title", weight: "bold", size: "xl" },
|
|
126
|
+
{ type: "text", text: "Body content", margin: "md", wrap: true }
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Security Policies
|
|
134
|
+
|
|
135
|
+
### DM Policies
|
|
136
|
+
|
|
137
|
+
| Policy | Description |
|
|
138
|
+
|--------|-------------|
|
|
139
|
+
| `open` | Accept DMs from anyone |
|
|
140
|
+
| `pairing` | Accept DMs and remember senders |
|
|
141
|
+
| `allowlist` | Only accept from LINE_ALLOW_FROM list |
|
|
142
|
+
| `disabled` | Don't accept any DMs |
|
|
143
|
+
|
|
144
|
+
### Group Policies
|
|
145
|
+
|
|
146
|
+
| Policy | Description |
|
|
147
|
+
|--------|-------------|
|
|
148
|
+
| `open` | Respond to anyone in groups |
|
|
149
|
+
| `allowlist` | Only respond to allowed users |
|
|
150
|
+
| `disabled` | Don't respond in groups |
|
|
151
|
+
|
|
152
|
+
## Development
|
|
153
|
+
|
|
154
|
+
### Building
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
cd typescript && npm run build
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Testing
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
npm test
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## API Reference
|
|
167
|
+
|
|
168
|
+
### LineService
|
|
169
|
+
|
|
170
|
+
#### Methods
|
|
171
|
+
|
|
172
|
+
- `isConnected()`: Check connection status
|
|
173
|
+
- `getBotInfo()`: Get bot profile
|
|
174
|
+
- `sendMessage(to, text, options?)`: Send text message
|
|
175
|
+
- `sendFlexMessage(to, flex)`: Send flex message
|
|
176
|
+
- `sendTemplateMessage(to, template)`: Send template message
|
|
177
|
+
- `sendLocationMessage(to, location)`: Send location
|
|
178
|
+
- `replyMessage(replyToken, messages)`: Reply using token
|
|
179
|
+
- `getUserProfile(userId)`: Get user profile
|
|
180
|
+
- `getGroupInfo(groupId)`: Get group info
|
|
181
|
+
- `leaveChat(chatId, chatType)`: Leave group/room
|
|
182
|
+
|
|
183
|
+
## License
|
|
184
|
+
|
|
185
|
+
MIT
|
package/dist/actions/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":""}
|
package/dist/actions/index.js
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*/
|
|
4
|
-
export { sendFlexMessage } from "./sendFlexMessage.js";
|
|
5
|
-
export { sendLocation } from "./sendLocation.js";
|
|
6
|
-
export { sendMessage } from "./sendMessage.js";
|
|
1
|
+
"use strict";
|
|
2
|
+
// LINE messaging routes through MESSAGE connector hooks.
|
|
7
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":";AAAA,yDAAyD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LINE ConnectorAccountManager provider.
|
|
3
|
+
*
|
|
4
|
+
* Adapts the existing multi-account scaffolding in `accounts.ts` to the
|
|
5
|
+
* `ConnectorAccountProvider` contract from
|
|
6
|
+
* `@elizaos/core/connectors/account-manager`.
|
|
7
|
+
*
|
|
8
|
+
* Source of truth for accounts is character settings (`character.settings.line`)
|
|
9
|
+
* plus env-var fallbacks (LINE_CHANNEL_ACCESS_TOKEN, LINE_CHANNEL_SECRET).
|
|
10
|
+
* `listAccounts` enumerates all configured/enabled accounts; single-account
|
|
11
|
+
* env-only deployments still surface as a `default` account.
|
|
12
|
+
*/
|
|
13
|
+
import type { ConnectorAccountProvider, IAgentRuntime } from "@elizaos/core";
|
|
14
|
+
export declare const LINE_PROVIDER_ID = "line";
|
|
15
|
+
export declare function createLineConnectorAccountProvider(runtime: IAgentRuntime): ConnectorAccountProvider;
|
|
16
|
+
//# sourceMappingURL=connector-account-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector-account-provider.d.ts","sourceRoot":"","sources":["../src/connector-account-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAIV,wBAAwB,EACxB,aAAa,EACd,MAAM,eAAe,CAAC;AASvB,eAAO,MAAM,gBAAgB,SAAS,CAAC;AAsCvC,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,aAAa,GACrB,wBAAwB,CAoC1B"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LINE ConnectorAccountManager provider.
|
|
3
|
+
*
|
|
4
|
+
* Adapts the existing multi-account scaffolding in `accounts.ts` to the
|
|
5
|
+
* `ConnectorAccountProvider` contract from
|
|
6
|
+
* `@elizaos/core/connectors/account-manager`.
|
|
7
|
+
*
|
|
8
|
+
* Source of truth for accounts is character settings (`character.settings.line`)
|
|
9
|
+
* plus env-var fallbacks (LINE_CHANNEL_ACCESS_TOKEN, LINE_CHANNEL_SECRET).
|
|
10
|
+
* `listAccounts` enumerates all configured/enabled accounts; single-account
|
|
11
|
+
* env-only deployments still surface as a `default` account.
|
|
12
|
+
*/
|
|
13
|
+
import { DEFAULT_ACCOUNT_ID, listEnabledLineAccounts, normalizeAccountId, resolveLineAccount, } from "./accounts.js";
|
|
14
|
+
export const LINE_PROVIDER_ID = "line";
|
|
15
|
+
function purposeForAccount(_account) {
|
|
16
|
+
return ["messaging"];
|
|
17
|
+
}
|
|
18
|
+
function accessGateForAccount(account) {
|
|
19
|
+
const dmPolicy = account.config?.dmPolicy;
|
|
20
|
+
if (dmPolicy === "pairing")
|
|
21
|
+
return "pairing";
|
|
22
|
+
if (dmPolicy === "disabled")
|
|
23
|
+
return "disabled";
|
|
24
|
+
return "open";
|
|
25
|
+
}
|
|
26
|
+
function roleForAccount(_account) {
|
|
27
|
+
// LINE channel access tokens are bot tokens, not user-OAuth.
|
|
28
|
+
return "AGENT";
|
|
29
|
+
}
|
|
30
|
+
function toConnectorAccount(account) {
|
|
31
|
+
const now = Date.now();
|
|
32
|
+
return {
|
|
33
|
+
id: normalizeAccountId(account.accountId),
|
|
34
|
+
provider: LINE_PROVIDER_ID,
|
|
35
|
+
label: account.name ?? account.accountId,
|
|
36
|
+
role: roleForAccount(account),
|
|
37
|
+
purpose: purposeForAccount(account),
|
|
38
|
+
accessGate: accessGateForAccount(account),
|
|
39
|
+
status: account.enabled && account.configured ? "connected" : "disabled",
|
|
40
|
+
createdAt: now,
|
|
41
|
+
updatedAt: now,
|
|
42
|
+
metadata: {
|
|
43
|
+
tokenSource: account.tokenSource,
|
|
44
|
+
dmPolicy: account.config?.dmPolicy ?? "open",
|
|
45
|
+
groupPolicy: account.config?.groupPolicy ?? "allowlist",
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
export function createLineConnectorAccountProvider(runtime) {
|
|
50
|
+
return {
|
|
51
|
+
provider: LINE_PROVIDER_ID,
|
|
52
|
+
label: "LINE",
|
|
53
|
+
listAccounts: async (_manager) => {
|
|
54
|
+
const enabled = listEnabledLineAccounts(runtime);
|
|
55
|
+
if (enabled.length > 0) {
|
|
56
|
+
return enabled.map(toConnectorAccount);
|
|
57
|
+
}
|
|
58
|
+
// Fall back to default account so single-account env-only deployments
|
|
59
|
+
// still surface in the manager. Status reflects token configuration.
|
|
60
|
+
const fallback = resolveLineAccount(runtime, DEFAULT_ACCOUNT_ID);
|
|
61
|
+
return [toConnectorAccount(fallback)];
|
|
62
|
+
},
|
|
63
|
+
createAccount: async (input, _manager) => {
|
|
64
|
+
return {
|
|
65
|
+
...input,
|
|
66
|
+
provider: LINE_PROVIDER_ID,
|
|
67
|
+
role: input.role ?? "AGENT",
|
|
68
|
+
purpose: input.purpose ?? ["messaging"],
|
|
69
|
+
accessGate: input.accessGate ?? "open",
|
|
70
|
+
status: input.status ?? "pending",
|
|
71
|
+
};
|
|
72
|
+
},
|
|
73
|
+
patchAccount: async (_accountId, patch, _manager) => {
|
|
74
|
+
return { ...patch, provider: LINE_PROVIDER_ID };
|
|
75
|
+
},
|
|
76
|
+
deleteAccount: async (_accountId, _manager) => {
|
|
77
|
+
// No-op at provider layer — runtime credentials live in character
|
|
78
|
+
// settings; deletion of those is out of band.
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=connector-account-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector-account-provider.js","sourceRoot":"","sources":["../src/connector-account-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,EAElB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEvC,SAAS,iBAAiB,CAAC,QAA6B;IACtD,OAAO,CAAC,WAAW,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,oBAAoB,CAAC,OAA4B;IACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1C,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC7C,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC;IAC/C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,QAA6B;IACnD,6DAA6D;IAC7D,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA4B;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,OAAO;QACL,EAAE,EAAE,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC;QACzC,QAAQ,EAAE,gBAAgB;QAC1B,KAAK,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,SAAS;QACxC,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC;QAC7B,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC;QACnC,UAAU,EAAE,oBAAoB,CAAC,OAAO,CAAC;QACzC,MAAM,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU;QACxE,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;QACd,QAAQ,EAAE;YACR,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,IAAI,MAAM;YAC5C,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,IAAI,WAAW;SACxD;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,OAAsB;IAEtB,OAAO;QACL,QAAQ,EAAE,gBAAgB;QAC1B,KAAK,EAAE,MAAM;QACb,YAAY,EAAE,KAAK,EAAE,QAAiC,EAA+B,EAAE;YACrF,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;YACjD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YACzC,CAAC;YACD,sEAAsE;YACtE,qEAAqE;YACrE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;YACjE,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,aAAa,EAAE,KAAK,EAAE,KAA4B,EAAE,QAAiC,EAAE,EAAE;YACvF,OAAO;gBACL,GAAG,KAAK;gBACR,QAAQ,EAAE,gBAAgB;gBAC1B,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,OAAO;gBAC3B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC;gBACvC,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,MAAM;gBACtC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;aAClC,CAAC;QACJ,CAAC;QACD,YAAY,EAAE,KAAK,EACjB,UAAkB,EAClB,KAA4B,EAC5B,QAAiC,EACjC,EAAE;YACF,OAAO,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QAClD,CAAC;QACD,aAAa,EAAE,KAAK,EAAE,UAAkB,EAAE,QAAiC,EAAE,EAAE;YAC7E,kEAAkE;YAClE,8CAA8C;QAChD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,15 +5,11 @@
|
|
|
5
5
|
* supporting text, flex messages, locations, and more.
|
|
6
6
|
*/
|
|
7
7
|
import type { Plugin } from "@elizaos/core";
|
|
8
|
-
import { sendFlexMessage, sendLocation, sendMessage } from "./actions/index.js";
|
|
9
|
-
import { chatContextProvider, userContextProvider } from "./providers/index.js";
|
|
10
8
|
import { LineService } from "./service.js";
|
|
11
|
-
export * from "./types.js";
|
|
12
|
-
export { LineService };
|
|
13
|
-
export { sendMessage, sendFlexMessage, sendLocation };
|
|
14
|
-
export { chatContextProvider, userContextProvider };
|
|
15
9
|
export { DEFAULT_ACCOUNT_ID, isLineMentionRequired, isLineUserAllowed, isMultiAccountEnabled, type LineAccountConfig, type LineGroupConfig, type LineMultiAccountConfig, type LineTokenResolution, type LineTokenSource, listEnabledLineAccounts, listLineAccountIds, normalizeAccountId, type ResolvedLineAccount, resolveDefaultLineAccountId, resolveLineAccount, resolveLineGroupConfig, resolveLineSecret, resolveLineToken, } from "./accounts.js";
|
|
16
10
|
export { buildLineDeepLink, type ChunkLineTextOpts, type CodeBlock, chunkLineText, extractCodeBlocks, extractLinks, extractMarkdownTables, formatCodeBlockAsText, formatLineUser, formatTableAsText, getChatId, getChatType, hasMarkdownContent, isGroupChat, LINE_MAX_REPLY_MESSAGES, LINE_TEXT_CHUNK_LIMIT, type MarkdownLink, type MarkdownTable, markdownToLineChunks, type ProcessedLineMessage, processLineMessage, resolveLineSystemLocation, stripMarkdown, truncateText, } from "./messaging.js";
|
|
11
|
+
export * from "./types.js";
|
|
12
|
+
export { LineService };
|
|
17
13
|
/**
|
|
18
14
|
* LINE plugin for ElizaOS agents.
|
|
19
15
|
*/
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAiB,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAiB,MAAM,EAAE,MAAM,eAAe,CAAC;AAG3D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAI3C,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,2BAA2B,EAC3B,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EACjB,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,uBAAuB,EACvB,qBAAqB,EACrB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,oBAAoB,EACpB,KAAK,oBAAoB,EACzB,kBAAkB,EAClB,yBAAyB,EACzB,aAAa,EACb,YAAY,GACb,MAAM,gBAAgB,CAAC;AAExB,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;AAEvB;;GAEG;AACH,QAAA,MAAM,UAAU,EAAE,MAqDjB,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,31 +4,42 @@
|
|
|
4
4
|
* Provides LINE Messaging API integration for ElizaOS agents,
|
|
5
5
|
* supporting text, flex messages, locations, and more.
|
|
6
6
|
*/
|
|
7
|
-
import { logger } from "@elizaos/core";
|
|
8
|
-
import {
|
|
9
|
-
import { chatContextProvider, userContextProvider } from "./providers/index.js";
|
|
7
|
+
import { getConnectorAccountManager, logger } from "@elizaos/core";
|
|
8
|
+
import { createLineConnectorAccountProvider } from "./connector-account-provider.js";
|
|
10
9
|
import { LineService } from "./service.js";
|
|
11
|
-
|
|
12
|
-
export * from "./types.js";
|
|
13
|
-
export { LineService };
|
|
14
|
-
export { sendMessage, sendFlexMessage, sendLocation };
|
|
15
|
-
export { chatContextProvider, userContextProvider };
|
|
10
|
+
import { LineWorkflowCredentialProvider } from "./workflow-credential-provider.js";
|
|
16
11
|
// Account management exports
|
|
17
12
|
export { DEFAULT_ACCOUNT_ID, isLineMentionRequired, isLineUserAllowed, isMultiAccountEnabled, listEnabledLineAccounts, listLineAccountIds, normalizeAccountId, resolveDefaultLineAccountId, resolveLineAccount, resolveLineGroupConfig, resolveLineSecret, resolveLineToken, } from "./accounts.js";
|
|
18
13
|
// Messaging utilities exports
|
|
19
14
|
export { buildLineDeepLink, chunkLineText, extractCodeBlocks, extractLinks, extractMarkdownTables, formatCodeBlockAsText, formatLineUser, formatTableAsText, getChatId, getChatType, hasMarkdownContent, isGroupChat, LINE_MAX_REPLY_MESSAGES, LINE_TEXT_CHUNK_LIMIT, markdownToLineChunks, processLineMessage, resolveLineSystemLocation, stripMarkdown, truncateText, } from "./messaging.js";
|
|
15
|
+
// Re-export types and service
|
|
16
|
+
export * from "./types.js";
|
|
17
|
+
export { LineService };
|
|
20
18
|
/**
|
|
21
19
|
* LINE plugin for ElizaOS agents.
|
|
22
20
|
*/
|
|
23
21
|
const linePlugin = {
|
|
24
22
|
name: "line",
|
|
25
23
|
description: "LINE Messaging API plugin for ElizaOS agents",
|
|
26
|
-
services: [LineService],
|
|
27
|
-
actions: [
|
|
28
|
-
providers: [
|
|
24
|
+
services: [LineService, LineWorkflowCredentialProvider],
|
|
25
|
+
actions: [],
|
|
26
|
+
providers: [],
|
|
29
27
|
tests: [],
|
|
30
|
-
init: async (config,
|
|
28
|
+
init: async (config, runtime) => {
|
|
31
29
|
logger.info("Initializing LINE plugin...");
|
|
30
|
+
// Register the LINE provider with the ConnectorAccountManager so the HTTP
|
|
31
|
+
// CRUD surface (packages/agent/src/api/connector-account-routes.ts) can
|
|
32
|
+
// list, create, patch, and delete LINE accounts.
|
|
33
|
+
try {
|
|
34
|
+
const manager = getConnectorAccountManager(runtime);
|
|
35
|
+
manager.registerProvider(createLineConnectorAccountProvider(runtime));
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
logger.warn({
|
|
39
|
+
src: "plugin:line",
|
|
40
|
+
err: err instanceof Error ? err.message : String(err),
|
|
41
|
+
}, "Failed to register LINE provider with ConnectorAccountManager");
|
|
42
|
+
}
|
|
32
43
|
const hasAccessToken = Boolean(config.LINE_CHANNEL_ACCESS_TOKEN || process.env.LINE_CHANNEL_ACCESS_TOKEN);
|
|
33
44
|
const hasSecret = Boolean(config.LINE_CHANNEL_SECRET || process.env.LINE_CHANNEL_SECRET);
|
|
34
45
|
logger.info("LINE plugin configuration:");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* LINE plugin providers.
|
|
3
|
+
*
|
|
4
|
+
* Chat and user context are supplied by core PLATFORM_* providers through the
|
|
5
|
+
* registered LINE message connector hooks.
|
|
3
6
|
*/
|
|
4
|
-
export { chatContextProvider } from "./chatContext.js";
|
|
5
|
-
export { userContextProvider } from "./userContext.js";
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
package/dist/providers/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* LINE plugin providers.
|
|
4
|
+
*
|
|
5
|
+
* Chat and user context are supplied by core PLATFORM_* providers through the
|
|
6
|
+
* registered LINE message connector hooks.
|
|
3
7
|
*/
|
|
4
|
-
export { chatContextProvider } from "./chatContext.js";
|
|
5
|
-
export { userContextProvider } from "./userContext.js";
|
|
6
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
|
package/dist/service.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* LINE service implementation for ElizaOS.
|
|
3
3
|
*/
|
|
4
|
-
import type { IAgentRuntime } from "@elizaos/core";
|
|
4
|
+
import type { Content, IAgentRuntime } from "@elizaos/core";
|
|
5
5
|
import { Service } from "@elizaos/core";
|
|
6
|
-
import { type MiddlewareConfig, middleware, type
|
|
6
|
+
import { type MiddlewareConfig, middleware, type webhook } from "@line/bot-sdk";
|
|
7
|
+
type WebhookEvent = webhook.Event;
|
|
7
8
|
import { type ILineService, type LineFlexMessage, type LineGroup, type LineLocationMessage, type LineMessageSendOptions, type LineSendResult, type LineSettings, type LineTemplateMessage, type LineUser } from "./types.js";
|
|
8
9
|
/**
|
|
9
10
|
* LINE messaging service for ElizaOS agents.
|
|
@@ -19,6 +20,7 @@ export declare class LineService extends Service implements ILineService {
|
|
|
19
20
|
* Start the LINE service.
|
|
20
21
|
*/
|
|
21
22
|
static start(runtime: IAgentRuntime): Promise<Service>;
|
|
23
|
+
static registerSendHandlers(runtime: IAgentRuntime, service: LineService): void;
|
|
22
24
|
/**
|
|
23
25
|
* Initialize the service.
|
|
24
26
|
*/
|
|
@@ -93,10 +95,16 @@ export declare class LineService extends Service implements ILineService {
|
|
|
93
95
|
* Get current settings.
|
|
94
96
|
*/
|
|
95
97
|
getSettings(): LineSettings | null;
|
|
98
|
+
sendDirectMessage(target: string, content: Content): Promise<void>;
|
|
99
|
+
sendRoomMessage(target: string, content: Content): Promise<void>;
|
|
100
|
+
private handleSendMessage;
|
|
101
|
+
private sendConnectorContent;
|
|
102
|
+
private listConnectorRooms;
|
|
96
103
|
private loadSettings;
|
|
97
104
|
private validateSettings;
|
|
98
105
|
private pushMessages;
|
|
99
106
|
private handleWebhookEvent;
|
|
100
107
|
private handleMessageEvent;
|
|
101
108
|
}
|
|
109
|
+
export {};
|
|
102
110
|
//# sourceMappingURL=service.d.ts.map
|
package/dist/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|