@aalis/api-approval 0.1.0 → 0.2.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 CHANGED
@@ -7,7 +7,8 @@
7
7
  - `approvals`:服务描述符(服务名 `approvals`)。发起方调 `request(req, signal)` 等结算;审批面经绑定门面 `registerSurface(name)` 登记,随激活撤回,每个客户端 `attend` 一次,在场上报与应答都经它。
8
8
  - `Approval`、`ApprovalRequest`、`ApprovalOutcome` 等:审批对象、请求与结局的类型。
9
9
  - `approval:created`、`approval:settled`:审批推给审批面、结算时发出的事件。
10
- - `sanitizeForCard(text, limit?)`:审批卡显示事实之前的清洗,各审批面共用。
10
+ - `sanitizeForCard(text)`:审批卡显示事实之前的清洗,各审批面共用;`clipForCard(text, limit)` 清洗并截断,交出开头、结尾与中间省略的字数,「省略 N 字」由审批面按读者语言写。
11
+ - 应答被拒(`ApprovalResponse` 的 `ok: false`)时 `message` 是给应答人看的原因,可以是文字对象(`@aalis/schema-i18n`),审批面按读者语言渲染。
11
12
 
12
13
  ## 安装
13
14
 
@@ -18,12 +19,18 @@ pnpm add @aalis/api-approval
18
19
  ## 使用
19
20
 
