@eddyskywalker/dsh-chatgpt-subscription 0.50.0 → 0.51.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 +18 -0
- package/lib/client.js +43 -0
- package/lib/client.js.map +1 -1
- package/lib/{entry-progress-updates-CkGJr_fe.js → entry-progress-updates-BEkdyDZU.js} +152 -8
- package/lib/index.js +4782 -1794
- package/lib/progress-updates.js +1 -1
- package/lib/types/client/locales-ru/progress-updates.d.ts.map +1 -1
- package/lib/types/client/progress-updates/locales.d.ts +8 -2
- package/lib/types/client/progress-updates/locales.d.ts.map +1 -1
- package/lib/types/client/progress-updates/settings-binding.d.ts +9 -1
- package/lib/types/client/progress-updates/settings-binding.d.ts.map +1 -1
- package/lib/types/client/progress-updates/settings-section.d.ts.map +1 -1
- package/lib/types/compat.d.ts +1 -1
- package/lib/types/host/agent-preset.d.ts.map +1 -1
- package/lib/types/host/dispatch-execution-guard.d.ts +151 -0
- package/lib/types/host/dispatch-execution-guard.d.ts.map +1 -0
- package/lib/types/host/dispatch-ledger/binding.d.ts +118 -0
- package/lib/types/host/dispatch-ledger/binding.d.ts.map +1 -0
- package/lib/types/host/dispatch-ledger/guard.d.ts +271 -0
- package/lib/types/host/dispatch-ledger/guard.d.ts.map +1 -0
- package/lib/types/host/dispatch-ledger/header.d.ts +169 -0
- package/lib/types/host/dispatch-ledger/header.d.ts.map +1 -0
- package/lib/types/host/dispatch-ledger/index.d.ts +56 -0
- package/lib/types/host/dispatch-ledger/index.d.ts.map +1 -0
- package/lib/types/host/dispatch-ledger/ledger.d.ts +531 -0
- package/lib/types/host/dispatch-ledger/ledger.d.ts.map +1 -0
- package/lib/types/host/dispatch-ledger/policy.d.ts +99 -0
- package/lib/types/host/dispatch-ledger/policy.d.ts.map +1 -0
- package/lib/types/host/dispatch-ledger/protocol.d.ts +25 -0
- package/lib/types/host/dispatch-ledger/protocol.d.ts.map +1 -0
- package/lib/types/host/dispatch-ledger/tool.d.ts +151 -0
- package/lib/types/host/dispatch-ledger/tool.d.ts.map +1 -0
- package/lib/types/host/progress-updates/index.d.ts.map +1 -1
- package/lib/types/host/progress-updates/prompt.d.ts +86 -21
- package/lib/types/host/progress-updates/prompt.d.ts.map +1 -1
- package/lib/types/host/ptc-sdk-cache-guard.d.ts +12 -2
- package/lib/types/host/ptc-sdk-cache-guard.d.ts.map +1 -1
- package/lib/types/host/qoder/adapter.d.ts +13 -2
- package/lib/types/host/qoder/adapter.d.ts.map +1 -1
- package/lib/types/host/qoder/mapper.d.ts +27 -11
- package/lib/types/host/qoder/mapper.d.ts.map +1 -1
- package/lib/types/index.d.ts +15 -0
- package/lib/types/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/presets/dispatch/README.md +51 -9
- package/presets/dispatch/agent.cordis.yml +68 -122
|
@@ -249,6 +249,16 @@ function stringOf$1(value) {
|
|
|
249
249
|
* 同一套措辞。用户看到的语言由 {@link progressLanguageDirective} 单独钉住——
|
|
250
250
|
* 「指令用英文」与「输出用中文」是两件事,不要混在一起。
|
|
251
251
|
*
|
|
252
|
+
* ## 分节恒定,语言覆盖走尾部消息
|
|
253
|
+
*
|
|
254
|
+
* 这一段分节属于**缓存前缀的第一段**:会话中途改一个字,harness 就会就地替换
|
|
255
|
+
* 最早那条 system 消息,整段前缀作废——在按内容前缀计费的线路上(Kimi Code),
|
|
256
|
+
* 一次改写就是一次全价重建。所以:
|
|
257
|
+
*
|
|
258
|
+
* - 分节文本**恒为通用档位**(跟随用户语言),与任何设置无关,逐字节不变;
|
|
259
|
+
* - zh/en 的固定语言要求、以及切回 auto 的撤销,都由 {@link resolveLanguageNotice}
|
|
260
|
+
* 判定成一条**尾部用户消息**投递:末尾追加不改已发前缀。
|
|
261
|
+
*
|
|
252
262
|
* @module dsh-chatgpt-subscription/host/progress-updates/prompt
|
|
253
263
|
*/
|
|
254
264
|
/**
|
|
@@ -315,16 +325,104 @@ function progressLanguageDirective(language) {
|
|
|
315
325
|
return PROGRESS_LANGUAGE_DIRECTIVES[language] ?? PROGRESS_LANGUAGE_DIRECTIVES.auto;
|
|
316
326
|
}
|
|
317
327
|
/**
|
|
328
|
+
* 系统提示词分节里**恒定**的那条语言指令。
|
|
329
|
+
*
|
|
330
|
+
* 分节文本属于缓存前缀的第一段:会话中途改一个字,harness 就会就地替换最早那条
|
|
331
|
+
* system 消息,整段前缀作废(Kimi Code 按内容前缀命中,一次改写就是一次全价
|
|
332
|
+
* 重建)。所以分节里只放**跟随用户语言**这一条通用指令——它与设置无关,逐字节
|
|
333
|
+
* 恒定。zh/en 的固定语言要求改由**尾部消息**投递(见
|
|
334
|
+
* {@link languageOverrideNoticeText}):末尾追加不改已发前缀。
|
|
335
|
+
*/
|
|
336
|
+
const FIXED_LANGUAGE_DIRECTIVE = PROGRESS_LANGUAGE_DIRECTIVES.auto;
|
|
337
|
+
/**
|
|
318
338
|
* 生成提示词分节的文本提供者。
|
|
319
339
|
*
|
|
320
|
-
*
|
|
321
|
-
*
|
|
322
|
-
*
|
|
323
|
-
* @
|
|
324
|
-
|
|
340
|
+
* **不接受任何开关或语言参数**:分节文本必须在整个会话里逐字节恒定。开关的语义
|
|
341
|
+
* 只留给工具自己(关闭时 `execute` 直接返回 `displayed:false`);语言档位
|
|
342
|
+
* (zh/en)走尾部消息,不进分节。
|
|
343
|
+
* @returns 引导词加通用语言指令。
|
|
344
|
+
*/
|
|
345
|
+
function progressSectionText() {
|
|
346
|
+
return () => PROGRESS_GUIDANCE + "\n\n" + FIXED_LANGUAGE_DIRECTIVE;
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* 语言覆盖通知的消息来源 kind。
|
|
350
|
+
*
|
|
351
|
+
* 与本插件其它注入的用户消息同形(`plan-mode-notice` / `progress-updates-nudge`),
|
|
352
|
+
* 便于客户端与日志把「这是一条通知」与「这是一条真人输入」分开。
|
|
353
|
+
*/
|
|
354
|
+
const LANGUAGE_NOTICE_SOURCE_KIND = "progress-updates-language";
|
|
355
|
+
/**
|
|
356
|
+
* 「固定语言」覆盖通知的正文。
|
|
357
|
+
*
|
|
358
|
+
* 覆盖的是分节里那条通用指令(跟随用户语言),所以正文里明确写了「压过它」。
|
|
359
|
+
* @param language - 要覆盖成的语言档位(zh/en)。
|
|
360
|
+
* @returns 通知正文。
|
|
361
|
+
*/
|
|
362
|
+
function languageOverrideNoticeText(language) {
|
|
363
|
+
return "Progress update output language override: " + progressLanguageDirective(language) + " This overrides the default instruction to write progress updates in the language the user is writing in; it applies to every progress update from now on.";
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* 撤销覆盖、切回「跟随用户语言」的通知正文。
|
|
367
|
+
*
|
|
368
|
+
* 必须单独通知:模型还记得「一律用中文」,不撤销它就会一直用中文。
|
|
369
|
+
* @returns 通知正文。
|
|
325
370
|
*/
|
|
326
|
-
function
|
|
327
|
-
return (
|
|
371
|
+
function languageDefaultNoticeText() {
|
|
372
|
+
return "Progress update output language override ended: write the title and the message of every progress update in the language the user is writing in again (any earlier instruction to always use one fixed language no longer applies).";
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* 造一条语言通知消息。
|
|
376
|
+
*
|
|
377
|
+
* 用 DSH 自己的消息工厂而不是手写字面量:DSH 对每条被接纳的消息都校验 id 与
|
|
378
|
+
* source,手写字面量会在第一次被追加时同步抛错。
|
|
379
|
+
* @param text - 通知正文。
|
|
380
|
+
* @param summary - 通知摘要(写进消息来源,便于日志辨认)。
|
|
381
|
+
* @returns 用户角色的通知消息。
|
|
382
|
+
*/
|
|
383
|
+
function createLanguageNotice(text, summary) {
|
|
384
|
+
return createUserMessage({
|
|
385
|
+
content: [{
|
|
386
|
+
type: "text",
|
|
387
|
+
text
|
|
388
|
+
}],
|
|
389
|
+
source: {
|
|
390
|
+
kind: LANGUAGE_NOTICE_SOURCE_KIND,
|
|
391
|
+
form: "notice",
|
|
392
|
+
summary
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* 判定这一轮要不要追加一条语言通知。
|
|
398
|
+
*
|
|
399
|
+
* 规则只有一条:**模型当前知道的语言档位与设置里的不一致时才通知**。
|
|
400
|
+
*
|
|
401
|
+
* - 模型起始只知道分节里的通用档位(跟随用户语言),所以第一次设成 zh/en 时
|
|
402
|
+
* 通知一次;
|
|
403
|
+
* - 同一个档位重复设置不重复通知(每一步都重读设置,但只在**变化**时投递);
|
|
404
|
+
* - 切回 auto 也要通知:模型还记得「一律用中文」,不撤销它就会一直用中文。
|
|
405
|
+
*
|
|
406
|
+
* @param current - 设置里当前的语言档位。
|
|
407
|
+
* @param remembered - 模型已经知道的语言档位;undefined 表示只知道通用档位。
|
|
408
|
+
* @returns 通知与新的「已知档位」。
|
|
409
|
+
*/
|
|
410
|
+
function resolveLanguageNotice(current, remembered) {
|
|
411
|
+
if (current === (remembered ?? "auto")) return { remembered: current };
|
|
412
|
+
if (current === "auto") return {
|
|
413
|
+
notice: {
|
|
414
|
+
text: languageDefaultNoticeText(),
|
|
415
|
+
summary: "progress update language: auto"
|
|
416
|
+
},
|
|
417
|
+
remembered: "auto"
|
|
418
|
+
};
|
|
419
|
+
return {
|
|
420
|
+
notice: {
|
|
421
|
+
text: languageOverrideNoticeText(current),
|
|
422
|
+
summary: `progress update language: ${current}`
|
|
423
|
+
},
|
|
424
|
+
remembered: current
|
|
425
|
+
};
|
|
328
426
|
}
|
|
329
427
|
//#endregion
|
|
330
428
|
//#region src/host/progress-updates/projection.ts
|
|
@@ -658,6 +756,14 @@ function resolveProgressUpdatesSettings(config) {
|
|
|
658
756
|
language: language !== void 0 && PROGRESS_UPDATE_LANGUAGES.includes(language) ? language : "auto"
|
|
659
757
|
};
|
|
660
758
|
}
|
|
759
|
+
/**
|
|
760
|
+
* 判断一个值是不是普通对象。
|
|
761
|
+
* @param value - 任意值。
|
|
762
|
+
* @returns 是非 null 的对象时为 true。
|
|
763
|
+
*/
|
|
764
|
+
function isRecord(value) {
|
|
765
|
+
return typeof value === "object" && value !== null;
|
|
766
|
+
}
|
|
661
767
|
/** 血缘回溯的深度上限:与 `nudge.ts` 的 `counterSessionIdOf` 同一个数。 */
|
|
662
768
|
const LINEAGE_DEPTH_LIMIT = 16;
|
|
663
769
|
/**
|
|
@@ -913,9 +1019,46 @@ function installProgressUpdates(ctx, options) {
|
|
|
913
1019
|
return systemPrompt.section({
|
|
914
1020
|
name: PROGRESS_SECTION_NAME,
|
|
915
1021
|
order: 220,
|
|
916
|
-
text: progressSectionText(
|
|
1022
|
+
text: progressSectionText()
|
|
917
1023
|
});
|
|
918
1024
|
}, "dsh-chatgpt-subscription: progress update prompt section");
|
|
1025
|
+
/** 每个会话记住的「模型已经知道的语言档位」。 */
|
|
1026
|
+
const rememberedLanguages = /* @__PURE__ */ new WeakMap();
|
|
1027
|
+
/**
|
|
1028
|
+
* 取一个会话的桶键。
|
|
1029
|
+
* @param agent - pre-step 载荷里的 agent。
|
|
1030
|
+
* @returns 桶键;认不出会话时 undefined。
|
|
1031
|
+
*/
|
|
1032
|
+
const languageBucketOf = (agent) => {
|
|
1033
|
+
if (!isRecord(agent)) return void 0;
|
|
1034
|
+
const session = agent["session"];
|
|
1035
|
+
if (isRecord(session)) return session;
|
|
1036
|
+
return agent;
|
|
1037
|
+
};
|
|
1038
|
+
const disposePreStepListener = ctx.on?.("agent/pre-step", (async (payload, next) => {
|
|
1039
|
+
const decision = await next();
|
|
1040
|
+
try {
|
|
1041
|
+
if (decision === void 0 || decision.kind === "reject") return decision;
|
|
1042
|
+
if (payload?.signal?.aborted === true) return decision;
|
|
1043
|
+
const messages = Array.isArray(decision.messages) ? decision.messages : [];
|
|
1044
|
+
if (messages.length === 0) return decision;
|
|
1045
|
+
const bucket = languageBucketOf(payload?.agent);
|
|
1046
|
+
if (bucket === void 0) return decision;
|
|
1047
|
+
const outcome = resolveLanguageNotice(options.settings().language, rememberedLanguages.get(bucket));
|
|
1048
|
+
if (outcome.notice === void 0) {
|
|
1049
|
+
rememberedLanguages.set(bucket, outcome.remembered);
|
|
1050
|
+
return decision;
|
|
1051
|
+
}
|
|
1052
|
+
const notice = createLanguageNotice(outcome.notice.text, outcome.notice.summary);
|
|
1053
|
+
rememberedLanguages.set(bucket, outcome.remembered);
|
|
1054
|
+
return {
|
|
1055
|
+
...decision,
|
|
1056
|
+
messages: [...messages, notice]
|
|
1057
|
+
};
|
|
1058
|
+
} catch {
|
|
1059
|
+
return decision;
|
|
1060
|
+
}
|
|
1061
|
+
}));
|
|
919
1062
|
track(() => {
|
|
920
1063
|
const webServer = serviceOf("webServer");
|
|
921
1064
|
if (webServer === void 0) return () => void 0;
|
|
@@ -945,6 +1088,7 @@ function installProgressUpdates(ctx, options) {
|
|
|
945
1088
|
}));
|
|
946
1089
|
return () => {
|
|
947
1090
|
disposeListener?.();
|
|
1091
|
+
if (typeof disposePreStepListener === "function") disposePreStepListener();
|
|
948
1092
|
stores.clear();
|
|
949
1093
|
countedSteps.clear();
|
|
950
1094
|
release();
|