botmux 2.9.1 → 2.11.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.
- package/README.en.md +39 -3
- package/README.md +34 -2
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +46 -15
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/shared-hints.d.ts +2 -2
- package/dist/adapters/cli/shared-hints.js +2 -2
- package/dist/autostart.d.ts +14 -0
- package/dist/autostart.d.ts.map +1 -0
- package/dist/autostart.js +357 -0
- package/dist/autostart.js.map +1 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +2 -3
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli.js +32 -1
- package/dist/cli.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +69 -62
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/worker-pool.js +1 -1
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +69 -38
- package/dist/daemon.js.map +1 -1
- package/dist/im/lark/card-handler.js +1 -1
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +1 -1
- package/dist/im/lark/event-dispatcher.js +1 -1
- package/dist/im/lark/forwarded-renderer.d.ts +23 -0
- package/dist/im/lark/forwarded-renderer.d.ts.map +1 -0
- package/dist/im/lark/forwarded-renderer.js +105 -0
- package/dist/im/lark/forwarded-renderer.js.map +1 -0
- package/dist/services/session-store.js +4 -4
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +22 -6
- package/dist/skills/definitions.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +2 -3
- package/dist/utils/logger.js.map +1 -1
- package/dist/worker.js +8 -6
- package/dist/worker.js.map +1 -1
- package/package.json +3 -2
package/README.en.md
CHANGED
|
@@ -48,7 +48,7 @@ Compared to OpenClaw-style approaches built on Agent SDKs:
|
|
|
48
48
|
| Feature | botmux | OpenClaw-style |
|
|
49
49
|
|---------|--------|---------------|
|
|
50
50
|
| Architecture | Bridges full CLI processes directly | Rebuilds on Agent SDK |
|
|
51
|
-
| CLI Capabilities | Full runtime (hooks, memory, plan mode,
|
|
51
|
+
| CLI Capabilities | Full runtime (hooks, memory, plan mode, skills, `/` commands) | SDK API subset, missing features must be reimplemented |
|
|
52
52
|
| CLI Upgrades | Zero-adaptation automatic benefit | Must track SDK version changes |
|
|
53
53
|
| Memory / Context | Reuses CLI's built-in memory system, improves as the CLI evolves | Must build custom memory system, duplicating CLI-native capabilities |
|
|
54
54
|
| Multi-CLI Support | 4 CLIs, switch with one config (Claude Code / Codex / Gemini / OpenCode) | Tied to a single SDK, cannot switch CLIs |
|
|
@@ -158,6 +158,23 @@ Go to "Version Management & Release", click "Create Version" and publish. Set av
|
|
|
158
158
|
|
|
159
159
|

|
|
160
160
|
|
|
161
|
+
### Step 8: Enable Boot-time Autostart (recommended)
|
|
162
|
+
|
|
163
|
+
Once the bot is sending and receiving messages cleanly, run:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
botmux autostart enable
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
This registers the daemon with your user's init system (launchd on macOS, user systemd on Linux). **No sudo required.** After a reboot — or after logging back in — the daemon comes up on its own; you never need to remember `botmux start` again.
|
|
170
|
+
|
|
171
|
+
- The command only manages the "starts at boot" hook — it does **not** touch a running daemon.
|
|
172
|
+
- On a headless Linux box where you log out between sessions, also run `sudo loginctl enable-linger <your-user>` so user systemd survives logout. The command warns you if linger is off.
|
|
173
|
+
- To disable autostart: `botmux autostart disable` (also leaves the daemon alone). Check state: `botmux autostart status`.
|
|
174
|
+
- After switching nvm/fnm Node versions, re-run `botmux autostart enable` to refresh the embedded paths — `botmux start`/`restart` also detect path drift and refresh in place.
|
|
175
|
+
|
|
176
|
+
See [CLI Commands § Boot-time Autostart](#boot-time-autostart) below for the full reference.
|
|
177
|
+
|
|
161
178
|
---
|
|
162
179
|
|
|
163
180
|
## Features
|
|
@@ -251,8 +268,12 @@ When a CLI spawns inside a botmux session it automatically gets
|
|
|
251
268
|
- `botmux schedule` — manage scheduled tasks
|
|
252
269
|
|
|
253
270
|
These capabilities are wired via `--append-system-prompt` and Skill
|
|
254
|
-
descriptions, so the agent picks them up automatically.
|
|
255
|
-
|
|
271
|
+
descriptions, so the agent picks them up automatically. Compared to
|
|
272
|
+
Anthropic's official Telegram channel — which exposes each action as an
|
|
273
|
+
MCP tool — the Skill + CLI combo skips the MCP handshake on every CLI
|
|
274
|
+
launch, doesn't burn tool-list tokens, and works across every CLI that
|
|
275
|
+
can read a system prompt and shell out (Claude Code / Codex / Gemini /
|
|
276
|
+
OpenCode), with no MCP protocol support required.
|
|
256
277
|
|
|
257
278
|
---
|
|
258
279
|
|
|
@@ -400,6 +421,21 @@ botmux setup
|
|
|
400
421
|
| `botmux delete <id>` | Close a session by ID prefix (alias: `del`/`rm`) |
|
|
401
422
|
| `botmux delete all` | Close all active sessions |
|
|
402
423
|
| `botmux delete stopped` | Clean up zombie sessions with dead processes |
|
|
424
|
+
| `botmux autostart enable` | Register boot-time autostart (macOS launchd / Linux user systemd, no sudo) |
|
|
425
|
+
| `botmux autostart disable` | Unregister boot-time autostart |
|
|
426
|
+
| `botmux autostart status` | Show autostart status |
|
|
427
|
+
|
|
428
|
+
### Boot-time Autostart
|
|
429
|
+
|
|
430
|
+
`botmux autostart enable` registers the daemon with your user's init system so it comes back automatically after a reboot:
|
|
431
|
+
|
|
432
|
+
- **macOS**: writes `~/Library/LaunchAgents/com.botmux.daemon.plist` and loads it via `launchctl bootstrap`. **No sudo required.**
|
|
433
|
+
- **Linux**: writes `~/.config/systemd/user/botmux.service` and runs `systemctl --user enable --now`. **No sudo required.**
|
|
434
|
+
- On servers / headless boxes the user systemd manager stops when you log out. To survive logouts and reboots, also run `sudo loginctl enable-linger <your-user>` — `autostart enable` warns when linger is off.
|
|
435
|
+
- Containers / SSH-only sessions without a user DBus fall back to printing manual instructions.
|
|
436
|
+
- The `node` and `cli.js` paths baked into the unit come from `process.execPath` at install time. After switching nvm/fnm versions, run `botmux autostart enable` once to rewrite. `botmux start`/`restart` also detect path drift and refresh the unit in place — no manual step needed.
|
|
437
|
+
- `enable` / `disable` **only manage the autostart hook — they do not touch a running daemon**. To start the daemon right away run `botmux start`; to stop it run `botmux stop`. This avoids the "I just wanted to turn off autostart, why did my service also die" footgun.
|
|
438
|
+
- If you prefer letting systemd own the lifecycle (`systemctl --user start/stop botmux`), that works too — the unit declares `ExecStop=botmux stop` for a clean shutdown path.
|
|
403
439
|
|
|
404
440
|
### Agent-facing subcommands
|
|
405
441
|
|
package/README.md
CHANGED
|
@@ -52,7 +52,7 @@ botmux 不重新实现 Agent 能力,而是直接桥接已有的 AI 编程 CLI
|
|
|
52
52
|
| 特性 | botmux | OpenClaw 类方案 |
|
|
53
53
|
|------|--------|----------------|
|
|
54
54
|
| 底层架构 | 直接桥接完整 CLI 进程 | 基于 Agent SDK 重新构建 |
|
|
55
|
-
| CLI 能力 | 完整运行时(hooks、memory、plan mode、
|
|
55
|
+
| CLI 能力 | 完整运行时(hooks、memory、plan mode、Skill、`/` 命令) | SDK API 子集,需手动实现缺失功能 |
|
|
56
56
|
| CLI 升级 | 零适配自动受益 | 需要跟进 SDK 版本变更 |
|
|
57
57
|
| 记忆 / 上下文 | 直接复用 CLI 内建的记忆系统,随 CLI 迭代自动增强 | 需自建记忆系统,与 CLI 原生能力重复 |
|
|
58
58
|
| 多 CLI 支持 | 4 种 CLI 一键切换(Claude Code / Codex / Gemini / OpenCode) | 绑定单一 SDK,无法切换 CLI |
|
|
@@ -150,7 +150,7 @@ CLI 进入 botmux 会话时自动获得 `~/.botmux/bin` 在 PATH 中,以及一
|
|
|
150
150
|
- `botmux bots list` — 查询当前群聊的机器人及 open_id
|
|
151
151
|
- `botmux schedule` — 增删改查定时任务
|
|
152
152
|
|
|
153
|
-
这些能力通过 `--append-system-prompt` 注入和 Skill 描述自动引导 agent
|
|
153
|
+
这些能力通过 `--append-system-prompt` 注入和 Skill 描述自动引导 agent 使用。Skill + CLI 的组合相比 Anthropic 官方 Telegram channel 那套 MCP 方案:CLI 启动不用做 MCP 握手、不占用工具列表 token,且对 Claude Code / Codex / Gemini / OpenCode 通用 —— 只要 CLI 能读 system prompt 跑 shell 命令就行,不依赖任何 MCP 协议支持。
|
|
154
154
|
|
|
155
155
|
---
|
|
156
156
|
|
|
@@ -253,6 +253,23 @@ botmux start
|
|
|
253
253
|
|
|
254
254
|

|
|
255
255
|
|
|
256
|
+
### Step 8: 开机自启(推荐)
|
|
257
|
+
|
|
258
|
+
确认机器人能正常收发消息之后,跑一次:
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
botmux autostart enable
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
把 daemon 注册到当前用户的 init 系统(macOS 用 launchd,Linux 用 user systemd),**不需要 sudo**。重启机器、退出再登录都不用再手动 `botmux start`。
|
|
265
|
+
|
|
266
|
+
- 这条命令只管"开机时自动起",不会动你**当前**正在跑的 daemon。
|
|
267
|
+
- Linux 服务器登出会话后想让服务继续跑:另跑一次 `sudo loginctl enable-linger <你的用户名>`,命令本身会在 linger 没开时主动提醒。
|
|
268
|
+
- 想关掉自启:`botmux autostart disable`(同样不会停 daemon);查状态:`botmux autostart status`。
|
|
269
|
+
- 切换 nvm/fnm Node 版本后跑一次 `botmux autostart enable` 重写路径即可——`botmux start`/`restart` 也会自动检测路径漂移。
|
|
270
|
+
|
|
271
|
+
详见下方 [CLI 命令 § 开机自启](#开机自启)。
|
|
272
|
+
|
|
256
273
|
---
|
|
257
274
|
|
|
258
275
|
## 使用指南
|
|
@@ -337,6 +354,21 @@ botmux start
|
|
|
337
354
|
| `botmux delete <id>` | 关闭指定会话,支持 ID 前缀匹配(别名 `del`/`rm`) |
|
|
338
355
|
| `botmux delete all` | 关闭所有活跃会话 |
|
|
339
356
|
| `botmux delete stopped` | 清理所有进程已退出的僵尸会话 |
|
|
357
|
+
| `botmux autostart enable` | 注册开机自启(macOS launchd / Linux user systemd,无需 sudo) |
|
|
358
|
+
| `botmux autostart disable` | 注销开机自启 |
|
|
359
|
+
| `botmux autostart status` | 查看自启状态 |
|
|
360
|
+
|
|
361
|
+
### 开机自启
|
|
362
|
+
|
|
363
|
+
`botmux autostart enable` 把 daemon 注册到当前用户的 init 系统,重启机器后自动起来:
|
|
364
|
+
|
|
365
|
+
- **macOS**:写 `~/Library/LaunchAgents/com.botmux.daemon.plist`,用 `launchctl bootstrap` 加载,**不需要 sudo**。
|
|
366
|
+
- **Linux**:写 `~/.config/systemd/user/botmux.service`,用 `systemctl --user enable --now` 启用,**不需要 sudo**。
|
|
367
|
+
- 服务器/无桌面环境下,登出会话后 user systemd 默认会停服务。需要跨登出常驻请额外跑 `sudo loginctl enable-linger <你的用户名>`,autostart enable 会在 linger 未启用时提示。
|
|
368
|
+
- 容器或 SSH-only 没有 user DBus 的环境会回退到打印手动指令。
|
|
369
|
+
- 单元文件里的 `node` / `cli.js` 路径来自当前 `process.execPath`,nvm/fnm 切版本后跑一次 `botmux autostart enable` 重写即可。`botmux start`/`restart` 也会自动检测路径变化、原地刷新单元文件,无需手动操作。
|
|
370
|
+
- `enable` / `disable` **只管开机自启钩子,不动正在跑的 daemon**。需要立即启动跑 `botmux start`,需要停跑 `botmux stop`。这样就不会"我只是想关掉自启,结果服务也被一起干掉了"。
|
|
371
|
+
- 想用 systemd 管 daemon 生命周期(`systemctl --user start/stop botmux`)也行——unit 里写了 ExecStop 调用 `botmux stop`,是干净的关停路径。
|
|
340
372
|
|
|
341
373
|
### 会话内子命令(给 CLI agent 用)
|
|
342
374
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/claude-code.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AAExD;4EAC4E;AAC5E,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGhF;AAsCD,wBAAgB,uBAAuB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/claude-code.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AAExD;4EAC4E;AAC5E,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGhF;AAsCD,wBAAgB,uBAAuB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,UAAU,CAoIzE;AAED,eAAO,MAAM,MAAM,gCAA0B,CAAC"}
|
|
@@ -70,12 +70,13 @@ export function createClaudeCodeAdapter(pathOverride) {
|
|
|
70
70
|
}
|
|
71
71
|
args.push('--dangerously-skip-permissions');
|
|
72
72
|
args.push('--disallowed-tools', 'EnterPlanMode,ExitPlanMode');
|
|
73
|
-
const
|
|
73
|
+
const identityBlock = botName || botOpenId
|
|
74
74
|
? [
|
|
75
75
|
'',
|
|
76
|
-
'
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
'<identity>',
|
|
77
|
+
` <name>${botName ?? '(未知)'}</name>`,
|
|
78
|
+
` <open_id>${botOpenId ?? '(未知)'}</open_id>`,
|
|
79
|
+
'</identity>',
|
|
79
80
|
'同一群里可能有多个机器人同时被 @,消息里会以 `@名字` 和 `open_id` 区分。',
|
|
80
81
|
'判断本条消息是不是分派给你:对照上面的名字和 open_id。',
|
|
81
82
|
'- 只执行明确分给自己的那部分,别抢别的机器人的活',
|
|
@@ -84,6 +85,7 @@ export function createClaudeCodeAdapter(pathOverride) {
|
|
|
84
85
|
]
|
|
85
86
|
: [];
|
|
86
87
|
args.push('--append-system-prompt', [
|
|
88
|
+
'<botmux_routing>',
|
|
87
89
|
'你连接到了飞书(Lark)话题群。用户在飞书上阅读,看不到你的终端输出。',
|
|
88
90
|
'想让用户看到的内容必须通过 `botmux send` 命令发送,终端输出不会到达聊天。',
|
|
89
91
|
'',
|
|
@@ -94,22 +96,35 @@ export function createClaudeCodeAdapter(pathOverride) {
|
|
|
94
96
|
'- 附带文件:`botmux send --files /path/to/file.pdf "请查收"`',
|
|
95
97
|
'- 需要上下文时用 `botmux thread messages` 读取之前的对话。',
|
|
96
98
|
'- 查看可协作的机器人:`botmux bots list`',
|
|
97
|
-
|
|
99
|
+
'</botmux_routing>',
|
|
100
|
+
...identityBlock,
|
|
98
101
|
].join('\n'));
|
|
99
102
|
return args;
|
|
100
103
|
},
|
|
101
104
|
injectsSessionContext: true,
|
|
102
105
|
async writeInput(pty, content) {
|
|
103
|
-
//
|
|
104
|
-
//
|
|
105
|
-
//
|
|
106
|
-
//
|
|
107
|
-
//
|
|
108
|
-
// paste
|
|
109
|
-
//
|
|
110
|
-
//
|
|
106
|
+
// Type content like a human: literal text via send-keys -l, and each
|
|
107
|
+
// newline replaced by `\` + Enter (Claude Code's documented soft-newline
|
|
108
|
+
// idiom — keeps content in the input box without submitting). The final
|
|
109
|
+
// Enter at the bottom is the unambiguous submit. This sidesteps tmux
|
|
110
|
+
// bracketed-paste mode entirely, which was unreliable: Claude Code can
|
|
111
|
+
// toggle bracketed-paste off mid-session (after slash commands etc.),
|
|
112
|
+
// making tmux's paste-buffer drop the markers and turning embedded \r
|
|
113
|
+
// into Enters that fragment the message into multiple submits.
|
|
114
|
+
//
|
|
115
|
+
// Each tmux send-keys is throttled so the cumulative input rate stays
|
|
116
|
+
// below Claude Code's paste-burst threshold — otherwise on long messages
|
|
117
|
+
// (~1300+ chars / ~25+ lines) Ink flips into paste mode mid-stream and
|
|
118
|
+
// subsequent `\` + Enter pairs are kept as literal `\\\r` in the
|
|
119
|
+
// submitted content instead of being consumed as soft-newline markers.
|
|
120
|
+
//
|
|
121
|
+
// Trailing Enter is still subject to Claude Code's paste-burst heuristic
|
|
122
|
+
// (rapid input followed by Enter can be coalesced as paste), so we keep
|
|
123
|
+
// the JSONL retry loop below as the source of truth for "did it submit".
|
|
111
124
|
const hasImagePath = /\.(jpe?g|png|gif|webp|svg|bmp)\b/i.test(content);
|
|
112
125
|
const submitDelay = hasImagePath ? 800 : 500;
|
|
126
|
+
const TYPING_THROTTLE_MS = 30;
|
|
127
|
+
const tick = () => new Promise(r => setTimeout(r, TYPING_THROTTLE_MS));
|
|
113
128
|
const sendEnter = () => {
|
|
114
129
|
if (pty.sendSpecialKeys)
|
|
115
130
|
pty.sendSpecialKeys('Enter');
|
|
@@ -117,10 +132,26 @@ export function createClaudeCodeAdapter(pathOverride) {
|
|
|
117
132
|
pty.write('\r');
|
|
118
133
|
};
|
|
119
134
|
const baseByte = pty.claudeJsonlPath ? currentFileSize(pty.claudeJsonlPath) : 0;
|
|
120
|
-
if (pty.
|
|
121
|
-
|
|
135
|
+
if (pty.sendText && pty.sendSpecialKeys) {
|
|
136
|
+
const lines = content.split('\n');
|
|
137
|
+
for (let i = 0; i < lines.length; i++) {
|
|
138
|
+
if (lines[i].length > 0) {
|
|
139
|
+
pty.sendText(lines[i]);
|
|
140
|
+
await tick();
|
|
141
|
+
}
|
|
142
|
+
if (i < lines.length - 1) {
|
|
143
|
+
// Soft-newline: backslash + Enter inserts a newline in Claude
|
|
144
|
+
// Code's input box without submitting.
|
|
145
|
+
pty.sendText('\\');
|
|
146
|
+
await tick();
|
|
147
|
+
pty.sendSpecialKeys('Enter');
|
|
148
|
+
await tick();
|
|
149
|
+
}
|
|
150
|
+
}
|
|
122
151
|
}
|
|
123
152
|
else {
|
|
153
|
+
// Non-tmux fallback (raw PTY): bracketed paste is reliable here since
|
|
154
|
+
// we control the markers directly.
|
|
124
155
|
pty.write('\x1b[200~' + content + '\x1b[201~');
|
|
125
156
|
}
|
|
126
157
|
await new Promise(r => setTimeout(r, submitDelay));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/adapters/cli/claude-code.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/adapters/cli/claude-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* `claude-code.ts`; this constant is only consumed by CLIs that don't expose
|
|
6
6
|
* a system-prompt flag (coco / codex / gemini / opencode / aiden).
|
|
7
7
|
*
|
|
8
|
-
* Each array element becomes one
|
|
9
|
-
* `buildNewTopicPrompt` in `session-manager.ts`.
|
|
8
|
+
* Each array element becomes one line inside the `<botmux_routing>` XML block
|
|
9
|
+
* rendered by `buildNewTopicPrompt` in `session-manager.ts`.
|
|
10
10
|
*
|
|
11
11
|
* The phrasing emphasises that `botmux send` is a shell command (not an MCP
|
|
12
12
|
* tool) to stop models — particularly CoCo — from searching the tool list,
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* `claude-code.ts`; this constant is only consumed by CLIs that don't expose
|
|
6
6
|
* a system-prompt flag (coco / codex / gemini / opencode / aiden).
|
|
7
7
|
*
|
|
8
|
-
* Each array element becomes one
|
|
9
|
-
* `buildNewTopicPrompt` in `session-manager.ts`.
|
|
8
|
+
* Each array element becomes one line inside the `<botmux_routing>` XML block
|
|
9
|
+
* rendered by `buildNewTopicPrompt` in `session-manager.ts`.
|
|
10
10
|
*
|
|
11
11
|
* The phrasing emphasises that `botmux send` is a shell command (not an MCP
|
|
12
12
|
* tool) to stop models — particularly CoCo — from searching the tool list,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface AutostartOpts {
|
|
2
|
+
/** Absolute path to the botmux package root (one level up from dist/). */
|
|
3
|
+
pkgRoot: string;
|
|
4
|
+
/** Absolute path to ~/.botmux. */
|
|
5
|
+
configDir: string;
|
|
6
|
+
/** Absolute path to the daemon log dir (used for launchd stdout/err). */
|
|
7
|
+
logDir: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function enableAutostart(opts: AutostartOpts): void;
|
|
10
|
+
export declare function disableAutostart(_opts: AutostartOpts): void;
|
|
11
|
+
export declare function autostartStatus(_opts: AutostartOpts): void;
|
|
12
|
+
/** Re-render the unit/plist file from the current paths without touching enable/disable state. */
|
|
13
|
+
export declare function refreshAutostart(opts: AutostartOpts): boolean;
|
|
14
|
+
//# sourceMappingURL=autostart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autostart.d.ts","sourceRoot":"","sources":["../src/autostart.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,aAAa;IAC5B,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;CAChB;AAoSD,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAUzD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAQ3D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAO1D;AAED,kGAAkG;AAClG,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CA2B7D"}
|