20
21
  ```ts
21
- import { approvals, sanitizeForCard } from '@aalis/api-approval';
22
+ import { approvals, clipForCard } from '@aalis/api-approval';
23
+ // 审批面自己的字典(@aalis/schema-i18n 的 defineTexts),「省略 N 字」整句在那里
24
+ import { t } from './texts.js';
22
25
 
23
26
  // uses: { approvals: optional(approvals) }
24
27
  const surface = caps.approvals.use.registerSurface('cli');
25
28
  const attendance = surface.attend({ platform: 'cli', userId: 'console' }, {
26
- requested: approval => showCard(sanitizeForCard(approval.facts.command ?? approval.tool, 400)),
29
+ requested: approval => {
30
+ const { head, omitted, tail } = clipForCard(approval.facts.command ?? approval.tool, 400);
31
+ // render:按读者语言把文字对象渲染成字符串
32
+ showCard(omitted === 0 ? head : `${head}${render(t('charsOmitted', { count: omitted }))}${tail}`);
33
+ },
27
34
  settled: approvalId => closeCard(approvalId),
28
35
  });
29
36
  attendance.presence(true);
package/dist/index.d.ts CHANGED
@@ -1,37 +1,42 @@
1
1
  /**
2
2
  * @aalis/api-approval — 审批契约
3
3
  *
4
- * 模型发起、需要 owner 批准的操作以审批对象的形式出现:发起方发起并等结算,审批对象推给在场的审批面,
5
- * owner 应答,结果回给发起方。本包只有类型、服务描述符 `approvals` 与卡片清洗函数 `sanitizeForCard`;
6
- * 实现见 @aalis/plugin-session-server。
4
+ * 模型发起、需要批准的操作以审批对象的形式出现:发起方发起并等结算,审批对象推给在场的审批面,能批的人应答,结果回给
5
+ * 发起方。审批只有一种,发起方给出这一张谁能批(canAnswer),另标出只有 owner 能批的那种(要 owner 确认的)。本包只有
6
+ * 类型、服务描述符 `approvals` 与卡片清洗函数 `sanitizeForCard`、`clipForCard`;实现见 @aalis/plugin-session-server。
7
7
  *
8
8
  * 三类使用方:
9
9
  * - 发起方(执行守卫):`request(req, signal)` 发起一个审批并等它结算,拒绝时结果里带着回给模型的话;
10
- * - 审批面(WebUI、终端):经绑定门面 `registerSurface(name)` 登记,随激活撤回。每个客户端 `attend` 一次,
11
- * 在场上报与应答都经它,审计里的审批面取登记身份,不取调用方自报;
10
+ * - 审批面(WebUI、终端、IM 私聊与群窗口):经绑定门面 `registerSurface(name)` 登记,随激活撤回。每个客户端 `attend`
11
+ * 一次,在场上报与应答都经它,审计里的审批面取登记身份,不取调用方自报。推给谁、算谁在场、认谁的应答是一条规则:
12
+ * 客户端的身份能批这一张(canAnswer),且它的接入覆盖这张审批({@link AttendScope});
12
13
  * - 展示方:`list()` 与 `approval:created`、`approval:settled` 事件。
13
14
  */
15
+ import type { TextRef } from '@aalis/schema-i18n';
14
16
  /**
15
- * 发起回合的类别,由发起方(第一方是 plugin-authority 的执行守卫)按回合的来源算出(不按授权身份算:owner 建的定时任务
16
- * 会把创建者回填成授权身份):
17
- * - `owner`:owner 自己的会话里 owner 亲手发来的消息;
18
- * - `owner-chain`:同一 owner 会话里后台任务完成后的续做;
19
- * - `subtask`:子任务回合;
20
- * - `autonomous`:定时任务、定时触发、空闲与主动发言、开话题,以及它们触发的编排;
21
- * - `room`:群房间,以及对端不是 owner 的私聊,owner 在 WebUI 里驱动房间也算;
22
- * - `other`:其余真人回合与续做:群成员或其他用户发起的,以及受众判不出的会话(没有来源字段也没有创建来源)里
23
- * owner 发起的。
17
+ * 发起回合的类别,由发起方(第一方是 plugin-authority 的执行守卫)按这一轮从哪里来算出,不看会话类型与受众,也不判是不是
18
+ * owner(不按授权身份算:owner 建的定时任务会把创建者回填成授权身份):
19
+ * - `hand`:人亲手发来的消息(不带来源,含群里没点名、被频率触发挑中的插话),不论在哪个会话、是不是 owner;还有沿起它的那一轮
20
+ * 回到这样一轮的续做,以及它派出的子任务;
21
+ * - `autonomous`:定时任务、编排、空闲与主动发言、开话题、平台请求事件等其余注入与它们的续做、派出的子任务,以及不在入站回合里的
22
+ * 调用(含编排的工具节点、mcp-server 派出的子任务)。
24
23
  *
25
- * 只有 `owner` 与 `owner-chain` 能产生审批,其余一律直接拒绝,不推给任何审批面。
24
+ * 能不能产生审批由审批服务按类别与参与者判;不能的一律直接拒绝,不推给任何审批面。
26
25
  */
27
- export type OriginKind = 'owner' | 'owner-chain' | 'subtask' | 'autonomous' | 'room' | 'other';
28
- /** 发起回合的直接主体与它的类别 */
26
+ export type OriginKind = 'hand' | 'autonomous';
27
+ /** 发起回合的类别与参与者 */
29
28
  export interface ApprovalOrigin {
30
29
  kind: OriginKind;
31
- platform: string;
32
- userId?: string;
30
+ /** 这一轮的参与者(授权身份) */
31
+ participants: {
32
+ platform: string;
33
+ userId: string;
34
+ }[];
33
35
  }
34
- /** 发起一个审批:要执行的工具与它的参数(目前只有工具这一种目标) */
36
+ /**
37
+ * 发起一个审批:要执行的工具与它的参数(目前只有工具这一种目标)。canAnswer 与 ownerOnly 只在进程内交给提供者,不进推给
38
+ * 审批面的审批对象
39
+ */
35
40
  export interface ApprovalRequest {
36
41
  sessionId: string;
37
42
  /** 发起它的回合;回合结束或中止时没结的审批按 cancelled 结算 */
@@ -43,8 +48,12 @@ export interface ApprovalRequest {
43
48
  args: Record<string, unknown>;
44
49
  /** 命中的规则(如能力声明的确认要求、owner 的确认覆盖),记进审计 */
45
50
  rule: string;
51
+ /** 这个人能不能批这一张:参与者审批是他自己就能做这个动作,要 owner 确认的是 owner */
52
+ canAnswer: (who: ApprovalIdentity) => boolean;
53
+ /** 只有 owner 能批的那种(要 owner 确认的,含与参与者审批合成的):只给接入的覆盖用 */
54
+ ownerOnly: boolean;
46
55
  }
47
- /** pending 之后结算为其余四种之一:owner 批准、owner 拒绝或发起不被允许、没人应答(不在场、等满时限)、撤销 */
56
+ /** pending 之后结算为其余四种之一:批准、拒绝或发起不被允许、没人应答(不在场、等满时限)、撤销 */
48
57
  export type ApprovalState = 'pending' | 'approved' | 'denied' | 'expired' | 'cancelled';
49
58
  /** 结算之后的四种结局 */
50
59
  export type SettledState = Exclude<ApprovalState, 'pending'>;
@@ -52,17 +61,16 @@ export type SettledState = Exclude<ApprovalState, 'pending'>;
52
61
  * 卡片上的事实,按工具定义上声明的展示种类(api-tools 的 `display`)从参数里取,各项逐字、与执行的参数一致:
53
62
  * - `command`、`cwd`:命令类工具声明的命令与工作目录;
54
63
  * - `diff`:改文件类工具声明的路径与删、加两侧的参数生成,删的行以 `-` 开头、加的行以 `+` 开头;
55
- * 路径或内容疑似含密钥时没有 `patch`,只给路径;
56
64
  * - `params`:其余参数,逐字。没声明展示种类的工具,全部参数都在这里。
57
65
  *
58
- * 显示之前一律经 {@link sanitizeForCard} 清洗。
66
+ * 显示之前一律经 {@link sanitizeForCard} 清洗,要截断的经 {@link clipForCard}。
59
67
  */
60
68
  export interface ApprovalFacts {
61
69
  command?: string;
62
70
  cwd?: string;
63
71
  diff?: {
64
72
  path: string;
65
- patch?: string;
73
+ patch: string;
66
74
  };
67
75
  params: Record<string, unknown>;
68
76
  }
@@ -80,30 +88,41 @@ export interface Approval {
80
88
  options: Array<'approve' | 'deny'>;
81
89
  /** 请求内容(会话、回合、调用、工具与参数)的哈希,应答时原样带回 */
82
90
  contentHash: string;
91
+ /** 到期的时刻(毫秒时间戳),是这张审批自己的事实:审批服务推出时按它的等待时限填,到时没人应答即按过期结算 */
92
+ expiresAt: number;
83
93
  state: ApprovalState;
94
+ /**
95
+ * 来源链:所在会话不是根会话时,从根会话往下到它的各级子会话(不含根会话,按层级先后)的 id 与标题(没有标题时是会话名,
96
+ * 子任务没取名的是默认名),审批面据它写是哪个子任务;所在会话就是根会话时没有。审批服务推出时按会话树填
97
+ */
98
+ chain?: {
99
+ id: string;
100
+ title: string | TextRef;
101
+ }[];
84
102
  }
85
103
  /**
86
104
  * 结算从哪里来:
87
- * - `owner`:owner 应答(批准或拒绝);
105
+ * - `answer`:能批的人应答(批准或拒绝);
88
106
  * - `absent`:没人在场(发起时,或等待中在场的审批面都断开、变为不在场,且宽限内没有恢复);
89
107
  * - `timeout`:等满时限;
90
- * - `ineligible`:发起回合的类别不能产生审批;
91
- * - `subtask`:子任务回合的审批不上浮给 owner;
92
- * - `rate-limit`:同一会话的审批超过频率上限;
108
+ * - `ineligible`:发起回合的类别或参与者不能产生审批(起它的那一轮不是人亲手的,或参与者里没有人能批);
109
+ * - `rate-limit`:同一会话树(根会话连同各级子会话)的审批超过频率上限;
93
110
  * - `turn-ended`:发起它的回合结束或中止;
94
111
  * - `shutdown`:审批服务停止。
95
112
  */
96
- export type ApprovalSource = 'owner' | 'absent' | 'timeout' | 'ineligible' | 'subtask' | 'rate-limit' | 'turn-ended' | 'shutdown';
97
- /** 一个审批怎样结算的:结局、从哪里来与结算的时刻(毫秒时间戳) */
113
+ export type ApprovalSource = 'answer' | 'absent' | 'timeout' | 'ineligible' | 'rate-limit' | 'turn-ended' | 'shutdown';
114
+ /** 一个审批怎样结算的:结局、从哪里来、结算的时刻(毫秒时间戳),有人应答的带上应答人 */
98
115
  export interface ApprovalSettlement {
99
116
  state: SettledState;
100
117
  source: ApprovalSource;
101
118
  at: number;
119
+ by?: ApprovalIdentity;
102
120
  }
103
- /** 审批的结局。拒绝时 message 是回给模型的话:写明被什么拦下、能不能再申请;发起类别为 room 的只有一句通用的拒绝 */
121
+ /** 审批的结局。批准时 by 是批的人;拒绝时 message 是回给模型的话:写明被什么拦下、能不能再申请 */
104
122
  export type ApprovalOutcome = {
105
123
  approvalId: string;
106
124
  approved: true;
125
+ by: ApprovalIdentity;
107
126
  } | {
108
127
  approvalId: string;
109
128
  approved: false;
@@ -125,24 +144,39 @@ export interface ApprovalAnswer {
125
144
  note?: string;
126
145
  }
127
146
  /**
128
- * 应答被拒的原因:`forbidden` 应答人不是 owner;`not-found` 不是本服务签发的 id;`approval-settled` 已经结算
129
- * (先答先得,后到的都是它);`hash-mismatch` 内容哈希对不上;`unavailable` 审批服务不在
147
+ * 应答被拒的原因:`forbidden` 应答人不能批这一张;`not-found` 不是本服务签发的 id,或还在等的审批不归这个接入覆盖;
148
+ * `approval-settled` 已经结算(先答先得,后到的都是它,不论接入覆盖不覆盖它);`hash-mismatch` 内容哈希对不上;
149
+ * `unavailable` 审批服务不在
130
150
  */
131
151
  export type ApprovalRefusal = 'forbidden' | 'not-found' | 'approval-settled' | 'hash-mismatch' | 'unavailable';
152
+ /** 应答的结果。被拒时 message 是给应答人看的原因,可以是文字对象(出口按读者语言渲染) */
132
153
  export type ApprovalResponse = {
133
154
  ok: true;
134
155
  } | {
135
156
  ok: false;
136
157
  refusal: ApprovalRefusal;
137
- message: string;
158
+ message: string | TextRef;
138
159
  };
139
- /** 审批面的一个客户端(WebUI 的一条连接、终端):在场上报与应答都记在它接入的审批面的登记身份名下 */
160
+ /**
161
+ * 审批面的一个客户端(WebUI 的一条连接、终端、owner 的一个 IM 身份经一个机器人账号、群窗口里的一个人):在场上报与应答都记在
162
+ * 它接入的审批面的登记身份名下
163
+ */
140
164
  export interface ApprovalAttendance {
141
165
  /**
142
- * 在场上报。true 表示刚有键盘或指针活动(WebUI 另要页面可见),最近一次这样的上报在时限内即算在场;
143
- * false 表示离开(页面转到后台),即刻不在场
166
+ * 在场上报。true 表示刚有活动(WebUI 另要页面可见),最近一次这样的上报在时限内即算在场;推给它、还没结的审批也让它一直
167
+ * 算在场。false 表示离开(页面转到后台),即刻不在场:推给它、还没结的审批对它算没收到,它变为在场时补推
144
168
  */
145
169
  presence(active: boolean): void;
170
+ /**
171
+ * 推给它的这一张没送到它那里(如 IM 里这条消息发不出去):只这一张对它算没收到,它不因这一张算在场,变为在场时补推;推给它的
172
+ * 别的审批照旧。不是推给它、还没结的不起作用
173
+ */
174
+ undelivered(approvalId: string): void;
175
+ /**
176
+ * 它此刻还算不算在场(按上面同一条规则,由审批服务判):审批面据它撤掉不在场的接入,不自己另记时限。撤掉(leave)的接入
177
+ * 收不到推给过它、还没结的卡的结算,还要等结算的先别撤。审批服务不在时不在场
178
+ */
179
+ present(): boolean;
146
180
  respond(answer: ApprovalAnswer): ApprovalResponse;
147
181
  /** 客户端断开 */
148
182
  leave(): void;
@@ -152,16 +186,31 @@ export interface ApprovalIdentity {
152
186
  platform: string;
153
187
  userId: string;
154
188
  }
189
+ /**
190
+ * 接入的限定,两种:
191
+ * - 群窗口(给 `window`,群窗口的根会话 id;根会话已经定了机器人账号,不再给 selfId):只覆盖所在会话的根会话就是这个窗口的
192
+ * (连同它下面的子会话)、不是只有 owner 能批的审批。群窗口是公开的面,不发只有 owner 能批的;
193
+ * - IM 私聊(不给 `window`):只覆盖只有 owner 能批的、这一轮的参与者里有接入的身份、且所在会话的根会话的机器人账号
194
+ * (`originChat.selfId`)等于 `selfId` 的审批,两边都没有账号算相同
195
+ */
196
+ export interface AttendScope {
197
+ selfId?: string;
198
+ window?: string;
199
+ }
155
200
  /** 登记过的审批面 */
156
201
  export interface ApprovalSurface {
157
- /** 登记名(webui、cli) */
202
+ /** 登记名(webui、cli、chat) */
158
203
  readonly name: string;
159
- /** 接入一个客户端 */
160
- attend(who: ApprovalIdentity, sink: ApprovalSink): ApprovalAttendance;
204
+ /**
205
+ * 接入一个客户端。给了限定的只覆盖限定的那些审批({@link AttendScope}:IM 私聊每个身份与机器人账号一份,群窗口每个窗口与
206
+ * 发言者一份):只因它们算在场、只收和只能应答它们;不给的覆盖全部,只给 owner 的面(WebUI 的连接、终端):别的身份不限定地
207
+ * 接入会收到各会话里它能批的审批,别人的接入一律限定群窗口。推给它、算它在场、认它的应答另要接入的身份能批这一张
208
+ */
209
+ attend(who: ApprovalIdentity, sink: ApprovalSink, scope?: AttendScope): ApprovalAttendance;
161
210
  }
162
211
  /** 提供者那一侧的审批面登记;登记撤回时 detach */
163
212
  export interface SurfaceBinding {
164
- attend(who: ApprovalIdentity, sink: ApprovalSink): ApprovalAttendance;
213
+ attend(who: ApprovalIdentity, sink: ApprovalSink, scope?: AttendScope): ApprovalAttendance;
165
214
  detach(): void;
166
215
  }
167
216
  /** 提供者契约。审批面不直接在这里登记:经 {@link approvals} 的绑定门面登记,随激活撤回 */
@@ -196,8 +245,17 @@ declare module '@aalis/core' {
196
245
  /**
197
246
  * 审批卡显示事实之前的清洗:控制符(含 ANSI 转义序列的 ESC)转义成 `\x1B` 的样子显示;双向控制符、零宽字符等
198
247
  * 看不见的字符换成 `⟨U+202E⟩` 的样子。换行与制表符保留。原文里的每个字符都显示出来,不隐藏、不改变顺序。
199
- * 给了 limit 且原文超过 limit 个字符时,保留开头与结尾共 limit 个字符,中间写明省略了多少;截断按原文的字符算,
200
- * 不会切开转义或占位符。
201
248
  */
202
- export declare function sanitizeForCard(text: string, limit?: number): string;
249
+ export declare function sanitizeForCard(text: string): string;
250
+ /** {@link clipForCard} 的结果:清洗过的开头与结尾,中间省略的字数(没有截断时为 0,整段在 head、tail 为空) */
251
+ export interface CardClip {
252
+ head: string;
253
+ omitted: number;
254
+ tail: string;
255
+ }
256
+ /**
257
+ * 清洗(同 {@link sanitizeForCard})并截断:原文超过 limit 个字符时保留开头与结尾共 limit 个字符,交出两段与中间省略的
258
+ * 字数,显示方在两段之间按读者语言写明省略了多少。截断按原文的字符算,不会切开转义或占位符。
259
+ */
260
+ export declare function clipForCard(text: string, limit: number): CardClip;
203
261
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,17 +1,19 @@
1
1
  /**
2
2
  * @aalis/api-approval — 审批契约
3
3
  *
4
- * 模型发起、需要 owner 批准的操作以审批对象的形式出现:发起方发起并等结算,审批对象推给在场的审批面,
5
- * owner 应答,结果回给发起方。本包只有类型、服务描述符 `approvals` 与卡片清洗函数 `sanitizeForCard`;
6
- * 实现见 @aalis/plugin-session-server。
4
+ * 模型发起、需要批准的操作以审批对象的形式出现:发起方发起并等结算,审批对象推给在场的审批面,能批的人应答,结果回给
5
+ * 发起方。审批只有一种,发起方给出这一张谁能批(canAnswer),另标出只有 owner 能批的那种(要 owner 确认的)。本包只有
6
+ * 类型、服务描述符 `approvals` 与卡片清洗函数 `sanitizeForCard`、`clipForCard`;实现见 @aalis/plugin-session-server。
7
7
  *
8
8
  * 三类使用方:
9
9
  * - 发起方(执行守卫):`request(req, signal)` 发起一个审批并等它结算,拒绝时结果里带着回给模型的话;
10
- * - 审批面(WebUI、终端):经绑定门面 `registerSurface(name)` 登记,随激活撤回。每个客户端 `attend` 一次,
11
- * 在场上报与应答都经它,审计里的审批面取登记身份,不取调用方自报;
10
+ * - 审批面(WebUI、终端、IM 私聊与群窗口):经绑定门面 `registerSurface(name)` 登记,随激活撤回。每个客户端 `attend`
11
+ * 一次,在场上报与应答都经它,审计里的审批面取登记身份,不取调用方自报。推给谁、算谁在场、认谁的应答是一条规则:
12
+ * 客户端的身份能批这一张(canAnswer),且它的接入覆盖这张审批({@link AttendScope});
12
13
  * - 展示方:`list()` 与 `approval:created`、`approval:settled` 事件。
13
14
  */
14
15
  import { defineService } from '@aalis/core';
16
+ import { t } from './texts.js';
15
17
  export const approvals = defineService('approvals', port => {
16
18
  const surfaces = port.registrar({
17
19
  key: entry => entry.name,
@@ -26,7 +28,7 @@ export const approvals = defineService('approvals', port => {
26
28
  },
27
29
  });
28
30
  /** 客户端的句柄转到当前提供者的登记上;提供者换了,下一次调用时在新的登记上重新接入 */
29
- function attend(entry, who, sink) {
31
+ function attend(entry, who, sink, scope) {
30
32
  let left = false;
31
33
  let current;
32
34
  const bound = () => {
@@ -34,13 +36,15 @@ export const approvals = defineService('approvals', port => {
34
36
  if (left || !binding)
35
37
  return undefined;
36
38
  if (current?.binding !== binding)
37
- current = { binding, attendance: binding.attend(who, sink) };
39
+ current = { binding, attendance: binding.attend(who, sink, scope) };
38
40
  return current.attendance;
39
41
  };
40
42
  bound();
41
43
  return {
42
44
  presence: active => bound()?.presence(active),
43
- respond: answer => bound()?.respond(answer) ?? { ok: false, refusal: 'unavailable', message: '审批服务不在' },
45
+ undelivered: approvalId => bound()?.undelivered(approvalId),
46
+ present: () => bound()?.present() ?? false,
47
+ respond: answer => bound()?.respond(answer) ?? { ok: false, refusal: 'unavailable', message: t('serviceAbsent') },
44
48
  leave() {
45
49
  left = true;
46
50
  current?.attendance.leave();
@@ -52,7 +56,7 @@ export const approvals = defineService('approvals', port => {
52
56
  registerSurface: (name) => {
53
57
  const entry = { name };
54
58
  surfaces.add(entry);
55
- return { name, attend: (who, sink) => attend(entry, who, sink) };
59
+ return { name, attend: (who, sink, scope) => attend(entry, who, sink, scope) };
56
60
  },
57
61
  });
58
62
  });
@@ -64,23 +68,29 @@ const CONTROL = /[\p{Cc}]/gu;
64
68
  /** 看不见或会改变显示顺序的字符:格式符(双向控制、零宽字符、软连字符、标签字符等)、行与段分隔符、落单的代理项 */
65
69
  const INVISIBLE = /[\p{Cf}\p{Zl}\p{Zp}\p{Cs}]/gu;
66
70
  const hex = (char, width) => (char.codePointAt(0) ?? 0).toString(16).toUpperCase().padStart(width, '0');
67
- function clean(text) {
71
+ /**
72
+ * 审批卡显示事实之前的清洗:控制符(含 ANSI 转义序列的 ESC)转义成 `\x1B` 的样子显示;双向控制符、零宽字符等
73
+ * 看不见的字符换成 `⟨U+202E⟩` 的样子。换行与制表符保留。原文里的每个字符都显示出来,不隐藏、不改变顺序。
74
+ */
75
+ export function sanitizeForCard(text) {
68
76
  return text
69
77
  .replace(CONTROL, char => (char === '\n' || char === '\t' ? char : `\\x${hex(char, 2)}`))
70
78
  .replace(INVISIBLE, char => `⟨U+${hex(char, 4)}⟩`);
71
79
  }
72
80
  /**
73
- * 审批卡显示事实之前的清洗:控制符(含 ANSI 转义序列的 ESC)转义成 `\x1B` 的样子显示;双向控制符、零宽字符等
74
- * 看不见的字符换成 `⟨U+202E⟩` 的样子。换行与制表符保留。原文里的每个字符都显示出来,不隐藏、不改变顺序。
75
- * 给了 limit 且原文超过 limit 个字符时,保留开头与结尾共 limit 个字符,中间写明省略了多少;截断按原文的字符算,
76
- * 不会切开转义或占位符。
81
+ * 清洗(同 {@link sanitizeForCard})并截断:原文超过 limit 个字符时保留开头与结尾共 limit 个字符,交出两段与中间省略的
82
+ * 字数,显示方在两段之间按读者语言写明省略了多少。截断按原文的字符算,不会切开转义或占位符。
77
83
  */
78
- export function sanitizeForCard(text, limit) {
84
+ export function clipForCard(text, limit) {
79
85
  const chars = [...text];
80
- if (limit === undefined || chars.length <= limit)
81
- return clean(text);
86
+ if (chars.length <= limit)
87
+ return { head: sanitizeForCard(text), omitted: 0, tail: '' };
82
88
  const head = Math.ceil(limit / 2);
83
89
  const tail = limit - head;
84
- return `${clean(chars.slice(0, head).join(''))}…(省略 ${chars.length - limit} 字)…${clean(chars.slice(chars.length - tail).join(''))}`;
90
+ return {
91
+ head: sanitizeForCard(chars.slice(0, head).join('')),
92
+ omitted: chars.length - limit,
93
+ tail: sanitizeForCard(chars.slice(chars.length - tail).join('')),
94
+ };
85
95
  }
86
96
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ readonly serviceAbsent: "The approval service is absent";
3
+ };
4
+ export default _default;
5
+ //# sourceMappingURL=en.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":";;;AAGA,wBAEG"}
@@ -0,0 +1,5 @@
1
+ import { defineLocale } from '@aalis/schema-i18n';
2
+ export default defineLocale()({
3
+ serviceAbsent: 'The approval service is absent',
4
+ });
5
+ //# sourceMappingURL=en.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,eAAe,YAAY,EAAU,CAAC;IACpC,aAAa,EAAE,gCAAgC;CAChD,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ declare const SOURCE: {
2
+ readonly serviceAbsent: "审批服务不在";
3
+ };
4
+ export type Source = typeof SOURCE;
5
+ export declare const t: import("@aalis/schema-i18n").TextFactory<{
6
+ readonly serviceAbsent: "审批服务不在";
7
+ }>;
8
+ export {};
9
+ //# sourceMappingURL=texts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"texts.d.ts","sourceRoot":"","sources":["../src/texts.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,MAAM;;CAEF,CAAC;AACX,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC;AAEnC,eAAO,MAAM,CAAC;;EAAiG,CAAC"}
package/dist/texts.js ADDED
@@ -0,0 +1,8 @@
1
+ // 本包自己的原文字典:审批面的句柄在提供者不在场时回的应答被拒原因
2
+ import { defineTexts } from '@aalis/schema-i18n';
3
+ import en from './locales/en.js';
4
+ const SOURCE = {
5
+ serviceAbsent: '审批服务不在',
6
+ };
7
+ export const t = defineTexts({ ns: '@aalis/api-approval', language: 'zh-CN', source: SOURCE, locales: { en } });
8
+ //# sourceMappingURL=texts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"texts.js","sourceRoot":"","sources":["../src/texts.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEjC,MAAM,MAAM,GAAG;IACb,aAAa,EAAE,QAAQ;CACf,CAAC;AAGX,MAAM,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,qBAAqB,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aalis/api-approval",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -18,13 +18,16 @@
18
18
  "files": [
19
19
  "dist"
20
20
  ],
21
+ "dependencies": {
22
+ "@aalis/schema-i18n": ">=0.1.0 <1.0.0"
23
+ },
21
24
  "devDependencies": {
22
25
  "@types/node": "^22.0.0",
23
26
  "typescript": "^5.7.0",
24
- "@aalis/core": "0.20.0"
27
+ "@aalis/core": "0.21.0"
25
28
  },
26
29
  "peerDependencies": {
27
- "@aalis/core": ">=0.20.0 <1.0.0"
30
+ "@aalis/core": ">=0.21.0 <1.0.0"
28
31
  },
29
32
  "keywords": [
30
33
  "aalis",