weifuwu 0.90.0 → 0.91.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.
Files changed (72) hide show
  1. package/README.md +4 -2
  2. package/dist/client/components/WordCloud/WordCloud.d.ts +79 -0
  3. package/dist/client/components/index.d.ts +2 -0
  4. package/dist/client/components/index.js +33 -33
  5. package/dist/client/components/style.css +95 -1
  6. package/dist/client/layout/weifuwu-layout.css +19 -0
  7. package/dist/client/vdom/core/v2/diff.d.ts +2 -2
  8. package/dist/client/vdom/hooks/env.d.ts +20 -0
  9. package/dist/client/vdom/index.js +3 -3
  10. package/dist/client/vdom/testing.js +2 -2
  11. package/dist/server/ai/approvals.d.ts +24 -0
  12. package/dist/server/ai/assemble.d.ts +19 -0
  13. package/dist/server/ai/client.d.ts +22 -0
  14. package/dist/server/ai/contracts.d.ts +67 -2
  15. package/dist/server/ai/index.d.ts +14 -43
  16. package/dist/server/ai/memory-server.d.ts +50 -0
  17. package/dist/server/ai/memory.d.ts +46 -0
  18. package/dist/server/ai/multimodal.d.ts +52 -0
  19. package/dist/server/ai/openai.d.ts +16 -0
  20. package/dist/server/db/body.d.ts +31 -0
  21. package/dist/server/db/consistency.d.ts +28 -0
  22. package/dist/server/db/contracts.d.ts +3 -27
  23. package/dist/server/db/filter.d.ts +24 -0
  24. package/dist/server/db/gql-from-shape.d.ts +42 -0
  25. package/dist/server/db/http.d.ts +38 -0
  26. package/dist/server/db/memory-sql.d.ts +66 -8
  27. package/dist/server/db/ops.d.ts +70 -0
  28. package/dist/server/db/orm.d.ts +110 -0
  29. package/dist/server/db/query-builder.d.ts +4 -2
  30. package/dist/server/db/query.d.ts +90 -32
  31. package/dist/server/db/rest-from-shape.d.ts +56 -0
  32. package/dist/server/db/schema.d.ts +78 -0
  33. package/dist/server/db/server.d.ts +0 -2
  34. package/dist/server/db/shape.d.ts +131 -0
  35. package/dist/server/db/typed-query.d.ts +113 -0
  36. package/dist/server/email/api.d.ts +15 -0
  37. package/dist/server/email/contracts.d.ts +8 -3
  38. package/dist/server/email/index.d.ts +23 -30
  39. package/dist/server/email/memory-email-server.d.ts +43 -0
  40. package/dist/server/email/memory-email.d.ts +30 -0
  41. package/dist/server/index.d.ts +33 -10
  42. package/dist/server/index.js +9843 -4133
  43. package/dist/server/messager/index.d.ts +133 -12
  44. package/dist/server/postgres/client.d.ts +4 -4
  45. package/dist/server/postgres/types.d.ts +33 -13
  46. package/dist/server/redis/types.d.ts +2 -0
  47. package/dist/server/response.d.ts +3 -3
  48. package/dist/server/types.d.ts +2 -5
  49. package/dist/server/user/app-auth.d.ts +74 -0
  50. package/dist/server/user/index.d.ts +277 -5
  51. package/dist/server/workflow/contracts.d.ts +202 -0
  52. package/dist/server/workflow/expression.d.ts +89 -0
  53. package/dist/server/workflow/index.d.ts +70 -0
  54. package/dist/server/workflow/index.js +2476 -0
  55. package/dist/server/workflow/runner.d.ts +19 -0
  56. package/dist/server/workflow/std.d.ts +27 -0
  57. package/dist/server/workflow/steps.d.ts +12 -0
  58. package/dist/server/workflow/store.d.ts +19 -0
  59. package/dist/server/workflow/tojs.d.ts +28 -0
  60. package/dist/server/workflow/validate.d.ts +23 -0
  61. package/dist/server/workflow/views.d.ts +66 -0
  62. package/dist/server/workflow/wfjs.d.ts +27 -0
  63. package/dist/server/workflows/cron.d.ts +16 -0
  64. package/dist/server/workflows/index.d.ts +267 -0
  65. package/dist/shared/zod.d.ts +351 -0
  66. package/docs/client.md +6 -0
  67. package/docs/server.md +455 -11
  68. package/package.json +9 -3
  69. package/dist/server/db/postgres-server.d.ts +0 -39
  70. package/dist/server/db/sql-parser.d.ts +0 -24
  71. package/dist/server/db/test-servers.d.ts +0 -21
  72. package/dist/server/email/smtp.d.ts +0 -34
