@turingflow/agent-kit 0.0.0-stage → 0.1.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.md +546 -2
- package/dist/agent.d.ts +27 -0
- package/dist/agent.js +31 -0
- package/dist/cli.d.ts +5 -0
- package/dist/cli.js +105 -0
- package/dist/handlers.d.ts +92 -0
- package/dist/handlers.js +211 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +10 -0
- package/dist/sdk.d.ts +106 -0
- package/dist/sdk.js +309 -0
- package/dist/server/agent.d.ts +27 -0
- package/dist/server/agent.js +31 -0
- package/dist/server/artifact-hooks.d.ts +6 -0
- package/dist/server/artifact-hooks.js +37 -0
- package/dist/server/artifact-tool-tracker.d.ts +24 -0
- package/dist/server/artifact-tool-tracker.js +347 -0
- package/dist/server/artifacts.d.ts +227 -0
- package/dist/server/artifacts.js +1061 -0
- package/dist/server/auth/config.d.ts +34 -0
- package/dist/server/auth/config.js +82 -0
- package/dist/server/auth/db.d.ts +159 -0
- package/dist/server/auth/db.js +680 -0
- package/dist/server/auth/handlers.d.ts +27 -0
- package/dist/server/auth/handlers.js +297 -0
- package/dist/server/auth/index.d.ts +15 -0
- package/dist/server/auth/index.js +14 -0
- package/dist/server/auth/login-options.d.ts +14 -0
- package/dist/server/auth/login-options.js +50 -0
- package/dist/server/auth/providers/dingtalk.d.ts +16 -0
- package/dist/server/auth/providers/dingtalk.js +177 -0
- package/dist/server/auth/providers/feishu.d.ts +15 -0
- package/dist/server/auth/providers/feishu.js +100 -0
- package/dist/server/auth/providers/index.d.ts +13 -0
- package/dist/server/auth/providers/index.js +24 -0
- package/dist/server/auth/session.d.ts +48 -0
- package/dist/server/auth/session.js +108 -0
- package/dist/server/auth/types.d.ts +118 -0
- package/dist/server/auth/types.js +7 -0
- package/dist/server/browser-agent-mcp.d.ts +67 -0
- package/dist/server/browser-agent-mcp.js +608 -0
- package/dist/server/cli.d.ts +6 -0
- package/dist/server/cli.js +112 -0
- package/dist/server/debug-log.d.ts +25 -0
- package/dist/server/debug-log.js +86 -0
- package/dist/server/handlers.d.ts +141 -0
- package/dist/server/handlers.js +523 -0
- package/dist/server/index.d.ts +30 -0
- package/dist/server/index.js +28 -0
- package/dist/server/kit-api.d.ts +23 -0
- package/dist/server/kit-api.js +153 -0
- package/dist/server/model-sources.d.ts +32 -0
- package/dist/server/model-sources.js +58 -0
- package/dist/server/oa.d.ts +87 -0
- package/dist/server/oa.js +397 -0
- package/dist/server/providers/openrouter.d.ts +51 -0
- package/dist/server/providers/openrouter.js +283 -0
- package/dist/server/render-markdown.d.ts +2 -0
- package/dist/server/render-markdown.js +50 -0
- package/dist/server/sdk.d.ts +259 -0
- package/dist/server/sdk.js +1991 -0
- package/dist/server/session-access.d.ts +5 -0
- package/dist/server/session-access.js +68 -0
- package/dist/server/session-fork.d.ts +10 -0
- package/dist/server/session-fork.js +142 -0
- package/dist/server/session-store.d.ts +56 -0
- package/dist/server/session-store.js +148 -0
- package/dist/server/sessions.d.ts +24 -0
- package/dist/server/sessions.js +541 -0
- package/dist/server/share.d.ts +15 -0
- package/dist/server/share.js +433 -0
- package/dist/server/tool-activity.d.ts +2 -0
- package/dist/server/tool-activity.js +26 -0
- package/dist/server/transcription/xiaomi-mimo.d.ts +8 -0
- package/dist/server/transcription/xiaomi-mimo.js +86 -0
- package/dist/server/upload.d.ts +13 -0
- package/dist/server/upload.js +81 -0
- package/dist/server/user-files.d.ts +28 -0
- package/dist/server/user-files.js +311 -0
- package/dist/server/voice.d.ts +25 -0
- package/dist/server/voice.js +61 -0
- package/dist/server/web-fetch.d.ts +71 -0
- package/dist/server/web-fetch.js +330 -0
- package/dist/styles.css +3354 -0
- package/dist/transcription/xiaomi-mimo.d.ts +8 -0
- package/dist/transcription/xiaomi-mimo.js +86 -0
- package/dist/ui/index.d.ts +352 -0
- package/dist/ui/index.js +7730 -0
- package/dist/upload.d.ts +13 -0
- package/dist/upload.js +81 -0
- package/dist/voice.d.ts +25 -0
- package/dist/voice.js +61 -0
- package/package.json +74 -4
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agent-kit · 认证配置(从 env 解析)
|
|
3
|
+
*
|
|
4
|
+
* env 分块约定(具体见 packages/agent-kit/.env.example):
|
|
5
|
+
* - 认证方式开关:AUTH_PROVIDER / APP_PUBLIC_URL / AUTH_COOKIE_PATH /
|
|
6
|
+
* AUTH_SESSION_SECRET / AUTH_SECURE_COOKIE
|
|
7
|
+
* - 钉钉(AUTH_PROVIDER 含 dingtalk):DD_CLIENT_ID / DD_CLIENT_SECRET / DD_CORP_ID /
|
|
8
|
+
* DD_AGENT_ID(企业内部应用微应用 AgentId,分享到钉钉的 H5 JSAPI 前端鉴权必填)
|
|
9
|
+
* - 飞书(AUTH_PROVIDER 含 feishu):FS_APP_ID / FS_APP_SECRET /
|
|
10
|
+
* FS_BASE_URL(可选,国际版)/ FS_REDIRECT_URI(可选,默认自动拼接)
|
|
11
|
+
* - builtin(AUTH_PROVIDER 含 builtin):自建账号体系,登录系统尚未实现,
|
|
12
|
+
* isMethodConfigured 暂恒 false(详见该函数注释),配置层已认可该方式(留口子)。
|
|
13
|
+
*
|
|
14
|
+
* 已移除:guest 模式、dev 免登(AUTH_DEV_LOGIN)、数据库开关(AUTH_DB_ENABLED)。
|
|
15
|
+
* 登录强制真实 OAuth;会话/消息持久化强制 PostgreSQL(配好 POSTGRES_* 即启用)。
|
|
16
|
+
*
|
|
17
|
+
* AUTH_PROVIDER 支持多值(`,` 或 `|` 分隔),例如 `feishu` / `dingtalk|feishu`:
|
|
18
|
+
* - 只有一个真实登录方式(OAuth 仅一个)→ 登录页直接跳转,不出现选择器;
|
|
19
|
+
* - 有多个 → 前端渲染登录方式选择界面。
|
|
20
|
+
*
|
|
21
|
+
* adaptive(自适应):AUTH_PROVIDER=adaptive 时按客户端环境自动决定登录方式——
|
|
22
|
+
* 钉钉 App 内 → 钉钉(JSAPI 免登优先,失败回退 OAuth);飞书 App 内 → 飞书 OAuth;
|
|
23
|
+
* 其他浏览器 → 渲染钉钉/飞书选择器。实际可用的 provider 由 getLoginOptions 展开为
|
|
24
|
+
* 已配置完整的 OAuth 平台(钉钉 DD_* 与飞书 FS_* env 各自齐全者才会出现)。
|
|
25
|
+
*/
|
|
26
|
+
import type { AuthConfig, AuthMethod } from "./types.js";
|
|
27
|
+
/** 解析 AUTH_PROVIDER:按 [,|] 分隔 → trim → 去重 → 过滤非法值;none 与其它值共存时忽略。 */
|
|
28
|
+
export declare function parseAuthProviders(raw: string | undefined): AuthMethod[];
|
|
29
|
+
/** 解析并校验认证配置。非法值一律忽略;无任何合法值 → none。 */
|
|
30
|
+
export declare function loadAuthConfig(): AuthConfig;
|
|
31
|
+
/** 判断某个方式是否已配置完整(OAuth 平台看对应 env)。 */
|
|
32
|
+
export declare function isMethodConfigured(config: AuthConfig, method: AuthMethod): boolean;
|
|
33
|
+
/** 判断当前配置是否至少有一个可用的真实登录方式。 */
|
|
34
|
+
export declare function isAuthEnabled(config: AuthConfig): boolean;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
const VALID_METHODS = ["dingtalk", "feishu", "builtin", "none", "adaptive"];
|
|
2
|
+
/** 解析 AUTH_PROVIDER:按 [,|] 分隔 → trim → 去重 → 过滤非法值;none 与其它值共存时忽略。 */
|
|
3
|
+
export function parseAuthProviders(raw) {
|
|
4
|
+
if (!raw)
|
|
5
|
+
return ["none"];
|
|
6
|
+
const parts = raw
|
|
7
|
+
.split(/[,|]/)
|
|
8
|
+
.map((s) => s.trim().toLowerCase())
|
|
9
|
+
.filter((s) => s.length > 0);
|
|
10
|
+
const unique = [];
|
|
11
|
+
for (const p of parts) {
|
|
12
|
+
if (!VALID_METHODS.includes(p))
|
|
13
|
+
continue; // 非法值忽略
|
|
14
|
+
if (unique.includes(p))
|
|
15
|
+
continue; // 去重
|
|
16
|
+
unique.push(p);
|
|
17
|
+
}
|
|
18
|
+
if (unique.length === 0)
|
|
19
|
+
return ["none"];
|
|
20
|
+
// none 表示"关闭登录",只在其单独出现时生效
|
|
21
|
+
if (unique.includes("none") && unique.length > 1) {
|
|
22
|
+
return unique.filter((m) => m !== "none");
|
|
23
|
+
}
|
|
24
|
+
return unique;
|
|
25
|
+
}
|
|
26
|
+
/** 从完整列表取主认证方式(第一个非 none 的值;不存在 → none)。 */
|
|
27
|
+
function primaryMethod(methods) {
|
|
28
|
+
const primary = methods.find((m) => m !== "none");
|
|
29
|
+
return primary ?? "none";
|
|
30
|
+
}
|
|
31
|
+
/** 解析并校验认证配置。非法值一律忽略;无任何合法值 → none。 */
|
|
32
|
+
export function loadAuthConfig() {
|
|
33
|
+
const methods = parseAuthProviders(process.env.AUTH_PROVIDER);
|
|
34
|
+
const publicUrl = (process.env.APP_PUBLIC_URL || "").replace(/\/$/, "");
|
|
35
|
+
const cookiePath = process.env.AUTH_COOKIE_PATH || "/agent";
|
|
36
|
+
const sessionSecret = process.env.AUTH_SESSION_SECRET || process.env.SESSION_SECRET || "agent-kit-dev-secret";
|
|
37
|
+
const secureCookie = process.env.AUTH_SECURE_COOKIE === "true";
|
|
38
|
+
// 数据库持久化与开发免登为强制行为:数据必须落 PostgreSQL;登录必须是真实 OAuth。
|
|
39
|
+
return {
|
|
40
|
+
methods,
|
|
41
|
+
method: primaryMethod(methods),
|
|
42
|
+
publicUrl,
|
|
43
|
+
cookiePath,
|
|
44
|
+
sessionSecret,
|
|
45
|
+
secureCookie,
|
|
46
|
+
dingtalk: {
|
|
47
|
+
clientId: process.env.DD_CLIENT_ID || "",
|
|
48
|
+
clientSecret: process.env.DD_CLIENT_SECRET || "",
|
|
49
|
+
corpId: process.env.DD_CORP_ID || "",
|
|
50
|
+
agentId: process.env.DD_AGENT_ID || "",
|
|
51
|
+
robotCode: process.env.DD_ROBOT_CODE || "",
|
|
52
|
+
cardTemplateId: process.env.DD_CARD_TEMPLATE_ID || "",
|
|
53
|
+
redirectUri: process.env.DD_REDIRECT_URI || undefined,
|
|
54
|
+
},
|
|
55
|
+
feishu: {
|
|
56
|
+
appId: process.env.FS_APP_ID || "",
|
|
57
|
+
appSecret: process.env.FS_APP_SECRET || "",
|
|
58
|
+
baseUrl: (process.env.FS_BASE_URL || "https://open.feishu.cn").replace(/\/$/, ""),
|
|
59
|
+
redirectUri: process.env.FS_REDIRECT_URI || undefined,
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/** 判断某个方式是否已配置完整(OAuth 平台看对应 env)。 */
|
|
64
|
+
export function isMethodConfigured(config, method) {
|
|
65
|
+
if (method === "dingtalk") {
|
|
66
|
+
return Boolean(config.dingtalk.clientId && config.dingtalk.clientSecret && config.dingtalk.corpId);
|
|
67
|
+
}
|
|
68
|
+
if (method === "feishu") {
|
|
69
|
+
return Boolean(config.feishu.appId && config.feishu.appSecret);
|
|
70
|
+
}
|
|
71
|
+
// builtin(自建账号体系)留口子:登录系统尚未实现,暂恒 false——
|
|
72
|
+
// 即使 AUTH_PROVIDER 含 builtin 也不会出现在登录方式清单里(登录页不会渲染未实现的入口)。
|
|
73
|
+
// 后续实现自建登录时,改为读取 BUILTIN_USERS(用户名:密码哈希列表)等 env 即可启用。
|
|
74
|
+
if (method === "builtin") {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
/** 判断当前配置是否至少有一个可用的真实登录方式。 */
|
|
80
|
+
export function isAuthEnabled(config) {
|
|
81
|
+
return config.methods.some((m) => isMethodConfigured(config, m));
|
|
82
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { Pool, type PoolClient } from "pg";
|
|
2
|
+
import type { AuthUser } from "./types.js";
|
|
3
|
+
export interface DbUser {
|
|
4
|
+
id: number;
|
|
5
|
+
provider: string;
|
|
6
|
+
unionId: string;
|
|
7
|
+
openId: string | null;
|
|
8
|
+
userCode: string | null;
|
|
9
|
+
name: string;
|
|
10
|
+
avatar: string | null;
|
|
11
|
+
email: string | null;
|
|
12
|
+
mobile: string | null;
|
|
13
|
+
deptName: string | null;
|
|
14
|
+
createdAt: Date;
|
|
15
|
+
updatedAt: Date;
|
|
16
|
+
lastLoginAt: Date | null;
|
|
17
|
+
}
|
|
18
|
+
export declare function ensureMigrated(): Promise<void>;
|
|
19
|
+
/** 进程级连接池单例;未配置 Postgres 时返回 null。 */
|
|
20
|
+
export declare function getPool(): Pool | null;
|
|
21
|
+
/** 是否已启用数据库(配置了 Postgres 即启用;无开关,数据强制落库)。 */
|
|
22
|
+
export declare function isDbEnabled(): boolean;
|
|
23
|
+
/** 幂等建表;无数据库配置时静默跳过。 */
|
|
24
|
+
export declare function migrate(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* 将认证用户 upsert 到 users 表:按 (provider, union_id) 匹配,存在则更新档案与
|
|
27
|
+
* last_login_at,不存在则插入。返回数据库行(含内部 id)。
|
|
28
|
+
*/
|
|
29
|
+
export declare function upsertUser(user: AuthUser, client?: PoolClient): Promise<DbUser | null>;
|
|
30
|
+
/** 按 (provider, union_id) 查用户;不存在返回 null。 */
|
|
31
|
+
export declare function findUserByProvider(provider: string, unionId: string, client?: PoolClient): Promise<DbUser | null>;
|
|
32
|
+
/** 仅刷新 last_login_at(登录成功时调用)。 */
|
|
33
|
+
export declare function touchLastLogin(id: number, client?: PoolClient): Promise<void>;
|
|
34
|
+
/** 取飞书 OAuth 令牌(用户身份发消息用);无令牌或非飞书用户返回 null。 */
|
|
35
|
+
export declare function getUserOauthTokenByKey(userId: string): Promise<{
|
|
36
|
+
accessToken: string | null;
|
|
37
|
+
refreshToken: string | null;
|
|
38
|
+
} | null>;
|
|
39
|
+
/** 回写飞书 OAuth 令牌(刷新续期后调用;refreshToken 为空时保留原值)。 */
|
|
40
|
+
export declare function updateUserOauthToken(userId: string, token: {
|
|
41
|
+
accessToken: string;
|
|
42
|
+
refreshToken?: string;
|
|
43
|
+
}): Promise<void>;
|
|
44
|
+
export interface AgentSessionRow {
|
|
45
|
+
id: string;
|
|
46
|
+
/** 用户主体键 `${provider}:${unionId}` */
|
|
47
|
+
userId: string;
|
|
48
|
+
title: string;
|
|
49
|
+
/** 本会话工作目录(沙箱范围;NULL=未限定,本地 app 选择工作区后写入) */
|
|
50
|
+
workspaceDir: string | null;
|
|
51
|
+
createdAt: Date;
|
|
52
|
+
updatedAt: Date;
|
|
53
|
+
messageCount: number;
|
|
54
|
+
lastPreview: string | null;
|
|
55
|
+
}
|
|
56
|
+
export interface AgentMessageRow {
|
|
57
|
+
id: number;
|
|
58
|
+
sessionId: string;
|
|
59
|
+
role: string;
|
|
60
|
+
content: string;
|
|
61
|
+
images: unknown;
|
|
62
|
+
/** 助手消息的分步思考过程(thinking/text/tool/ask/secs 数组),历史恢复时前端据此渲染思考胶囊 */
|
|
63
|
+
steps: unknown;
|
|
64
|
+
/** 助手消息总用时(秒) */
|
|
65
|
+
thinkingSecs: number | null;
|
|
66
|
+
/** 共用时(秒):用户发送该消息 → 全部答复完成/停止,历史恢复时前端据此显示「共用时 xx」 */
|
|
67
|
+
elapsedSecs: number | null;
|
|
68
|
+
/** 本轮模型信息 { usedFallback, fallbackModel, models },历史恢复时前端据此显示积分提示 */
|
|
69
|
+
modelInfo: unknown;
|
|
70
|
+
/** 本轮产物清单 [{id,name,type,size}],历史恢复时前端据此渲染文件卡片与「查看所有产物」按钮 */
|
|
71
|
+
artifacts: unknown;
|
|
72
|
+
/** 用户消息的上传附件 { url, name, size },历史恢复时前端据此恢复附件条 */
|
|
73
|
+
attachment: unknown;
|
|
74
|
+
/** 本轮消耗 { costUsd, usage },历史恢复时前端据此展示 token 用量 */
|
|
75
|
+
costInfo: unknown;
|
|
76
|
+
createdAt: Date;
|
|
77
|
+
}
|
|
78
|
+
/** 注册/复用会话:已存在则返回现有行,不存在则插入。workspaceDir 仅首建时生效(复用不改)。 */
|
|
79
|
+
export declare function createAgentSession(userId: string, sessionId: string, title?: string, workspaceDir?: string | null, client?: PoolClient): Promise<AgentSessionRow | null>;
|
|
80
|
+
/** 当前用户的会话列表(按最近更新倒序),附带消息数与最后一条消息预览。 */
|
|
81
|
+
export declare function listAgentSessions(userId: string, client?: PoolClient): Promise<AgentSessionRow[]>;
|
|
82
|
+
/** 校验会话归属并返回该会话;不属于当前用户或不存在时返回 null。 */
|
|
83
|
+
export declare function getAgentSession(userId: string, sessionId: string, client?: PoolClient): Promise<AgentSessionRow | null>;
|
|
84
|
+
/** 重命名会话(仅限归属用户)。 */
|
|
85
|
+
export declare function renameAgentSession(userId: string, sessionId: string, title: string, userRenamed?: boolean, client?: PoolClient): Promise<boolean>;
|
|
86
|
+
/** SDK 自动命名(topic / ai-title)落库:仅当用户从未手动改过标题时覆盖(user_renamed=false),
|
|
87
|
+
* 否则跳过,保护用户手动编辑的标题不被自动命名替换。 */
|
|
88
|
+
export declare function setSessionTitleIfNotUserRenamed(userId: string, sessionId: string, title: string, client?: PoolClient): Promise<boolean>;
|
|
89
|
+
/** 更新会话工作目录(沙箱范围;传 null 表示清除限定)。仅限归属用户。 */
|
|
90
|
+
export declare function updateAgentSessionWorkspace(userId: string, sessionId: string, workspaceDir: string | null, client?: PoolClient): Promise<boolean>;
|
|
91
|
+
/** 删除会话(消息级联删除)。 */
|
|
92
|
+
export declare function deleteAgentSession(userId: string, sessionId: string, client?: PoolClient): Promise<boolean>;
|
|
93
|
+
/** admin 用量聚合(暂不鉴权):summary 总量 + 按模型 / 按会话 / 单条消息 Top 消耗。
|
|
94
|
+
* 数据源:agent_messages.cost_info JSONB { costUsd, usage: { input_tokens, output_tokens } }。 */
|
|
95
|
+
export declare function queryAdminUsage(limit?: number): Promise<{
|
|
96
|
+
summary: {
|
|
97
|
+
inputTokens: number;
|
|
98
|
+
outputTokens: number;
|
|
99
|
+
costUsd: number;
|
|
100
|
+
costedMsgs: number;
|
|
101
|
+
sessions: number;
|
|
102
|
+
};
|
|
103
|
+
byModel: {
|
|
104
|
+
model: string;
|
|
105
|
+
inputTokens: number;
|
|
106
|
+
outputTokens: number;
|
|
107
|
+
msgs: number;
|
|
108
|
+
}[];
|
|
109
|
+
bySession: {
|
|
110
|
+
sessionId: string;
|
|
111
|
+
title: string;
|
|
112
|
+
createdAt: Date;
|
|
113
|
+
inputTokens: number;
|
|
114
|
+
outputTokens: number;
|
|
115
|
+
costUsd: number;
|
|
116
|
+
costedMsgs: number;
|
|
117
|
+
}[];
|
|
118
|
+
details: {
|
|
119
|
+
id: number;
|
|
120
|
+
sessionId: string;
|
|
121
|
+
sessionTitle: string;
|
|
122
|
+
createdAt: Date;
|
|
123
|
+
inputTokens: number;
|
|
124
|
+
outputTokens: number;
|
|
125
|
+
costUsd: number;
|
|
126
|
+
model: string;
|
|
127
|
+
contentPreview: string;
|
|
128
|
+
userContent: string;
|
|
129
|
+
user: string;
|
|
130
|
+
}[];
|
|
131
|
+
} | null>;
|
|
132
|
+
/** 追加一条消息并刷新会话更新时间。 */
|
|
133
|
+
export declare function addAgentMessage(sessionId: string, role: string, content: string, images?: unknown, steps?: unknown, thinkingSecs?: number | null, modelInfo?: unknown, artifacts?: unknown, attachment?: unknown, elapsedSecs?: number | null, costInfo?: unknown, client?: PoolClient): Promise<boolean>;
|
|
134
|
+
/** 会话内全部消息(按时间正序);不属于当前用户返回空数组。 */
|
|
135
|
+
export declare function listAgentMessages(userId: string, sessionId: string, client?: PoolClient): Promise<AgentMessageRow[]>;
|
|
136
|
+
/** Copy a bounded history in one transaction; serialize suffix allocation per owner. */
|
|
137
|
+
export declare function forkAgentSession(userId: string, sourceId: string, messageIndex: number, messageId?: number, snapshot?: unknown): Promise<AgentSessionRow>;
|
|
138
|
+
/** 会话内所有用户消息的附件 url 列表(删会话清理磁盘文件前收集,须在删除会话前调用)。 */
|
|
139
|
+
export declare function listSessionAttachmentUrls(userId: string, sessionId: string, client?: PoolClient): Promise<string[]>;
|
|
140
|
+
/** 截断会话:删除指定 id(含)之后的所有消息(编辑重发时调用,让刷新后不出现旧消息)。 */
|
|
141
|
+
export declare function truncateAgentMessages(userId: string, sessionId: string, upToId: number): Promise<void>;
|
|
142
|
+
/** 分享记录行。 */
|
|
143
|
+
export interface ShareRow {
|
|
144
|
+
token: string;
|
|
145
|
+
sessionId: string;
|
|
146
|
+
/** 创建者主体键 `${provider}:${unionId}` */
|
|
147
|
+
createdBy: string;
|
|
148
|
+
createdAt: Date;
|
|
149
|
+
}
|
|
150
|
+
/** 按主键查分享记录;不存在返回 null。 */
|
|
151
|
+
export declare function getShareByToken(token: string): Promise<ShareRow | null>;
|
|
152
|
+
/** 创建分享记录;会话必须已存在(外键保证归属校验由调用方完成)。 */
|
|
153
|
+
export declare function createShareRecord(token: string, sessionId: string, userId: string): Promise<boolean>;
|
|
154
|
+
/** 按 session_id 查会话标题(公开分享页展示用;不校验归属)。 */
|
|
155
|
+
export declare function getSessionTitleBySessionId(sessionId: string): Promise<string>;
|
|
156
|
+
/** 公开读取会话消息(分享页用;不校验用户归属,依赖分享 token 不可枚举)。 */
|
|
157
|
+
export declare function listAgentMessagesPublic(sessionId: string): Promise<AgentMessageRow[]>;
|
|
158
|
+
/** 按主体键 `${provider}:${unionId}` 查钉钉 userid / 飞书 employee_id(OA 发送消息时作为 sender 使用)。 */
|
|
159
|
+
export declare function getUserCodeByKey(userId: string): Promise<string>;
|