@eddyskywalker/dsh-chatgpt-subscription 0.58.0 → 0.60.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/CHANGELOG.md +33 -0
- package/README.md +1 -1
- package/lib/client.js +1714 -255
- package/lib/client.js.map +1 -1
- package/lib/codemode.js +1952 -0
- package/lib/index.js +587 -243
- package/lib/llm-compat-u9mor0uu.js +110 -0
- package/lib/types/client/CodexImageToolView.d.ts.map +1 -1
- package/lib/types/client/codemode/CodeRunToolView.d.ts +68 -0
- package/lib/types/client/codemode/CodeRunToolView.d.ts.map +1 -0
- package/lib/types/client/codemode/highlight.d.ts +25 -0
- package/lib/types/client/codemode/highlight.d.ts.map +1 -0
- package/lib/types/client/codemode/styles.d.ts +11 -0
- package/lib/types/client/codemode/styles.d.ts.map +1 -0
- package/lib/types/client/codemode/tool-name.d.ts +10 -0
- package/lib/types/client/codemode/tool-name.d.ts.map +1 -0
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/locales-ru/hub.d.ts.map +1 -1
- package/lib/types/client/locales.d.ts +23 -1
- package/lib/types/client/locales.d.ts.map +1 -1
- package/lib/types/client/progress-updates/progress-row.d.ts.map +1 -1
- package/lib/types/client/styles.d.ts.map +1 -1
- package/lib/types/compat.d.ts +10 -1
- package/lib/types/compat.d.ts.map +1 -1
- package/lib/types/entry-codemode.d.ts +37 -0
- package/lib/types/entry-codemode.d.ts.map +1 -0
- package/lib/types/host/agent-preset.d.ts +24 -2
- package/lib/types/host/agent-preset.d.ts.map +1 -1
- package/lib/types/host/antigravity/image-tool.d.ts +10 -2
- package/lib/types/host/antigravity/image-tool.d.ts.map +1 -1
- package/lib/types/host/cache-warmup/install.d.ts +10 -4
- package/lib/types/host/cache-warmup/install.d.ts.map +1 -1
- package/lib/types/host/cache-warmup/projection.d.ts +17 -0
- package/lib/types/host/cache-warmup/projection.d.ts.map +1 -1
- package/lib/types/host/codemode/discovery.d.ts +33 -0
- package/lib/types/host/codemode/discovery.d.ts.map +1 -0
- package/lib/types/host/codemode/executor.d.ts +140 -0
- package/lib/types/host/codemode/executor.d.ts.map +1 -0
- package/lib/types/host/codemode/retention.d.ts +34 -0
- package/lib/types/host/codemode/retention.d.ts.map +1 -0
- package/lib/types/host/codemode/rules.d.ts +193 -0
- package/lib/types/host/codemode/rules.d.ts.map +1 -0
- package/lib/types/host/codemode/scope.d.ts +59 -0
- package/lib/types/host/codemode/scope.d.ts.map +1 -0
- package/lib/types/host/codemode/transport.d.ts +299 -0
- package/lib/types/host/codemode/transport.d.ts.map +1 -0
- package/lib/types/host/codex-images.d.ts +12 -0
- package/lib/types/host/codex-images.d.ts.map +1 -1
- package/lib/types/host/command-code/model-catalog.d.ts +14 -14
- package/lib/types/host/command-code/model-catalog.d.ts.map +1 -1
- package/lib/types/host/command-code/routes.d.ts.map +1 -1
- package/lib/types/host/preset-sync.d.ts +19 -4
- package/lib/types/host/preset-sync.d.ts.map +1 -1
- package/package.json +6 -1
- package/presets/dispatch/README.md +13 -6
- package/presets/dispatch/agent.cordis.yml +19 -16
- package/presets/dispatch/preset.yml +1 -1
|
@@ -15,6 +15,23 @@
|
|
|
15
15
|
* @module dsh-chatgpt-subscription/host/cache-warmup/projection
|
|
16
16
|
*/
|
|
17
17
|
import { type PreviewBudget, type ProjectionResult, type ProjectToolResultInput } from './contracts.ts';
|
|
18
|
+
/**
|
|
19
|
+
* PTC 家族的**程序传输**工具名(一个集合,两个名字)。
|
|
20
|
+
*
|
|
21
|
+
* 「模型写一段程序、工具调用发生在程序内部」是同一种传输,只是不同预设给主工具起
|
|
22
|
+
* 了不同名字:PTC 预设叫 `run_code`,Code Mode 预设叫 `code_run`。凡是按工具名判断
|
|
23
|
+
* 「这条结果来自程序传输」的地方都必须认这**整个集合**——名字只写一个,预设一换,
|
|
24
|
+
* 大结果的 `ref://` 预览与精确补读就会静默失效。
|
|
25
|
+
*/
|
|
26
|
+
export declare const CACHE_WARMUP_PTC_TRANSPORT_TOOLS: ReadonlySet<string>;
|
|
27
|
+
/**
|
|
28
|
+
* 这个名字是否属于 PTC 家族的程序传输工具。
|
|
29
|
+
*
|
|
30
|
+
* 只做**精确**匹配:`code_runner` 之类的近似名不算,宁可少投影也不能误伤。
|
|
31
|
+
* @param name - 工具名。
|
|
32
|
+
* @returns 属于 {@link CACHE_WARMUP_PTC_TRANSPORT_TOOLS} 时为 true。
|
|
33
|
+
*/
|
|
34
|
+
export declare function isPtcTransportName(name: string): boolean;
|
|
18
35
|
/**
|
|
19
36
|
* 投影一条工具结果。
|
|
20
37
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../../../src/host/cache-warmup/projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EAErB,KAAK,sBAAsB,EAG5B,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../../../src/host/cache-warmup/projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EAErB,KAAK,sBAAsB,EAG5B,MAAM,gBAAgB,CAAA;AAYvB;;;;;;;GAOG;AACH,eAAO,MAAM,gCAAgC,EAAE,WAAW,CAAC,MAAM,CAAqC,CAAA;AAEtG;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AA6oDD;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuFhG;AAED,iCAAiC;AACjC,wBAAgB,oBAAoB,IAAI,aAAa,CAEpD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 程序内的工具发现 API:`code_tools_list` / `code_tools_search` / `code_tools_describe`。
|
|
3
|
+
*
|
|
4
|
+
* 三个都是注册表上的**普通工具**,因此只存在于本预设里,也必然被本包自己的名字规则遮蔽——
|
|
5
|
+
* 模型只能在程序内部调用它们,这与「遮蔽的工具只能从程序里够到」是同一条规则。
|
|
6
|
+
*
|
|
7
|
+
* 它们走完整执行管线(参数校验、策略、审批、守卫、超时),不是旁路接口。
|
|
8
|
+
*
|
|
9
|
+
* @module @eddyskywalker/dsh-chatgpt-subscription/host/codemode/discovery
|
|
10
|
+
*/
|
|
11
|
+
import type { CatalogEntry } from './transport.ts';
|
|
12
|
+
import type { CodemodeRules } from './rules.ts';
|
|
13
|
+
/** 一条公开的检索结果。 */
|
|
14
|
+
export interface ToolHit {
|
|
15
|
+
/** 工具名。 */
|
|
16
|
+
readonly name: string;
|
|
17
|
+
/** 描述。 */
|
|
18
|
+
readonly description: string;
|
|
19
|
+
/** namespace(MCP 服务端名或 `plugin`)。 */
|
|
20
|
+
readonly namespace: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 造三个发现工具(外加可选的 `code_debug`)。
|
|
24
|
+
*
|
|
25
|
+
* @param rules - 已归一化的规则。
|
|
26
|
+
* @param catalog - 当前清单的读取函数。
|
|
27
|
+
* @param debug - 调试信息读取函数(`code_debug` 用)。
|
|
28
|
+
* @returns 原始工具定义数组。
|
|
29
|
+
*/
|
|
30
|
+
export declare function createDiscoveryDefinitions(rules: CodemodeRules, catalog: () => readonly CatalogEntry[], debug: () => unknown): unknown[];
|
|
31
|
+
/** 一个工具名所属的 namespace。 */
|
|
32
|
+
export declare function namespaceOfName(name: string): string;
|
|
33
|
+
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../../src/host/codemode/discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,iBAAiB;AACjB,MAAM,WAAW,OAAO;IACtB,WAAW;IACX,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,UAAU;IACV,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,qCAAqC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,MAAM,SAAS,YAAY,EAAE,EACtC,KAAK,EAAE,MAAM,OAAO,aAWrB;AA+OD,0BAA0B;AAC1B,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKpD"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Mode 的工具执行器:本包遮蔽与拒绝的唯一接缝。
|
|
3
|
+
*
|
|
4
|
+
* ## 为什么是 executor
|
|
5
|
+
*
|
|
6
|
+
* DSH 0.2.2 把「模型看到的工具清单」的归属权从 `system-prompt/assemble` 瀑布搬到了
|
|
7
|
+
* per-scope `ToolExecutor`:注册表向当前作用域选中的 executor 要 schema,所以
|
|
8
|
+
* `describe()` 就是请求面。它同时解决了归属问题——executor **按作用域链选择**,只有挂
|
|
9
|
+
* 在本预设里的这一份会服务本预设的会话,因此不需要判断「这个 agent 是不是我的」。
|
|
10
|
+
*
|
|
11
|
+
* 三件事:
|
|
12
|
+
*
|
|
13
|
+
* 1. `describe()` 丢掉一切不该出现在模型清单里的名字,其余交给原生 executor 投影;
|
|
14
|
+
* 2. `sections` 提供**恒定**的 Code Mode 说明段(见 rules.ts 的恒定契约);
|
|
15
|
+
* 3. `execute()` 在派发**之前**拒绝模型对被遮蔽名字的直接调用,其余整批委托给原生
|
|
16
|
+
* executor——委托而不是重写,是因为手写 pre-policy / 审批 / around-dispatch /
|
|
17
|
+
* post-execute 管线正是插件静默丢策略的方式。
|
|
18
|
+
*
|
|
19
|
+
* ## 程序内子调用怎么与模型直呼区分
|
|
20
|
+
*
|
|
21
|
+
* 批量 `execute()` 的入参没有 `parent` 字段(执行令牌由注册表自己的管线铸造,插件
|
|
22
|
+
* 造不出来),所以传输层把自己持有的 `AbortSignal` 打上 {@link NESTED_MARK},并让子调用 id
|
|
23
|
+
* 形如 `<outer>:ptc:<n>`。signal 是模型无法伪造的对象,call id 不可改,两个标记互为兜底。
|
|
24
|
+
*
|
|
25
|
+
* @module @eddyskywalker/dsh-chatgpt-subscription/host/codemode/executor
|
|
26
|
+
*/
|
|
27
|
+
import { type CodemodeRules, type CodemodeView } from './rules.ts';
|
|
28
|
+
/** 传输层打在 AbortSignal 上的嵌套标记。 */
|
|
29
|
+
export declare const NESTED_MARK: unique symbol;
|
|
30
|
+
/** 子调用 id 里的一段:`<outer>:ptc:<n>`,与内核自己的命名一致。 */
|
|
31
|
+
export declare const NESTED_CALL_ID_MARKER = ":ptc:";
|
|
32
|
+
/**
|
|
33
|
+
* 给一个 signal 打上嵌套标记。
|
|
34
|
+
*
|
|
35
|
+
* @param signal - 传给 `tools.execute()` 的那一个 signal。
|
|
36
|
+
* @returns 同一个 signal(便于链式使用)。
|
|
37
|
+
*/
|
|
38
|
+
export declare function markNested(signal: AbortSignal | undefined): AbortSignal | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* 判断一批调用是不是来自程序内部。
|
|
41
|
+
*
|
|
42
|
+
* @param call - 批里的一条调用(结构探测)。
|
|
43
|
+
* @param batchSignal - 批级 signal(`tools.execute()` 只收一份,注册表会复制给每条执行)。
|
|
44
|
+
* @returns 来自程序内部时为 `true`。
|
|
45
|
+
*/
|
|
46
|
+
export declare function isNestedCall(call: unknown, batchSignal: unknown): boolean;
|
|
47
|
+
/** 执行器对外暴露的能力(结构契约,不 import 内核类型)。 */
|
|
48
|
+
export interface CodemodeExecutor {
|
|
49
|
+
/** 执行器自带的提示词段。 */
|
|
50
|
+
readonly sections: readonly CodemodeSection[];
|
|
51
|
+
/** 本步的模型可见 schema。 */
|
|
52
|
+
describe(tools: readonly unknown[]): {
|
|
53
|
+
schemas: readonly unknown[];
|
|
54
|
+
};
|
|
55
|
+
/** 执行一整批调用。 */
|
|
56
|
+
execute(input: CodemodeBatchInput): Promise<CodemodeBatchResult>;
|
|
57
|
+
}
|
|
58
|
+
/** 一条 executor 所属的提示词段。 */
|
|
59
|
+
export interface CodemodeSection {
|
|
60
|
+
/** 段名。 */
|
|
61
|
+
readonly name: string;
|
|
62
|
+
/** 排序位。 */
|
|
63
|
+
readonly order?: number;
|
|
64
|
+
/** 是否做 `{{variable}}` 插值。 */
|
|
65
|
+
readonly interpolate?: boolean;
|
|
66
|
+
/** 段正文(恒定)。 */
|
|
67
|
+
readonly text: string | ((tools: readonly unknown[]) => string);
|
|
68
|
+
}
|
|
69
|
+
/** 批入参里本模块会读的部分。 */
|
|
70
|
+
export interface CodemodeBatchInput {
|
|
71
|
+
/** 原始调用。 */
|
|
72
|
+
readonly calls: readonly unknown[];
|
|
73
|
+
/** 批级 signal。 */
|
|
74
|
+
readonly signal: AbortSignal;
|
|
75
|
+
/** 辅助字段透传。 */
|
|
76
|
+
readonly [key: string]: unknown;
|
|
77
|
+
}
|
|
78
|
+
/** 批结果。 */
|
|
79
|
+
export interface CodemodeBatchResult {
|
|
80
|
+
/** 与入参一一对应的结果。 */
|
|
81
|
+
readonly results: readonly unknown[];
|
|
82
|
+
/** 需要附加到下一步的上下文。 */
|
|
83
|
+
readonly additionalContexts: readonly unknown[];
|
|
84
|
+
/** 本批是否结束了这一轮。 */
|
|
85
|
+
readonly concluded: boolean;
|
|
86
|
+
}
|
|
87
|
+
/** 委托目标(原生 executor 的实例,结构描述)。 */
|
|
88
|
+
export interface DelegateExecutor {
|
|
89
|
+
/** 见 {@link CodemodeExecutor.describe}。 */
|
|
90
|
+
describe(tools: readonly unknown[]): {
|
|
91
|
+
schemas: readonly unknown[];
|
|
92
|
+
};
|
|
93
|
+
/** 见 {@link CodemodeExecutor.execute}。 */
|
|
94
|
+
execute(input: CodemodeBatchInput): Promise<CodemodeBatchResult>;
|
|
95
|
+
}
|
|
96
|
+
/** 执行器钩子。 */
|
|
97
|
+
export interface ExecutorHooks {
|
|
98
|
+
/** 归属视图(整个清单)。 */
|
|
99
|
+
view(): CodemodeView;
|
|
100
|
+
/** 归属视图(单个名字,供拒绝路径使用)。 */
|
|
101
|
+
viewForName(name: string): CodemodeView;
|
|
102
|
+
/** 说明段正文。 */
|
|
103
|
+
sectionText(): string;
|
|
104
|
+
/** 每次 describe 收到的完整定义集(含被遮蔽的),供程序内清单使用。 */
|
|
105
|
+
onCatalog?(tools: readonly unknown[]): void;
|
|
106
|
+
/** 每次 describe 的决策(写日志 / debug 环)。 */
|
|
107
|
+
onDescribe?(decision: DescribeDecision): void;
|
|
108
|
+
/** 委托目标;缺省时执行器不可用(入口保证它存在)。 */
|
|
109
|
+
delegate: DelegateExecutor;
|
|
110
|
+
}
|
|
111
|
+
/** 一次 describe 的决策。 */
|
|
112
|
+
export interface DescribeDecision {
|
|
113
|
+
/** 保持原生的名字。 */
|
|
114
|
+
readonly visible: readonly string[];
|
|
115
|
+
/** 被遮蔽的名字。 */
|
|
116
|
+
readonly masked: readonly string[];
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* 造一个 Code Mode 执行器。
|
|
120
|
+
*
|
|
121
|
+
* @param ctx - 本包的行上下文(读取系统提示段的排序位)。
|
|
122
|
+
* @param rules - 已归一化的规则。
|
|
123
|
+
* @param hooks - 归属视图、说明段与委托目标。
|
|
124
|
+
* @returns 执行器。
|
|
125
|
+
*/
|
|
126
|
+
export declare function createCodemodeExecutor(ctx: unknown, rules: CodemodeRules, hooks: ExecutorHooks): CodemodeExecutor;
|
|
127
|
+
/**
|
|
128
|
+
* 一条模型直呼调用的拒绝理由,或 `undefined` 表示放行。
|
|
129
|
+
*
|
|
130
|
+
* @param call - 批里的一条调用。
|
|
131
|
+
* @param rules - 已归一化的规则。
|
|
132
|
+
* @param hooks - 归属视图与说明段。
|
|
133
|
+
* @param batchSignal - 批级 signal。
|
|
134
|
+
* @returns 拒绝理由或 `undefined`。
|
|
135
|
+
*
|
|
136
|
+
* 判定不读「本步可见名清单」:那份集合是**执行器级**的,多个会话并发时会被后一次 describe
|
|
137
|
+
* 覆盖,用它放行等于给另一个会话开一个不该开的口子。这里只按名字自身的归属判一次。
|
|
138
|
+
*/
|
|
139
|
+
export declare function denialFor(call: unknown, rules: CodemodeRules, hooks: Pick<ExecutorHooks, 'viewForName' | 'sectionText'>, batchSignal: unknown): string | undefined;
|
|
140
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../../src/host/codemode/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 常驻执行环境的生命周期。
|
|
3
|
+
*
|
|
4
|
+
* 部署把 `@deepseek-ai/dsh-ptc-runtime-node` 配成 `executionMode: persistent-in-memory` 时,
|
|
5
|
+
* 同一个 agent 的多次 `code_run` 会共用一个常驻 REPL:顶层变量、函数与 `import` 的模块
|
|
6
|
+
* 跨调用存活。可以不去用,但**不能只注册不释放**——常驻环境没有空闲过期,忘了释放会让子进程
|
|
7
|
+
* 活到进程结束。
|
|
8
|
+
*
|
|
9
|
+
* 所以这里把「传了 owner」与「注册了释放」写进同一个动作:结构性无法表达「传了却没释放」。
|
|
10
|
+
* 清理有两条路,覆盖两种死亡:
|
|
11
|
+
*
|
|
12
|
+
* 1. 挂在 **agent** 上的释放:即使本包早已卸载,agent 销毁也会释放它的环境;
|
|
13
|
+
* 2. 挂在**插件**上的 teardown:卸载或热重载本包时释放所有遗留环境。
|
|
14
|
+
*
|
|
15
|
+
* @module @eddyskywalker/dsh-chatgpt-subscription/host/codemode/retention
|
|
16
|
+
*/
|
|
17
|
+
import type { PtcRuntimeLike } from './transport.ts';
|
|
18
|
+
/** 常驻环境管理句柄。 */
|
|
19
|
+
export interface CodemodeRetention {
|
|
20
|
+
/** 取一个 agent 的 owner(缺省用 agent 本身,保证同一 agent 复用一个环境)。 */
|
|
21
|
+
owner(agent: unknown): object;
|
|
22
|
+
/** 释放一个 owner 的常驻环境(幂等)。 */
|
|
23
|
+
release(owner: object): Promise<void>;
|
|
24
|
+
/** 释放所有遗留环境(插件卸载时调用)。 */
|
|
25
|
+
dispose(): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 造一个常驻环境管理器。
|
|
29
|
+
*
|
|
30
|
+
* @param runtimeOf - 读当前运行时的函数(每次调用重读,运行时可能晚于本插件挂载)。
|
|
31
|
+
* @returns 管理句柄。
|
|
32
|
+
*/
|
|
33
|
+
export declare function createRetention(runtimeOf: () => PtcRuntimeLike | undefined): CodemodeRetention;
|
|
34
|
+
//# sourceMappingURL=retention.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retention.d.ts","sourceRoot":"","sources":["../../../../src/host/codemode/retention.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,gBAAgB;AAChB,MAAM,WAAW,iBAAiB;IAChC,yDAAyD;IACzD,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAA;IAC7B,4BAA4B;IAC5B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,yBAAyB;IACzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,cAAc,GAAG,SAAS,GAAG,iBAAiB,CAgC9F"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Mode 的遮蔽规则与恒定说明段。
|
|
3
|
+
*
|
|
4
|
+
* 这一层只回答三件事:
|
|
5
|
+
*
|
|
6
|
+
* 1. 一个工具名该不该出现在**模型看到的清单**里({@link isMaskedName});
|
|
7
|
+
* 2. 被遮蔽的工具有哪些({@link summarizeHidden},只给日志与 `code_debug` 用,
|
|
8
|
+
* **绝不出现在系统提示词里**);
|
|
9
|
+
* 3. `tools:sdk` 段写什么({@link buildCodemodeSectionText})。
|
|
10
|
+
*
|
|
11
|
+
* ## 为什么说明段里没有任何计数
|
|
12
|
+
*
|
|
13
|
+
* 系统提示是缓存前缀的第一段。参考实现在这一段里写「有 N 个工具被遮蔽,按
|
|
14
|
+
* namespace 分布如下」,于是挂一个 MCP 服务端就改写系统提示,前缀缓存从那里起
|
|
15
|
+
* 全部作废——在 kimi-code / minimax-code 这类按前缀缓存计费的线路上,一次 MCP
|
|
16
|
+
* 增删就是几万 token 的全价重建。
|
|
17
|
+
*
|
|
18
|
+
* 本实现的说明段只依赖 `programFormat`(部署内恒定)与两个工具名(配置常量),
|
|
19
|
+
* 因此同一部署下逐字节恒定。
|
|
20
|
+
*
|
|
21
|
+
* @module @eddyskywalker/dsh-chatgpt-subscription/host/codemode/rules
|
|
22
|
+
*/
|
|
23
|
+
/** 本包自带的程序传输工具名。`run_code` 是内核保留名,注册会抛错。 */
|
|
24
|
+
export declare const DEFAULT_RUN_TOOL_NAME = "code_run";
|
|
25
|
+
/** 发现工具名契约:`[list, search, describe, debug?]`。第一个同时用作 Code Mode 标记。 */
|
|
26
|
+
export declare const DEFAULT_META_TOOLS: readonly string[];
|
|
27
|
+
/** 默认额外遮蔽的名字前缀。 */
|
|
28
|
+
export declare const DEFAULT_HIDDEN_PREFIXES: readonly string[];
|
|
29
|
+
/**
|
|
30
|
+
* 默认始终原生呈现的名字。
|
|
31
|
+
*
|
|
32
|
+
* 恒定系统提示词或子代理运行时契约里点名要求直接调用这些工具(大输出预览补读、调度账本查询、
|
|
33
|
+
* 进展更新汇报、结构化子代理输出提交,以及 Windows 下替代被撤回 `pwsh` 的 `win_bash`):
|
|
34
|
+
* 遮蔽它们要么让提示词指向模型看不见的名字并触发整批 `UNKNOWN_TOOL` 重跑,要么让会话顶层
|
|
35
|
+
* 失去唯一可用的 Shell。若某个工具当前未在宿主/子会话注册,保留在此集合中不会凭空暴露它。
|
|
36
|
+
*/
|
|
37
|
+
export declare const DEFAULT_NATIVE_TOOLS: readonly string[];
|
|
38
|
+
/** 校验后、脱离原对象并冻结的配置。 */
|
|
39
|
+
export interface CodemodeOptions {
|
|
40
|
+
/** 是否遮蔽一切不是本预设自己注册的工具。 */
|
|
41
|
+
readonly nativeScope: boolean;
|
|
42
|
+
/** 额外剥离的名字前缀。 */
|
|
43
|
+
readonly hiddenPrefixes: readonly string[];
|
|
44
|
+
/** 始终原生呈现的名字。 */
|
|
45
|
+
readonly nativeTools: readonly string[];
|
|
46
|
+
/** 始终遮蔽的名字。 */
|
|
47
|
+
readonly hiddenTools: readonly string[];
|
|
48
|
+
/** 发现工具名。 */
|
|
49
|
+
readonly metaTools: readonly string[];
|
|
50
|
+
/** 程序传输工具名。 */
|
|
51
|
+
readonly runToolName: string;
|
|
52
|
+
/** 一个程序内可并发的只读子调用上限。 */
|
|
53
|
+
readonly maxParallelSubCalls: number;
|
|
54
|
+
/** 一次程序最多允许的子调用次数(固定兜底下限)。 */
|
|
55
|
+
readonly maxSubCalls: number;
|
|
56
|
+
/** 调用方是否显式指定了 `maxSubCalls`(显式指定时优先于按分钟折算)。 */
|
|
57
|
+
readonly explicitMaxSubCalls: boolean;
|
|
58
|
+
/** 按解析后超时折算的每分钟子调用配额(对齐内核 PTC `maxSubCallsPerMinute`)。 */
|
|
59
|
+
readonly maxSubCallsPerMinute: number;
|
|
60
|
+
/** 是否拒绝模型对被遮蔽工具的直接调用。 */
|
|
61
|
+
readonly guard: boolean;
|
|
62
|
+
/** 是否注入 / 替换 Code Mode 说明段。 */
|
|
63
|
+
readonly sdkSection: boolean;
|
|
64
|
+
/** 是否注册 `code_debug`。 */
|
|
65
|
+
readonly debug: boolean;
|
|
66
|
+
}
|
|
67
|
+
/** 原始配置(全部可选)。 */
|
|
68
|
+
export interface CodemodeConfig {
|
|
69
|
+
/** 见 {@link CodemodeOptions.nativeScope}。 */
|
|
70
|
+
nativeScope?: boolean;
|
|
71
|
+
/** 见 {@link CodemodeOptions.hiddenPrefixes}。 */
|
|
72
|
+
hiddenPrefixes?: readonly string[];
|
|
73
|
+
/** 见 {@link CodemodeOptions.nativeTools}。 */
|
|
74
|
+
nativeTools?: readonly string[];
|
|
75
|
+
/** 见 {@link CodemodeOptions.hiddenTools}。 */
|
|
76
|
+
hiddenTools?: readonly string[];
|
|
77
|
+
/** 见 {@link CodemodeOptions.metaTools}。 */
|
|
78
|
+
metaTools?: readonly string[];
|
|
79
|
+
/** 见 {@link CodemodeOptions.runToolName}。 */
|
|
80
|
+
runToolName?: string;
|
|
81
|
+
/** 见 {@link CodemodeOptions.maxParallelSubCalls}。 */
|
|
82
|
+
maxParallelSubCalls?: number;
|
|
83
|
+
/** 见 {@link CodemodeOptions.maxSubCalls}。 */
|
|
84
|
+
maxSubCalls?: number;
|
|
85
|
+
/** 见 {@link CodemodeOptions.maxSubCallsPerMinute}。 */
|
|
86
|
+
maxSubCallsPerMinute?: number;
|
|
87
|
+
/** 见 {@link CodemodeOptions.guard}。 */
|
|
88
|
+
guard?: boolean;
|
|
89
|
+
/** 见 {@link CodemodeOptions.sdkSection}。 */
|
|
90
|
+
sdkSection?: boolean;
|
|
91
|
+
/** 见 {@link CodemodeOptions.debug}。 */
|
|
92
|
+
debug?: boolean;
|
|
93
|
+
}
|
|
94
|
+
/** 名字集合与已归一化配置:判定遮蔽所需的全部输入。 */
|
|
95
|
+
export interface CodemodeRules {
|
|
96
|
+
/** 归一化后的配置。 */
|
|
97
|
+
readonly options: CodemodeOptions;
|
|
98
|
+
/** `hiddenTools` + 发现工具的集合形态(只留给程序内部调用)。 */
|
|
99
|
+
readonly hidden: ReadonlySet<string>;
|
|
100
|
+
/** `nativeTools` + 传输工具的集合形态。 */
|
|
101
|
+
readonly native: ReadonlySet<string>;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* 把原始配置归一化。
|
|
105
|
+
*
|
|
106
|
+
* @param config - 行配置;`null` / 省略表示默认值。
|
|
107
|
+
* @returns 冻结的配置与集合。
|
|
108
|
+
*/
|
|
109
|
+
export declare function createRules(config?: CodemodeConfig | null): CodemodeRules;
|
|
110
|
+
/**
|
|
111
|
+
* 校验并冻结一份配置。
|
|
112
|
+
*
|
|
113
|
+
* @param config - 原始配置。
|
|
114
|
+
* @returns 规范化后的只读配置。
|
|
115
|
+
*/
|
|
116
|
+
export declare function normalizeConfig(config?: CodemodeConfig | null): CodemodeOptions;
|
|
117
|
+
/**
|
|
118
|
+
* 归属视图:哪些名字在全局层、哪些在本预设层。
|
|
119
|
+
*
|
|
120
|
+
* `enabled === false` 表示作用域探测失败(本包被挂在了 host 层而不是预设里),
|
|
121
|
+
* 此时作用域规则整体失效,只保留名字规则——绝不因为读不到归属就误遮蔽。
|
|
122
|
+
*/
|
|
123
|
+
export interface CodemodeView {
|
|
124
|
+
/** 作用域规则是否可用。 */
|
|
125
|
+
readonly enabled: boolean;
|
|
126
|
+
/** 全局层(MCP 服务端、profile 级 bundle)能解析到的名字。 */
|
|
127
|
+
readonly globalNames: ReadonlySet<string>;
|
|
128
|
+
/** 本预设层能解析到的名字(含祖先层,因此包含全局层)。 */
|
|
129
|
+
readonly presetNames: ReadonlySet<string>;
|
|
130
|
+
}
|
|
131
|
+
/** 作用域不可用时的空视图。 */
|
|
132
|
+
export declare const DISABLED_VIEW: CodemodeView;
|
|
133
|
+
/**
|
|
134
|
+
* 判定一个名字是否要从模型清单里剥离。
|
|
135
|
+
*
|
|
136
|
+
* 顺序:显式例外(`nativeTools` / 传输工具 / 发现工具)→ 显式遮蔽
|
|
137
|
+
* (`hiddenTools`)→ 名字前缀 → 作用域归属。
|
|
138
|
+
*
|
|
139
|
+
* 作用域归属只在能确认归属时遮蔽:
|
|
140
|
+
*
|
|
141
|
+
* - 在全局视图里解析得到 → 全局层注册的,遮蔽;
|
|
142
|
+
* - 只在预设视图里解析得到 → 本预设自己注册的,保持原生;
|
|
143
|
+
* - 两处都解析不到 → 只可能注册在本预设之下(agent 层),遮蔽。
|
|
144
|
+
*
|
|
145
|
+
* @param name - 工具名。
|
|
146
|
+
* @param rules - 已归一化的规则。
|
|
147
|
+
* @param view - 归属视图。
|
|
148
|
+
* @returns 要遮蔽时为 `true`。
|
|
149
|
+
*/
|
|
150
|
+
export declare function isMaskedName(name: string | undefined, rules: CodemodeRules, view: CodemodeView): boolean;
|
|
151
|
+
/** 被遮蔽工具的汇总:只用于日志与 `code_debug`。 */
|
|
152
|
+
export interface HiddenSummary {
|
|
153
|
+
/** 被遮蔽的工具总数。 */
|
|
154
|
+
readonly total: number;
|
|
155
|
+
/** 按 namespace 分组的计数。 */
|
|
156
|
+
readonly namespaces: readonly {
|
|
157
|
+
readonly namespace: string;
|
|
158
|
+
readonly kind: 'mcp' | 'plugin';
|
|
159
|
+
readonly count: number;
|
|
160
|
+
}[];
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* 汇总被遮蔽的工具。
|
|
164
|
+
*
|
|
165
|
+
* @param names - 被遮蔽的名字。
|
|
166
|
+
* @returns 计数与分组。
|
|
167
|
+
*/
|
|
168
|
+
export declare function summarizeHidden(names: readonly string[]): HiddenSummary;
|
|
169
|
+
/** 生成说明段所需的最小输入。 */
|
|
170
|
+
export interface SectionInput {
|
|
171
|
+
/** 程序传输工具名。 */
|
|
172
|
+
readonly runToolName: string;
|
|
173
|
+
/** 发现工具名。 */
|
|
174
|
+
readonly metaTools: readonly string[];
|
|
175
|
+
/** 运行时的源码语言(默认 `typescript`)。 */
|
|
176
|
+
readonly language?: string;
|
|
177
|
+
/** 运行时的程序形态;`repl` 表示常驻 REPL。 */
|
|
178
|
+
readonly programFormat?: string;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* 生成 `tools:sdk` 段的正文。
|
|
182
|
+
*
|
|
183
|
+
* ## 恒定契约
|
|
184
|
+
*
|
|
185
|
+
* 这段正文**只**依赖入参里的两个工具名与部署级的 `language` / `programFormat`。它刻意不含遮蔽
|
|
186
|
+
* 工具的数量、namespace 分布、会话 id 或时间,因此同一部署下逐字节恒定:挂载或卸载
|
|
187
|
+
* MCP 服务端不会改写它,前缀缓存不会因为它失效。
|
|
188
|
+
*
|
|
189
|
+
* @param input - 传输工具名、发现工具名与程序形态。
|
|
190
|
+
* @returns 说明段正文。
|
|
191
|
+
*/
|
|
192
|
+
export declare function buildCodemodeSectionText(input: SectionInput): string;
|
|
193
|
+
//# sourceMappingURL=rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../../src/host/codemode/rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,4CAA4C;AAC5C,eAAO,MAAM,qBAAqB,aAAa,CAAA;AAE/C,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAK9C,CAAA;AAEF,mBAAmB;AACnB,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAA6B,CAAA;AAElF;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAMhD,CAAA;AAEF,uBAAuB;AACvB,MAAM,WAAW,eAAe;IAC9B,0BAA0B;IAC1B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAC7B,iBAAiB;IACjB,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1C,iBAAiB;IACjB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,eAAe;IACf,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,aAAa;IACb,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IACrC,eAAe;IACf,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,wBAAwB;IACxB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAA;IACpC,8BAA8B;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAA;IACrC,0DAA0D;IAC1D,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAA;IACrC,yBAAyB;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,yBAAyB;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CACxB;AAED,kBAAkB;AAClB,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,gDAAgD;IAChD,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,6CAA6C;IAC7C,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC/B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC/B,2CAA2C;IAC3C,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC7B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qDAAqD;IACrD,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sDAAsD;IACtD,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,uCAAuC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,4CAA4C;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,uCAAuC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,+BAA+B;AAC/B,MAAM,WAAW,aAAa;IAC5B,eAAe;IACf,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC,4CAA4C;IAC5C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACpC,iCAAiC;IACjC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CACrC;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,aAAa,CAOzE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,eAAe,CAuB/E;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,iBAAiB;IACjB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,4CAA4C;IAC5C,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACzC,iCAAiC;IACjC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAC1C;AAED,mBAAmB;AACnB,eAAO,MAAM,aAAa,EAAE,YAIV,CAAA;AAElB;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAWxG;AAED,oCAAoC;AACpC,MAAM,WAAW,aAAa;IAC5B,gBAAgB;IAChB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,yBAAyB;IACzB,QAAQ,CAAC,UAAU,EAAE,SAAS;QAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CACxH;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,aAAa,CAcvE;AAED,oBAAoB;AACpB,MAAM,WAAW,YAAY;IAC3B,eAAe;IACf,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,aAAa;IACb,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IACrC,iCAAiC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,iCAAiC;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAChC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAyDpE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 工具归属判定:一个名字是**全局层**注册的,还是**本预设**注册的。
|
|
3
|
+
*
|
|
4
|
+
* ## 为什么要这么绕
|
|
5
|
+
*
|
|
6
|
+
* 注册表没有公开「某个工具注册在哪个作用域」的 API。`@deepseek-ai/dsh-scope` 把作用域标签
|
|
7
|
+
* 写在一个模块私有的 `Symbol('dsh.scope')` 上,链关系(parent)也在私有 WeakMap 里,
|
|
8
|
+
* 都不导出。能用的只有两件事:
|
|
9
|
+
*
|
|
10
|
+
* 1. 本包自己所在作用域的 key —— 按符号描述从 ctx 上扫出来({@link findScopeKey});
|
|
11
|
+
* 2. 公开的 `ctx.tools.get(name)`(全局视图)与 `ctx.tools.get(name, key)`(该作用域视图)。
|
|
12
|
+
*
|
|
13
|
+
* 于是归属判定变成两次公开查询:
|
|
14
|
+
*
|
|
15
|
+
* - 全局视图能解析 → 全局层(MCP 服务端、profile 级 bundle);
|
|
16
|
+
* - 只有本预设视图能解析 → 本预设自己注册的;
|
|
17
|
+
* - 两处都解析不到 → 只可能注册在本预设之下(agent 层)。
|
|
18
|
+
*
|
|
19
|
+
* 探测失败(本包被挂在 host 层而不是预设里)时返回 `enabled: false`:规则整体降级为
|
|
20
|
+
* 纯名字匹配,绝不因为读不到归属就误遮蔽。
|
|
21
|
+
*
|
|
22
|
+
* @module @eddyskywalker/dsh-chatgpt-subscription/host/codemode/scope
|
|
23
|
+
*/
|
|
24
|
+
import { type CodemodeView } from './rules.ts';
|
|
25
|
+
/** 作用域不可用时的空视图(从规则模块转出,调用方只需认识一个模块)。 */
|
|
26
|
+
export { DISABLED_VIEW } from './rules.ts';
|
|
27
|
+
/**
|
|
28
|
+
* 从一个 ctx 上找出「本包所在作用域」的 key。
|
|
29
|
+
*
|
|
30
|
+
* Cordis 的 scoped context 把作用域标签写成自有(或原型上)的一个 symbol 属性,
|
|
31
|
+
* 描述是 `dsh.scope`。这里按描述扫,不猜符号本身——写法与参考实现一致,因为
|
|
32
|
+
* 直接 `import` 内核的 scope 包在 profile 插件里解析不到。
|
|
33
|
+
*
|
|
34
|
+
* @param ctx - 本包的行上下文。
|
|
35
|
+
* @returns 作用域 key;读不到时为 `undefined`。
|
|
36
|
+
*/
|
|
37
|
+
export declare function findScopeKey(ctx: unknown): object | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* 为一个名字清单建立归属视图。
|
|
40
|
+
*
|
|
41
|
+
* @param tools - 工具注册表(结构探测,不看类身份)。
|
|
42
|
+
* @param scopeKey - 本预设的作用域 key;`undefined` 表示探测失败。
|
|
43
|
+
* @param names - 要判定的名字(通常是本步的模型可见清单)。
|
|
44
|
+
* @returns 归属视图;读不到任何归属时返回禁用视图。
|
|
45
|
+
*/
|
|
46
|
+
export declare function resolveCatalogView(tools: unknown, scopeKey: object | undefined, names: readonly string[]): CodemodeView;
|
|
47
|
+
/**
|
|
48
|
+
* 判定一个名字在**调用时**是否属于本预设之外的层。
|
|
49
|
+
*
|
|
50
|
+
* 拒绝路径(模型直呼被遮蔽的名字)没有当步清单可用,只能按同一个视图单独判一次;
|
|
51
|
+
* 判定规则与 {@link resolveCatalogView} 完全一致,两处因此不可能给出互相矛盾的结论。
|
|
52
|
+
*
|
|
53
|
+
* @param tools - 工具注册表。
|
|
54
|
+
* @param scopeKey - 本预设的作用域 key。
|
|
55
|
+
* @param name - 工具名。
|
|
56
|
+
* @returns 归属视图(只含这一个名字)。
|
|
57
|
+
*/
|
|
58
|
+
export declare function resolveNameView(tools: unknown, scopeKey: object | undefined, name: string): CodemodeView;
|
|
59
|
+
//# sourceMappingURL=scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../../src/host/codemode/scope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AAE7D,wCAAwC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAW1C;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAI7D;AA0BD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,YAAY,CAWd;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAQxG"}
|