dsh-ctxlift 0.1.2 → 0.2.3
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/CHANGELOG.md +68 -28
- package/CONTRIBUTING.md +3 -2
- package/README.md +17 -9
- package/README.zh-CN.md +14 -8
- package/dsh-ctxlift.png +0 -0
- package/lib/client.js +104 -16
- package/lib/config.d.ts +8 -9
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +29 -35
- package/lib/config.js.map +1 -1
- package/lib/engine/cache-invalidation.d.ts +19 -0
- package/lib/engine/cache-invalidation.d.ts.map +1 -0
- package/lib/engine/cache-invalidation.js +26 -0
- package/lib/engine/cache-invalidation.js.map +1 -0
- package/lib/engine/coordinator.d.ts +25 -2
- package/lib/engine/coordinator.d.ts.map +1 -1
- package/lib/engine/coordinator.js +136 -60
- package/lib/engine/coordinator.js.map +1 -1
- package/lib/engine/files.d.ts +11 -4
- package/lib/engine/files.d.ts.map +1 -1
- package/lib/engine/files.js +56 -12
- package/lib/engine/files.js.map +1 -1
- package/lib/index.d.ts +6 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +26 -13
- package/lib/index.js.map +1 -1
- package/lib/remote.d.ts +6 -8
- package/lib/remote.d.ts.map +1 -1
- package/lib/remote.js +9 -36
- package/lib/remote.js.map +1 -1
- package/locale/en.json +5 -1
- package/locale/zh.json +5 -1
- package/package.json +12 -10
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-invalidation.js","sourceRoot":"","sources":["../../src/engine/cache-invalidation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,2CAA2C;AAC3C,MAAM,CAAC,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC;IAC3D,OAAO;IACP,MAAM;IACN,aAAa;CACd,CAAC,CAAA;AAEF;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAA2C;IAC/E,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;IACtB,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC/D,CAAC"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { type RenderResult } from './render.js';
|
|
5
5
|
import type { GranularInstructionsConfig } from '../config.js';
|
|
6
6
|
export interface PreStepEventPayload {
|
|
7
|
+
/** 0.2.2-rc.1 的 agent/pre-step payload 携带 agent 实体(无 cwd 字段) */
|
|
7
8
|
agent?: {
|
|
8
9
|
cwd?: string;
|
|
9
10
|
workspace?: {
|
|
@@ -23,6 +24,14 @@ export interface DecisionResult {
|
|
|
23
24
|
messages: any[];
|
|
24
25
|
[key: string]: any;
|
|
25
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* 会话表面是否已存在相同文本的指令消息(去重闸)。
|
|
29
|
+
*
|
|
30
|
+
* 与官方自己用的账本一致(`agent.session.surface.nodes` + `eventAt`):
|
|
31
|
+
* 命中说明这份渲染已经进过上下文,不必再次替换,天然杜绝每轮重复追加
|
|
32
|
+
* 导致的 token 膨胀;session 重放后 surface 恢复,跨重启同样有效。
|
|
33
|
+
*/
|
|
34
|
+
export declare function surfaceAlreadyHas(agent: unknown, text: string): boolean;
|
|
26
35
|
/**
|
|
27
36
|
* 拦截协调器
|
|
28
37
|
*/
|
|
@@ -32,13 +41,27 @@ export declare class InstructionCoordinator {
|
|
|
32
41
|
private cachedRenderResult?;
|
|
33
42
|
constructor(config: GranularInstructionsConfig, customDshHome?: string);
|
|
34
43
|
updateConfig(newConfig: GranularInstructionsConfig): void;
|
|
44
|
+
/**
|
|
45
|
+
* 显式使渲染缓存失效,保留当前正在生效的运行时配置
|
|
46
|
+
*/
|
|
47
|
+
invalidateCache(): void;
|
|
35
48
|
/**
|
|
36
49
|
* 刷新并获取精细化渲染的提示词
|
|
37
50
|
*/
|
|
38
51
|
getRenderedInstructions(workspaceDir: string): RenderResult;
|
|
39
52
|
/**
|
|
40
|
-
*
|
|
53
|
+
* 洋葱圈拦截处理函数(合体方案:接管全部 agent-instructions 消息)
|
|
54
|
+
*
|
|
55
|
+
* 注册在 pre-step 洋葱最外层(见 src/index.ts `prepend`),`await next()`
|
|
56
|
+
* 之后决策已包含官方注入的全部指令消息(基线 + 增量 delta)。
|
|
57
|
+
* 这里把每一条 `source.kind === 'agent-instructions'` 的 content 替换为
|
|
58
|
+
* 按四层策略渲染后的文本;`source` 原样保留(baseline/baselineIdentity/
|
|
59
|
+
* changes 是官方的状态账本,改动会触发基线重铺)。去重闸保证相同文本
|
|
60
|
+
* 不重复替换,杜绝历史累积导致的 token 膨胀。
|
|
41
61
|
*/
|
|
42
|
-
handlePreStep(payload: PreStepEventPayload, next: () => Promise<DecisionResult
|
|
62
|
+
handlePreStep(payload: PreStepEventPayload, next: () => Promise<DecisionResult>, workingDirectory?: {
|
|
63
|
+
get?: (session: any) => string;
|
|
64
|
+
ensure?: (agent: any, signal?: AbortSignal) => Promise<string>;
|
|
65
|
+
}): Promise<DecisionResult>;
|
|
43
66
|
}
|
|
44
67
|
//# sourceMappingURL=coordinator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/engine/coordinator.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/engine/coordinator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAgC,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,KAAK,CAAC,EAAE;QACN,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC9B,KAAK,CAAC,EAAE;YAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAA;SAAE,CAAC;KAC9B,CAAC;IACF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAyCD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CA2BvE;AAED;;GAEG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,kBAAkB,CAAC,CAGzB;IAEF,YAAY,MAAM,EAAE,0BAA0B,EAAE,aAAa,CAAC,EAAE,MAAM,EAGrE;IAED,YAAY,CAAC,SAAS,EAAE,0BAA0B,GAAG,IAAI,CAGxD;IAED;;OAEG;IACH,eAAe,IAAI,IAAI,CAEtB;IAED;;OAEG;IACH,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,CA4B1D;IAED;;;;;;;;;OASG;IACG,aAAa,CACjB,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,EACnC,gBAAgB,CAAC,EAAE;QACjB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,MAAM,CAAC;QAC/B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;KAChE,GACA,OAAO,CAAC,cAAc,CAAC,CAqDzB;CACF"}
|
|
@@ -1,8 +1,80 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* DSH Workspace Instructions Onion-Skin Step Interceptor Coordinator
|
|
3
3
|
*/
|
|
4
|
+
import crypto from 'node:crypto';
|
|
4
5
|
import { discoverInstructionFiles } from './files.js';
|
|
5
6
|
import { renderGranularInstructionSet } from './render.js';
|
|
7
|
+
/**
|
|
8
|
+
* 解析当前步的工作目录。
|
|
9
|
+
*
|
|
10
|
+
* 0.2.2-rc.1 起 `agent/pre-step` 的 payload 不再提供 `agent.cwd`(`Agent`
|
|
11
|
+
* 公开面只有 id,增强面也无 cwd),所以优先通过宿主 workingDirectory 服务
|
|
12
|
+
* 取会话真实目录;服务缺失或调用失败时回退 payload 与 process.cwd()。
|
|
13
|
+
*/
|
|
14
|
+
async function resolveWorkspaceDir(payload, workingDirectory) {
|
|
15
|
+
const agent = payload?.agent;
|
|
16
|
+
if (workingDirectory !== undefined && agent !== undefined) {
|
|
17
|
+
try {
|
|
18
|
+
if (typeof workingDirectory.ensure === 'function') {
|
|
19
|
+
const ensured = await workingDirectory.ensure(agent, payload?.signal);
|
|
20
|
+
if (typeof ensured === 'string' && ensured.length > 0)
|
|
21
|
+
return ensured;
|
|
22
|
+
}
|
|
23
|
+
const session = agent.session;
|
|
24
|
+
if (typeof workingDirectory.get === 'function' && session !== undefined) {
|
|
25
|
+
const current = workingDirectory.get(session);
|
|
26
|
+
if (typeof current === 'string' && current.length > 0)
|
|
27
|
+
return current;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
// 用户中断必须继续向上传播:payload.signal 已传进 ensure,中断时抛
|
|
32
|
+
// AbortError;吞掉它会让取消信号失效,长任务无法中止。
|
|
33
|
+
if (err?.name === 'AbortError')
|
|
34
|
+
throw err;
|
|
35
|
+
// 其余服务失败静默回退,避免阻断 pre-step 主流程
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const legacy = payload?.agent?.cwd ?? payload?.cwd ?? payload?.workspaceDir;
|
|
39
|
+
return typeof legacy === 'string' && legacy.length > 0 ? legacy : process.cwd();
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 会话表面是否已存在相同文本的指令消息(去重闸)。
|
|
43
|
+
*
|
|
44
|
+
* 与官方自己用的账本一致(`agent.session.surface.nodes` + `eventAt`):
|
|
45
|
+
* 命中说明这份渲染已经进过上下文,不必再次替换,天然杜绝每轮重复追加
|
|
46
|
+
* 导致的 token 膨胀;session 重放后 surface 恢复,跨重启同样有效。
|
|
47
|
+
*/
|
|
48
|
+
export function surfaceAlreadyHas(agent, text) {
|
|
49
|
+
if (agent === undefined || agent === null)
|
|
50
|
+
return false;
|
|
51
|
+
const session = agent.session;
|
|
52
|
+
const surface = session?.surface;
|
|
53
|
+
const eventAt = session?.eventAt;
|
|
54
|
+
if (surface?.nodes === undefined || typeof eventAt !== 'function')
|
|
55
|
+
return false;
|
|
56
|
+
const target = crypto.createHash('sha1').update(text).digest('hex');
|
|
57
|
+
for (const seq of surface.nodes) {
|
|
58
|
+
let event;
|
|
59
|
+
try {
|
|
60
|
+
event = eventAt(seq);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (event?.type !== 'user/message')
|
|
66
|
+
continue;
|
|
67
|
+
if (event.data?.source?.kind !== 'agent-instructions')
|
|
68
|
+
continue;
|
|
69
|
+
const contentText = event.data?.content
|
|
70
|
+
?.find?.((c) => c?.type === 'text')?.text;
|
|
71
|
+
if (typeof contentText === 'string' && contentText.length > 0 &&
|
|
72
|
+
crypto.createHash('sha1').update(contentText).digest('hex') === target) {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
6
78
|
/**
|
|
7
79
|
* 拦截协调器
|
|
8
80
|
*/
|
|
@@ -18,18 +90,28 @@ export class InstructionCoordinator {
|
|
|
18
90
|
this.config = newConfig;
|
|
19
91
|
this.cachedRenderResult = undefined;
|
|
20
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* 显式使渲染缓存失效,保留当前正在生效的运行时配置
|
|
95
|
+
*/
|
|
96
|
+
invalidateCache() {
|
|
97
|
+
this.cachedRenderResult = undefined;
|
|
98
|
+
}
|
|
21
99
|
/**
|
|
22
100
|
* 刷新并获取精细化渲染的提示词
|
|
23
101
|
*/
|
|
24
102
|
getRenderedInstructions(workspaceDir) {
|
|
25
103
|
const files = discoverInstructionFiles(workspaceDir, this.config.globalPreference, this.customDshHome);
|
|
26
|
-
//
|
|
27
|
-
const
|
|
28
|
-
|
|
104
|
+
// 构建精准指纹,包含目录、文件路径、文件内容摘要以及四层策略参数
|
|
105
|
+
const fileSignatures = files.map((f) => {
|
|
106
|
+
const digest = crypto.createHash('sha1').update(f.content).digest('hex').slice(0, 8);
|
|
107
|
+
return `${f.path}:${f.content.length}:${digest}`;
|
|
108
|
+
}).join('|');
|
|
109
|
+
const configSignature = `pref:${this.config.globalPreference}` +
|
|
29
110
|
`|global:${this.config.globalPolicy.mode}:${this.config.globalPolicy.maxBytes}` +
|
|
30
111
|
`|claude:${this.config.projectClaudePolicy.mode}:${this.config.projectClaudePolicy.maxBytes}` +
|
|
31
112
|
`|agents:${this.config.projectAgentsPolicy.mode}:${this.config.projectAgentsPolicy.maxBytes}` +
|
|
32
113
|
`|sub:${this.config.subdirectoriesPolicy.mode}:${this.config.subdirectoriesPolicy.maxBytes}`;
|
|
114
|
+
const signature = `${workspaceDir}|${fileSignatures}|${configSignature}`;
|
|
33
115
|
if (this.cachedRenderResult && this.cachedRenderResult.signature === signature) {
|
|
34
116
|
return this.cachedRenderResult.result;
|
|
35
117
|
}
|
|
@@ -38,72 +120,66 @@ export class InstructionCoordinator {
|
|
|
38
120
|
return result;
|
|
39
121
|
}
|
|
40
122
|
/**
|
|
41
|
-
*
|
|
123
|
+
* 洋葱圈拦截处理函数(合体方案:接管全部 agent-instructions 消息)
|
|
124
|
+
*
|
|
125
|
+
* 注册在 pre-step 洋葱最外层(见 src/index.ts `prepend`),`await next()`
|
|
126
|
+
* 之后决策已包含官方注入的全部指令消息(基线 + 增量 delta)。
|
|
127
|
+
* 这里把每一条 `source.kind === 'agent-instructions'` 的 content 替换为
|
|
128
|
+
* 按四层策略渲染后的文本;`source` 原样保留(baseline/baselineIdentity/
|
|
129
|
+
* changes 是官方的状态账本,改动会触发基线重铺)。去重闸保证相同文本
|
|
130
|
+
* 不重复替换,杜绝历史累积导致的 token 膨胀。
|
|
42
131
|
*/
|
|
43
|
-
async handlePreStep(payload, next) {
|
|
44
|
-
// 1.
|
|
132
|
+
async handlePreStep(payload, next, workingDirectory) {
|
|
133
|
+
// 1. 等待下游与内层插件执行完毕(官方与 defaultFn 都已跑完)
|
|
45
134
|
const decision = await next();
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
//
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
return
|
|
52
|
-
...decision,
|
|
53
|
-
messages: filtered
|
|
54
|
-
};
|
|
135
|
+
// 决策被 reject 时没有 messages 字段(对齐官方 PreStepDecision 类型:
|
|
136
|
+
// `{kind:'enter', messages} | {kind:'reject'}`)。官方 agent-instructions
|
|
137
|
+
// 在 lib/index.js:1486-1488 专门守卫该分支,这里必须同样守卫,否则
|
|
138
|
+
// decision.messages.map 对 undefined 抛 TypeError 让驱动崩溃。
|
|
139
|
+
if (decision?.kind === 'reject' || !Array.isArray(decision.messages)) {
|
|
140
|
+
return decision;
|
|
55
141
|
}
|
|
56
|
-
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
142
|
+
const workspaceDir = await resolveWorkspaceDir(payload, workingDirectory);
|
|
143
|
+
const rendered = this.getRenderedInstructions(workspaceDir);
|
|
144
|
+
// 指令为空(四层全 disabled 或无文件):替换为最小提示,不移除消息
|
|
145
|
+
// (移除会让官方判定基线消失并重铺)、不用空 content(部分 provider 拒绝)。
|
|
146
|
+
const replacementText = rendered.fullPromptText
|
|
147
|
+
|| '<system-reminder>\nNo workspace instructions are active.\n</system-reminder>';
|
|
148
|
+
const agent = payload.agent;
|
|
149
|
+
// 2. 逐条遍历替换 agent-instructions 消息(基线 + delta 全覆盖)
|
|
150
|
+
// 去重闸按「本条消息」独立判定,而非整轮一次判定:
|
|
151
|
+
// - 消息 content 已是 replacementText(已替换过/内容相同)→ 跳过,幂等
|
|
152
|
+
// - 消息 content 是官方原文(增量 delta / 未替换基线)→ 替换为截断文本
|
|
153
|
+
// 这样增量消息不会被「表面已有同文本」误伤而绕过四层截断。
|
|
154
|
+
let changed = false;
|
|
155
|
+
const newMessages = decision.messages.map((m) => {
|
|
156
|
+
if (m?.source?.kind !== 'agent-instructions')
|
|
157
|
+
return m;
|
|
158
|
+
const currentText = m?.content?.[0]?.type === 'text'
|
|
159
|
+
? m.content[0].text
|
|
160
|
+
: undefined;
|
|
161
|
+
if (currentText === replacementText)
|
|
162
|
+
return m; // 已替换过 → 幂等跳过
|
|
163
|
+
if (surfaceAlreadyHas(agent, currentText ?? ''))
|
|
164
|
+
return m; // 官方原文已在表面 → 跳过
|
|
165
|
+
changed = true;
|
|
77
166
|
return {
|
|
78
|
-
...
|
|
79
|
-
messages: newMessages
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
// 官方插件未启用或已被禁用:由本插件自主构造标准的指令消息并注入,必须显式提供 changes: []
|
|
84
|
-
const syntheticMsg = {
|
|
85
|
-
role: 'user',
|
|
167
|
+
...m,
|
|
86
168
|
content: [
|
|
87
169
|
{
|
|
88
170
|
type: 'text',
|
|
89
|
-
text:
|
|
171
|
+
text: replacementText
|
|
90
172
|
}
|
|
91
|
-
]
|
|
92
|
-
source
|
|
93
|
-
kind: 'agent-instructions',
|
|
94
|
-
form: 'instructions',
|
|
95
|
-
baseline: true,
|
|
96
|
-
baselineIdentity: 'granular-instructions-guard',
|
|
97
|
-
changes: []
|
|
98
|
-
}
|
|
173
|
+
]
|
|
174
|
+
// source 原样保留:不动 baseline / baselineIdentity / changes
|
|
99
175
|
};
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
return
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
}
|
|
176
|
+
});
|
|
177
|
+
if (!changed)
|
|
178
|
+
return decision;
|
|
179
|
+
return {
|
|
180
|
+
...decision,
|
|
181
|
+
messages: newMessages
|
|
182
|
+
};
|
|
107
183
|
}
|
|
108
184
|
}
|
|
109
185
|
//# sourceMappingURL=coordinator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../src/engine/coordinator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,4BAA4B,EAAqB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../src/engine/coordinator.ts"],"names":[],"mappings":"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"}
|
package/lib/engine/files.d.ts
CHANGED
|
@@ -16,14 +16,21 @@ export interface GlobalFileResolution {
|
|
|
16
16
|
* 获取 DSH 全局配置目录 (~/.dsh 或 $DSH_HOME)
|
|
17
17
|
*/
|
|
18
18
|
export declare function getDshHomeDir(): string;
|
|
19
|
-
/**
|
|
20
|
-
* 获取 Agents 全局目录 (~/.agents 或 $AGENTS_HOME)
|
|
21
|
-
*/
|
|
22
|
-
export declare function getAgentsHomeDir(): string;
|
|
23
19
|
/**
|
|
24
20
|
* 解析全局指令文件状态与内容
|
|
25
21
|
*/
|
|
26
22
|
export declare function resolveGlobalInstructionFile(preference?: GlobalFilePreference, customDshHome?: string): GlobalFileResolution;
|
|
23
|
+
export interface SaveGlobalFileResult {
|
|
24
|
+
ok: boolean;
|
|
25
|
+
path: string;
|
|
26
|
+
sizeBytes: number;
|
|
27
|
+
lastModifiedMs: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 原子落盘保存全局指令文件
|
|
31
|
+
* 先写带随机后缀的隐藏临时文件,再原子 renameSync 替换目标文件
|
|
32
|
+
*/
|
|
33
|
+
export declare function saveGlobalInstructionFile(filename: 'AGENTS.md' | 'CLAUDE.md', content: string, customDshHome?: string): SaveGlobalFileResult;
|
|
27
34
|
/**
|
|
28
35
|
* 寻找工作区或项目根目录(通过向上探测 .git、package.json 等特征文件)
|
|
29
36
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/engine/files.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,mBAAmB,EAA2B,MAAM,aAAa,CAAC;AAChF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,WAAW,GAAG,WAAW,CAAC;IAC1C,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAMtC;AAED;;GAEG;AACH,wBAAgB,
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/engine/files.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,mBAAmB,EAA2B,MAAM,aAAa,CAAC;AAChF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,WAAW,GAAG,WAAW,CAAC;IAC1C,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAMtC;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,UAAU,GAAE,oBAA6B,EACzC,aAAa,CAAC,EAAE,MAAM,GACrB,oBAAoB,CAkEtB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,WAAW,GAAG,WAAW,EACnC,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,GACrB,oBAAoB,CAsCtB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA4BxD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,MAAM,EACpB,UAAU,GAAE,oBAA6B,EACzC,aAAa,CAAC,EAAE,MAAM,GACrB,mBAAmB,EAAE,CAoGvB"}
|
package/lib/engine/files.js
CHANGED
|
@@ -14,16 +14,6 @@ export function getDshHomeDir() {
|
|
|
14
14
|
}
|
|
15
15
|
return path.join(os.homedir(), '.dsh');
|
|
16
16
|
}
|
|
17
|
-
/**
|
|
18
|
-
* 获取 Agents 全局目录 (~/.agents 或 $AGENTS_HOME)
|
|
19
|
-
*/
|
|
20
|
-
export function getAgentsHomeDir() {
|
|
21
|
-
const envAgentsHome = process.env.AGENTS_HOME;
|
|
22
|
-
if (envAgentsHome && envAgentsHome.trim().length > 0) {
|
|
23
|
-
return path.resolve(envAgentsHome);
|
|
24
|
-
}
|
|
25
|
-
return path.join(os.homedir(), '.agents');
|
|
26
|
-
}
|
|
27
17
|
/**
|
|
28
18
|
* 解析全局指令文件状态与内容
|
|
29
19
|
*/
|
|
@@ -90,13 +80,59 @@ export function resolveGlobalInstructionFile(preference = 'auto', customDshHome)
|
|
|
90
80
|
lastModifiedMs
|
|
91
81
|
};
|
|
92
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* 原子落盘保存全局指令文件
|
|
85
|
+
* 先写带随机后缀的隐藏临时文件,再原子 renameSync 替换目标文件
|
|
86
|
+
*/
|
|
87
|
+
export function saveGlobalInstructionFile(filename, content, customDshHome) {
|
|
88
|
+
if (typeof content !== 'string') {
|
|
89
|
+
throw new Error('saveGlobalInstructionFile requires a string "content" parameter');
|
|
90
|
+
}
|
|
91
|
+
const dshHome = customDshHome ?? getDshHomeDir();
|
|
92
|
+
if (!fs.existsSync(dshHome)) {
|
|
93
|
+
fs.mkdirSync(dshHome, { recursive: true });
|
|
94
|
+
}
|
|
95
|
+
const safeFilename = filename === 'CLAUDE.md' ? 'CLAUDE.md' : 'AGENTS.md';
|
|
96
|
+
const targetPath = path.join(dshHome, safeFilename);
|
|
97
|
+
const tempPath = path.join(dshHome, `.${safeFilename}.tmp-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
98
|
+
try {
|
|
99
|
+
fs.writeFileSync(tempPath, content, 'utf-8');
|
|
100
|
+
fs.renameSync(tempPath, targetPath);
|
|
101
|
+
const stats = fs.statSync(targetPath);
|
|
102
|
+
return {
|
|
103
|
+
ok: true,
|
|
104
|
+
path: targetPath,
|
|
105
|
+
sizeBytes: stats.size,
|
|
106
|
+
lastModifiedMs: stats.mtimeMs
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
if (fs.existsSync(tempPath)) {
|
|
111
|
+
try {
|
|
112
|
+
fs.unlinkSync(tempPath);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// 临时文件清理失败不影响主流程
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
throw new Error(`Failed to save global instruction file: ${err.message}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
93
121
|
/**
|
|
94
122
|
* 寻找工作区或项目根目录(通过向上探测 .git、package.json 等特征文件)
|
|
95
123
|
*/
|
|
96
124
|
export function findProjectRoot(startDir) {
|
|
97
125
|
let current = path.resolve(startDir);
|
|
98
126
|
const root = path.parse(current).root;
|
|
127
|
+
// 家目录永远不是项目根:它是全局配置(~/.dsh、~/.agents)的所在,
|
|
128
|
+
// 里面那份 CLAUDE.md 属于用户全局环境,不该被当成某个项目的指令加载。
|
|
129
|
+
const homeDir = path.resolve(os.homedir());
|
|
99
130
|
while (current && current !== root) {
|
|
131
|
+
// 探测到 home 层就停,且 home 自身与更高层都不参与标志判定:
|
|
132
|
+
// 家目录里的 .dsh、package.json 只是家目录配置,认下来会让所有
|
|
133
|
+
// 无项目标志的子目录都被归到 home,进而误加载 ~/CLAUDE.md。
|
|
134
|
+
if (current === homeDir)
|
|
135
|
+
break;
|
|
100
136
|
if (fs.existsSync(path.join(current, '.git')) ||
|
|
101
137
|
fs.existsSync(path.join(current, 'package.json')) ||
|
|
102
138
|
fs.existsSync(path.join(current, '.dsh'))) {
|
|
@@ -107,7 +143,10 @@ export function findProjectRoot(startDir) {
|
|
|
107
143
|
break;
|
|
108
144
|
current = parent;
|
|
109
145
|
}
|
|
110
|
-
|
|
146
|
+
// 兜底:找不到项目标志时退回起点;但起点落在 home 时不能返回 home,
|
|
147
|
+
// 否则从家目录启动仍会命中 ~/CLAUDE.md。返回 home 的上一级,等于宣告无项目根。
|
|
148
|
+
const fallback = path.resolve(startDir);
|
|
149
|
+
return fallback === homeDir ? path.dirname(homeDir) : fallback;
|
|
111
150
|
}
|
|
112
151
|
/**
|
|
113
152
|
* 扫描并搜集从全局到项目的所有指令文件列表
|
|
@@ -178,7 +217,12 @@ export function discoverInstructionFiles(workspaceDir, preference = 'auto', cust
|
|
|
178
217
|
// 子目录扫描(如果当前工作区是项目根的深层子目录)
|
|
179
218
|
const normalizedRoot = path.resolve(projectRoot);
|
|
180
219
|
const normalizedCwd = path.resolve(workspaceDir);
|
|
181
|
-
|
|
220
|
+
// 家目录本身不算任何项目的子目录:从家目录启动会命中兜底返回的
|
|
221
|
+
// 「家目录的上一级」,若不排除,~/CLAUDE.md(全局环境记忆)会被当作
|
|
222
|
+
// 子目录指令重新注入。
|
|
223
|
+
if (normalizedCwd !== normalizedRoot &&
|
|
224
|
+
normalizedCwd.startsWith(normalizedRoot) &&
|
|
225
|
+
normalizedCwd !== path.resolve(os.homedir())) {
|
|
182
226
|
const subCandidates = ['CLAUDE.md', 'AGENTS.md'];
|
|
183
227
|
for (const subName of subCandidates) {
|
|
184
228
|
const subFilePath = path.join(normalizedCwd, subName);
|
package/lib/engine/files.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/engine/files.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAczB;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IACxC,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/engine/files.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* DSH 工作区指令精细化截断插件(宿主入口)
|
|
3
3
|
*
|
|
4
|
-
* 与官方 agent-instructions
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* 与官方 agent-instructions 的关系:本插件是它的「精细截断层」。官方负责
|
|
5
|
+
* 基线/增量的投递,本插件注册在 agent/pre-step 洋葱**最外层**(prepend),
|
|
6
|
+
* 在官方注入之后接管全部 `source.kind === 'agent-instructions'` 消息:
|
|
7
|
+
* 把 content 换成按四层策略渲染后的文本,`source` 原样保留(不动官方的
|
|
8
|
+
* baseline/baselineIdentity/changes 状态账本),并用会话表面去重闸保证
|
|
9
|
+
* 相同文本不重复替换,杜绝历史累积导致的 token 膨胀。
|
|
7
10
|
*
|
|
8
11
|
* 装配范式照搬 ponytail:Config Schema 全 volatile、Remote 服务用 ctx.plugin 挂载,
|
|
9
12
|
* 事件一律通过洋葱圈后置步骤注入。
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,aAAa,CAAC;AAKzD,eAAO,MAAM,IAAI,gBAAgB,CAAC;AAGlC,eAAO,MAAM,MAAM,SAAK,CAAC;AAEzB,wBAAgB,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,WAAW,QAyCtD"}
|
package/lib/index.js
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* DSH 工作区指令精细化截断插件(宿主入口)
|
|
3
3
|
*
|
|
4
|
-
* 与官方 agent-instructions
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* 与官方 agent-instructions 的关系:本插件是它的「精细截断层」。官方负责
|
|
5
|
+
* 基线/增量的投递,本插件注册在 agent/pre-step 洋葱**最外层**(prepend),
|
|
6
|
+
* 在官方注入之后接管全部 `source.kind === 'agent-instructions'` 消息:
|
|
7
|
+
* 把 content 换成按四层策略渲染后的文本,`source` 原样保留(不动官方的
|
|
8
|
+
* baseline/baselineIdentity/changes 状态账本),并用会话表面去重闸保证
|
|
9
|
+
* 相同文本不重复替换,杜绝历史累积导致的 token 膨胀。
|
|
7
10
|
*
|
|
8
11
|
* 装配范式照搬 ponytail:Config Schema 全 volatile、Remote 服务用 ctx.plugin 挂载,
|
|
9
12
|
* 事件一律通过洋葱圈后置步骤注入。
|
|
10
13
|
*/
|
|
11
14
|
import { Config, resolvePluginConfig } from './config.js';
|
|
12
15
|
import { InstructionCoordinator } from './engine/coordinator.js';
|
|
16
|
+
import { shouldInvalidateCache } from './engine/cache-invalidation.js';
|
|
13
17
|
import { InstructionsGuardService } from './remote.js';
|
|
14
18
|
export const name = 'dsh-ctxlift';
|
|
15
19
|
// 插件自己不依赖任何服务,零阻碍立即激活
|
|
@@ -19,15 +23,23 @@ export function apply(ctx, rawConfig) {
|
|
|
19
23
|
const coordinator = new InstructionCoordinator(config);
|
|
20
24
|
// 1. 挂载 Typert Remote 服务:ctx.plugin(ServiceClass, deps) 第二参即构造参数
|
|
21
25
|
if (typeof ctx.plugin === 'function') {
|
|
22
|
-
ctx.plugin(InstructionsGuardService
|
|
26
|
+
ctx.plugin(InstructionsGuardService, {
|
|
27
|
+
getPreference: () => resolvePluginConfig(rawConfig).globalPreference
|
|
28
|
+
});
|
|
23
29
|
}
|
|
24
30
|
else {
|
|
25
31
|
ctx.logger?.debug?.('[dsh-ctxlift] ctx.plugin unavailable, remote service skipped');
|
|
26
32
|
}
|
|
27
|
-
// 2. agent/pre-step
|
|
33
|
+
// 2. agent/pre-step 洋葱圈(prepend 注册到最外层):
|
|
34
|
+
// 在官方注入之后接管全部 agent-instructions 消息,替换 content、保留 source。
|
|
35
|
+
// prepend 是关键:默认 push 会让 ctxlift 落在外层内部,await next() 只跑到
|
|
36
|
+
// defaultFn,永远看不到官方注入的消息(官方在自己的 next() 之后才插入)。
|
|
37
|
+
// workingDirectory 服务在 0.2.2-rc.1 才是会话真实目录的权威来源;
|
|
38
|
+
// 用可选访问而非 inject 依赖,保持「零阻碍激活」不变。
|
|
28
39
|
ctx.on('agent/pre-step', async (payload, next) => {
|
|
29
|
-
|
|
30
|
-
|
|
40
|
+
const workingDirectory = typeof ctx.get === 'function' ? ctx.get('workingDirectory') : undefined;
|
|
41
|
+
return coordinator.handlePreStep(payload, next, workingDirectory);
|
|
42
|
+
}, true);
|
|
31
43
|
// 3. 监听 volatile 配置热更新:loader 广播被改动的字段路径
|
|
32
44
|
ctx.on('loader/volatile-update', (paths) => {
|
|
33
45
|
const touched = new Set(paths.map((p) => String(p)));
|
|
@@ -36,12 +48,13 @@ export function apply(ctx, rawConfig) {
|
|
|
36
48
|
coordinator.updateConfig(resolvePluginConfig(rawConfig));
|
|
37
49
|
}
|
|
38
50
|
});
|
|
39
|
-
// 4. 监听 tools/result
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
51
|
+
// 4. 监听 tools/result:文件编辑/写入完成后失效渲染缓存。
|
|
52
|
+
// 事件真实签名是 (exec, result)(dsh-tools/lib/types/events.d.ts:48),
|
|
53
|
+
// 工具名在 exec.name 上;旧实现把它当单参 event 读 event.tool.name,
|
|
54
|
+
// 该字段不存在,判断恒为 false,导致改完指令文件后缓存永不失效。
|
|
55
|
+
ctx.on('tools/result', (exec) => {
|
|
56
|
+
if (shouldInvalidateCache(exec))
|
|
57
|
+
coordinator.invalidateCache();
|
|
45
58
|
});
|
|
46
59
|
}
|
|
47
60
|
export default {
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAC;AAElC,sBAAsB;AACtB,MAAM,CAAC,MAAM,MAAM,GAAG,EAAE,CAAC;AAEzB,MAAM,UAAU,KAAK,CAAC,GAAQ,EAAE,SAAuB;IACrD,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAEvD,iEAAiE;IACjE,IAAI,OAAQ,GAA4B,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC/D,GAAG,CAAC,MAAM,CAAC,wBAAwB,EAAE;YACnC,aAAa,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,gBAAgB;SACrE,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,8DAA8D,CAAC,CAAC;IACtF,CAAC;IAED,yCAAyC;IACzC,6DAA6D;IAC7D,4DAA4D;IAC5D,kDAAkD;IAClD,oDAAoD;IACpD,oCAAoC;IACpC,GAAG,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,OAAY,EAAE,IAAwB,EAAE,EAAE;QACxE,MAAM,gBAAgB,GACpB,OAAO,GAAG,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,OAAO,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACpE,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,yCAAyC;IACzC,GAAG,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,KAA4B,EAAE,EAAE;QAChE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,CAAC,kBAAkB,EAAE,cAAc,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,CAAC;QACxH,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,WAAW,CAAC,YAAY,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,uCAAuC;IACvC,iEAAiE;IACjE,wDAAwD;IACxD,wCAAwC;IACxC,GAAG,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,IAAS,EAAE,EAAE;QACnC,IAAI,qBAAqB,CAAC,IAAI,CAAC;YAAE,WAAW,CAAC,eAAe,EAAE,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,eAAe;IACb,IAAI;IACJ,MAAM;IACN,MAAM;IACN,KAAK;CACN,CAAC"}
|