@@ -0,0 +1,113 @@
1
+ /**
2
+ * typedQuery——跨表查询的类型完整体(W3)
3
+ *
4
+ * 问题(P4 根因):
5
+ * `orm.query.from('kb_chunks kc').join(...).select(...).run()` —— query
6
+ * builder 泛型面未绑定 shape——行类型恒为 `Row`({ [col]: unknown })——
7
+ * 消费端被迫 `as unknown as X / as Array<Record<string, any>>`(平台 35 处)。
8
+ *
9
+ * 方案(纯类型面——运行时零成本):
10
+ * `createTypedQuery(orm, schema)`——schema 为「表名 → shape」注册表。
11
+ * from/join 的 spec(`'kb_chunks kc'`)在类型层解析表/alias——select 的
12
+ * 列引用(`'kc.id'`/裸列=主表)解析为对应列 Infer——行类型 = tuple
13
+ * 保序映射 + aggregate/vectorScore 的 AS 键并入——未知列/未知 alias
14
+ * 编译期红(never)。运行时 = SelectBuilder 链转发(零解析——纯转发)。
15
+ *
16
+ * 判负(诚实裁剪):
17
+ * - `col AS alias` 不做(平台 0 消费——aggregate/vectorScore 的 as
18
+ * 参数面已覆盖键别名场景——可被新增论证推翻)
19
+ * - where 值类型×列绑定不做(z.enum 坍缩 [string]——值面收益低——已登记
20
+ * W2/W3 修复面:enum 签名推断增强)
21
+ * - and/or 组合内层键不校验(外键校验已覆盖主要场景——组合式文档注明)
22
+ */
23
+ import type { ZodRawShape, ZodType } from '../../shared/zod.ts';
24
+ import type { Orm } from './orm.ts';
25
+ import type { WhereExpr, WhereField } from './query.ts';
26
+ /** schema 注册表(表名 → shape) */
27
+ export type TypedSchema = Record<string, ZodRawShape>;
28
+ type OutOf<Z> = Z extends ZodType<infer O> ? O : never;
29
+ /** from/join spec 解析:'kb_chunks kc' → { table: 'kb_chunks'; alias: 'kc' } */
30
+ type Split<F extends string> = F extends `${infer T} ${infer A}` ? {
31
+ table: T;
32
+ alias: A;
33
+ } : {
34
+ table: F;
35
+ alias: F;
36
+ };
37
+ /** alias → 表名注册表(from 主表 + join 累积) */
38
+ type AddAlias<Reg extends Record<string, string>, F extends string> = Reg & {
39
+ [K in Split<F>['alias']]: Split<F>['table'];
40
+ };
41
+ /** 列引用校验/解析:`'kc.id'` → kc 表 id 列的 Out;裸列 → 主表 */
42
+ type ColOut<Sch, Reg, Main, C extends string> = C extends `${infer A}.${infer Col}` ? A extends keyof Reg ? Reg[A] extends keyof Sch ? Col extends keyof Sch[Reg[A] & keyof Sch] ? OutOf<Sch[Reg[A] & keyof Sch][Col & keyof Sch[Reg[A] & keyof Sch]]> : never : never : never : C extends keyof Sch[Main & keyof Sch] ? OutOf<Sch[Main & keyof Sch][C & keyof Sch[Main & keyof Sch]]> : never;
43
+ /** select 列 → 行类型(对象键 = 列名去 alias 前缀——`kc.id` → `id`;同名键后覆盖) */
44
+ export type SelRow<Sch, Reg, Main, C extends readonly unknown[]> = {
45
+ [K in Extract<C[number], string> as K extends `${string}.${infer Col}` ? Col : K]: ColOut<Sch, Reg, Main, K>;
46
+ };
47
+ /** where 键白名单(合法列引用联合) */
48
+ type ColRefs<Sch, Reg, Main> = keyof Sch[Main & keyof Sch] | {
49
+ [A in keyof Reg]: A extends string ? (Reg[A] extends keyof Sch ? `${A & string}.${keyof Sch[Reg[A] & keyof Sch] & string}` : never) : never;
50
+ }[keyof Reg];
51
+ /** 值面列型绑定(W4——W1 登记失效断言复活):string 列(含 enum 字面量)按列型收紧
52
+ * (eq:'robot' 红——enum 外拒绝);jsonb/unknown 列保留 WhereField 宽面(深度等值兼容) */
53
+ type WhereFieldOf<V> = V extends string ? {
54
+ col?: string;
55
+ eq?: V;
56
+ gt?: V;
57
+ gte?: V;
58
+ lt?: V;
59
+ lte?: V;
60
+ ne?: V;
61
+ in?: V[];
62
+ notIn?: V[];
63
+ like?: string;
64
+ ilike?: string;
65
+ isNull?: boolean;
66
+ between?: [V, V];
67
+ } : WhereField;
68
+ /** where 约束(对象键 ∈ 合法列引用——字面量多余键红;值面 WhereField 保留组合式) */
69
+ export type TWhere<Sch, Reg, Main> = {
70
+ [K in ColRefs<Sch, Reg, Main> as K & string]?: WhereFieldOf<ColOut<Sch, Reg, Main, K & string>> | WhereExpr[];
71
+ };
72
+ /** aggregate AS 键并入行 */
73
+ type WithAgg<Row extends object, As extends string, V> = Row & {
74
+ [K in As]: V;
75
+ };
76
+ /** 查询入口(from 后状态) */
77
+ export interface TypedQuery<Sch extends TypedSchema> {
78
+ from<F extends string>(spec: F): TSelect<Sch, AddAlias<{}, F>, Split<F>['table'], {}>;
79
+ }
80
+ /** 类型化 Select 链(Row 为累积行类型——select/aggregate 并入) */
81
+ export interface TSelect<Sch, Reg extends Record<string, string>, Main, Row extends object = {}> {
82
+ join<F extends string>(spec: F, on: WhereExpr): TSelect<Sch, AddAlias<Reg, F>, Split<F>['table'] extends Main ? Main : Main, Row>;
83
+ select<C extends readonly (ColRefs<Sch, Reg, Main>)[]>(...cols: C): TSelect<Sch, Reg, Main, Row & SelRow<Sch, Reg, Main, C>>;
84
+ where<W extends TWhere<Sch, Reg, Main>>(w: W): this;
85
+ groupBy(...cols: string[]): this;
86
+ having<W extends TWhere<Sch, Reg, Main>>(w: W): this;
87
+ count<As extends string>(col: '*', as: As, filter?: WhereExpr): TSelect<Sch, Reg, Main, WithAgg<Row, As, number>>;
88
+ sum<As extends string>(col: string, as: As, filter?: WhereExpr): TSelect<Sch, Reg, Main, WithAgg<Row, As, number>>;
89
+ avg<As extends string>(col: string, as: As, filter?: WhereExpr): TSelect<Sch, Reg, Main, WithAgg<Row, As, number>>;
90
+ min<As extends string>(col: string, as: As, filter?: WhereExpr): TSelect<Sch, Reg, Main, WithAgg<Row, As, number>>;
91
+ max<As extends string>(col: string, as: As, filter?: WhereExpr): TSelect<Sch, Reg, Main, WithAgg<Row, As, number>>;
92
+ vectorScore<As extends string>(col: string, vec: number[], as: As): TSelect<Sch, Reg, Main, WithAgg<Row, As, number>>;
93
+ orderBy(col: string, dir?: 'asc' | 'desc'): this;
94
+ limit(n: number): this;
95
+ offset(n: number): this;
96
+ distinct(): this;
97
+ run(): Promise<Row[]>;
98
+ one(): Promise<Row | undefined>;
99
+ }
100
+ /**
101
+ * createTypedQuery——orm.query 的类型化入口(schema 仅类型锚点——运行时零成本)
102
+ *
103
+ * @example
104
+ * const q = createTypedQuery(orm, { kb_chunks, kb_documents })
105
+ * const rows = await q.from('kb_chunks kc')
106
+ * .join('kb_documents kd', { 'kd.id': { col: 'kc.document_id' } })
107
+ * .select('kc.id', 'kc.content', 'kd.filename')
108
+ * .where({ 'kc.agent_id': { eq: String(agentId) } })
109
+ * .run()
110
+ * // rows[0].id: string · rows[0].filename: string | null · rows[0].nope: 编译期红
111
+ */
112
+ export declare function createTypedQuery<Sch extends TypedSchema>(orm: Orm, _schema: Sch): TypedQuery<Sch>;
113
+ export {};
@@ -0,0 +1,15 @@
1
+ import type { EmailMessage, EmailResult } from './contracts.ts';
2
+ export interface EmailApiOptions {
3
+ /** 默认 EMAIL_API_KEY(兼容回退 RESEND_API_KEY)——构造时无 key 明确 throw */
4
+ apiKey?: string;
5
+ /** 默认 EMAIL_API_URL(兼容回退 RESEND_API_URL)→ 'https://api.resend.com' */
6
+ baseUrl?: string;
7
+ /** HTTP 超时 ms——默认 10_000(上游挂起 → 502——不无限挂) */
8
+ timeoutMs?: number;
9
+ /** 默认发件人 */
10
+ from: string;
11
+ }
12
+ export interface EmailApiClient {
13
+ send(msg: EmailMessage): Promise<EmailResult>;
14
+ }
15
+ export declare function createEmailApi(opts: EmailApiOptions): EmailApiClient;
@@ -24,9 +24,14 @@ export interface EmailResult {
24
24
  accepted: boolean;
25
25
  }
