@inline-openclaw/inline 0.0.56 → 0.0.58

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.
@@ -0,0 +1,64 @@
1
+ # Create an Inline Bot Token
2
+
3
+ Use either the macOS app or the CLI to create a bot and get its token.
4
+
5
+ ## Option A: macOS App (Preferences)
6
+
7
+ 1. Open Inline for macOS.
8
+ 2. Open `Inline -> Settings…` (`Cmd+,`).
9
+ 3. Go to `Bots`.
10
+ 4. In `Create Bot`, enter:
11
+ - `Name`
12
+ - `Username` (must end with `bot`, case-insensitive)
13
+ 5. Click `Create Bot`.
14
+ 6. Copy the `New Token` shown after creation.
15
+
16
+ Notes:
17
+ - You can create up to 5 bots.
18
+ - In `Your Bots`, you can reveal or rotate tokens later.
19
+
20
+ ## Option B: Inline CLI
21
+
22
+ 1. Login:
23
+
24
+ ```sh
25
+ inline auth login
26
+ ```
27
+
28
+ 2. Create the bot:
29
+
30
+ ```sh
31
+ inline bots create --name "My Inline Bot" --username myinlinebot
32
+ ```
33
+
34
+ Optional: add the bot to a space on creation:
35
+
36
+ ```sh
37
+ inline bots create --name "My Inline Bot" --username myinlinebot --add-to-space 123
38
+ ```
39
+
40
+ 3. Reveal token:
41
+
42
+ ```sh
43
+ inline bots reveal-token --bot-user-id <BOT_USER_ID>
44
+ ```
45
+
46
+ Tip: if you do not know the bot user id:
47
+
48
+ ```sh
49
+ inline bots list
50
+ ```
51
+
52
+ ## Use Token in OpenClaw
53
+
54
+ Set token under `channels.inline.token`:
55
+
56
+ ```yaml
57
+ channels:
58
+ inline:
59
+ enabled: true
60
+ token: "<INLINE_BOT_TOKEN>"
61
+ ```
62
+
63
+ Alternatively, set `INLINE_TOKEN` in the OpenClaw gateway environment.
64
+ `INLINE_BOT_TOKEN` is also accepted as a compatibility alias.
@@ -0,0 +1,138 @@
1
+ # OpenClaw Setup Guide
2
+
3
+ This guide is the fastest way to get the Inline channel working in OpenClaw.
4
+
5
+ Need a bot token first? See `docs/create-inline-bot.md`.
6
+
7
+ ## 1) Install Plugin
8
+
9
+ ```sh
10
+ openclaw plugins install @inline-openclaw/inline
11
+ ```
12
+
13
+ If already installed, update to latest:
14
+
15
+ ```sh
16
+ openclaw config set plugins.installs.inline.spec '"@inline-openclaw/inline@latest"'
17
+ openclaw plugins update inline
18
+ openclaw gateway restart
19
+ openclaw plugins list
20
+ openclaw channels status
21
+ ```
22
+
23
+ After the first install, an OpenClaw owner can run `/inline_update` in Inline
24
+ and then `/restart`; routine plugin updates do not require host shell access.
25
+
26
+ ## 2) Configure Inline Channel
27
+
28
+ Minimal config (token-only):
29
+
30
+ ```yaml
31
+ channels:
32
+ inline:
33
+ enabled: true
34
+ token: "<INLINE_BOT_TOKEN>"
35
+ ```
36
+
37
+ Notes:
38
+ - `baseUrl` defaults to `https://api.inline.chat`.
39
+ - Instead of storing `token`, you can set `INLINE_TOKEN` in the gateway environment. `INLINE_BOT_TOKEN` is also accepted.
40
+ - `defaultTo` is optional and gives outbound sends a fallback target, for example `chat:<id>` or `user:<id>`, when no explicit target is supplied.
41
+ - If you add an explicit `plugins.entries` block, the plugin entry id is `inline`.
42
+ - For multi-bubble replies, enable `channels.inline.blockStreaming: true`.
43
+ - For reply-driven group flows, set `channels.inline.replyToBotWithoutMention: true`.
44
+ - Groups use `groupPolicy: "open"` and `requireMention: true` by default, so any group can reach the channel but only an explicit mention wakes the bot unless configured otherwise.
45
+ - Inline uses OpenClaw's group-history default; set `channels.inline.historyLimit` to override it, or use `messages.groupChat.historyLimit` as a global fallback.
46
+ - Inline reply-thread handling is available by default, so OpenClaw `threadId` can map to real Inline reply-thread chats.
47
+ - `replyToId` is still a message reply id. Inline reply-thread behavior does not replace ordinary message replies.
48
+ - Legacy `capabilities.replyThreads` settings are ignored; use `replyThreadMode` to control automatic routing.
49
+ - In an Inline group, authorized users can run `/threadreply` to choose this chat's automatic reply-thread mode with buttons.
50
+ - Bot-participated reply threads and Inline dialogs already marked `FOLLOWING` continue without an explicit mention by default, matching Slack. Reply threads also persist recent participation so sparse follow-ups still route. Set `replyThreadRequireExplicitMention: true` globally, per account, or per group if a chat should require `@bot` on every thread message.
51
+ - Reply-thread context defaults to nearby parent-chat messages, the anchor message, and child-thread history. Set `replyThreadParentHistoryLimit: 0` only when a chat should stay strictly thread-local.
52
+ - Use `inline_parent_context` from a reply-thread session when the agent needs more complete parent-chat history than the automatic context window.
53
+ - Inline current-message media is attached like native channels. Reply-thread anchor media is summarized as context and is not promoted to current-message media on every child-thread turn.
54
+ - Message actions include reply/read/search/edit/reactions/channel and participant management; gate groups via `channels.inline.actions.*`.
55
+ - Passive reaction notifications default to `channels.inline.reactionNotifications: "own"` for bot-authored messages. Set it to `"off"` to suppress queued reaction events, `"all"` to queue reactions on any authorized message, or `"allowlist"` with `reactionAllowlist` for selected reaction senders; named accounts can override the same fields.
56
+ - Media uploads (image/video/document) are enabled by default for `mediaUrl` sends; set `channels.inline.mediaMaxMb` if you need a lower cap.
57
+ - Native exec approvals use `channels.inline.execApprovals`. Set `approvers` to Inline user IDs such as `123` or `user:123`, or rely on numeric `commands.ownerAllowFrom`; `target` defaults to approver DMs.
58
+
59
+ Access defaults:
60
+ - DMs use `dmPolicy: "pairing"` unless configured.
61
+ - For private bots, use `dmPolicy: "allowlist"` with your Inline user id in `allowFrom`.
62
+ - For public/demo bots, use `dmPolicy: "open"` with `allowFrom: ["*"]`.
63
+ - Groups use `groupPolicy: "open"` unless configured.
64
+ - Group messages require a bot mention by default (`requireMention: true`). Use `groups` to override mention behavior for selected chats.
65
+ - For selected groups, list numeric chat ids under `groups`.
66
+ - Use `groupAllowFrom` for an account-wide group sender allowlist, or `groups.<chat>.allowFrom` for per-group sender allowlists.
67
+ - `groupAllowFrom` is optional; use it only when specific senders inside allowed groups should be able to trigger the bot.
68
+
69
+ Example reply-thread toggle:
70
+
71
+ ```yaml
72
+ channels:
73
+ inline:
74
+ replyThreadRequireExplicitMention: false
75
+ replyThreadParentHistoryLimit: 10
76
+ groups:
77
+ "123":
78
+ replyThreadMode: "thread"
79
+ replyThreadRequireExplicitMention: true
80
+ replyThreadParentHistoryLimit: 2
81
+ ```
82
+
83
+ ## 3) Start Gateway
84
+
85
+ Foreground:
86
+
87
+ ```sh
88
+ openclaw gateway run
89
+ ```
90
+
91
+ Service:
92
+
93
+ ```sh
94
+ openclaw gateway start
95
+ ```
96
+
97
+ If another gateway service is already running:
98
+
99
+ ```sh
100
+ openclaw gateway stop
101
+ openclaw gateway start
102
+ ```
103
+
104
+ ## 4) Verify Health
105
+
106
+ ```sh
107
+ openclaw plugins list
108
+ openclaw status --deep
109
+ ```
110
+
111
+ Expected:
112
+ - Plugin `inline` is loaded.
113
+ - Channel `Inline` is configured and running/connected.
114
+
115
+ ## 5) Common Fixes
116
+
117
+ - `Config validation failed: plugins.entries.inline: plugin not found: inline`
118
+ - Ensure the plugin is installed and discovered (`openclaw plugins list`).
119
+ - `Inline: SETUP / no token`
120
+ - Ensure `channels.inline.token`, `INLINE_TOKEN`, or `INLINE_BOT_TOKEN` is set.
121
+ - Update plugin to latest (commands above).
122
+ - `doctor --fix` suggests changing the Inline plugin entry
123
+ - Keep the plugin entry id as `inline`, then re-run `openclaw plugins list` and `openclaw channels status`.
124
+
125
+ ## Recommended Hardening (After Basic Setup)
126
+
127
+ ```sh
128
+ openclaw config set session.dmScope '"per-channel-peer"'
129
+ ```
130
+
131
+ Add plugin allowlist to reduce extension loading risk:
132
+
133
+ ```yaml
134
+ plugins:
135
+ allow:
136
+ - inline
137
+ # add other plugin ids you trust
138
+ ```
@@ -106,7 +106,7 @@
106
106
  "type": "object",
