context-guardian-deepseek-harness 0.1.1 → 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 +31 -7
- package/README.zh-CN.md +32 -8
- package/lib/bridge.d.ts +13 -1
- package/lib/bridge.d.ts.map +1 -1
- package/lib/bridge.js +75 -19
- package/lib/bridge.js.map +1 -1
- package/lib/index.d.ts +13 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +134 -65
- package/lib/index.js.map +1 -1
- package/lib/types.d.ts +50 -0
- package/lib/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,13 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.md) · [简体中文](README.zh-CN.md)
|
|
4
4
|
|
|
5
|
-
This adapter
|
|
5
|
+
This adapter audits a native Preview before DeepSeek Harness commits context compaction:
|
|
6
6
|
|
|
7
7
|
```text
|
|
8
|
-
Harness
|
|
8
|
+
Harness native Preview → Context Guardian Audit → auto correction / max 3 topic questions
|
|
9
|
+
→ incremental guidance → native Harness compaction commit
|
|
9
10
|
```
|
|
10
11
|
|
|
11
|
-
It is a decorator over `dsh-compaction-basic`. DeepSeek Harness continues to own compaction range selection, token accounting, durable session events, summary framing, persistence, and the `/compact` command. If Python, the bridge,
|
|
12
|
+
It is a decorator over `dsh-compaction-basic`. DeepSeek Harness continues to own compaction range selection, token accounting, durable session events, summary framing, persistence, and the `/compact` command. An accurate Preview is returned without a retry. If Python, the bridge, audit, review UI, or guided retry is unavailable, the adapter logs a warning and accepts the successful Preview. This is experimental and does not guarantee better summaries or agent performance.
|
|
13
|
+
|
|
14
|
+
The hard review budget is controlled by `CONTEXT_GUARDIAN_MAX_REVIEW_QUESTIONS=0..3`;
|
|
15
|
+
zero disables questions and resolves uncertain topics conservatively.
|
|
12
16
|
|
|
13
17
|
## Install
|
|
14
18
|
|
|
@@ -62,13 +66,30 @@ The adapter does not receive or forward `DEEPSEEK_API_KEY`. Structured inspectio
|
|
|
62
66
|
If the core is installed in a virtual environment, set
|
|
63
67
|
`CONTEXT_GUARDIAN_PYTHON=/absolute/path/to/venv/bin/python` before starting Harness.
|
|
64
68
|
|
|
69
|
+
On Windows, the bridge preserves the runtime variables required by Python's networking
|
|
70
|
+
stack while still passing only an explicit minimal environment to the child process. If
|
|
71
|
+
the `python3` command resolves to the Microsoft Store placeholder, set the interpreter
|
|
72
|
+
explicitly in the same PowerShell session used to start Harness:
|
|
73
|
+
|
|
74
|
+
```powershell
|
|
75
|
+
$env:CONTEXT_GUARDIAN_PYTHON = (Get-Command python).Source
|
|
76
|
+
$env:CONTEXT_GUARDIAN_DEBUG = "1"
|
|
77
|
+
$env:CONTEXT_GUARDIAN_TIMEOUT_MS = "120000"
|
|
78
|
+
dsh --profile web
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
The bridge timeout defaults to 120 seconds and can be lowered with
|
|
82
|
+
`CONTEXT_GUARDIAN_TIMEOUT_MS` (up to 120 seconds). With debug enabled, the adapter logs
|
|
83
|
+
when it loads and reports only audit finding and topic-question counts (never raw prompt contents).
|
|
84
|
+
|
|
65
85
|
Start the web profile and use a sufficiently long session or `/compact`:
|
|
66
86
|
|
|
67
87
|
```bash
|
|
68
88
|
dsh --profile web
|
|
69
89
|
```
|
|
70
90
|
|
|
71
|
-
Review
|
|
91
|
+
Review topics appear through Harness's user-question UI. In headless compositions
|
|
92
|
+
without an answerer, high-risk topics are kept and low-risk topics accept the Preview.
|
|
72
93
|
|
|
73
94
|
For a repeatable end-to-end UI test that does not require a long real conversation:
|
|
74
95
|
|
|
@@ -77,9 +98,12 @@ env PATH="/path/to/node-22.19/bin:$PATH" npm run dsh-fixture-smoke
|
|
|
77
98
|
```
|
|
78
99
|
|
|
79
100
|
The fixture creates an isolated Web profile, seeds a sufficiently large conversation,
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
101
|
+
deliberately omits selected facts from the replayed native Preview, and opens the
|
|
102
|
+
Harness UI. Select the session named `Context Guardian 预置长对话(请先选择)`
|
|
103
|
+
(or the `context-guardian-fixture-long` workspace), then enter `/compact`. The UI
|
|
104
|
+
should show at most three topic questions; select Keep or Drop and confirm the guided
|
|
105
|
+
native compaction result. It uses a replay model, so no DeepSeek API key is required.
|
|
106
|
+
Exit the temporary Web process with Ctrl-C when finished.
|
|
83
107
|
|
|
84
108
|
## Disable or uninstall
|
|
85
109
|
|
package/README.zh-CN.md
CHANGED
|
@@ -2,15 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.md) · 简体中文
|
|
4
4
|
|
|
5
|
-
这个适配器在 DeepSeek Harness
|
|
5
|
+
这个适配器在 DeepSeek Harness 提交原生上下文压缩前审计 Preview:
|
|
6
6
|
|
|
7
7
|
```text
|
|
8
|
-
Harness
|
|
8
|
+
Harness 原生 Preview → Context Guardian 审计 → 自动修正 / 最多 3 个主题问题
|
|
9
|
+
→ 增量指导 → Harness 原生 compaction 提交
|
|
9
10
|
```
|
|
10
11
|
|
|
11
12
|
它是 `dsh-compaction-basic` 的装饰器。DeepSeek Harness 继续负责压缩范围、
|
|
12
13
|
token 统计、会话事件、摘要格式、持久化和 `/compact` 命令。如果 Python、桥接、
|
|
13
|
-
|
|
14
|
+
模型审计或 UI 不可用,适配器会记录 warning 并接受已经成功的 Preview;如果
|
|
15
|
+
Preview 本身失败才回到 Harness 原生 fallback。这是实验性能力,不保证一定改善
|
|
16
|
+
摘要或 Agent 表现。
|
|
17
|
+
|
|
18
|
+
可用 `CONTEXT_GUARDIAN_MAX_REVIEW_QUESTIONS=0..3` 设置问题硬上限;设为 0 表示
|
|
19
|
+
不弹窗,对未决主题采用保守处理。
|
|
14
20
|
|
|
15
21
|
## 安装
|
|
16
22
|
|
|
@@ -65,6 +71,21 @@ export CONTEXT_GUARDIAN_PYTHON=/absolute/path/to/python
|
|
|
65
71
|
如果核心安装在虚拟环境中,启动 Harness 前设置
|
|
66
72
|
`CONTEXT_GUARDIAN_PYTHON=/absolute/path/to/venv/bin/python`。
|
|
67
73
|
|
|
74
|
+
在 Windows 上,bridge 会在保持最小子进程环境的同时传递 Python 网络栈所需的运行时变量。
|
|
75
|
+
如果 `python3` 解析到了 Microsoft Store 占位符,请在启动 Harness 的同一个 PowerShell
|
|
76
|
+
会话中显式指定解释器:
|
|
77
|
+
|
|
78
|
+
```powershell
|
|
79
|
+
$env:CONTEXT_GUARDIAN_PYTHON = (Get-Command python).Source
|
|
80
|
+
$env:CONTEXT_GUARDIAN_DEBUG = "1"
|
|
81
|
+
$env:CONTEXT_GUARDIAN_TIMEOUT_MS = "120000"
|
|
82
|
+
dsh --profile web
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
bridge 默认超时为 120 秒,也可以用 `CONTEXT_GUARDIAN_TIMEOUT_MS` 调低(上限为 120 秒)。
|
|
86
|
+
启用 debug 后,适配器会记录已加载,并只报告审计 finding 和主题问题数量,不输出
|
|
87
|
+
原始 prompt 内容。
|
|
88
|
+
|
|
68
89
|
## 交互式验证
|
|
69
90
|
|
|
70
91
|
启动 Web profile:
|
|
@@ -79,12 +100,15 @@ dsh --profile web
|
|
|
79
100
|
env PATH="/path/to/node-22.19/bin:$PATH" npm run dsh-fixture-smoke
|
|
80
101
|
```
|
|
81
102
|
|
|
82
|
-
fixture 会创建隔离的 Web profile
|
|
83
|
-
|
|
84
|
-
|
|
103
|
+
fixture 会创建隔离的 Web profile,预置足够长的会话,并故意让 replay 的原生
|
|
104
|
+
Preview 缺少部分事实。打开 Harness UI 后,先选择名为
|
|
105
|
+
`Context Guardian 预置长对话(请先选择)` 的会话(或选择
|
|
106
|
+
`context-guardian-fixture-long` 工作区中的该会话),再输入 `/compact`。界面应
|
|
107
|
+
最多显示 3 个主题问题;请手动选择 Keep 或 Drop,然后确认带增量指导的原生
|
|
108
|
+
压缩成功。它使用 replay model,不需要 DeepSeek API Key。结束临时 Web 进程时
|
|
109
|
+
按 Ctrl-C。
|
|
85
110
|
|
|
86
|
-
在没有 answerer
|
|
87
|
-
`CONTEXT_GUARDIAN_REVIEW_MODE=keep` 或 `drop` 绕过询问 UI。
|
|
111
|
+
在没有 answerer 的无头模式中,高风险主题会保守地 Keep,低风险主题接受 Preview。
|
|
88
112
|
|
|
89
113
|
## 禁用或卸载
|
|
90
114
|
|
package/lib/bridge.d.ts
CHANGED
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
import type { Context } from "@deepseek-ai/cordis";
|
|
2
2
|
import type { Agent } from "@deepseek-ai/dsh-agent";
|
|
3
|
-
import type { Guidance, GuardianMessage, InspectionResult, MemoryCandidate } from "./types.js";
|
|
3
|
+
import type { Guidance, GuardianMessage, InspectionResult, MemoryCandidate, ReviewPlan } from "./types.js";
|
|
4
|
+
export type GuardianBridgeErrorCode = "spawn" | "timeout" | "protocol" | "process_exit";
|
|
4
5
|
export declare class GuardianBridgeError extends Error {
|
|
6
|
+
readonly code: GuardianBridgeErrorCode;
|
|
7
|
+
constructor(message: string, code: GuardianBridgeErrorCode);
|
|
5
8
|
}
|
|
9
|
+
export declare function pythonCommand(source?: NodeJS.ProcessEnv, platform?: NodeJS.Platform): string;
|
|
10
|
+
export declare function pythonEnvironment(source?: NodeJS.ProcessEnv, platform?: NodeJS.Platform): NodeJS.ProcessEnv;
|
|
6
11
|
export declare function normalizeDeepSeekMessages(_system: string | undefined, messages: readonly any[]): GuardianMessage[];
|
|
12
|
+
export declare function preferredLanguage(messages: readonly GuardianMessage[]): "zh-CN" | "en";
|
|
7
13
|
export declare class GuardianBridge {
|
|
8
14
|
inspect(ctx: Context, agent: Agent, messages: GuardianMessage[], signal: AbortSignal): Promise<InspectionResult>;
|
|
9
15
|
guidance(ctx: Context, agent: Agent, candidates: MemoryCandidate[], decisions: Array<{
|
|
10
16
|
candidate_id: string;
|
|
11
17
|
action: "keep" | "drop";
|
|
12
18
|
}>, signal: AbortSignal): Promise<Guidance>;
|
|
19
|
+
auditPreview(ctx: Context, agent: Agent, messages: GuardianMessage[], preview: string, previousSummary: string, retainedContext: string, signal: AbortSignal, maxReviewQuestions?: number): Promise<ReviewPlan>;
|
|
20
|
+
revisionGuidance(ctx: Context, agent: Agent, reviewPlan: ReviewPlan, answers: Array<{
|
|
21
|
+
question_id: string;
|
|
22
|
+
topic_id: string;
|
|
23
|
+
action: "keep" | "drop";
|
|
24
|
+
}>, signal: AbortSignal): Promise<Guidance>;
|
|
13
25
|
private request;
|
|
14
26
|
}
|
|
15
27
|
//# sourceMappingURL=bridge.d.ts.map
|
package/lib/bridge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAiB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAiB,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ1H,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,cAAc,CAAC;AAExF,qBAAa,mBAAoB,SAAQ,KAAK;IACf,QAAQ,CAAC,IAAI,EAAE,uBAAuB;gBAAvD,OAAO,EAAE,MAAM,EAAW,IAAI,EAAE,uBAAuB;CAIpE;AAED,wBAAgB,aAAa,CAC3B,MAAM,GAAE,MAAM,CAAC,UAAwB,EACvC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,MAAM,CAER;AAOD,wBAAgB,iBAAiB,CAC/B,MAAM,GAAE,MAAM,CAAC,UAAwB,EACvC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,MAAM,CAAC,UAAU,CAYnB;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,QAAQ,EAAE,SAAS,GAAG,EAAE,GACvB,eAAe,EAAE,CA8BnB;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,GAAG,OAAO,GAAG,IAAI,CAQtF;AAED,qBAAa,cAAc;IACnB,OAAO,CACX,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,eAAe,EAAE,EAC3B,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,gBAAgB,CAAC;IAKtB,QAAQ,CACZ,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,eAAe,EAAE,EAC7B,SAAS,EAAE,KAAK,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC,EACnE,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,QAAQ,CAAC;IASd,YAAY,CAChB,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,eAAe,EAAE,EAC3B,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,WAAW,EACnB,kBAAkB,SAAI,GACrB,OAAO,CAAC,UAAU,CAAC;IAahB,gBAAgB,CACpB,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC,EAClF,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,QAAQ,CAAC;YAQN,OAAO;CAwGtB"}
|
package/lib/bridge.js
CHANGED
|
@@ -3,24 +3,36 @@ import { spawn } from "node:child_process";
|
|
|
3
3
|
import { randomUUID } from "node:crypto";
|
|
4
4
|
import { generateStructuredWithHost } from "./host-model.js";
|
|
5
5
|
const PROTOCOL_VERSION = 1;
|
|
6
|
-
const DEFAULT_TIMEOUT_MS =
|
|
6
|
+
const DEFAULT_TIMEOUT_MS = 120_000;
|
|
7
|
+
const MAX_TIMEOUT_MS = 120_000;
|
|
8
|
+
const BASE_ENVIRONMENT_NAMES = ["PATH", "LANG", "LC_ALL", "TMPDIR", "TMP", "TEMP"];
|
|
9
|
+
const WINDOWS_ENVIRONMENT_NAMES = ["SystemRoot", "windir"];
|
|
7
10
|
export class GuardianBridgeError extends Error {
|
|
11
|
+
code;
|
|
12
|
+
constructor(message, code) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.code = code;
|
|
15
|
+
this.name = "GuardianBridgeError";
|
|
16
|
+
}
|
|
8
17
|
}
|
|
9
|
-
function pythonCommand() {
|
|
10
|
-
return
|
|
18
|
+
export function pythonCommand(source = process.env, platform = process.platform) {
|
|
19
|
+
return source.CONTEXT_GUARDIAN_PYTHON || (platform === "win32" ? "python" : "python3");
|
|
11
20
|
}
|
|
12
21
|
function timeoutMs() {
|
|
13
22
|
const value = Number(process.env.CONTEXT_GUARDIAN_TIMEOUT_MS ?? DEFAULT_TIMEOUT_MS);
|
|
14
|
-
return Number.isFinite(value) && value > 0 ? Math.min(Math.floor(value),
|
|
23
|
+
return Number.isFinite(value) && value > 0 ? Math.min(Math.floor(value), MAX_TIMEOUT_MS) : DEFAULT_TIMEOUT_MS;
|
|
15
24
|
}
|
|
16
|
-
function pythonEnvironment() {
|
|
25
|
+
export function pythonEnvironment(source = process.env, platform = process.platform) {
|
|
17
26
|
const environment = {};
|
|
18
|
-
|
|
19
|
-
|
|
27
|
+
const names = platform === "win32"
|
|
28
|
+
? [...WINDOWS_ENVIRONMENT_NAMES, ...BASE_ENVIRONMENT_NAMES]
|
|
29
|
+
: BASE_ENVIRONMENT_NAMES;
|
|
30
|
+
for (const name of names) {
|
|
31
|
+
const value = source[name];
|
|
20
32
|
if (value !== undefined)
|
|
21
33
|
environment[name] = value;
|
|
22
34
|
}
|
|
23
|
-
const pythonPath =
|
|
35
|
+
const pythonPath = source.CONTEXT_GUARDIAN_PYTHONPATH;
|
|
24
36
|
if (pythonPath !== undefined)
|
|
25
37
|
environment.PYTHONPATH = pythonPath;
|
|
26
38
|
return environment;
|
|
@@ -59,6 +71,15 @@ export function normalizeDeepSeekMessages(_system, messages) {
|
|
|
59
71
|
}
|
|
60
72
|
return result;
|
|
61
73
|
}
|
|
74
|
+
export function preferredLanguage(messages) {
|
|
75
|
+
const userText = messages
|
|
76
|
+
.filter((message) => message.role === "user")
|
|
77
|
+
.map((message) => message.content)
|
|
78
|
+
.join(" ");
|
|
79
|
+
const chinese = (userText.match(/[\u4e00-\u9fff]/g) ?? []).length;
|
|
80
|
+
const latin = (userText.match(/[A-Za-z]/g) ?? []).length;
|
|
81
|
+
return chinese > latin ? "zh-CN" : "en";
|
|
82
|
+
}
|
|
62
83
|
export class GuardianBridge {
|
|
63
84
|
async inspect(ctx, agent, messages, signal) {
|
|
64
85
|
const result = await this.request(ctx, agent, "inspect", { messages, provider: "host" }, signal);
|
|
@@ -72,8 +93,28 @@ export class GuardianBridge {
|
|
|
72
93
|
}, signal);
|
|
73
94
|
return result;
|
|
74
95
|
}
|
|
96
|
+
async auditPreview(ctx, agent, messages, preview, previousSummary, retainedContext, signal, maxReviewQuestions = 3) {
|
|
97
|
+
const result = await this.request(ctx, agent, "audit_preview", {
|
|
98
|
+
messages,
|
|
99
|
+
preview,
|
|
100
|
+
previous_summary: previousSummary,
|
|
101
|
+
retained_context: retainedContext,
|
|
102
|
+
max_review_questions: maxReviewQuestions,
|
|
103
|
+
language: preferredLanguage(messages),
|
|
104
|
+
provider: "host",
|
|
105
|
+
}, signal);
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
async revisionGuidance(ctx, agent, reviewPlan, answers, signal) {
|
|
109
|
+
const result = await this.request(ctx, agent, "revision_guidance", {
|
|
110
|
+
review_plan: reviewPlan,
|
|
111
|
+
answers,
|
|
112
|
+
}, signal);
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
75
115
|
async request(ctx, agent, operation, body, signal) {
|
|
76
|
-
const
|
|
116
|
+
const command = pythonCommand();
|
|
117
|
+
const child = spawn(command, ["-m", "context_guardian", "bridge", "--stdio"], {
|
|
77
118
|
cwd: agent.session.header.cwd ?? process.cwd(),
|
|
78
119
|
shell: false,
|
|
79
120
|
env: pythonEnvironment(),
|
|
@@ -82,10 +123,17 @@ export class GuardianBridge {
|
|
|
82
123
|
const requestId = randomUUID();
|
|
83
124
|
const readline = createInterface({ input: child.stdout });
|
|
84
125
|
let stderr = "";
|
|
126
|
+
let childError;
|
|
127
|
+
let timedOut = false;
|
|
128
|
+
child.once("error", (error) => { childError = error; });
|
|
85
129
|
child.stderr.on("data", (chunk) => { stderr = `${stderr}${String(chunk)}`.slice(-4000); });
|
|
86
130
|
const abort = () => child.kill("SIGTERM");
|
|
87
131
|
signal.addEventListener("abort", abort, { once: true });
|
|
88
|
-
const
|
|
132
|
+
const limit = timeoutMs();
|
|
133
|
+
const timer = setTimeout(() => {
|
|
134
|
+
timedOut = true;
|
|
135
|
+
child.kill("SIGTERM");
|
|
136
|
+
}, limit);
|
|
89
137
|
try {
|
|
90
138
|
child.stdin.write(JSON.stringify({
|
|
91
139
|
protocol_version: PROTOCOL_VERSION,
|
|
@@ -102,16 +150,17 @@ export class GuardianBridge {
|
|
|
102
150
|
frame = JSON.parse(line);
|
|
103
151
|
}
|
|
104
152
|
catch {
|
|
105
|
-
throw new GuardianBridgeError("Context Guardian returned invalid JSON");
|
|
153
|
+
throw new GuardianBridgeError("Context Guardian returned invalid JSON", "protocol");
|
|
106
154
|
}
|
|
107
155
|
if (frame.protocol_version !== PROTOCOL_VERSION) {
|
|
108
|
-
throw new GuardianBridgeError("Context Guardian returned an unsupported protocol version");
|
|
156
|
+
throw new GuardianBridgeError("Context Guardian returned an unsupported protocol version", "protocol");
|
|
157
|
+
}
|
|
158
|
+
if (frame.type === "error") {
|
|
159
|
+
throw new GuardianBridgeError(frame.error ?? "Context Guardian protocol error", "protocol");
|
|
109
160
|
}
|
|
110
|
-
if (frame.type === "error")
|
|
111
|
-
throw new GuardianBridgeError(frame.error ?? "Context Guardian protocol error");
|
|
112
161
|
if (frame.type === "provider_request") {
|
|
113
162
|
if (!frame.request_id || !frame.prompt || !frame.schema) {
|
|
114
|
-
throw new GuardianBridgeError("Context Guardian provider request is malformed");
|
|
163
|
+
throw new GuardianBridgeError("Context Guardian provider request is malformed", "protocol");
|
|
115
164
|
}
|
|
116
165
|
try {
|
|
117
166
|
const data = await generateStructuredWithHost(ctx, agent, frame.prompt, frame.schema, signal);
|
|
@@ -135,13 +184,20 @@ export class GuardianBridge {
|
|
|
135
184
|
continue;
|
|
136
185
|
}
|
|
137
186
|
if (frame.type !== "result" || frame.request_id !== requestId) {
|
|
138
|
-
throw new GuardianBridgeError("Context Guardian returned an unrelated response");
|
|
187
|
+
throw new GuardianBridgeError("Context Guardian returned an unrelated response", "protocol");
|
|
188
|
+
}
|
|
189
|
+
if (!frame.ok) {
|
|
190
|
+
throw new GuardianBridgeError(frame.error ?? "Context Guardian request failed", "protocol");
|
|
139
191
|
}
|
|
140
|
-
if (!frame.ok)
|
|
141
|
-
throw new GuardianBridgeError(frame.error ?? "Context Guardian request failed");
|
|
142
192
|
return frame.result;
|
|
143
193
|
}
|
|
144
|
-
|
|
194
|
+
if (childError) {
|
|
195
|
+
throw new GuardianBridgeError(`Context Guardian failed to start ${JSON.stringify(command)}: ${childError.message}`, "spawn");
|
|
196
|
+
}
|
|
197
|
+
if (timedOut) {
|
|
198
|
+
throw new GuardianBridgeError(`Context Guardian timed out after ${String(limit)} ms`, "timeout");
|
|
199
|
+
}
|
|
200
|
+
throw new GuardianBridgeError(stderr || "Context Guardian process exited without a result", "process_exit");
|
|
145
201
|
}
|
|
146
202
|
finally {
|
|
147
203
|
clearTimeout(timer);
|
package/lib/bridge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAG7D,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,kBAAkB,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAG7D,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,kBAAkB,GAAG,OAAO,CAAC;AACnC,MAAM,cAAc,GAAG,OAAO,CAAC;AAC/B,MAAM,sBAAsB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAU,CAAC;AAC5F,MAAM,yBAAyB,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAU,CAAC;AAIpE,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACN;IAAtC,YAAY,OAAe,EAAW,IAA6B;QACjE,KAAK,CAAC,OAAO,CAAC,CAAC;QADqB,SAAI,GAAJ,IAAI,CAAyB;QAEjE,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,UAAU,aAAa,CAC3B,SAA4B,OAAO,CAAC,GAAG,EACvC,WAA4B,OAAO,CAAC,QAAQ;IAE5C,OAAO,MAAM,CAAC,uBAAuB,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,kBAAkB,CAAC,CAAC;IACpF,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;AAChH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,SAA4B,OAAO,CAAC,GAAG,EACvC,WAA4B,OAAO,CAAC,QAAQ;IAE5C,MAAM,WAAW,GAAsB,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,QAAQ,KAAK,OAAO;QAChC,CAAC,CAAC,CAAC,GAAG,yBAAyB,EAAE,GAAG,sBAAsB,CAAC;QAC3D,CAAC,CAAC,sBAAsB,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,KAAK,KAAK,SAAS;YAAE,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACrD,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,2BAA2B,CAAC;IACtD,IAAI,UAAU,KAAK,SAAS;QAAE,WAAW,CAAC,UAAU,GAAG,UAAU,CAAC;IAClE,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,OAA2B,EAC3B,QAAwB;IAExB,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QAClD,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QACxC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;QACxC,MAAM,IAAI,GAAG,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE;YACxC,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAC5C,IAAI,KAAK,EAAE,IAAI,KAAK,MAAM,IAAI,KAAK,EAAE,IAAI,KAAK,WAAW;gBAAE,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YAC3F,IAAI,KAAK,EAAE,IAAI,KAAK,WAAW;gBAAE,OAAO,aAAa,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;YAClH,IAAI,KAAK,EAAE,IAAI,KAAK,aAAa,EAAE,CAAC;gBAClC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnG,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;QACnG,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,OAAO;YACP,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,eAAe,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YAC7E,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;SACjC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAoC;IACpE,MAAM,QAAQ,GAAG,QAAQ;SACtB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC;SAC5C,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;SACjC,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAClE,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IACzD,OAAO,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,CAAC;AAED,MAAM,OAAO,cAAc;IACzB,KAAK,CAAC,OAAO,CACX,GAAY,EACZ,KAAY,EACZ,QAA2B,EAC3B,MAAmB;QAEnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;QACjG,OAAO,MAA0B,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,GAAY,EACZ,KAAY,EACZ,UAA6B,EAC7B,SAAmE,EACnE,MAAmB;QAEnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE;YACxD,UAAU;YACV,SAAS;YACT,QAAQ,EAAE,OAAO;SAClB,EAAE,MAAM,CAAC,CAAC;QACX,OAAO,MAAkB,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,GAAY,EACZ,KAAY,EACZ,QAA2B,EAC3B,OAAe,EACf,eAAuB,EACvB,eAAuB,EACvB,MAAmB,EACnB,kBAAkB,GAAG,CAAC;QAEtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,eAAe,EAAE;YAC7D,QAAQ;YACR,OAAO;YACP,gBAAgB,EAAE,eAAe;YACjC,gBAAgB,EAAE,eAAe;YACjC,oBAAoB,EAAE,kBAAkB;YACxC,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC;YACrC,QAAQ,EAAE,MAAM;SACjB,EAAE,MAAM,CAAC,CAAC;QACX,OAAO,MAAoB,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,GAAY,EACZ,KAAY,EACZ,UAAsB,EACtB,OAAkF,EAClF,MAAmB;QAEnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,mBAAmB,EAAE;YACjE,WAAW,EAAE,UAAU;YACvB,OAAO;SACR,EAAE,MAAM,CAAC,CAAC;QACX,OAAO,MAAkB,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,GAAY,EACZ,KAAY,EACZ,SAAyE,EACzE,IAA6B,EAC7B,MAAmB;QAEnB,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE;YAC5E,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;YAC9C,KAAK,EAAE,KAAK;YACZ,GAAG,EAAE,iBAAiB,EAAE;YACxB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1D,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,UAA6B,CAAC;QAClC,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,MAAM,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3F,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,QAAQ,GAAG,IAAI,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC,EAAE,KAAK,CAAC,CAAC;QAEV,IAAI,CAAC;YACH,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC/B,gBAAgB,EAAE,gBAAgB;gBAClC,IAAI,EAAE,SAAS;gBACf,UAAU,EAAE,SAAS;gBACrB,SAAS;gBACT,GAAG,IAAI;aACR,CAAC,GAAG,IAAI,CAAC,CAAC;YAEX,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;gBAClC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBAAE,SAAS;gBAC3B,IAAI,KAAoB,CAAC;gBACzB,IAAI,CAAC;oBACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAkB,CAAC;gBAC5C,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,IAAI,mBAAmB,CAAC,wCAAwC,EAAE,UAAU,CAAC,CAAC;gBACtF,CAAC;gBACD,IAAI,KAAK,CAAC,gBAAgB,KAAK,gBAAgB,EAAE,CAAC;oBAChD,MAAM,IAAI,mBAAmB,CAAC,2DAA2D,EAAE,UAAU,CAAC,CAAC;gBACzG,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC3B,MAAM,IAAI,mBAAmB,CAAC,KAAK,CAAC,KAAK,IAAI,iCAAiC,EAAE,UAAU,CAAC,CAAC;gBAC9F,CAAC;gBAED,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;oBACtC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;wBACxD,MAAM,IAAI,mBAAmB,CAAC,gDAAgD,EAAE,UAAU,CAAC,CAAC;oBAC9F,CAAC;oBACD,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,MAAM,0BAA0B,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;wBAC9F,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;4BAC/B,gBAAgB,EAAE,gBAAgB;4BAClC,IAAI,EAAE,mBAAmB;4BACzB,UAAU,EAAE,KAAK,CAAC,UAAU;4BAC5B,EAAE,EAAE,IAAI;4BACR,IAAI;yBACL,CAAC,GAAG,IAAI,CAAC,CAAC;oBACb,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;4BAC/B,gBAAgB,EAAE,gBAAgB;4BAClC,IAAI,EAAE,mBAAmB;4BACzB,UAAU,EAAE,KAAK,CAAC,UAAU;4BAC5B,EAAE,EAAE,KAAK;4BACT,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;yBAC9D,CAAC,GAAG,IAAI,CAAC,CAAC;oBACb,CAAC;oBACD,SAAS;gBACX,CAAC;gBAED,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;oBAC9D,MAAM,IAAI,mBAAmB,CAAC,iDAAiD,EAAE,UAAU,CAAC,CAAC;gBAC/F,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;oBACd,MAAM,IAAI,mBAAmB,CAAC,KAAK,CAAC,KAAK,IAAI,iCAAiC,EAAE,UAAU,CAAC,CAAC;gBAC9F,CAAC;gBACD,OAAO,KAAK,CAAC,MAAM,CAAC;YACtB,CAAC;YACD,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,IAAI,mBAAmB,CAC3B,oCAAoC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,UAAU,CAAC,OAAO,EAAE,EACpF,OAAO,CACR,CAAC;YACJ,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,IAAI,mBAAmB,CAAC,oCAAoC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACnG,CAAC;YACD,MAAM,IAAI,mBAAmB,CAAC,MAAM,IAAI,kDAAkD,EAAE,cAAc,CAAC,CAAC;QAC9G,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC3C,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;CACF"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,15 +1,25 @@
|
|
|
1
1
|
import { BasicCompactionEngine } from "@deepseek-ai/dsh-compaction-basic";
|
|
2
2
|
import type { Agent } from "@deepseek-ai/dsh-agent";
|
|
3
|
+
import type { ReviewPlan } from "./types.js";
|
|
3
4
|
export declare const name = "context-guardian-deepseek-harness";
|
|
4
5
|
type NativeSummarize = BasicCompactionEngine["summarize"];
|
|
5
6
|
type NativeSummarizeInput = Parameters<NativeSummarize>[0];
|
|
6
7
|
type NativeSummarizeResult = Awaited<ReturnType<NativeSummarize>>;
|
|
8
|
+
export declare function answersForNoUi(plan: ReviewPlan): Array<{
|
|
9
|
+
question_id: string;
|
|
10
|
+
topic_id: string;
|
|
11
|
+
action: "keep" | "drop";
|
|
12
|
+
}>;
|
|
13
|
+
export declare function needsRevision(plan: ReviewPlan, answers: readonly {
|
|
14
|
+
action: "keep" | "drop";
|
|
15
|
+
}[]): boolean;
|
|
7
16
|
/**
|
|
8
|
-
* Decorates DeepSeek Harness
|
|
9
|
-
*
|
|
10
|
-
*
|
|
17
|
+
* Decorates the native DeepSeek Harness compactor. The native engine owns the
|
|
18
|
+
* single transaction; this override only performs an uncommitted preview,
|
|
19
|
+
* an external audit, and (when needed) one guided native retry.
|
|
11
20
|
*/
|
|
12
21
|
export declare class ContextGuardianCompactionEngine extends BasicCompactionEngine {
|
|
22
|
+
static inject: string[];
|
|
13
23
|
protected summarize(input: NativeSummarizeInput, agent: Agent, signal?: AbortSignal): Promise<NativeSummarizeResult>;
|
|
14
24
|
}
|
|
15
25
|
export default ContextGuardianCompactionEngine;
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,YAAY,CAAC;AAG7D,eAAO,MAAM,IAAI,sCAAsC,CAAC;AAOxD,KAAK,eAAe,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;AAC1D,KAAK,oBAAoB,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,KAAK,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;AAsClE,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,KAAK,CAAC;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB,CAAC,CAMD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS;IAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EAAE,GAAG,OAAO,CAExG;AAiGD;;;;GAIG;AACH,qBAAa,+BAAgC,SAAQ,qBAAqB;IAIxE,OAAgB,MAAM,WAAsD;cAEnD,SAAS,CAChC,KAAK,EAAE,oBAAoB,EAC3B,KAAK,EAAE,KAAK,EACZ,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,qBAAqB,CAAC;CA2DlC;AAED,eAAe,+BAA+B,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -1,13 +1,29 @@
|
|
|
1
1
|
import { BasicCompactionEngine } from "@deepseek-ai/dsh-compaction-basic";
|
|
2
2
|
import { createUserMessage } from "@deepseek-ai/dsh-llm";
|
|
3
|
-
import { GuardianBridge, normalizeDeepSeekMessages } from "./bridge.js";
|
|
3
|
+
import { GuardianBridge, normalizeDeepSeekMessages, preferredLanguage } from "./bridge.js";
|
|
4
4
|
export const name = "context-guardian-deepseek-harness";
|
|
5
|
+
const MAX_REVIEW_QUESTIONS = 3;
|
|
5
6
|
if (process.env.CONTEXT_GUARDIAN_DEBUG === "1") {
|
|
6
7
|
console.error("context guardian: adapter module loaded");
|
|
7
8
|
}
|
|
8
9
|
const bridge = new GuardianBridge();
|
|
9
|
-
const
|
|
10
|
-
|
|
10
|
+
const UI_MESSAGES = {
|
|
11
|
+
en: {
|
|
12
|
+
auditUnavailable: "Context Guardian audit unavailable; accepting the successful native preview.",
|
|
13
|
+
reviewCancelled: "Context Guardian review unavailable; accepting the successful native preview.",
|
|
14
|
+
revisionUnavailable: "Context Guardian revision unavailable; accepting the successful native preview.",
|
|
15
|
+
finalFailed: "Context Guardian final compaction failed; accepting the successful native preview.",
|
|
16
|
+
},
|
|
17
|
+
"zh-CN": {
|
|
18
|
+
auditUnavailable: "Context Guardian 审计不可用;接受已经成功生成的原生预览。",
|
|
19
|
+
reviewCancelled: "Context Guardian 人工审查不可用;接受已经成功生成的原生预览。",
|
|
20
|
+
revisionUnavailable: "Context Guardian 修正指导不可用;接受已经成功生成的原生预览。",
|
|
21
|
+
finalFailed: "Context Guardian 最终压缩失败;接受已经成功生成的原生预览。",
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
function uiMessage(language, key) {
|
|
25
|
+
return UI_MESSAGES[language][key];
|
|
26
|
+
}
|
|
11
27
|
function debug(ctx, message) {
|
|
12
28
|
if (process.env.CONTEXT_GUARDIAN_DEBUG === "1") {
|
|
13
29
|
const line = `context guardian: ${message}`;
|
|
@@ -15,71 +31,85 @@ function debug(ctx, message) {
|
|
|
15
31
|
ctx.logger.info(line);
|
|
16
32
|
}
|
|
17
33
|
}
|
|
18
|
-
function
|
|
19
|
-
const
|
|
20
|
-
return
|
|
34
|
+
function configuredReviewBudget() {
|
|
35
|
+
const value = Number(process.env.CONTEXT_GUARDIAN_MAX_REVIEW_QUESTIONS ?? MAX_REVIEW_QUESTIONS);
|
|
36
|
+
return Number.isInteger(value) && value >= 0 && value <= MAX_REVIEW_QUESTIONS ? value : MAX_REVIEW_QUESTIONS;
|
|
21
37
|
}
|
|
22
|
-
function
|
|
23
|
-
return
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
detail: candidateDetail(candidate),
|
|
28
|
-
options: [
|
|
29
|
-
{ label: KEEP, description: "Tell the native compactor to preserve this item." },
|
|
30
|
-
{ label: DROP, description: "Tell the native compactor this item may be discarded." },
|
|
31
|
-
],
|
|
38
|
+
export function answersForNoUi(plan) {
|
|
39
|
+
return plan.review_questions.map((question) => ({
|
|
40
|
+
question_id: question.id,
|
|
41
|
+
topic_id: question.topic_id,
|
|
42
|
+
action: question.recommendation,
|
|
32
43
|
}));
|
|
33
44
|
}
|
|
34
|
-
function
|
|
35
|
-
return
|
|
45
|
+
export function needsRevision(plan, answers) {
|
|
46
|
+
return plan.auto_corrections.length > 0 || answers.some((answer) => answer.action === "keep");
|
|
36
47
|
}
|
|
37
|
-
function
|
|
38
|
-
return
|
|
39
|
-
|
|
40
|
-
:
|
|
48
|
+
function reviewQuestionsForUi(plan) {
|
|
49
|
+
return plan.review_questions.slice(0, MAX_REVIEW_QUESTIONS).map((question) => ({
|
|
50
|
+
id: question.id,
|
|
51
|
+
header: question.title,
|
|
52
|
+
question: question.question,
|
|
53
|
+
detail: `${plan.overview}\n\n${question.context}\n\n${question.why_it_matters}\n\n${question.options.map((option) => `${option.label}: ${option.description}`).join("\n")}`,
|
|
54
|
+
options: question.options.map((option) => ({
|
|
55
|
+
label: option.label,
|
|
56
|
+
description: option.description,
|
|
57
|
+
})),
|
|
58
|
+
}));
|
|
41
59
|
}
|
|
42
|
-
async function
|
|
43
|
-
if (
|
|
60
|
+
async function answerReviewQuestions(ctx, agent, plan, signal) {
|
|
61
|
+
if (plan.review_questions.length === 0)
|
|
44
62
|
return [];
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
63
|
+
// `Context.get()` deliberately bypasses a plugin's injected dependency map.
|
|
64
|
+
// Compaction is an isolated Cordis plugin, so read the injected property
|
|
65
|
+
// instead; otherwise the Web answerer is present in the host but invisible
|
|
66
|
+
// to this adapter and every review silently takes the no-UI fallback.
|
|
67
|
+
let interaction;
|
|
68
|
+
try {
|
|
69
|
+
interaction = ctx.userQuestions;
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
debug(ctx, `userQuestions unavailable; policy fallback ${errorCode(error) ?? "missing"}`);
|
|
73
|
+
return answersForNoUi(plan);
|
|
74
|
+
}
|
|
52
75
|
if (interaction === undefined)
|
|
53
|
-
return
|
|
76
|
+
return answersForNoUi(plan);
|
|
54
77
|
try {
|
|
55
78
|
const answer = await interaction.ask({
|
|
56
|
-
questions:
|
|
79
|
+
questions: reviewQuestionsForUi(plan),
|
|
57
80
|
agent,
|
|
58
81
|
signal,
|
|
59
82
|
});
|
|
60
83
|
const byId = new Map(answer.answers.map((item) => [item.id, item]));
|
|
61
|
-
return
|
|
62
|
-
const item = byId.get(
|
|
84
|
+
return plan.review_questions.slice(0, MAX_REVIEW_QUESTIONS).map((question) => {
|
|
85
|
+
const item = byId.get(question.id);
|
|
63
86
|
if (item?.custom !== undefined || item?.selected.length !== 1) {
|
|
64
|
-
throw new Error(`Context Guardian received an invalid answer for ${
|
|
87
|
+
throw new Error(`Context Guardian received an invalid answer for ${question.id}`);
|
|
65
88
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (
|
|
69
|
-
|
|
70
|
-
|
|
89
|
+
const selected = item.selected[0];
|
|
90
|
+
const option = question.options.find((candidate) => candidate.label === selected);
|
|
91
|
+
if (!option)
|
|
92
|
+
throw new Error(`Context Guardian received an unknown answer for ${question.id}`);
|
|
93
|
+
return {
|
|
94
|
+
question_id: question.id,
|
|
95
|
+
topic_id: question.topic_id,
|
|
96
|
+
action: option.id,
|
|
97
|
+
};
|
|
71
98
|
});
|
|
72
99
|
}
|
|
73
100
|
catch (error) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if (errorCode(error) === "NO_PROVIDER")
|
|
79
|
-
return keepAll(candidates);
|
|
101
|
+
const code = errorCode(error);
|
|
102
|
+
debug(ctx, `userQuestions unavailable; policy fallback ${code ?? "unknown"}`);
|
|
103
|
+
if (code === "NO_PROVIDER")
|
|
104
|
+
return answersForNoUi(plan);
|
|
80
105
|
throw error;
|
|
81
106
|
}
|
|
82
107
|
}
|
|
108
|
+
function errorCode(error) {
|
|
109
|
+
return typeof error === "object" && error !== null && "code" in error
|
|
110
|
+
? String(error.code)
|
|
111
|
+
: undefined;
|
|
112
|
+
}
|
|
83
113
|
function nativeInputWithGuidance(input, text) {
|
|
84
114
|
const guidanceMessage = createUserMessage({
|
|
85
115
|
content: [{ type: "text", text }],
|
|
@@ -94,32 +124,71 @@ function normalizeInput(input) {
|
|
|
94
124
|
const candidate = input;
|
|
95
125
|
return normalizeDeepSeekMessages(candidate.system, input.messages);
|
|
96
126
|
}
|
|
127
|
+
function textFromSummary(result) {
|
|
128
|
+
const blocks = result.summary;
|
|
129
|
+
return blocks
|
|
130
|
+
.filter((block) => block?.type === "text" || block?.type === "reasoning")
|
|
131
|
+
.map((block) => block.text ?? "")
|
|
132
|
+
.join("\n")
|
|
133
|
+
.trim();
|
|
134
|
+
}
|
|
97
135
|
/**
|
|
98
|
-
* Decorates DeepSeek Harness
|
|
99
|
-
*
|
|
100
|
-
*
|
|
136
|
+
* Decorates the native DeepSeek Harness compactor. The native engine owns the
|
|
137
|
+
* single transaction; this override only performs an uncommitted preview,
|
|
138
|
+
* an external audit, and (when needed) one guided native retry.
|
|
101
139
|
*/
|
|
102
140
|
export class ContextGuardianCompactionEngine extends BasicCompactionEngine {
|
|
141
|
+
// Compaction runs in its own isolated Cordis scope. Declare the human
|
|
142
|
+
// question capability explicitly so the Web answerer is visible there;
|
|
143
|
+
// without this dependency the adapter silently took its no-UI fallback.
|
|
144
|
+
static inject = [...BasicCompactionEngine.inject, "userQuestions"];
|
|
103
145
|
async summarize(input, agent, signal) {
|
|
104
|
-
|
|
146
|
+
const operationSignal = signal ?? new AbortController().signal;
|
|
147
|
+
const preview = await super.summarize(input, agent, signal);
|
|
148
|
+
const messages = normalizeInput(input);
|
|
149
|
+
let uiLanguage = preferredLanguage(messages);
|
|
150
|
+
let plan;
|
|
151
|
+
try {
|
|
152
|
+
plan = await bridge.auditPreview(this.ctx, agent, messages, textFromSummary(preview), "", "", operationSignal, configuredReviewBudget());
|
|
153
|
+
debug(this.ctx, `preview ready: findings=${String(plan.findings.length)}, topics=${String(plan.audit_topics.length)}, `
|
|
154
|
+
+ `auto_corrections=${String(plan.auto_corrections.length)}, accepted=${String(plan.accepted_omissions.length)}, `
|
|
155
|
+
+ `questions=${String(plan.review_questions.length)}`);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
this.ctx.logger.warn(uiMessage(uiLanguage, "auditUnavailable"));
|
|
159
|
+
return preview;
|
|
160
|
+
}
|
|
161
|
+
uiLanguage = plan.language;
|
|
162
|
+
let answers;
|
|
163
|
+
try {
|
|
164
|
+
answers = await answerReviewQuestions(this.ctx, agent, plan, operationSignal);
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
this.ctx.logger.warn(uiMessage(uiLanguage, "reviewCancelled"));
|
|
168
|
+
return preview;
|
|
169
|
+
}
|
|
170
|
+
if (!needsRevision(plan, answers)) {
|
|
171
|
+
debug(this.ctx, "native preview reused; final compaction not needed");
|
|
172
|
+
return preview;
|
|
173
|
+
}
|
|
174
|
+
let guidance;
|
|
175
|
+
try {
|
|
176
|
+
guidance = await bridge.revisionGuidance(this.ctx, agent, plan, answers, operationSignal);
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
this.ctx.logger.warn(uiMessage(uiLanguage, "revisionUnavailable"));
|
|
180
|
+
return preview;
|
|
181
|
+
}
|
|
182
|
+
if (!guidance.text)
|
|
183
|
+
return preview;
|
|
105
184
|
try {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
debug(this.ctx, `inspection returned ${String(inspection.candidates.length)} candidate(s), ${String(inspection.review.length)} for review`);
|
|
109
|
-
const decisions = [
|
|
110
|
-
...keepAll(inspection.auto_keep),
|
|
111
|
-
...inspection.auto_drop.map((candidate) => ({ candidate_id: candidate.id, action: "drop" })),
|
|
112
|
-
...await review(this.ctx, agent, inspection.review, operationSignal),
|
|
113
|
-
];
|
|
114
|
-
const guidance = await bridge.guidance(this.ctx, agent, inspection.candidates, decisions, operationSignal);
|
|
115
|
-
guidedInput = nativeInputWithGuidance(input, guidance.text);
|
|
185
|
+
debug(this.ctx, "running one guided native final compaction");
|
|
186
|
+
return await super.summarize(nativeInputWithGuidance(input, guidance.text), agent, signal);
|
|
116
187
|
}
|
|
117
188
|
catch (error) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
return super.summarize(input, agent, signal);
|
|
189
|
+
this.ctx.logger.warn(uiMessage(uiLanguage, "finalFailed"));
|
|
190
|
+
return preview;
|
|
121
191
|
}
|
|
122
|
-
return super.summarize(guidedInput, agent, signal);
|
|
123
192
|
}
|
|
124
193
|
}
|
|
125
194
|
export default ContextGuardianCompactionEngine;
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/types.d.ts
CHANGED
|
@@ -24,6 +24,56 @@ export interface InspectionResult {
|
|
|
24
24
|
mode: "rules" | "provider";
|
|
25
25
|
policy_version: string;
|
|
26
26
|
}
|
|
27
|
+
export interface AuditFinding {
|
|
28
|
+
id: string;
|
|
29
|
+
issue_type: "missing" | "incorrect" | "stale" | "ambiguous";
|
|
30
|
+
category: string;
|
|
31
|
+
summary: string;
|
|
32
|
+
why_it_matters: string;
|
|
33
|
+
suggested_correction: string;
|
|
34
|
+
importance: number;
|
|
35
|
+
confidence: number;
|
|
36
|
+
source_message_ids: string[];
|
|
37
|
+
evidence_snippets: string[];
|
|
38
|
+
}
|
|
39
|
+
export interface AuditTopic {
|
|
40
|
+
id: string;
|
|
41
|
+
title: string;
|
|
42
|
+
summary: string;
|
|
43
|
+
finding_ids: string[];
|
|
44
|
+
impact: number;
|
|
45
|
+
confidence: number;
|
|
46
|
+
relevance_to_main_goal: number;
|
|
47
|
+
requires_user_preference: boolean;
|
|
48
|
+
disposition: "auto_correct" | "accept_preview" | "ask_user";
|
|
49
|
+
recommended_action: "keep" | "drop" | "correct" | "accept_preview";
|
|
50
|
+
suggested_correction?: string | null;
|
|
51
|
+
}
|
|
52
|
+
export interface ReviewOption {
|
|
53
|
+
id: "keep" | "drop";
|
|
54
|
+
label: string;
|
|
55
|
+
description: string;
|
|
56
|
+
}
|
|
57
|
+
export interface ReviewQuestion {
|
|
58
|
+
id: string;
|
|
59
|
+
topic_id: string;
|
|
60
|
+
title: string;
|
|
61
|
+
question: string;
|
|
62
|
+
context: string;
|
|
63
|
+
why_it_matters: string;
|
|
64
|
+
recommendation: "keep" | "drop";
|
|
65
|
+
options: ReviewOption[];
|
|
66
|
+
}
|
|
67
|
+
export interface ReviewPlan {
|
|
68
|
+
language: "zh-CN" | "en";
|
|
69
|
+
overview: string;
|
|
70
|
+
auto_preserve_summary: string;
|
|
71
|
+
findings: AuditFinding[];
|
|
72
|
+
audit_topics: AuditTopic[];
|
|
73
|
+
auto_corrections: string[];
|
|
74
|
+
accepted_omissions: string[];
|
|
75
|
+
review_questions: ReviewQuestion[];
|
|
76
|
+
}
|
|
27
77
|
export interface Guidance {
|
|
28
78
|
must_preserve: string[];
|
|
29
79
|
can_discard: string[];
|
package/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|