lightclawbot 1.0.6 → 1.0.8
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 +47 -213
- package/dist/src/config.d.ts +8 -8
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +9 -9
- package/dist/src/config.js.map +1 -1
- package/dist/src/dedup.d.ts +6 -1
- package/dist/src/dedup.d.ts.map +1 -1
- package/dist/src/dedup.js +27 -14
- package/dist/src/dedup.js.map +1 -1
- package/dist/src/download-tool.d.ts +1 -1
- package/dist/src/download-tool.js +9 -9
- package/dist/src/download-tool.js.map +1 -1
- package/dist/src/file-storage.d.ts +9 -9
- package/dist/src/file-storage.d.ts.map +1 -1
- package/dist/src/file-storage.js +10 -10
- package/dist/src/file-storage.js.map +1 -1
- package/dist/src/format-urls.d.ts +5 -5
- package/dist/src/format-urls.js +8 -8
- package/dist/src/format-urls.js.map +1 -1
- package/dist/src/gateway.d.ts.map +1 -1
- package/dist/src/gateway.js +11 -8
- package/dist/src/gateway.js.map +1 -1
- package/dist/src/history/text-processing.d.ts.map +1 -1
- package/dist/src/history/text-processing.js +2 -0
- package/dist/src/history/text-processing.js.map +1 -1
- package/dist/src/inbound.d.ts.map +1 -1
- package/dist/src/inbound.js +18 -19
- package/dist/src/inbound.js.map +1 -1
- package/dist/src/socket/handlers.d.ts +26 -0
- package/dist/src/socket/handlers.d.ts.map +1 -0
- package/dist/src/socket/handlers.js +130 -0
- package/dist/src/socket/handlers.js.map +1 -0
- package/dist/src/socket/index.d.ts +11 -0
- package/dist/src/socket/index.d.ts.map +1 -0
- package/dist/src/socket/index.js +9 -0
- package/dist/src/socket/index.js.map +1 -0
- package/dist/src/socket/registry.d.ts +59 -0
- package/dist/src/socket/registry.d.ts.map +1 -0
- package/dist/src/socket/registry.js +125 -0
- package/dist/src/socket/registry.js.map +1 -0
- package/dist/src/socket/reliable-emitter.d.ts +79 -0
- package/dist/src/socket/reliable-emitter.d.ts.map +1 -0
- package/dist/src/socket/reliable-emitter.js +213 -0
- package/dist/src/socket/reliable-emitter.js.map +1 -0
- package/dist/src/socket-handlers.d.ts.map +1 -1
- package/dist/src/socket-handlers.js +45 -45
- package/dist/src/socket-handlers.js.map +1 -1
- package/dist/src/types.d.ts +2 -2
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/upload-tool.d.ts +1 -1
- package/dist/src/upload-tool.js +3 -3
- package/dist/src/upload-tool.js.map +1 -1
- package/package.json +1 -1
- package/skills/lightclaw-media/SKILL.md +22 -102
- package/dist/public/data/scripts/manifest.json +0 -11
- package/dist/public/data/scripts/preflight.78097a58.sh +0 -94
- package/dist/public/data/scripts/preflight.sh +0 -94
- package/dist/src/session-history.d.ts +0 -88
- package/dist/src/session-history.d.ts.map +0 -1
- package/dist/src/session-history.js +0 -598
- package/dist/src/session-history.js.map +0 -1
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
# ========== lightclawbot 插件前置检查脚本 ==========
|
|
4
|
-
# 用途:快速判断 lightclawbot 插件是否可用
|
|
5
|
-
# 输出:最后一行固定为 RESULT:{...} JSON,供前端解析
|
|
6
|
-
# - 可用: RESULT:{"status":"ok","version":"x.y.z"}
|
|
7
|
-
# - 缺 openclaw: RESULT:{"status":"need_openclaw","reason":"..."}
|
|
8
|
-
# - 缺 lightclawbot:RESULT:{"status":"need_install","reason":"..."}
|
|
9
|
-
# - 缺 apiKey: RESULT:{"status":"need_apikey","reason":"apikeys_empty"}
|
|
10
|
-
#
|
|
11
|
-
# 使用方式:
|
|
12
|
-
# 本地执行: bash scripts/preflight.sh
|
|
13
|
-
# CDN 执行: bash <(curl -fsSL https://your-cdn.com/preflight.sh)
|
|
14
|
-
|
|
15
|
-
id="lightclawbot"
|
|
16
|
-
cfg="$HOME/.openclaw/openclaw.json"
|
|
17
|
-
plugin_dir="$HOME/.openclaw/extensions/${id}"
|
|
18
|
-
|
|
19
|
-
# ---------- 1. 检查 openclaw 是否可用 ----------
|
|
20
|
-
|
|
21
|
-
# 加载 nvm 环境(openclaw 可能依赖 nvm 管理的 node)
|
|
22
|
-
export NVM_DIR="$HOME/.nvm"
|
|
23
|
-
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
|
24
|
-
|
|
25
|
-
if ! command -v openclaw &>/dev/null; then
|
|
26
|
-
echo "RESULT:{\"status\":\"need_openclaw\",\"reason\":\"openclaw_not_found\"}"
|
|
27
|
-
exit 1
|
|
28
|
-
fi
|
|
29
|
-
|
|
30
|
-
# 验证 openclaw 可执行
|
|
31
|
-
# 已知输出格式:
|
|
32
|
-
# - OpenClaw 2026.3.8 (3caab92) (新版本,带前缀 + commit hash)
|
|
33
|
-
# - OpenClaw 2026.3.2 (带前缀,无 commit hash)
|
|
34
|
-
# - 2026.3.2 (旧版本,直接输出版本号,无前缀)
|
|
35
|
-
openclaw_output=$(openclaw -v 2>/dev/null || true)
|
|
36
|
-
if ! echo "$openclaw_output" | grep -qiE '(^OpenClaw[/ ])?[0-9]+\.[0-9]+'; then
|
|
37
|
-
echo "RESULT:{\"status\":\"need_openclaw\",\"reason\":\"openclaw_not_working\"}"
|
|
38
|
-
exit 1
|
|
39
|
-
fi
|
|
40
|
-
|
|
41
|
-
# ---------- 2. 检查配置文件是否存在 ----------
|
|
42
|
-
|
|
43
|
-
if [ ! -f "$cfg" ]; then
|
|
44
|
-
echo "RESULT:{\"status\":\"need_install\",\"reason\":\"config_not_found\"}"
|
|
45
|
-
exit 1
|
|
46
|
-
fi
|
|
47
|
-
|
|
48
|
-
# ---------- 3. 检查插件是否已安装(目录 + package.json) ----------
|
|
49
|
-
|
|
50
|
-
if [ ! -d "$plugin_dir" ] || [ ! -f "$plugin_dir/package.json" ]; then
|
|
51
|
-
echo "RESULT:{\"status\":\"need_install\",\"reason\":\"plugin_not_installed\"}"
|
|
52
|
-
exit 1
|
|
53
|
-
fi
|
|
54
|
-
|
|
55
|
-
# ---------- 4. 检查配置文件中插件注册是否完整 ----------
|
|
56
|
-
|
|
57
|
-
# 需要 jq 来解析 JSON
|
|
58
|
-
if ! command -v jq &>/dev/null; then
|
|
59
|
-
echo "RESULT:{\"status\":\"need_install\",\"reason\":\"jq_not_found\"}"
|
|
60
|
-
exit 1
|
|
61
|
-
fi
|
|
62
|
-
|
|
63
|
-
# 4a. plugins.entries 中是否存在且 enabled
|
|
64
|
-
plugin_enabled=$(jq -r ".plugins.entries.\"${id}\".enabled // false" "$cfg" 2>/dev/null)
|
|
65
|
-
if [ "$plugin_enabled" != "true" ]; then
|
|
66
|
-
echo "RESULT:{\"status\":\"need_install\",\"reason\":\"plugin_not_enabled\"}"
|
|
67
|
-
exit 1
|
|
68
|
-
fi
|
|
69
|
-
|
|
70
|
-
# 4b. plugins.installs 中是否有安装记录
|
|
71
|
-
if ! jq -e ".plugins.installs.\"${id}\"" "$cfg" > /dev/null 2>&1; then
|
|
72
|
-
echo "RESULT:{\"status\":\"need_install\",\"reason\":\"plugin_install_record_missing\"}"
|
|
73
|
-
exit 1
|
|
74
|
-
fi
|
|
75
|
-
|
|
76
|
-
# 4c. channels 中是否配置且 enabled
|
|
77
|
-
channel_enabled=$(jq -r ".channels.\"${id}\".enabled // false" "$cfg" 2>/dev/null)
|
|
78
|
-
if [ "$channel_enabled" != "true" ]; then
|
|
79
|
-
echo "RESULT:{\"status\":\"need_install\",\"reason\":\"channel_not_enabled\"}"
|
|
80
|
-
exit 1
|
|
81
|
-
fi
|
|
82
|
-
|
|
83
|
-
# 4d. channels 中 apiKeys 是否配置且非空
|
|
84
|
-
apikeys_count=$(jq -r ".channels.\"${id}\".apiKeys // [] | length" "$cfg" 2>/dev/null)
|
|
85
|
-
if [ "$apikeys_count" = "0" ] || [ -z "$apikeys_count" ]; then
|
|
86
|
-
echo "RESULT:{\"status\":\"need_install\",\"reason\":\"apikeys_empty\"}"
|
|
87
|
-
exit 1
|
|
88
|
-
fi
|
|
89
|
-
|
|
90
|
-
# ---------- 5. 全部通过,插件可用 ----------
|
|
91
|
-
|
|
92
|
-
version=$(jq -r '.version // "unknown"' "$plugin_dir/package.json")
|
|
93
|
-
echo "RESULT:{\"status\":\"ok\",\"version\":\"${version}\"}"
|
|
94
|
-
exit 0
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LightClaw — Session History Reader
|
|
3
|
-
*
|
|
4
|
-
* 直接读取 OpenClaw Gateway 的 JSONL session 文件,获取持久化的对话历史。
|
|
5
|
-
* 文件路径: ~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl
|
|
6
|
-
*
|
|
7
|
-
* JSONL 每行格式:
|
|
8
|
-
* { "type": "session", ... } ← session header (第一行)
|
|
9
|
-
* { "type": "message", "message": { ... }} ← 对话消息
|
|
10
|
-
* { "type": "compaction", ... } ← 上下文压缩标记
|
|
11
|
-
* { "type": "model_change", ... } ← 模型切换(跳过)
|
|
12
|
-
* { "type": "thinking_level_change", ... } ← 思考级别变更(跳过)
|
|
13
|
-
* { "type": "custom", ... } ← 自定义元数据(跳过)
|
|
14
|
-
*/
|
|
15
|
-
/** 文件附件信息(从消息文本中提取) */
|
|
16
|
-
export interface FileAttachmentInfo {
|
|
17
|
-
/** 原始文件名 */
|
|
18
|
-
name: string;
|
|
19
|
-
/** MIME 类型 */
|
|
20
|
-
mimeType?: string;
|
|
21
|
-
/** 文件大小描述(如 "3.0KB") */
|
|
22
|
-
size?: string;
|
|
23
|
-
/** 文件路径或 URI */
|
|
24
|
-
uri?: string;
|
|
25
|
-
}
|
|
26
|
-
/** 标准化后返回给前端的历史消息 */
|
|
27
|
-
export interface HistoryMessage {
|
|
28
|
-
role: "user" | "assistant" | "system" | "tool";
|
|
29
|
-
content: string;
|
|
30
|
-
timestamp?: number;
|
|
31
|
-
/** 消息中包含的工具调用(可选) */
|
|
32
|
-
toolCalls?: Array<{
|
|
33
|
-
name: string;
|
|
34
|
-
args?: string;
|
|
35
|
-
}>;
|
|
36
|
-
/** 消息中包含的工具结果(可选) */
|
|
37
|
-
toolResult?: {
|
|
38
|
-
toolCallId?: string;
|
|
39
|
-
name?: string;
|
|
40
|
-
output?: string;
|
|
41
|
-
};
|
|
42
|
-
/** AI 的思考过程(可选) */
|
|
43
|
-
thinking?: string;
|
|
44
|
-
/** 消息中包含的文件附件(可选) */
|
|
45
|
-
files?: FileAttachmentInfo[];
|
|
46
|
-
/** 压缩标记 */
|
|
47
|
-
isCompaction?: boolean;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* 根据 sessionKey 找到对应的 .jsonl transcript 文件路径
|
|
51
|
-
*/
|
|
52
|
-
export declare function resolveTranscriptPath(sessionKey: string, agentId?: string): string | null;
|
|
53
|
-
export interface ReadHistoryOptions {
|
|
54
|
-
/** 最大返回条数,默认 200 */
|
|
55
|
-
limit?: number;
|
|
56
|
-
/** Agent ID,默认 "default" */
|
|
57
|
-
agentId?: string;
|
|
58
|
-
/** 只返回 user/assistant 消息(过滤 system/tool),默认 false */
|
|
59
|
-
chatOnly?: boolean;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* 读取指定 sessionKey 的历史对话消息
|
|
63
|
-
*
|
|
64
|
-
* @param sessionKey - 会话标识(与 gateway.ts 中 route.sessionKey 一致)
|
|
65
|
-
* @param opts - 选项
|
|
66
|
-
* @returns 历史消息数组(按时间正序),如果找不到 session 返回空数组
|
|
67
|
-
*/
|
|
68
|
-
export declare function readSessionHistory(sessionKey: string, opts?: ReadHistoryOptions): HistoryMessage[];
|
|
69
|
-
/**
|
|
70
|
-
* 读取指定 sessionKey 的历史消息(从文件末尾读取,大文件性能更好)
|
|
71
|
-
*
|
|
72
|
-
* 对于大文件(>1MB),不读取整个文件,而是从末尾读取指定字节数。
|
|
73
|
-
*/
|
|
74
|
-
export declare function readSessionHistoryTail(sessionKey: string, opts?: ReadHistoryOptions & {
|
|
75
|
-
maxBytes?: number;
|
|
76
|
-
}): HistoryMessage[];
|
|
77
|
-
/**
|
|
78
|
-
* 列出所有已知的 session(从 sessions.json 索引读取)
|
|
79
|
-
*/
|
|
80
|
-
export declare function listSessions(agentId?: string): Array<{
|
|
81
|
-
sessionKey: string;
|
|
82
|
-
sessionId: string;
|
|
83
|
-
updatedAt?: number;
|
|
84
|
-
label?: string;
|
|
85
|
-
displayName?: string;
|
|
86
|
-
channel?: string;
|
|
87
|
-
}>;
|
|
88
|
-
//# sourceMappingURL=session-history.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-history.d.ts","sourceRoot":"","sources":["../../src/session-history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAUH,uBAAuB;AACvB,MAAM,WAAW,kBAAkB;IACjC,YAAY;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,cAAc;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAqB;AACrB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,qBAAqB;IACrB,UAAU,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrE,mBAAmB;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC7B,WAAW;IACX,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA4ED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0BzF;AA6YD,MAAM,WAAW,kBAAkB;IACjC,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,cAAc,EAAE,CA4DlG;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,kBAAkB,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,cAAc,EAAE,CAuElB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CAaD"}
|