107
107
  "additionalProperties": false,
108
108
  "properties": {
109
- "requireMention": { "type": "boolean" },
109
+ "requireMention": { "type": "boolean", "default": true },
110
110
  "replyThreadMode": { "type": "string", "enum": ["auto", "thread", "main"] },
111
111
  "replyThreadAutoCreateMinMessages": { "type": "integer", "minimum": 0 },
112
112
  "replyThreadRequireExplicitMention": { "type": "boolean" },
@@ -141,7 +141,7 @@
141
141
  }
142
142
  }
143
143
  },
144
- "requireMention": { "type": "boolean" },
144
+ "requireMention": { "type": "boolean", "default": true },
145
145
  "replyThreadMode": { "type": "string", "enum": ["auto", "thread", "main"] },
146
146
  "replyThreadAutoCreateMinMessages": { "type": "integer", "minimum": 0 },
147
147
  "replyThreadRequireExplicitMention": { "type": "boolean" },
@@ -462,7 +462,8 @@
462
462
  "additionalProperties": false,
463
463
  "properties": {
464
464
  "requireMention": {
465
- "type": "boolean"
465
+ "type": "boolean",
466
+ "default": true
466
467
  },
467
468
  "replyThreadMode": {
468
469
  "type": "string",
@@ -557,7 +558,8 @@
557
558
  }
558
559
  },
