@dsh-plus/notify-email 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/LICENSE +21 -0
- package/lib/client.js +624 -0
- package/lib/index.d.ts +149 -0
- package/lib/index.js +579 -0
- package/package.json +62 -0
- package/src/audit.ts +48 -0
- package/src/client/api.ts +83 -0
- package/src/client/card.tsx +239 -0
- package/src/client/client.ts +63 -0
- package/src/client/fields.tsx +75 -0
- package/src/client/i18n.ts +104 -0
- package/src/client/styles.ts +64 -0
- package/src/config-api.ts +116 -0
- package/src/config.ts +131 -0
- package/src/index.ts +24 -0
- package/src/mailer.ts +103 -0
- package/src/service.ts +122 -0
- package/src/triggers/builtin.ts +47 -0
- package/src/triggers/render.ts +93 -0
- package/src/triggers/types.ts +40 -0
- package/src/watchers/decision.ts +33 -0
- package/src/watchers/turn-end.ts +135 -0
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import z from "@deepseek-ai/schemastery";
|
|
2
|
+
import "@deepseek-ai/dsh-settings";
|
|
3
|
+
import { Context, Service } from "@deepseek-ai/cordis";
|
|
4
|
+
|
|
5
|
+
//#region src/config.d.ts
|
|
6
|
+
|
|
7
|
+
declare const Config: z<Schemastery.ObjectS<{
|
|
8
|
+
enabled: z<boolean, boolean>;
|
|
9
|
+
smtp: z<Schemastery.ObjectS<{
|
|
10
|
+
host: z<string, string>;
|
|
11
|
+
port: z<number, number>;
|
|
12
|
+
secure: z<boolean, boolean>;
|
|
13
|
+
user: z<string, string>;
|
|
14
|
+
pass: z<string, string>;
|
|
15
|
+
from: z<string, string>;
|
|
16
|
+
}>, Schemastery.ObjectT<{
|
|
17
|
+
host: z<string, string>;
|
|
18
|
+
port: z<number, number>;
|
|
19
|
+
secure: z<boolean, boolean>;
|
|
20
|
+
user: z<string, string>;
|
|
21
|
+
pass: z<string, string>;
|
|
22
|
+
from: z<string, string>;
|
|
23
|
+
}>>;
|
|
24
|
+
to: z<string[], string[]>;
|
|
25
|
+
triggers: z<Schemastery.ObjectS<{
|
|
26
|
+
onComplete: z<boolean, boolean>;
|
|
27
|
+
onError: z<boolean, boolean>;
|
|
28
|
+
onAborted: z<boolean, boolean>;
|
|
29
|
+
onQuestion: z<boolean, boolean>;
|
|
30
|
+
onPlanReview: z<boolean, boolean>;
|
|
31
|
+
}>, Schemastery.ObjectT<{
|
|
32
|
+
onComplete: z<boolean, boolean>;
|
|
33
|
+
onError: z<boolean, boolean>;
|
|
34
|
+
onAborted: z<boolean, boolean>;
|
|
35
|
+
onQuestion: z<boolean, boolean>;
|
|
36
|
+
onPlanReview: z<boolean, boolean>;
|
|
37
|
+
}>>;
|
|
38
|
+
idleDebounceMs: z<number, number>;
|
|
39
|
+
maxBodyChars: z<number, number>;
|
|
40
|
+
dryRun: z<boolean, boolean>;
|
|
41
|
+
}>, Schemastery.ObjectT<{
|
|
42
|
+
enabled: z<boolean, boolean>;
|
|
43
|
+
smtp: z<Schemastery.ObjectS<{
|
|
44
|
+
host: z<string, string>;
|
|
45
|
+
port: z<number, number>;
|
|
46
|
+
secure: z<boolean, boolean>;
|
|
47
|
+
user: z<string, string>;
|
|
48
|
+
pass: z<string, string>;
|
|
49
|
+
from: z<string, string>;
|
|
50
|
+
}>, Schemastery.ObjectT<{
|
|
51
|
+
host: z<string, string>;
|
|
52
|
+
port: z<number, number>;
|
|
53
|
+
secure: z<boolean, boolean>;
|
|
54
|
+
user: z<string, string>;
|
|
55
|
+
pass: z<string, string>;
|
|
56
|
+
from: z<string, string>;
|
|
57
|
+
}>>;
|
|
58
|
+
to: z<string[], string[]>;
|
|
59
|
+
triggers: z<Schemastery.ObjectS<{
|
|
60
|
+
onComplete: z<boolean, boolean>;
|
|
61
|
+
onError: z<boolean, boolean>;
|
|
62
|
+
onAborted: z<boolean, boolean>;
|
|
63
|
+
onQuestion: z<boolean, boolean>;
|
|
64
|
+
onPlanReview: z<boolean, boolean>;
|
|
65
|
+
}>, Schemastery.ObjectT<{
|
|
66
|
+
onComplete: z<boolean, boolean>;
|
|
67
|
+
onError: z<boolean, boolean>;
|
|
68
|
+
onAborted: z<boolean, boolean>;
|
|
69
|
+
onQuestion: z<boolean, boolean>;
|
|
70
|
+
onPlanReview: z<boolean, boolean>;
|
|
71
|
+
}>>;
|
|
72
|
+
idleDebounceMs: z<number, number>;
|
|
73
|
+
maxBodyChars: z<number, number>;
|
|
74
|
+
dryRun: z<boolean, boolean>;
|
|
75
|
+
}>>;
|
|
76
|
+
type NotifyEmailConfig = Schemastery.TypeT<typeof Config>;
|
|
77
|
+
//#endregion
|
|
78
|
+
//#region src/triggers/types.d.ts
|
|
79
|
+
/**
|
|
80
|
+
* 触发器契约:第三方插件经 ctx.notifyEmail.registerTrigger() 注册,
|
|
81
|
+
* 返回 undefined 表示「不关心该观察」;首个非空产物被投递。
|
|
82
|
+
* 内置官方适配器(decision/turn-end)也经同一接口注册,无特权路径。
|
|
83
|
+
* @module notify-email/triggers/types
|
|
84
|
+
*/
|
|
85
|
+
/** 一封待投递通知:触发器的产出。 */
|
|
86
|
+
interface EmailNotice {
|
|
87
|
+
subject: string;
|
|
88
|
+
text: string;
|
|
89
|
+
html?: string;
|
|
90
|
+
}
|
|
91
|
+
/** 决策类观察:工具调用即将阻塞等待用户(tools/pre-execute 观察点,参数已校验)。 */
|
|
92
|
+
interface DecisionCall {
|
|
93
|
+
callId: string;
|
|
94
|
+
sessionId: string;
|
|
95
|
+
name: string;
|
|
96
|
+
args: Record<string, unknown>;
|
|
97
|
+
}
|
|
98
|
+
/** 任务停止类观察:runtime root agent 的 turn 结束且空闲防抖后。 */
|
|
99
|
+
interface TurnEndInfo {
|
|
100
|
+
sessionId: string;
|
|
101
|
+
turn: number;
|
|
102
|
+
/** turn/end reason.kind:completed | error | aborted(其余 kind 不下发)。 */
|
|
103
|
+
kind: string;
|
|
104
|
+
errorMessage?: string;
|
|
105
|
+
/** 该会话最后一条 assistant 消息的文本内容。 */
|
|
106
|
+
lastDelivery?: string;
|
|
107
|
+
}
|
|
108
|
+
interface NotifyTrigger {
|
|
109
|
+
readonly id: string;
|
|
110
|
+
/** 决策类通知:返回 undefined 跳过。 */
|
|
111
|
+
onDecision?(call: DecisionCall): EmailNotice | undefined;
|
|
112
|
+
/** 任务停止类通知:返回 undefined 跳过。 */
|
|
113
|
+
onTurnEnd?(info: TurnEndInfo): EmailNotice | undefined;
|
|
114
|
+
}
|
|
115
|
+
//#endregion
|
|
116
|
+
//#region src/service.d.ts
|
|
117
|
+
declare module '@deepseek-ai/cordis' {
|
|
118
|
+
interface Context {
|
|
119
|
+
notifyEmail: NotifyEmailService;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
declare class NotifyEmailService extends Service {
|
|
123
|
+
static [Context.inject]: string[];
|
|
124
|
+
private readonly triggers;
|
|
125
|
+
private readonly mailer;
|
|
126
|
+
private current;
|
|
127
|
+
constructor(ctx: Context, config: NotifyEmailConfig);
|
|
128
|
+
/** 注册触发器(第三方扩展接口);返回注销函数,随调用方 fiber 释放。 */
|
|
129
|
+
registerTrigger(trigger: NotifyTrigger): () => void;
|
|
130
|
+
/** 当前生效配置(settings 用户层解析结果或 cordis 行级 config)。 */
|
|
131
|
+
currentConfig(): NotifyEmailConfig;
|
|
132
|
+
/** 决策类观察入口(decision watcher 调用)。 */
|
|
133
|
+
dispatchDecision(call: DecisionCall): Promise<void>;
|
|
134
|
+
/** 任务停止类观察入口(turn-end watcher 调用)。 */
|
|
135
|
+
dispatchTurnEnd(info: TurnEndInfo): Promise<void>;
|
|
136
|
+
/** 配置卡片「发送测试邮件」:绕过 enabled 门禁,仍需 SMTP 完整。 */
|
|
137
|
+
sendTest(): Promise<{
|
|
138
|
+
ok: boolean;
|
|
139
|
+
detail: string;
|
|
140
|
+
}>;
|
|
141
|
+
private dispatch;
|
|
142
|
+
}
|
|
143
|
+
//#endregion
|
|
144
|
+
//#region src/index.d.ts
|
|
145
|
+
declare const name = "dsh-plus-notify-email";
|
|
146
|
+
declare const inject: readonly ["agents", "tools"];
|
|
147
|
+
declare function apply(ctx: Context, config: NotifyEmailConfig): void;
|
|
148
|
+
//#endregion
|
|
149
|
+
export { Config, type DecisionCall, type EmailNotice, NotifyEmailService, type NotifyTrigger, type TurnEndInfo, apply, inject, name };
|