@eddyskywalker/dsh-chatgpt-subscription 0.58.0 → 0.59.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 +17 -0
- package/lib/client.js +136 -23
- package/lib/client.js.map +1 -1
- package/lib/codemode.js +1565 -0
- package/lib/index.js +414 -64
- package/lib/types/client/CodexImageToolView.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 +183 -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 +258 -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/package.json +6 -1
- package/presets/dispatch/README.md +12 -3
- package/presets/dispatch/agent.cordis.yml +10 -9
- package/presets/dispatch/preset.yml +1 -1
|
@@ -0,0 +1,183 @@
|
|
|
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
|
+
* 遮蔽它们会让提示词指向一个模型看不见的名字,所以默认留在原生清单里。
|
|
34
|
+
*/
|
|
35
|
+
export declare const DEFAULT_NATIVE_TOOLS: readonly string[];
|
|
36
|
+
/** 校验后、脱离原对象并冻结的配置。 */
|
|
37
|
+
export interface CodemodeOptions {
|
|
38
|
+
/** 是否遮蔽一切不是本预设自己注册的工具。 */
|
|
39
|
+
readonly nativeScope: boolean;
|
|
40
|
+
/** 额外剥离的名字前缀。 */
|
|
41
|
+
readonly hiddenPrefixes: readonly string[];
|
|
42
|
+
/** 始终原生呈现的名字。 */
|
|
43
|
+
readonly nativeTools: readonly string[];
|
|
44
|
+
/** 始终遮蔽的名字。 */
|
|
45
|
+
readonly hiddenTools: readonly string[];
|
|
46
|
+
/** 发现工具名。 */
|
|
47
|
+
readonly metaTools: readonly string[];
|
|
48
|
+
/** 程序传输工具名。 */
|
|
49
|
+
readonly runToolName: string;
|
|
50
|
+
/** 一个程序内可并发的只读子调用上限。 */
|
|
51
|
+
readonly maxParallelSubCalls: number;
|
|
52
|
+
/** 一次程序最多允许的子调用次数。 */
|
|
53
|
+
readonly maxSubCalls: number;
|
|
54
|
+
/** 是否拒绝模型对被遮蔽工具的直接调用。 */
|
|
55
|
+
readonly guard: boolean;
|
|
56
|
+
/** 是否注入 / 替换 Code Mode 说明段。 */
|
|
57
|
+
readonly sdkSection: boolean;
|
|
58
|
+
/** 是否注册 `code_debug`。 */
|
|
59
|
+
readonly debug: boolean;
|
|
60
|
+
}
|
|
61
|
+
/** 原始配置(全部可选)。 */
|
|
62
|
+
export interface CodemodeConfig {
|
|
63
|
+
/** 见 {@link CodemodeOptions.nativeScope}。 */
|
|
64
|
+
nativeScope?: boolean;
|
|
65
|
+
/** 见 {@link CodemodeOptions.hiddenPrefixes}。 */
|
|
66
|
+
hiddenPrefixes?: readonly string[];
|
|
67
|
+
/** 见 {@link CodemodeOptions.nativeTools}。 */
|
|
68
|
+
nativeTools?: readonly string[];
|
|
69
|
+
/** 见 {@link CodemodeOptions.hiddenTools}。 */
|
|
70
|
+
hiddenTools?: readonly string[];
|
|
71
|
+
/** 见 {@link CodemodeOptions.metaTools}。 */
|
|
72
|
+
metaTools?: readonly string[];
|
|
73
|
+
/** 见 {@link CodemodeOptions.runToolName}。 */
|
|
74
|
+
runToolName?: string;
|
|
75
|
+
/** 见 {@link CodemodeOptions.maxParallelSubCalls}。 */
|
|
76
|
+
maxParallelSubCalls?: number;
|
|
77
|
+
/** 见 {@link CodemodeOptions.maxSubCalls}。 */
|
|
78
|
+
maxSubCalls?: number;
|
|
79
|
+
/** 见 {@link CodemodeOptions.guard}。 */
|
|
80
|
+
guard?: boolean;
|
|
81
|
+
/** 见 {@link CodemodeOptions.sdkSection}。 */
|
|
82
|
+
sdkSection?: boolean;
|
|
83
|
+
/** 见 {@link CodemodeOptions.debug}。 */
|
|
84
|
+
debug?: boolean;
|
|
85
|
+
}
|
|
86
|
+
/** 名字集合与已归一化配置:判定遮蔽所需的全部输入。 */
|
|
87
|
+
export interface CodemodeRules {
|
|
88
|
+
/** 归一化后的配置。 */
|
|
89
|
+
readonly options: CodemodeOptions;
|
|
90
|
+
/** `hiddenTools` 的集合形态。 */
|
|
91
|
+
readonly hidden: ReadonlySet<string>;
|
|
92
|
+
/** `nativeTools` + 传输工具 + 发现工具的集合形态。 */
|
|
93
|
+
readonly native: ReadonlySet<string>;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 把原始配置归一化。
|
|
97
|
+
*
|
|
98
|
+
* @param config - 行配置;`null` / 省略表示默认值。
|
|
99
|
+
* @returns 冻结的配置与集合。
|
|
100
|
+
*/
|
|
101
|
+
export declare function createRules(config?: CodemodeConfig | null): CodemodeRules;
|
|
102
|
+
/**
|
|
103
|
+
* 校验并冻结一份配置。
|
|
104
|
+
*
|
|
105
|
+
* @param config - 原始配置。
|
|
106
|
+
* @returns 规范化后的只读配置。
|
|
107
|
+
*/
|
|
108
|
+
export declare function normalizeConfig(config?: CodemodeConfig | null): CodemodeOptions;
|
|
109
|
+
/**
|
|
110
|
+
* 归属视图:哪些名字在全局层、哪些在本预设层。
|
|
111
|
+
*
|
|
112
|
+
* `enabled === false` 表示作用域探测失败(本包被挂在了 host 层而不是预设里),
|
|
113
|
+
* 此时作用域规则整体失效,只保留名字规则——绝不因为读不到归属就误遮蔽。
|
|
114
|
+
*/
|
|
115
|
+
export interface CodemodeView {
|
|
116
|
+
/** 作用域规则是否可用。 */
|
|
117
|
+
readonly enabled: boolean;
|
|
118
|
+
/** 全局层(MCP 服务端、profile 级 bundle)能解析到的名字。 */
|
|
119
|
+
readonly globalNames: ReadonlySet<string>;
|
|
120
|
+
/** 本预设层能解析到的名字(含祖先层,因此包含全局层)。 */
|
|
121
|
+
readonly presetNames: ReadonlySet<string>;
|
|
122
|
+
}
|
|
123
|
+
/** 作用域不可用时的空视图。 */
|
|
124
|
+
export declare const DISABLED_VIEW: CodemodeView;
|
|
125
|
+
/**
|
|
126
|
+
* 判定一个名字是否要从模型清单里剥离。
|
|
127
|
+
*
|
|
128
|
+
* 顺序:显式例外(`nativeTools` / 传输工具 / 发现工具)→ 显式遮蔽
|
|
129
|
+
* (`hiddenTools`)→ 名字前缀 → 作用域归属。
|
|
130
|
+
*
|
|
131
|
+
* 作用域归属只在能确认归属时遮蔽:
|
|
132
|
+
*
|
|
133
|
+
* - 在全局视图里解析得到 → 全局层注册的,遮蔽;
|
|
134
|
+
* - 只在预设视图里解析得到 → 本预设自己注册的,保持原生;
|
|
135
|
+
* - 两处都解析不到 → 只可能注册在本预设之下(agent 层),遮蔽。
|
|
136
|
+
*
|
|
137
|
+
* @param name - 工具名。
|
|
138
|
+
* @param rules - 已归一化的规则。
|
|
139
|
+
* @param view - 归属视图。
|
|
140
|
+
* @returns 要遮蔽时为 `true`。
|
|
141
|
+
*/
|
|
142
|
+
export declare function isMaskedName(name: string | undefined, rules: CodemodeRules, view: CodemodeView): boolean;
|
|
143
|
+
/** 被遮蔽工具的汇总:只用于日志与 `code_debug`。 */
|
|
144
|
+
export interface HiddenSummary {
|
|
145
|
+
/** 被遮蔽的工具总数。 */
|
|
146
|
+
readonly total: number;
|
|
147
|
+
/** 按 namespace 分组的计数。 */
|
|
148
|
+
readonly namespaces: readonly {
|
|
149
|
+
readonly namespace: string;
|
|
150
|
+
readonly kind: 'mcp' | 'plugin';
|
|
151
|
+
readonly count: number;
|
|
152
|
+
}[];
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* 汇总被遮蔽的工具。
|
|
156
|
+
*
|
|
157
|
+
* @param names - 被遮蔽的名字。
|
|
158
|
+
* @returns 计数与分组。
|
|
159
|
+
*/
|
|
160
|
+
export declare function summarizeHidden(names: readonly string[]): HiddenSummary;
|
|
161
|
+
/** 生成说明段所需的最小输入。 */
|
|
162
|
+
export interface SectionInput {
|
|
163
|
+
/** 程序传输工具名。 */
|
|
164
|
+
readonly runToolName: string;
|
|
165
|
+
/** 发现工具名。 */
|
|
166
|
+
readonly metaTools: readonly string[];
|
|
167
|
+
/** 运行时的程序形态;`repl` 表示常驻 REPL。 */
|
|
168
|
+
readonly programFormat?: string;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* 生成 `tools:sdk` 段的正文。
|
|
172
|
+
*
|
|
173
|
+
* ## 恒定契约
|
|
174
|
+
*
|
|
175
|
+
* 这段正文**只**依赖入参里的两个工具名与部署级的 `programFormat`。它刻意不含遮蔽
|
|
176
|
+
* 工具的数量、namespace 分布、会话 id 或时间,因此同一部署下逐字节恒定:挂载或卸载
|
|
177
|
+
* MCP 服务端不会改写它,前缀缓存不会因为它失效。
|
|
178
|
+
*
|
|
179
|
+
* @param input - 传输工具名、发现工具名与程序形态。
|
|
180
|
+
* @returns 说明段正文。
|
|
181
|
+
*/
|
|
182
|
+
export declare function buildCodemodeSectionText(input: SectionInput): string;
|
|
183
|
+
//# sourceMappingURL=rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../../src/host/codemode/rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Mode 的程序传输工具 `code_run`。
|
|
3
|
+
*
|
|
4
|
+
* 工具名不是 `run_code`:那个名字被内核保留(`tools.register()` 会抛错),所以本包
|
|
5
|
+
* 用自己的名字注册同一件事——把模型写的一段程序交给 `ctx.ptcRuntime` 执行,程序里的每次
|
|
6
|
+
* `tools.<name>(args)` 都是一次真实的工具调用。
|
|
7
|
+
*
|
|
8
|
+
* ## 为什么执行委托给注册表而不是自己跑管线
|
|
9
|
+
*
|
|
10
|
+
* 子调用走公开的 `ctx.tools.execute()`,因此落到**注册表选中的执行器**上:在本预设里就是
|
|
11
|
+
* 原生 executor 的完整管线(pre-policy、审批、around-dispatch、post-execute 一个不少)。
|
|
12
|
+
* 手写这条管线是插件静默丢策略的典型方式,所以这里一行都不抄。
|
|
13
|
+
*
|
|
14
|
+
* ## 子调度的取舍
|
|
15
|
+
*
|
|
16
|
+
* 程序自己用 `Promise.all` 决定并发。本模块只做一件额外的事:把 `isConcurrencySafe` 不为
|
|
17
|
+
* `true` 的调用串行化成互斥段,只读调用放行到 `maxParallelSubCalls` 个并发。与内核的
|
|
18
|
+
* 差别是「只排序同一程序内的子调用」,不与同一模型步的其它调用互相排序。
|
|
19
|
+
*
|
|
20
|
+
* @module @eddyskywalker/dsh-chatgpt-subscription/host/codemode/transport
|
|
21
|
+
*/
|
|
22
|
+
import type { CodemodeRules } from './rules.ts';
|
|
23
|
+
/**
|
|
24
|
+
* 读当前程序运行的清单快照。
|
|
25
|
+
*
|
|
26
|
+
* @returns 程序运行期间是这次运行的快照;程序之外为 `undefined`。
|
|
27
|
+
*/
|
|
28
|
+
export declare function currentCatalogSnapshot(): readonly CatalogEntry[] | undefined;
|
|
29
|
+
/** 传输工具名(与 {@link DEFAULT_RUN_TOOL_NAME} 一致,导出方便测试引用)。 */
|
|
30
|
+
export declare const TRANSPORT_TOOL_NAME = "code_run";
|
|
31
|
+
/** 程序里可调用的一个工具(结构描述,只读需要的字段)。 */
|
|
32
|
+
export interface CatalogEntry {
|
|
33
|
+
/** 工具名。 */
|
|
34
|
+
readonly name: string;
|
|
35
|
+
/** 面向模型的描述。 */
|
|
36
|
+
readonly description: string;
|
|
37
|
+
/** 完整参数 JSON Schema。 */
|
|
38
|
+
readonly parameters: unknown;
|
|
39
|
+
/** 并发分类(内核约定:只有 true 表示可并发)。 */
|
|
40
|
+
readonly isConcurrencySafe?: (args: unknown) => boolean;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 一次运行拿到的会话级授权。
|
|
44
|
+
*
|
|
45
|
+
* 两项都取自**会话**而不是部署默认值:文件策略决定程序拿到的沙盒模式与写根,目录决定程序
|
|
46
|
+
* 从哪里开始(`cd` 过的会话不会退回初始目录)。取不到就留空,交给内核兜底。
|
|
47
|
+
*/
|
|
48
|
+
export interface RunAuthority {
|
|
49
|
+
/** 会话当前工作目录。 */
|
|
50
|
+
readonly cwd?: string;
|
|
51
|
+
/** 会话级文件策略。 */
|
|
52
|
+
readonly sandboxPolicy?: unknown;
|
|
53
|
+
}
|
|
54
|
+
/** 程序的运行环境句柄:由入口提供,传输层只调用。 */
|
|
55
|
+
export interface CodemodeHost {
|
|
56
|
+
/** 当前可调用的工具清单(含被遮蔽的)。 */
|
|
57
|
+
catalog(): readonly CatalogEntry[];
|
|
58
|
+
/** 执行一次子调用(内部走 `ctx.tools.execute()`)。 */
|
|
59
|
+
callTool(request: CallToolRequest): Promise<CallToolOutcome>;
|
|
60
|
+
/** 读 PTC 运行时(结构探测)。 */
|
|
61
|
+
runtime(): PtcRuntimeLike | undefined;
|
|
62
|
+
/** 常驻环境的 owner(缺省用调用方 agent 当 owner)。 */
|
|
63
|
+
stateOwner(agent: unknown): object;
|
|
64
|
+
/** 程序结束时释放 owner 的常驻环境。 */
|
|
65
|
+
releaseOwner(owner: object): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* 取这次运行的会话级授权(目录 + 文件策略)。
|
|
68
|
+
*
|
|
69
|
+
* 老代 harness 没有 `sandboxPolicy` / `workingDirectory` 服务,此时返回 `undefined`,
|
|
70
|
+
* 由 `runtime.resolve()` 或运行时自身兜底即可。
|
|
71
|
+
*/
|
|
72
|
+
runAuthority?(agent: unknown, signal: AbortSignal): Promise<RunAuthority | undefined> | RunAuthority | undefined;
|
|
73
|
+
}
|
|
74
|
+
/** 一次子调用请求。 */
|
|
75
|
+
export interface CallToolRequest {
|
|
76
|
+
/** 工具名。 */
|
|
77
|
+
readonly name: string;
|
|
78
|
+
/** 已校验的参数对象。 */
|
|
79
|
+
readonly args: unknown;
|
|
80
|
+
/** 子调用 id(`<outer>:ptc:<n>`)。 */
|
|
81
|
+
readonly callId: string;
|
|
82
|
+
/** 取消信号(已带嵌套标记)。 */
|
|
83
|
+
readonly signal: AbortSignal;
|
|
84
|
+
/** 调用方 agent。 */
|
|
85
|
+
readonly agent: unknown;
|
|
86
|
+
/** 步骤准入集合。 */
|
|
87
|
+
readonly toolSet: unknown;
|
|
88
|
+
}
|
|
89
|
+
/** 一次子调用的结果。 */
|
|
90
|
+
export interface CallToolOutcome {
|
|
91
|
+
/** 失败时的错误文本。 */
|
|
92
|
+
readonly error?: string;
|
|
93
|
+
/** 成功时的值。 */
|
|
94
|
+
readonly value?: unknown;
|
|
95
|
+
/** 成功时的文本内容(没有 value 时用它)。 */
|
|
96
|
+
readonly text?: string;
|
|
97
|
+
/**
|
|
98
|
+
* 面向前模型的内容块,原样进回放事件。
|
|
99
|
+
*
|
|
100
|
+
* 程序拿的是 `value` / `text`,这两条是给**界面**的:没有它,回放里那条子调用
|
|
101
|
+
* 只有名字没有结果,展开是个空壳。
|
|
102
|
+
*/
|
|
103
|
+
readonly content?: readonly unknown[];
|
|
104
|
+
/** 工具自带的展示元数据,原样进回放事件。 */
|
|
105
|
+
readonly meta?: unknown;
|
|
106
|
+
/** 失败身份(名称 / 业务码 / 原始细节),原样进回放事件。 */
|
|
107
|
+
readonly errorInfo?: {
|
|
108
|
+
readonly name: string;
|
|
109
|
+
readonly code: string;
|
|
110
|
+
readonly reason?: string;
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/** 一次运行请求(也覆盖 {@link PtcRuntimeLike.resolve} 的产物)。 */
|
|
114
|
+
export interface PtcRunRequestLike {
|
|
115
|
+
/** 程序源码。 */
|
|
116
|
+
readonly program: string;
|
|
117
|
+
/** 程序里可见的绑定命名空间。 */
|
|
118
|
+
readonly bindings: readonly unknown[];
|
|
119
|
+
/** 常驻环境的 owner。 */
|
|
120
|
+
readonly stateOwner?: object;
|
|
121
|
+
/** 程序起点目录。 */
|
|
122
|
+
readonly cwd?: string;
|
|
123
|
+
/** 已解析的文件策略(DSH 0.2.2 起 `run()` 只接受 resolve() 的产物)。 */
|
|
124
|
+
readonly sandboxPolicy?: unknown;
|
|
125
|
+
/** 超时预算;`null` 表示不限。 */
|
|
126
|
+
readonly timeoutMs?: number | null;
|
|
127
|
+
/** 取消信号。 */
|
|
128
|
+
readonly signal?: AbortSignal;
|
|
129
|
+
}
|
|
130
|
+
/** PTC 运行时里本模块会读到的那部分(结构契约)。 */
|
|
131
|
+
export interface PtcRuntimeLike {
|
|
132
|
+
/** 源码语言。 */
|
|
133
|
+
readonly language?: string;
|
|
134
|
+
/** 程序形态。 */
|
|
135
|
+
readonly programFormat?: string;
|
|
136
|
+
/** 超时预算。 */
|
|
137
|
+
readonly timeout?: {
|
|
138
|
+
readonly defaultMs: number;
|
|
139
|
+
readonly maxMs: number;
|
|
140
|
+
};
|
|
141
|
+
/** 常驻状态释放。 */
|
|
142
|
+
release?(owner: object): Promise<void>;
|
|
143
|
+
/**
|
|
144
|
+
* 解析目录、超时与文件策略。
|
|
145
|
+
*
|
|
146
|
+
* DSH 0.2.2 起内核把「解析」与「执行」拆开:`run()` 只接受这一步的产物,直接喂原始请求
|
|
147
|
+
* 会抛 `ptc-runtime-node: run requires a resolved sandbox policy`。老代运行时没有这个方法,
|
|
148
|
+
* 那时 `run()` 自己兜底。
|
|
149
|
+
*/
|
|
150
|
+
resolve?(request: PtcRunRequestLike): PtcRunRequestLike;
|
|
151
|
+
/** 执行一段程序。 */
|
|
152
|
+
run(request: PtcRunRequestLike): Promise<PtcRunResultLike>;
|
|
153
|
+
}
|
|
154
|
+
/** 一次程序运行的结果。 */
|
|
155
|
+
export interface PtcRunResultLike {
|
|
156
|
+
/** 程序返回值。 */
|
|
157
|
+
readonly value?: unknown;
|
|
158
|
+
/** 捕获的输出。 */
|
|
159
|
+
readonly logs: readonly string[];
|
|
160
|
+
/** 失败信息。 */
|
|
161
|
+
readonly error?: {
|
|
162
|
+
readonly kind: string;
|
|
163
|
+
readonly message: string;
|
|
164
|
+
};
|
|
165
|
+
/** 文件策略与观察到的拒绝。 */
|
|
166
|
+
readonly sandbox?: {
|
|
167
|
+
readonly mode: string;
|
|
168
|
+
readonly denied: boolean;
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
/** 一次传输调用的规范化结果。 */
|
|
172
|
+
export interface TransportOutput {
|
|
173
|
+
/** 程序捕获的输出。 */
|
|
174
|
+
readonly logs: readonly string[];
|
|
175
|
+
/** 程序返回值。 */
|
|
176
|
+
readonly result?: unknown;
|
|
177
|
+
/** 文件沙箱观察。 */
|
|
178
|
+
readonly sandbox?: {
|
|
179
|
+
readonly mode: string;
|
|
180
|
+
readonly denied: boolean;
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* 造 `code_run` 的工具定义。
|
|
185
|
+
*
|
|
186
|
+
* @param host - 运行环境句柄。
|
|
187
|
+
* @param rules - 已归一化的规则。
|
|
188
|
+
* @returns 可直接交给 `ctx.tools.register()` 的原始定义。
|
|
189
|
+
*/
|
|
190
|
+
export declare function createTransportDefinition(host: CodemodeHost, rules: CodemodeRules): {
|
|
191
|
+
name: string;
|
|
192
|
+
description: string;
|
|
193
|
+
parameters: {
|
|
194
|
+
type: string;
|
|
195
|
+
additionalProperties: boolean;
|
|
196
|
+
required: string[];
|
|
197
|
+
properties: {
|
|
198
|
+
code: {
|
|
199
|
+
type: string;
|
|
200
|
+
description: string;
|
|
201
|
+
};
|
|
202
|
+
description: {
|
|
203
|
+
type: string;
|
|
204
|
+
description: string;
|
|
205
|
+
};
|
|
206
|
+
timeoutMs: {
|
|
207
|
+
type: string;
|
|
208
|
+
description: string;
|
|
209
|
+
};
|
|
210
|
+
};
|
|
211
|
+
};
|
|
212
|
+
output: {
|
|
213
|
+
schema: {
|
|
214
|
+
type: string;
|
|
215
|
+
additionalProperties: boolean;
|
|
216
|
+
required: string[];
|
|
217
|
+
properties: {
|
|
218
|
+
logs: {
|
|
219
|
+
type: string;
|
|
220
|
+
items: {
|
|
221
|
+
type: string;
|
|
222
|
+
};
|
|
223
|
+
};
|
|
224
|
+
result: {};
|
|
225
|
+
sandbox: {
|
|
226
|
+
type: string;
|
|
227
|
+
additionalProperties: boolean;
|
|
228
|
+
required: string[];
|
|
229
|
+
properties: {
|
|
230
|
+
mode: {
|
|
231
|
+
type: string;
|
|
232
|
+
};
|
|
233
|
+
denied: {
|
|
234
|
+
type: string;
|
|
235
|
+
};
|
|
236
|
+
};
|
|
237
|
+
};
|
|
238
|
+
};
|
|
239
|
+
};
|
|
240
|
+
render: (_args: unknown, value: TransportOutput) => {
|
|
241
|
+
type: string;
|
|
242
|
+
text: string;
|
|
243
|
+
}[];
|
|
244
|
+
};
|
|
245
|
+
execute(args: unknown, exec: TransportExecution): Promise<TransportOutput>;
|
|
246
|
+
};
|
|
247
|
+
/** 一次传输调用的执行上下文(结构描述)。 */
|
|
248
|
+
export interface TransportExecution {
|
|
249
|
+
/** 本次调用的 id。 */
|
|
250
|
+
readonly callId: string;
|
|
251
|
+
/** 取消信号。 */
|
|
252
|
+
readonly signal: AbortSignal;
|
|
253
|
+
/** 调用方 agent。 */
|
|
254
|
+
readonly agent?: unknown;
|
|
255
|
+
/** 步骤准入集合。 */
|
|
256
|
+
readonly toolSet?: unknown;
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../../src/host/codemode/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import type { AttachmentStore } from '@deepseek-ai/dsh-attachment';
|
|
2
2
|
import { OAuthService } from './oauth-service.ts';
|
|
3
3
|
type FetchLike = typeof fetch;
|
|
4
|
+
/**
|
|
5
|
+
* Output canvases the Codex image endpoint accepts in `size`.
|
|
6
|
+
*
|
|
7
|
+
* These are the official client's own three canvases plus the default `auto`,
|
|
8
|
+
* which lets the service pick. A size outside this set is not negotiated: the
|
|
9
|
+
* backend answers it with a 400, so the tool refuses it before the request.
|
|
10
|
+
*/
|
|
11
|
+
export declare const CODEX_IMAGE_SIZES: readonly ["auto", "1024x1024", "1536x1024", "1024x1536"];
|
|
12
|
+
/** Render effort the endpoint accepts in `quality`; `auto` is the service's own default. */
|
|
13
|
+
export declare const CODEX_IMAGE_QUALITIES: readonly ["auto", "low", "medium", "high"];
|
|
14
|
+
/** Reference images one edit request may carry. */
|
|
15
|
+
export declare const MAX_CODEX_REFERENCE_IMAGES = 5;
|
|
4
16
|
export interface CodexImageToolOptions {
|
|
5
17
|
fetchFn?: FetchLike;
|
|
6
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-images.d.ts","sourceRoot":"","sources":["../../../src/host/codex-images.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codex-images.d.ts","sourceRoot":"","sources":["../../../src/host/codex-images.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAsC,MAAM,6BAA6B,CAAA;AAWtG,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAIjD,KAAK,SAAS,GAAG,OAAO,KAAK,CAAA;AAE7B;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,0DAA2D,CAAA;AAEzF,4FAA4F;AAC5F,eAAO,MAAM,qBAAqB,4CAA6C,CAAA;AAE/E,mDAAmD;AACnD,eAAO,MAAM,0BAA0B,IAAI,CAAA;AAc3C,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,SAAS,CAAA;CACpB;AAoED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,eAAe,EAC5B,OAAO,GAAE,qBAA0B,mDA+MpC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eddyskywalker/dsh-chatgpt-subscription",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.59.0",
|
|
4
4
|
"description": "DSH provider plugin for Codex access through a ChatGPT subscription.",
|
|
5
5
|
"icon": "./icon.svg",
|
|
6
6
|
"author": {
|
|
@@ -61,6 +61,10 @@
|
|
|
61
61
|
"./tool-result-pruner": {
|
|
62
62
|
"types": "./lib/types/entry-tool-result-pruner.d.ts",
|
|
63
63
|
"default": "./lib/tool-result-pruner.js"
|
|
64
|
+
},
|
|
65
|
+
"./codemode": {
|
|
66
|
+
"types": "./lib/types/entry-codemode.d.ts",
|
|
67
|
+
"default": "./lib/codemode.js"
|
|
64
68
|
}
|
|
65
69
|
},
|
|
66
70
|
"dsh": {
|
|
@@ -170,6 +174,7 @@
|
|
|
170
174
|
"typecheck": "tsc -b --pretty false && tsc -p test/tsconfig.json --pretty false && tsc -p scripts/tsconfig.json --pretty false"
|
|
171
175
|
},
|
|
172
176
|
"dependencies": {
|
|
177
|
+
"@deepseek-ai/dsh-tool-executor-native": "^0.2.2-rc.1",
|
|
173
178
|
"katex": "^0.18.7",
|
|
174
179
|
"mermaid": "^11.17.2",
|
|
175
180
|
"undici": "^8.10.0",
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
# 调度模式(dispatch)
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
基于 **Code Mode** 的调度 Agent:本预设自己注册的工具保持原生可调(schema 不变),
|
|
4
|
+
预设清单以外的一切(MCP 服务端工具、profile 级插件工具、按 agent 注册的工具集)不进入模型
|
|
5
|
+
上下文,只能在 `code_run` 程序里用 `code_tools_search` 现查现调。改变的是**身份与流程纪律**。
|
|
6
|
+
|
|
7
|
+
> 内核的 `ptc` 呈现方式只把 `run_code` 交给模型、其余名字一律硬拒,`standard` 又完全没有程序
|
|
8
|
+
> 传输;「原生工具 + 程序」这个组合在内核里表达不出来,所以本预设自带一行 `code-mode`
|
|
9
|
+
> (`@eddyskywalker/dsh-chatgpt-subscription/codemode`)。代次上不可用原生 executor 时,
|
|
10
|
+
> `resolveDispatchPreset` 会自动退回 PTC 呈现(见 `src/host/agent-preset.ts`)。
|
|
11
|
+
|
|
12
|
+
> **缓存前提**:Code Mode 的说明段是**恒定文本**(不含任何遮蔽计数或 namespace 清单),
|
|
13
|
+
> 加上既有的 `ptc-sdk-cache-guard`,kimi-code / minimax-code 的前缀缓存不因 MCP 增删而失效。
|
|
5
14
|
|
|
6
15
|
## 运行骨架
|
|
7
16
|
|
|
@@ -24,7 +33,7 @@
|
|
|
24
33
|
| R0 | 先分诊,按复杂度决定是否展开重治理流程;绝不为 L0/L1 开启完整访谈或计划模式 |
|
|
25
34
|
| R0.5 | 兼容性闸门(每个新会话一次):判据**只有** `spawn_teammate` 是否在场——在场才说明跑的是旧代 team 运行时(它顶替协调工具),此时停下交用户决策;现行 team 只加共享任务板,与调度并行 |
|
|
26
35
|
| R-G | L2 规划前必须做澄清访谈:设计树 / 前沿 / 轮次,每题给推荐答案,事实自己查、决策交用户,前沿为空且用户确认后才进入规划 |
|
|
27
|
-
| R1 | L2 执行拓扑按「耦合度 × 并行收益」三选一:`Lead-Core`(紧耦合跨模块由主代理连续直执)、`Hybrid`(主代理先冻结公共契约再并行外包下游)、`Fan-out`(3+
|
|
36
|
+
| R1 | L2 执行拓扑按「耦合度 × 并行收益」三选一:`Lead-Core`(紧耦合跨模块由主代理连续直执)、`Hybrid`(主代理先冻结公共契约再并行外包下游)、`Fan-out`(3+ 正交子任务并行编排);单次生图、改提示词和重试由当前代理直接调用工具,只有独立多方案或更复杂创意任务才委派 |
|
|
28
37
|
| R2 | 允许清单唯一真源是 `list_subagent_models`(`{}` → `{ provider }`);派发必须显式给出拆开的 `provider` 与 `model`,直接采信工具返回值,无需去翻本地配置或代码核对 |
|
|
29
38
|
| R3 | 子代理对自己的模块拥有规划/执行/自检自治权 |
|
|
30
39
|
| R4 | 子代理使用 DSH 默认子代理角色;选模型的权力只在主代理 |
|
|
@@ -92,6 +92,7 @@
|
|
|
92
92
|
- Lead-Core: tightly coupled cross-module/contract changes or sequential chains where splitting duplicates reads or causes hand_back loops. -> Implement directly in continuous steps (track in todo_write, no self-briefs) and run R6 verification.
|
|
93
93
|
- Hybrid: unsettled shared contracts/seams plus orthogonal downstream work. -> Implement & freeze core seams yourself first, then delegate orthogonal adapters/tests/noisy exploration per R2/R5 (or subagent_fork for warm-context isolation).
|
|
94
94
|
- Fan-out: >=3 orthogonal subtasks with disjoint files, settled interfaces, and clear parallel/routing gain. -> Coordinate (plan, R2/R5 dispatch, R6 review/acceptance, docs, non-delegable or disjoint parallel modules); never edit an active child's Boundary.
|
|
95
|
+
- [Media generation] Generate/revise/retry images directly; delegate complex creative work, never a bare call.
|
|
95
96
|
|
|
96
97
|
## R2 · Model Routing (Check Availability First, Then Decide How to Dispatch)
|
|
97
98
|
Check whether list_subagent_models exists (in PTC mode: tools.list_subagent_models). The tool row and provider/model/reasoning_effort parameters are mounted statically, so they are present even in a session that authorized no route at all. Read that fact instead of inferring it from the tool's output:
|
|
@@ -421,15 +422,15 @@
|
|
|
421
422
|
|
|
422
423
|
# ── presentation ────────────────────────────────────────────────────────────
|
|
423
424
|
|
|
424
|
-
#
|
|
425
|
-
#
|
|
426
|
-
#
|
|
427
|
-
#
|
|
428
|
-
#
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
425
|
+
# Code Mode for this agent alone: the rows above stay natively callable, and
|
|
426
|
+
# everything this preset does not own (MCP servers, profile-level plugins,
|
|
427
|
+
# per-agent tool sets) is reachable only from inside `code_run`. The row brings
|
|
428
|
+
# its own executor, so no `tool-executor-ptc` row is mounted beside it — one
|
|
429
|
+
# executor per scope. resolveDispatchPreset swaps this row back to the PTC
|
|
430
|
+
# executor (or the deprecated presentation row) on generations without
|
|
431
|
+
# @deepseek-ai/dsh-tool-executor-native.
|
|
432
|
+
- id: code-mode
|
|
433
|
+
name: '@eddyskywalker/dsh-chatgpt-subscription/codemode'
|
|
433
434
|
|
|
434
435
|
# `present` ships from harness 0.1.5-alpha.2. On an earlier installation the
|
|
435
436
|
# sync disables this row rather than leave the whole preset unresolvable, and
|