559
560
  "requireMention": {
560
- "type": "boolean"
561
+ "type": "boolean",
562
+ "default": true
561
563
  },
562
564
  "replyThreadMode": {
563
565
  "type": "string",
@@ -970,6 +972,14 @@
970
972
  "label": "Inline",
971
973
  "help": "Inline channel configuration for bot tokens, direct messages, group chats, and Inline-specific reply behavior."
972
974
  },
975
+ "name": {
976
+ "label": "Inline Account Name",
977
+ "help": "Optional display name for this Inline bot account in OpenClaw status and setup surfaces."
978
+ },
979
+ "enabled": {
980
+ "label": "Inline Account Enabled",
981
+ "help": "Enable or disable this Inline bot account without removing its configuration. Defaults to enabled."
982
+ },
973
983
  "baseUrl": {
974
984
  "label": "Inline API Base URL",
975
985
  "help": "Inline API base URL. Defaults to https://api.inline.chat."
@@ -1004,7 +1014,7 @@
1004
1014
  },
1005
1015
  "requireMention": {
1006
1016
  "label": "Inline Require Mention",
1007
- "help": "Require an explicit bot mention in group chats before routing a message to the agent."
1017
+ "help": "Require an explicit bot mention in group chats before routing a message to the agent. Defaults to true."
1008
1018
  },