26
26
  /**
27
- * 邮件客户端(ctx.email):统一 send 接口,适配器抽象底层服务商。
28
- * 适配器在中间件构造时解析(配置错误尽早暴露)——resend / smtp / 自定义函数。
27
+ * 邮件接口(ctx.email):统一 send 接口——适配器抽象底层服务商。
28
+ * 适配器在中间件构造时解析(配置错误尽早暴露)——API / 自定义函数。
29
29
  */
30
- export interface Mailer {
30
+ export interface EmailInterface {
31
31
  send(msg: EmailMessage): Promise<EmailResult>;
32
32
  }
33
+ /** 兼容别名(= EmailInterface——对齐 Ai/AIInterface 命名) */
34
+ export type Mailer = EmailInterface;
35
+ /** 统一校验层(所有实现共享——API/MemoryEmail 同一语义):
36
+ * to 必填非空(零收件人发送=语义错误);From/To CRLF 注入拒绝(header 注入) */
37
+ export declare function validateMessage(msg: EmailMessage): void;
@@ -1,26 +1,16 @@
1
1
  /**
2
- * weifuwu/email — 邮件发送中间件
3
- *
4
- * 注入 ctx.email.send —— 统一发送接口,适配器抽象底层服务商。
2
+ * weifuwu/email — 邮件发送中间件(模块:app.use 注入 ctx.email + send 直接可用)
5
3
  *
4
+ * 发送通道 = **HTTP API(Resend 兼容端点——POST /emails)——不再直连 SMTP**。
6
5
  * 适配器:
7
- * - 'resend'(默认推荐):一个 POST,独立开发者首选
8
- * - 'smtp':自研 SMTP 客户端(node:net + node:tls,零依赖),任意服务商/自建 Postfix
6
+ * - 默认 'api':createEmailApi(apiKey/baseUrl——EMAIL_API_KEY/EMAIL_API_URL env)
9
7
  * - 自定义函数:`adapter: async (msg) => ...` 一行接入任意服务商
10
- *
11
- * 裁剪声明:
12
- * ✅ 统一 send 接口 / text + html / 多收件人 / 自定义适配器
13
- * ❌ 附件(SMTP MIME multipart 未实现)、退信/送达率(服务商职责)、
14
- * 批量营销、隐式入队(文档给"发邮件 = ctx.queue.add"示例)
8
+ * - MemoryEmail / MemoryEmailServer:测试/离线(主包导出——同 ai 模块模式)
15
9
  *
16
10
  * ```ts
17
11
  * import { email } from 'weifuwu'
18
12
  *
19
- * app.use(email({
20
- * from: 'no-reply@your.app',
21
- * adapter: 'resend', // 或 'smtp'
22
- * resend: { apiKey: process.env.RESEND_API_KEY },
23
- * }))
13
+ * app.use(email({ from: 'no-reply@your.app' })) // read EMAIL_API_KEY/EMAIL_API_URL
24
14
  *
25
15
  * app.post('/api/notify', async (req, ctx) => {
26
16
  * await ctx.email.send({ to: 'user@x.com', subject: '通知', html: '<h1>hi</h1>' })
@@ -29,33 +19,36 @@
29
19
  * ```
30
20
  */
31
21
  import type { Context, Middleware } from '../types.ts';
32
- import { type SmtpConfig } from './smtp.ts';
33
- import type { Mailer, EmailMessage, EmailResult } from './contracts.ts';
34
- /** 契约(src/email/contracts.ts 单一来源):ctx.email 类型 = Mailer */
35
- export type { Mailer, EmailMessage, EmailResult };
22
+ import { type EmailInterface, type EmailMessage, type EmailResult } from './contracts.ts';
23
+ /** 契约(contracts.ts 单一来源) */
24
+ export type { EmailInterface, Mailer, EmailMessage, EmailResult } from './contracts.ts';
25
+ export { validateMessage } from './contracts.ts';
26
+ export { createEmailApi, type EmailApiClient, type EmailApiOptions } from './api.ts';
27
+ export { MemoryEmail, createMemoryEmail, type MemoryEmailOptions } from './memory-email.ts';
28
+ export { MemoryEmailServer, createMemoryEmailServer, type MemoryEmailServerHandle, type MemoryEmailServerOptions } from './memory-email-server.ts';
36
29
  /** 适配器:输入已标准化的邮件消息,输出结果。 */
37
30
  export type EmailAdapter = (msg: EmailMessage) => Promise<EmailResult>;
38
31
  export interface EmailOptions {
39
32
  /** 默认发件人 */
40
33
  from: string;
41
- adapter?: 'resend' | 'smtp' | EmailAdapter;
42
- resend?: {
43
- apiKey?: string;
44
- /** 测试可注入 mock 地址 */
45
- baseUrl?: string;
46
- };
47
- smtp?: SmtpConfig;
48
- /** E3:resend 适配器 HTTP 超时 ms(SMTP 用 smtp.timeoutMs——默认 30s)。默认 10_000 */
34
+ /** API 发送 key(默认 EMAIL_API_KEY——兼容回退 RESEND_API_KEY) */
35
+ apiKey?: string;
36
+ /** API 发送端点(默认 EMAIL_API_URL——兼容回退 RESEND_API_URL → 'https://api.resend.com') */
37
+ baseUrl?: string;
38
+ /** HTTP 超时 ms。默认 10_000 */
49
39
  timeoutMs?: number;
40
+ /** 自定义适配器函数(完全替换 API 路径——如 no-op) */
41
+ adapter?: EmailAdapter;
50
42
  }
51
43
  export interface EmailInjected {
52
- email: Mailer;
44
+ email: EmailInterface;
53
45
  }
54
46
  declare module '../types.ts' {
55
47
  interface Context {
56
- email?: Mailer;
48
+ email?: EmailInterface;
57
49
  }
58
50
  }
59
- export interface EmailClient extends Middleware<Context, Context & EmailInjected> {
51
+ /** 模块 = 中间件(ctx.email)+ send 直接可用(worker/测试场景) */
52
+ export interface EmailClient extends Middleware<Context, Context & EmailInjected>, EmailInterface {
60
53
  }
61
54
  export declare function email(options: EmailOptions): EmailClient;
@@ -0,0 +1,43 @@
1
+ import { type MemoryEmailOptions } from './memory-email.ts';
2
+ import type { EmailMessage } from './contracts.ts';
3
+ export interface MemoryEmailServerOptions extends MemoryEmailOptions {
4
+ port?: number;
5
+ /** 请求级注入(测试对 HTTP 面全控——替代自建 mock):
6
+ * undefined = 走默认 handler(记录 + onSend 注入)
7
+ * { status, body } = 故障注入(4xx/5xx)
8
+ * { hang } = 挂起(超时测试) */
9
+ respond?: (req: MemoryEmailRequest) => MemoryEmailRespond | undefined;
10
+ }
11
+ /** 已接收请求(断言传输细节——路径/认证/体) */
12
+ export interface MemoryEmailRequest {
13
+ method: string;
14
+ path: string;
15
+ headers: Record<string, string>;
16
+ body: Record<string, unknown>;
17
+ }
18
+ /** 注入响应描述 */
19
+ export type MemoryEmailRespond = {
20
+ status: number;
21
+ body?: unknown;
22
+ } | {
23
+ hang: true;
24
+ };
25
+ /** 正名构造(new MemoryEmailServer() / MemoryEmailServer() / createMemoryEmailServer() 等价) */
26
+ export interface MemoryEmailServer {
27
+ new (options?: MemoryEmailServerOptions): Promise<MemoryEmailServerHandle>;
28
+ }
29
+ export interface MemoryEmailServerHandle {
30
+ port: number;
31
+ /** 完整 base URL(http://127.0.0.1:{port}——给 EMAIL_API_URL 指向) */
32
+ url: string;
33
+ /** 收件箱(GET /emails 同步返回——测试断言用) */
34
+ emails: EmailMessage[];
35
+ /** 已接收请求记录(断言用——含 respond 注入的请求) */
36
+ requests: MemoryEmailRequest[];
37
+ /** 强制断开所有连接(hang 场景清理) */
38
+ closeAllConnections(): void;
39
+ close(): Promise<void>;
40
+ }
41
+ /** 工厂(= MemoryEmailServer 正名——createMemoryEmailServer 兼容别名) */
42
+ export declare const createMemoryEmailServer: typeof MemoryEmailServer;
43
+ export declare function MemoryEmailServer(options?: MemoryEmailServerOptions): Promise<MemoryEmailServerHandle>;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * weifuwu/email — MemoryEmail(内存实现——参考 MemoryAi)
3
+ *
4
+ * 契约直实现 EmailClient(中间件 + send 直接可用)——确定性:
5
+ * - onSend 决策注入(测试对发送行为全控——同 MemoryAi.onChat)
6
+ * - 默认(无注入):记录到 sent + accepted(不编造上游行为——id 为 memory-mail-N)
7
+ * - 复用统一校验层(validateMessage——to 必填/CRLF 注入拒绝——与 API 路径一致)
8
+ *
9
+ * 用途:测试(断言 sent 记录)/ 离线 dev / 无上游 key 环境。
10
+ * 真实发送由 API provider(api.ts——HTTP 端点——不直连 SMTP)承担。
11
+ */
12
+ import type { Context, Middleware } from '../types.ts';
13
+ import { type EmailInterface, type EmailMessage, type EmailResult } from './contracts.ts';
14
+ export interface MemoryEmailOptions {
15
+ /** 决策注入(默认未注入:记录 + accepted——确定性) */
16
+ onSend?: (msg: EmailMessage) => EmailResult | Promise<EmailResult>;
17
+ }
18
+ export interface MemoryEmail extends Middleware<Context, Context & {
19
+ email: EmailInterface;
20
+ }>, EmailInterface {
21
+ /** 已发送记录(默认路径——断言用) */
22
+ sent: EmailMessage[];
23
+ }
24
+ export interface MemoryEmail {
25
+ new (options?: MemoryEmailOptions): MemoryEmail;
26
+ }
27
+ /** 模块构造(new MemoryEmail() / MemoryEmail() / createMemoryEmail() 等价) */
28
+ export declare function MemoryEmail(options?: MemoryEmailOptions): MemoryEmail;
29
+ /** 工厂别名(= MemoryEmail——与 createMemorySql/createMemoryAi 命名对称) */
30
+ export declare const createMemoryEmail: typeof MemoryEmail;
@@ -17,21 +17,39 @@ export { rateLimit } from './middleware/rate-limit.ts';
17
17
  export type { RateLimitOptions, RateLimitInjected, RateLimitAlgorithm } from './middleware/rate-limit.ts';
18
18
  export { email } from './email/index.ts';
19
19
  export type { EmailOptions, EmailMessage, EmailResult, EmailAdapter, EmailInjected } from './email/index.ts';
20
- export type { Mailer } from './email/contracts.ts';
21
- export { sendSmtp } from './email/smtp.ts';
22
- export type { SmtpConfig } from './email/smtp.ts';
23
- export { userSystem } from './user/index.ts';
20
+ export type { Mailer, EmailInterface } from './email/contracts.ts';
21
+ export { MemoryEmail, createMemoryEmail, MemoryEmailServer, createMemoryEmailServer } from './email/index.ts';
22
+ export { userSystem, BUILTIN_APP_ID, WEIFUWU_USER_SCHEMA } from './user/index.ts';
23
+ export { appAuth } from './user/app-auth.ts';
24
+ export { z, type Infer, type ZodType, type ZodRawShape } from '../shared/zod.ts';
25
+ export { shape, f, type Shape, type FieldDbMeta, type BodyOf, type PatchOf } from './db/shape.ts';
26
+ export { bodyOf, type BodyOfOptions } from './db/body.ts';
27
+ export { listQuery, errorResponse, type ListQueryOptions } from './db/http.ts';
28
+ export { diffConsistency, normalizeType, type ConsistencyIssue, type DeclaredTable, type LiveTable } from './db/consistency.ts';
29
+ export { compileSchemaDDL, compileSchemaDdl, ddlToSql, type SchemaModule, type TableDecl, type IndexDecl, type EnumDecl } from './db/schema.ts';
30
+ export { createOrm, memoryAdapter, postgresAdapter, type Orm, type CtxOrm, type OrmTable, type RowOf, type OrmTenant, type DbAdapter } from './db/orm.ts';
31
+ export { eq, ne, gt, gte, lt, lte, inArray, notInArray, between, like, ilike, contains, startsWith, endsWith, eqCol, isNull, isNotNull, and, or, not, cols, type ColRef, type ShapeCols } from './db/ops.ts';
32
+ export { createTypedQuery, type TypedQuery, type TSelect, type TypedSchema, type SelRow, type TWhere } from './db/typed-query.ts';
33
+ export type { WhereExpr, Query } from './db/query.ts';
34
+ export { buildQuery, createQueryBuilder } from './db/query-builder.ts';
35
+ export * as ops from './db/ops.ts';
24
36
  export { hashPassword, verifyPassword } from './user/password.ts';
25
37
  export { signToken, verifyToken, generateRefreshToken } from './user/token.ts';
26
- export { messager } from './messager/index.ts';
38
+ export { messager, WEIFUWU_MESSAGER_SCHEMA } from './messager/index.ts';
27
39
  export type { UserSystemOptions, UserInjected, AuthApi, RegisterInput } from './user/index.ts';
28
40
  export type { MessagerOptions, MessagerInjected, MessagerClient, MessagerSystem, MessagerHandlerOptions, Message, Conversation } from './messager/index.ts';
41
+ export { workflowSystem, WEIFUWU_WORKFLOW_SCHEMA } from './workflows/index.ts';
42
+ export type { WorkflowSystem, WorkflowSystemOptions, WorkflowClient, WorkflowCrud, WorkflowRecord, WorkflowRunRecord, CompileGateInput } from './workflows/index.ts';
29
43
  export { queue } from './queue/index.ts';
30
44
  export { scheduler } from './scheduler/index.ts';
31
45
  export type { QueueOptions, QueueClient, QueueInjected, QueueWorker, WorkerOptions, AddOptions, Job } from './queue/index.ts';
32
- export { ai } from './ai/index.ts';
33
- export type { Ai, ApprovalRequest } from './ai/contracts.ts';
34
- export type { AiOptions, AiInjected, AiClient, AiClientModule, ChatResponse, AgentConfig, AgentTool, AgentRunner, ToolContext, AgentRunResult, AgentStep, WfEmitter, } from './ai/index.ts';
46
+ export { OpenAi, MemoryAi, createMemoryAi } from './ai/index.ts';
47
+ export type { Ai, AIInterface, ApprovalRequest, ImageGenRequest, ImageGenResult, VideoGenRequest, VideoGenStatus } from './ai/contracts.ts';
48
+ export type { ImageGenOptions, VideoGenOptions, ImageGenClient, VideoGenClient } from './ai/multimodal.ts';
49
+ export type { MemoryAiOptions, OpenAiOptions, AiClientModule, AiInjected } from './ai/index.ts';
50
+ export { MemoryAiServer, createMemoryAiServer } from './ai/memory-server.ts';
51
+ export type { MemoryAiServerOptions, MemoryAiServerHandle } from './ai/memory-server.ts';
52
+ export type { AiClient, ChatResponse, AgentConfig, AgentTool, AgentRunner, ToolContext, AgentRunResult, AgentStep, WfEmitter, } from './ai/index.ts';
35
53
  export type { WfStreamEvent, WfMessageStart, WfToken, WfUsage, WfDone, WfError, WfErrorCode, WfToolCall, WfToolResult, WfToolProgress, WfStep, WfApprovalRequest, WfApprovalResponse, WfApprovalDecision, ChatMessage, ChatParams, MessageRole, ToolCall, ToolDefinition, } from './ai/types.ts';
36
54
  export { ui } from './ui/index.ts';
37
55
  export type { GraphQLOptions, GraphQLHandler } from './graphql.ts';
@@ -39,8 +57,13 @@ export { postgres, MIGRATIONS_TABLE } from './postgres/index.ts';
39
57
  export type { PostgresOptions, PostgresClient, PostgresInjected } from './postgres/types.ts';
40
58
  export { redis } from './redis/index.ts';
41
59
  export type { RedisOptions, RedisClient, RedisInjected } from './redis/types.ts';
42
- export type { Sql, Redis, PoolConnection, PostgresPoolConnection, RedisPoolConnection } from './db/contracts.ts';
60
+ export type { Redis, PoolConnection, PostgresPoolConnection, RedisPoolConnection } from './db/contracts.ts';
43
61
  export { MemoryRedis } from './db/memory-redis.ts';
44
- export { MemorySql, createMemorySql } from './db/memory-sql.ts';
62
+ export { MemorySql, createMemoryOrm } from './db/memory-sql.ts';
63
+ export { MemoryRedisServer } from './db/redis-server.ts';
64
+ export { workflow } from './workflow/index.ts';
65
+ export type { WorkflowEngine, WorkflowOptions } from './workflow/index.ts';
66
+ export type { WorkflowDef, StepDef, StepHandler, StepEnv, RunResult, ExecuteOptions, WorkflowCtx, StepOutput, RunStatus } from './workflow/contracts.ts';
67
+ export type { KVStore } from './workflow/store.ts';
45
68
  export { ok, created, noContent, badRequest, unauthorized, forbidden, notFound, conflict, unprocessable, tooManyRequests, serverError, redirect } from './response.ts';
46
69
  export { parseBody } from './request.ts';