1009
1019
  "replyToBotWithoutMention": {
1010
1020
  "label": "Inline Reply Mention Bypass",
@@ -1014,6 +1024,10 @@
1014
1024
  "label": "Inline Reply Threads (Legacy)",
1015
1025
  "help": "Legacy compatibility flag. Inline reply-thread tools are available for bot accounts; use replyThreadMode to control automatic routing."
1016
1026
  },
1027
+ "capabilities": {
1028
+ "label": "Inline Capabilities (Legacy)",
1029
+ "help": "Legacy compatibility settings. Inline reply-thread tools are available by default; use replyThreadMode for automatic routing."
1030
+ },
1017
1031
  "replyThreadMode": {
1018
1032
  "label": "Inline Reply Thread Mode",
1019
1033
  "help": "Controls routing for Inline group replies that start from parent-chat messages: \"auto\" creates a child reply thread only when the user explicitly asks for one, \"thread\" routes every eligible top-level turn into a child reply thread anchored to the triggering message, and \"main\" keeps automatic replies in the parent chat. Explicit thread tools remain available."
@@ -1034,6 +1048,10 @@
1034
1048
  "label": "Inline Group Overrides",
1035
1049
  "help": "Per-group settings keyed by Inline chat ID, including sender allowlist, mention, reply-thread mode, reply-thread mention/history policy, deprecated threshold compatibility, and tool policy overrides."
1036
1050
  },
1051
+ "systemPrompt": {
1052
+ "label": "Inline System Prompt",
1053
+ "help": "Additional system guidance applied to agent turns from this Inline account. Per-group systemPrompt values can override it."
1054
+ },
1037
1055
  "accounts": {
1038
1056
  "label": "Inline Accounts",
1039
1057
  "help": "Named Inline bot accounts. Account entries accept the same token, access, group, reply-thread, command, and streaming fields as channels.inline."
@@ -1042,6 +1060,22 @@
1042
1060
  "label": "Inline Message Actions",
1043
1061
  "help": "Enable or disable Inline message-tool action groups such as send, reactions, read, search, translate, edit, participants, message pins, and permissions."
1044
1062
  },
1063
+ "historyLimit": {
1064
+ "label": "Inline Group History Limit",
1065
+ "help": "Maximum recent group messages included as agent context. Uses the OpenClaw group-history default when unset."
1066
+ },
1067
+ "dmHistoryLimit": {
1068
+ "label": "Inline DM History Limit",
1069
+ "help": "Maximum recent direct-message messages included as agent context. Uses the OpenClaw DM-history default when unset."
1070
+ },
1071
+ "parseMarkdown": {
1072
+ "label": "Inline Markdown",
1073
+ "help": "Parse OpenClaw Markdown into Inline formatting for outgoing text. Defaults to true."
1074
+ },
1075
+ "mediaMaxMb": {
1076
+ "label": "Inline Media Limit",
1077
+ "help": "Maximum media size in megabytes accepted for Inline upload and send actions. Must be greater than zero."
1078
+ },
1045
1079
  "reactionNotifications": {
1046
1080
  "label": "Inline Reaction Notifications",
1047
1081
  "help": "Controls passive reaction notifications queued into the agent session: \"off\", \"own\" for bot-authored messages, \"all\" for any authorized message, or \"allowlist\" for reactionAllowlist senders."
@@ -1062,6 +1096,10 @@
1062
1096
  "label": "Inline Bot Command Sync",
1063
1097
  "help": "Controls startup sync for Inline bot commands."
1064
1098
  },
1099
+ "commands": {
1100
+ "label": "Inline Bot Commands",
1101
+ "help": "Configure startup synchronization of OpenClaw native and skill commands to the Inline bot command menu."
1102
+ },
1065
1103
  "commands.nativeSkills": {
1066
1104
  "label": "Inline Skill Command Sync",
1067
1105
  "help": "Controls whether skill bot commands are included in startup command sync."
@@ -1094,6 +1132,34 @@
1094
1132
  "label": "Inline Streaming Mode",
1095
1133
  "help": "Unified Inline stream mode: \"off\" | \"partial\" | \"block\" | \"progress\". \"partial\" edits visible answer previews; \"progress\" sends a silent temporary progress message, edits it while OpenClaw works, and deletes it before the final reply."
1096
1134
  },
1135
+ "textChunkLimit": {
1136
+ "label": "Inline Text Chunk Limit",
1137
+ "help": "Maximum characters per outgoing Inline text chunk. Must be greater than zero."
1138
+ },
1139
+ "chunkMode": {
1140
+ "label": "Inline Chunk Mode",
1141
+ "help": "Choose length-based or newline-aware splitting for outgoing Inline text chunks."
1142
+ },
1143
+ "streamMode": {
1144
+ "label": "Inline Stream Mode (Legacy)",
1145
+ "help": "Legacy alias for the Inline streaming mode. Prefer streaming.mode for new configuration."
1146
+ },
1147
+ "draftChunk": {
1148
+ "label": "Inline Draft Chunking (Legacy)",
1149
+ "help": "Legacy partial-preview chunk thresholds. Prefer streaming.preview.chunk for new configuration."
1150
+ },
1151
+ "blockStreaming": {
1152
+ "label": "Inline Block Streaming (Legacy)",
1153
+ "help": "Legacy switch for block-style streaming. Prefer streaming.mode=\"block\" and streaming.block.enabled."
1154
+ },
1155
+ "streamViaEditMessage": {
1156
+ "label": "Inline Edit Streaming (Legacy)",
1157
+ "help": "Legacy switch for editing one Inline message during partial streaming. Prefer streaming.mode=\"partial\"."
1158
+ },
1159
+ "blockStreamingCoalesce": {
1160
+ "label": "Inline Block Coalescing (Legacy)",
1161
+ "help": "Legacy block coalescing thresholds. Prefer streaming.block.coalesce for new configuration."
1162
+ },
1097
1163
  "streaming.mode": {
1098
1164
  "label": "Inline Streaming Mode",
1099
1165
  "help": "Canonical Inline stream mode: \"off\" | \"partial\" | \"block\" | \"progress\". Use \"progress\" for the separate temporary working indicator; it is independent from final answer streaming."
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inline-openclaw/inline",
3
- "version": "0.0.56",
3
+ "version": "0.0.58",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -13,6 +13,8 @@
13
13
  "dist/*.js.map",
14
14
  "dist/index.d.ts",
15
15
  "dist/index.d.ts.map",
16
+ "README.md",
17
+ "docs/*.md",
16
18
  "LICENSE",
17
19
  "openclaw.plugin.json"
18
20
  ],
@@ -29,11 +31,11 @@
29
31
  "lint": "bunx oxlint --ignore-path ../.oxlintignore src vitest.config.ts",
30
32
  "prepack": "bun run build",
31
33
  "typecheck": "tsc -p tsconfig.json --noEmit",
32
- "test": "vitest run --coverage",
34
+ "test": "vitest run --coverage --maxWorkers=2",
33
35
  "check": "bun run typecheck && bun run lint && bun run test && bun run build"
34
36
  },
35
37
  "dependencies": {
36
- "@inline-chat/realtime-sdk": "0.0.14",
38
+ "@inline-chat/realtime-sdk": "0.0.15",
37
39
  "zod": "4.4.3"
38
40
  },
39
41
  "peerDependencies": {