@eddyskywalker/dsh-chatgpt-subscription 0.56.0 → 0.57.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/lib/index.js CHANGED
@@ -807,7 +807,7 @@ const ROUTE_PREFIX$5 = "/api/dsh-chatgpt-subscription";
807
807
  * `test/responses-client.test.ts` asserts the two agree, so a release that
808
808
  * forgets this constant fails the suite instead of shipping quietly.
809
809
  */
810
- const PLUGIN_VERSION = "0.56.0";
810
+ const PLUGIN_VERSION = "0.57.0";
811
811
  const CODEX_CHATGPT_PROVIDER_ID = "codex-chatgpt";
812
812
  const CODEX_API_BASE = "https://chatgpt.com/backend-api/codex";
813
813
  const CODEX_RESPONSES_URL = `${CODEX_API_BASE}/responses`;
@@ -86900,7 +86900,7 @@ function installToolResultPrunerGuard(ctx, options = {}) {
86900
86900
  return next === void 0 ? void 0 : next();
86901
86901
  };
86902
86902
  for (const event of GUARDED_EVENTS$1) {
86903
- const disposer = subscribe$3(host, event, handleAgentEvent);
86903
+ const disposer = subscribe$4(host, event, handleAgentEvent);
86904
86904
  if (disposer !== void 0) disposers.push(disposer);
86905
86905
  }
86906
86906
  scanAndWrap();
@@ -86930,7 +86930,7 @@ function installToolResultPrunerGuard(ctx, options = {}) {
86930
86930
  * @param listener - 回调。
86931
86931
  * @returns 移除监听器的 disposer;宿主不支持事件时为 `undefined`。
86932
86932
  */
86933
- function subscribe$3(host, event, listener) {
86933
+ function subscribe$4(host, event, listener) {
86934
86934
  const on = host?.on;
86935
86935
  if (typeof on !== "function") return void 0;
86936
86936
  for (const options of [
@@ -87107,7 +87107,7 @@ function markPatched$3(patched, holder, name) {
87107
87107
  //#endregion
87108
87108
  //#region src/host/plan-mode-cache-guard.ts
87109
87109
  /** 没有 scope 的装配(会话标题之类)用的桶键。 */
87110
- const GLOBAL_KEY$1 = Object.freeze({});
87110
+ const GLOBAL_KEY$2 = Object.freeze({});
87111
87111
  /**
87112
87112
  * 读一个可选服务。
87113
87113
  * @param ctx - 宿主上下文。
@@ -87128,8 +87128,8 @@ function serviceOf$1(ctx, service) {
87128
87128
  * @param value - scope / agent。
87129
87129
  * @returns WeakMap 键。
87130
87130
  */
87131
- function bucketOf(value) {
87132
- return typeof value === "object" && value !== null ? value : GLOBAL_KEY$1;
87131
+ function bucketOf$1(value) {
87132
+ return typeof value === "object" && value !== null ? value : GLOBAL_KEY$2;
87133
87133
  }
87134
87134
  /**
87135
87135
  * 订阅一个事件。
@@ -87138,7 +87138,7 @@ function bucketOf(value) {
87138
87138
  * @param listener - 监听器。
87139
87139
  * @returns 解绑函数或 undefined。
87140
87140
  */
87141
- function subscribe$2(ctx, event, listener) {
87141
+ function subscribe$3(ctx, event, listener) {
87142
87142
  const on = ctx?.on;
87143
87143
  if (typeof on !== "function") return void 0;
87144
87144
  try {
@@ -87191,7 +87191,7 @@ function installPlanModeCacheGuard(ctx) {
87191
87191
  }
87192
87192
  kept.push(section);
87193
87193
  }
87194
- const state = stateOf(bucketOf(context?.scope ?? context?.agent));
87194
+ const state = stateOf(bucketOf$1(context?.scope ?? context?.agent));
87195
87195
  if (policy !== void 0) if (policy.trim() === "") {
87196
87196
  state.pending = void 0;
87197
87197
  state.delivered = false;
@@ -87210,7 +87210,7 @@ function installPlanModeCacheGuard(ctx) {
87210
87210
  if (decision === void 0 || decision.kind === "reject") return decision;
87211
87211
  if (payload?.signal?.aborted === true) return decision;
87212
87212
  const agent = payload?.agent;
87213
- const key = bucketOf(agent ?? void 0);
87213
+ const key = bucketOf$1(agent ?? void 0);
87214
87214
  const state = states.get(key);
87215
87215
  if (state === void 0) return decision;
87216
87216
  if (state.delivered) if (planActiveOf(ctx, agent?.session) === false) state.delivered = false;
@@ -87225,8 +87225,8 @@ function installPlanModeCacheGuard(ctx) {
87225
87225
  messages: [...messages, createPlanNotice(text, void 0, "Plan mode guidance")]
87226
87226
  };
87227
87227
  };
87228
- const offAssemble = subscribe$2(ctx, "system-prompt/assemble", onAssemble);
87229
- const offPreStep = subscribe$2(ctx, "agent/pre-step", onPreStep);
87228
+ const offAssemble = subscribe$3(ctx, "system-prompt/assemble", onAssemble);
87229
+ const offPreStep = subscribe$3(ctx, "agent/pre-step", onPreStep);
87230
87230
  if (offAssemble !== void 0) restores.push(() => {
87231
87231
  offAssemble();
87232
87232
  });
@@ -87255,7 +87255,7 @@ function installPlanModeCacheGuard(ctx) {
87255
87255
  restoreMethod$2(target);
87256
87256
  });
87257
87257
  if (typeof tools.get === "function") try {
87258
- if (tools.get("exit_plan_mode") !== void 0) logWarn(ctx, "[dsh-chatgpt-subscription] plan-mode cache guard was installed after exit_plan_mode was already registered; this session keeps the conditional admission");
87258
+ if (tools.get("exit_plan_mode") !== void 0) logWarn$1(ctx, "[dsh-chatgpt-subscription] plan-mode cache guard was installed after exit_plan_mode was already registered; this session keeps the conditional admission");
87259
87259
  } catch {}
87260
87260
  };
87261
87261
  const tools = serviceOf$1(ctx, "tools");
@@ -87302,7 +87302,7 @@ function planActiveOf(ctx, session) {
87302
87302
  * @param ctx - 宿主上下文。
87303
87303
  * @param message - 正文。
87304
87304
  */
87305
- function logWarn(ctx, message) {
87305
+ function logWarn$1(ctx, message) {
87306
87306
  const logger = ctx?.logger;
87307
87307
  try {
87308
87308
  logger?.warn(message);
@@ -87415,7 +87415,7 @@ const DEFAULT_PTC_SDK_CACHE_PROVIDERS = Object.freeze(["kimi-code", "minimax-cod
87415
87415
  /** PTC 生成的 SDK 段名。 */
87416
87416
  const PTC_SDK_SECTION_NAME = "tools:sdk";
87417
87417
  /** 没有 scope 的装配(会话标题之类)用的桶键。 */
87418
- const GLOBAL_KEY = Object.freeze({});
87418
+ const GLOBAL_KEY$1 = Object.freeze({});
87419
87419
  /**
87420
87420
  * 读一个装配 scope 的 provider。
87421
87421
  *
@@ -87509,7 +87509,7 @@ function installPtcSdkCacheGuard(ctx, options = {}) {
87509
87509
  * @param scope - 装配 scope。
87510
87510
  * @returns WeakMap 键。
87511
87511
  */
87512
- const bucketOf = (scope) => typeof scope === "object" && scope !== null ? scope : GLOBAL_KEY;
87512
+ const bucketOf = (scope) => typeof scope === "object" && scope !== null ? scope : GLOBAL_KEY$1;
87513
87513
  /**
87514
87514
  * 算未过滤工具集的名字指纹。
87515
87515
  *
@@ -87599,7 +87599,7 @@ function installPtcSdkCacheGuard(ctx, options = {}) {
87599
87599
  });
87600
87600
  return result;
87601
87601
  };
87602
- const offAssemble = subscribe$1(host, "system-prompt/assemble", onAssemble);
87602
+ const offAssemble = subscribe$2(host, "system-prompt/assemble", onAssemble);
87603
87603
  if (offAssemble !== void 0) disposers.push(offAssemble);
87604
87604
  const initialTools = serviceOf(host, "tools");
87605
87605
  if (initialTools !== void 0) {
@@ -87656,7 +87656,7 @@ function serviceOf(ctx, service) {
87656
87656
  * @param listener - 回调。
87657
87657
  * @returns 移除监听器的 disposer;宿主不支持事件时为 `undefined`。
87658
87658
  */
87659
- function subscribe$1(host, event, listener) {
87659
+ function subscribe$2(host, event, listener) {
87660
87660
  const on = host?.["on"];
87661
87661
  if (typeof on !== "function") return void 0;
87662
87662
  for (const options of [
@@ -87787,6 +87787,233 @@ function markPatched$1(patched, holder, name) {
87787
87787
  else names.add(name);
87788
87788
  }
87789
87789
  //#endregion
87790
+ //#region src/host/team-policy-cache-guard.ts
87791
+ /**
87792
+ * 「Agent Teams 策略段前缀缓存守卫」—— 把内置 `team:policy` 段从 system 里摘掉,
87793
+ * 改为切开关时**尾部投递**一次。
87794
+ *
87795
+ * ## 为什么需要它
87796
+ *
87797
+ * 内置 `@deepseek-ai/dsh-tool-agent-team` 注册一个段 `team:policy`,正文是
87798
+ * `enabled(agent) ? TEAM_POLICY : ''`:团队开关一开,system prompt 里凭空多出整段
87799
+ * 指引,从那里起的前缀全部作废。这与计划模式当初那处重建同构,本仓库已经用
87800
+ * 「摘段 + 尾部投递」把它压平过(见 `plan-mode-cache-guard.ts`),这里复用同一套
87801
+ * 做法,只是触发器从 `enter_plan_mode` 换成客户端远程调用 `agentTeams.setEnabled`
87802
+ * ——那一步只往会话里追加 `team/mode` 事件,段正文在**装配时**才翻面,所以守卫只要
87803
+ * 盯着装配结果就够,不需要订阅任何 team 服务。
87804
+ *
87805
+ * ## 三条动作
87806
+ *
87807
+ * 1. `system-prompt/assemble` 瀑布:把 `team:policy` 段从呈现里摘掉,并记下它的
87808
+ * 正文。system 段从此在开关前后逐字节恒定。
87809
+ * 2. `agent/pre-step`:把记下的正文作为**尾部用户消息**投一次(每次激活一次)。
87810
+ * 末尾追加不改变已发前缀,指引没有丢,只是从最前面的 system 段搬到了末尾。
87811
+ * 3. 段正文回到空串 = 本次激活结束:复位投递状态,并在下一步投一条**撤销**通知,
87812
+ * 免得历史里那句「这里有一块共享任务板」在关闭后继续误导模型。
87813
+ *
87814
+ * ## 抓的是官方原文,不是抄的副本
87815
+ *
87816
+ * 投递的正文永远是装配时从官方段里捕获到的那一份,不落任何本包的副本。harness 改
87817
+ * 措辞(它已经改过三次)不会让这里过期。代价是它依赖段名 `team:policy`:启用后
87818
+ * 若从未观察到该段,守卫记一条 warn 点名,而不是安静地什么都不做。
87819
+ *
87820
+ * ## 默认开启
87821
+ *
87822
+ * 会话中途切开关才会付一次重建;开会话时就是目标状态则本来就零成本。守卫本身不
87823
+ * 增加任何工具声明面,所以默认开着没有代价,由 `teamPolicyCacheGuard` 关闭,
87824
+ * 每次装配/每步重读活引用。
87825
+ *
87826
+ * @module @eddyskywalker/dsh-chatgpt-subscription/host/team-policy-cache-guard
87827
+ */
87828
+ /** 官方 Agent Teams 的指引段名。 */
87829
+ const TEAM_POLICY_SECTION = "team:policy";
87830
+ /** 尾部撤销通知的来源 kind(本包自有,见下方 MessageSourceMap 增补)。 */
87831
+ const TEAM_BOARD_NOTICE_SOURCE_KIND = "team-board-notice";
87832
+ /** 开关关掉时补投的那句话。 */
87833
+ const BOARD_OFF_NOTICE = "The shared team task board was turned off. Ignore earlier guidance describing an available board and coordinate through list_agents and send_message.";
87834
+ /**
87835
+ * 从插件配置里读开关。
87836
+ * @param config - 插件配置(结构化:只读一个键)。
87837
+ * @returns 是否启用本守卫;未声明时按开启处理(宿主 schema 的默认值)。
87838
+ */
87839
+ function resolveTeamPolicyCacheGuardEnabled(config) {
87840
+ return config?.teamPolicyCacheGuard !== false;
87841
+ }
87842
+ /** 没有 scope 的装配(会话标题之类)用的桶键。 */
87843
+ const GLOBAL_KEY = Object.freeze({});
87844
+ /**
87845
+ * 桶键:agent 对象本身,或全局桶。
87846
+ * @param value - scope / agent。
87847
+ * @returns WeakMap 键。
87848
+ */
87849
+ function bucketOf(value) {
87850
+ return typeof value === "object" && value !== null ? value : GLOBAL_KEY;
87851
+ }
87852
+ /**
87853
+ * 订阅一个事件。
87854
+ * @param ctx - 宿主上下文。
87855
+ * @param event - 事件名。
87856
+ * @param listener - 监听器。
87857
+ * @returns 解绑函数或 undefined。
87858
+ */
87859
+ function subscribe$1(ctx, event, listener) {
87860
+ const on = ctx?.on;
87861
+ if (typeof on !== "function") return void 0;
87862
+ try {
87863
+ return on.call(ctx, event, listener);
87864
+ } catch {
87865
+ return;
87866
+ }
87867
+ }
87868
+ /**
87869
+ * 记一条警告。
87870
+ * @param ctx - 宿主上下文。
87871
+ * @param message - 正文。
87872
+ */
87873
+ function logWarn(ctx, message) {
87874
+ try {
87875
+ ctx?.logger?.warn(message);
87876
+ } catch {}
87877
+ }
87878
+ /**
87879
+ * 造一条尾部通知消息。
87880
+ * @param text - 正文。
87881
+ * @param summary - 卡片上显示的一句摘要。
87882
+ * @returns 用户角色的通知消息。
87883
+ */
87884
+ function createBoardNotice(text, summary) {
87885
+ return createUserMessage({
87886
+ content: [{
87887
+ type: "text",
87888
+ text
87889
+ }],
87890
+ source: {
87891
+ kind: TEAM_BOARD_NOTICE_SOURCE_KIND,
87892
+ form: "notice",
87893
+ summary
87894
+ }
87895
+ });
87896
+ }
87897
+ /**
87898
+ * 装一台「Agent Teams 策略段缓存守卫」。
87899
+ *
87900
+ * 幂等性留给调用方:同一个 ctx 装两次会得到两条监听器,宿主入口应当只装一次。
87901
+ * @param ctx - 宿主上下文(结构化:老代 ctx 也认)。
87902
+ * @param options - 开关读取器。
87903
+ * @returns 句柄,dispose 摘掉全部挂载。
87904
+ */
87905
+ function installTeamPolicyCacheGuard(ctx, options = {}) {
87906
+ const states = /* @__PURE__ */ new WeakMap();
87907
+ const stats = {
87908
+ seen: false,
87909
+ warned: false
87910
+ };
87911
+ const restores = [];
87912
+ let closed = false;
87913
+ const enabled = () => {
87914
+ try {
87915
+ return options.enabled?.() === true;
87916
+ } catch {
87917
+ return false;
87918
+ }
87919
+ };
87920
+ const stateOf = (key) => {
87921
+ let state = states.get(key);
87922
+ if (state === void 0) {
87923
+ state = {
87924
+ policy: "",
87925
+ pending: void 0,
87926
+ delivered: false,
87927
+ revoked: false
87928
+ };
87929
+ states.set(key, state);
87930
+ }
87931
+ return state;
87932
+ };
87933
+ const onAssemble = async (_assembly, context, next) => {
87934
+ const result = await next();
87935
+ if (closed || !enabled()) return result;
87936
+ const sections = Array.isArray(result?.sections) ? result.sections : void 0;
87937
+ if (sections === void 0) return result;
87938
+ const kept = [];
87939
+ let policy;
87940
+ for (const section of sections) {
87941
+ if (section?.name === "team:policy") {
87942
+ stats.seen = true;
87943
+ policy = typeof section.text === "string" ? section.text : "";
87944
+ continue;
87945
+ }
87946
+ kept.push(section);
87947
+ }
87948
+ if (policy === void 0) {
87949
+ if (!stats.seen && !stats.warned) {
87950
+ stats.warned = true;
87951
+ logWarn(ctx, `[dsh-chatgpt-subscription] team policy cache guard is enabled but no "${TEAM_POLICY_SECTION}" section has appeared; the guard is inert on this deployment`);
87952
+ }
87953
+ return result;
87954
+ }
87955
+ const state = stateOf(bucketOf(context?.scope ?? context?.agent));
87956
+ if (policy.trim() === "") {
87957
+ if (state.delivered) state.revoked = true;
87958
+ state.delivered = false;
87959
+ state.pending = void 0;
87960
+ } else {
87961
+ state.policy = policy;
87962
+ state.revoked = false;
87963
+ if (!state.delivered) state.pending = policy;
87964
+ }
87965
+ if (kept.length === sections.length) return result;
87966
+ return {
87967
+ ...result,
87968
+ sections: kept
87969
+ };
87970
+ };
87971
+ const onPreStep = async (payload, next) => {
87972
+ const decision = await next();
87973
+ if (closed || decision === void 0 || decision.kind === "reject") return decision;
87974
+ if (payload?.signal?.aborted === true) return decision;
87975
+ if (!enabled()) return decision;
87976
+ const state = states.get(bucketOf(payload?.agent ?? void 0));
87977
+ if (state === void 0) return decision;
87978
+ const messages = Array.isArray(decision.messages) ? decision.messages : [];
87979
+ if (!state.delivered) {
87980
+ const text = state.pending;
87981
+ if (text !== void 0) {
87982
+ state.pending = void 0;
87983
+ state.delivered = true;
87984
+ state.revoked = false;
87985
+ return {
87986
+ ...decision,
87987
+ messages: [...messages, createBoardNotice(text, "Team board guidance")]
87988
+ };
87989
+ }
87990
+ }
87991
+ if (state.revoked) {
87992
+ state.revoked = false;
87993
+ return {
87994
+ ...decision,
87995
+ messages: [...messages, createBoardNotice(BOARD_OFF_NOTICE, "Team board off")]
87996
+ };
87997
+ }
87998
+ return decision;
87999
+ };
88000
+ const offAssemble = subscribe$1(ctx, "system-prompt/assemble", onAssemble);
88001
+ const offPreStep = subscribe$1(ctx, "agent/pre-step", onPreStep);
88002
+ if (offAssemble !== void 0) restores.push(() => {
88003
+ offAssemble();
88004
+ });
88005
+ if (offPreStep !== void 0) restores.push(() => {
88006
+ offPreStep();
88007
+ });
88008
+ return { dispose() {
88009
+ if (closed) return;
88010
+ closed = true;
88011
+ for (const restore of restores.splice(0)) try {
88012
+ restore();
88013
+ } catch {}
88014
+ } };
88015
+ }
88016
+ //#endregion
87790
88017
  //#region src/host/compaction-policy-guard.ts
87791
88018
  /**
87792
88019
  * 「压缩策略守卫」——把 `compaction-basic` 的预算换成 Kimi Code 的口径,
@@ -92150,13 +92377,13 @@ const DISPATCH_PRESET = {
92150
92377
  [Execution Pipeline] R0.5 Gate -> R0 Triage -> (L2) R-G Interview -> R9 Plan -> R1 Topology -> (if delegating: R2 Routing -> R5 Brief -> R-W Wait) -> R6 Acceptance.
92151
92378
 
92152
92379
  ## R0.5 · Compatibility Gate (Once per New Session, Before R0)
92153
- Dispatch Mode is **incompatible** with Agent Teams and deliberately provides no fallback path: Agent Teams replaces send_message, list_agents, and interrupt_agent with team-scoped registrations, leaving spawned subagents invisible and unreachable.
92154
- Criterion: whether spawn_teammate and wait_agent exist (in PTC mode: tools.spawn_teammate / tools.wait_agent).
92155
- - Neither exists -> Write one line "Orchestration ready: subagent" and proceed to R0.
92156
- - Either exists -> This session is **not orchestratable**. Do these three things in order, and nothing else:
92157
- 1. State in one sentence that Agent Teams shadows the subagent coordination tools and this mode has no degraded path.
92158
- 2. Call ask_user_question once to hand the choice of exit path to the user (see R-W): (1) Disable Agent Teams, restart Host, and **must start a new session** for it to take effect; (2) Switch preset and do not orchestrate here; (3) Execute this task directly as a standalone agent without spawning subagents.
92159
- 3. **Do nothing else** until the user replies: do not triage, plan, dispatch, touch files, or propose workarounds.
92380
+ A legacy Agent Teams runtime (pre-#7519) registers spawn_teammate and replaces send_message / list_agents / interrupt_agent with team-scoped variants, leaving spawned subagents unreachable. The current runtime only adds a shared task board (team_task_create and its list/get/update siblings) and reuses this mode's tools.
92381
+ Criterion: whether spawn_teammate exists (PTC: tools.spawn_teammate). Never gate on wait_agent, send_message, list_agents, or interrupt_agent: this mode mounts those itself.
92382
+ - Absent -> Write "Orchestration ready: subagent" and proceed to R0. The board tools stay visible in the PTC SDK whether or not the board is on - frozen declaration, not availability - so confirm with team_task_list before relying on it. When the board is on it is bookkeeping, not a second dispatcher: the dispatch ledger stays the dispatch authority and R5 briefs stay the task contract; publish cross-agent dependencies (blocked_by) and write scopes on one team task per brief, claimed and completed by the child that owns it; never start work because a task is ready, and never reassign a task to skip R6.
92383
+ - Present -> This session runs the legacy runtime and is **not orchestratable**. In order, and nothing else:
92384
+ 1. State in one sentence that the legacy runtime shadows the coordination tools and this mode has no degraded path.
92385
+ 2. Call ask_user_question once (see R-W) offering: disable the legacy runtime, restart Host, **start a new session**; switch preset; or execute this task directly.
92386
+ 3. **Do nothing else** until the user replies: no triage, plan, dispatch, file edits, or workarounds.
92160
92387
 
92161
92388
  ## R0 · Complexity Triage (Triage First, Then Choose the Workflow)
92162
92389
  Upon receiving a task, determine its tier by semantic impact and uncertainty first, write one line stating "Tier + Rationale", and run the matching workflow:
@@ -92226,7 +92453,7 @@ Fallback is a task-scoped, non-session-wide exception for delegated briefs: it c
92226
92453
 
92227
92454
  ## Anti-Patterns (Any Occurrence Is a Violation)
92228
92455
  1. Orchestrating or opening Plan Mode for an L0/L1 task, or before the R-G interview has converged (21. Entering Plan Mode for an L0/L1 task, or before the R-G interview has converged; 22. Using leave_plan_mode to bypass exit_plan_mode approval).
92229
- 2. Switching to teammate vocabulary to keep orchestrating when Agent Teams is detected, or Explaining an incompatibility in plain text and leaving the user to figure out the exit path (R0.5).
92456
+ 2. Switching to teammate vocabulary to keep orchestrating under the legacy team runtime, or Treating the team task board as a substitute for R1 topology, R2 routing, R5 briefs, R6 acceptance, or R-W waiting (R0.5).
92230
92457
  3. Omitting provider/model under [State: Listed], Second-guessing list_subagent_models output by hunting through local config or source files just to check which subagent models are allowed, or Reporting a route as "authorized", or claiming per-task routing is in force, when the session recorded no allowlist (R2).
92231
92458
  4. Writing a task brief with a range where a cap belongs ("2–5 files", "a few attempts"), or Asking a subagent to restate its rules as a correctness check (R0, R5).
92232
92459
  5. Running sleep, polling loops, or placeholder long commands to wait, Proactively creating a goal at the start of a task, or Ending with a paragraph of prose to wait for user sign-off instead of calling ask_user_question (R-W).
@@ -103039,6 +103266,7 @@ const Config = z$1.object({
103039
103266
  ]).default("auto").volatile().description("进展更新的输出语言:auto 跟随对话语言,zh 中文,en 英文。"),
103040
103267
  planModePipeline: z$1.boolean().default(true).volatile().description("启用计划模式管线:允许调度模式在澄清访谈收敛后用 enter_plan_mode 进入计划模式,放弃规划时用 leave_plan_mode 退出。"),
103041
103268
  dispatchExecutionGuard: z$1.boolean().default(true).volatile().description("启用调度执行守卫:在执行期拦截子代理越权调用主控专用工具,并拦截等待子代理期间的纯 sleep 空等命令;不修改工具声明面,零损耗保护 Kimi 缓存。"),
103269
+ teamPolicyCacheGuard: z$1.boolean().default(true).volatile().description("把内置 Agent Teams 的 team:policy 段从 system prompt 摘掉,改为开关切换时以尾部用户消息投递一次,避免中途开团队协作时刷掉整段前缀缓存;默认开启。"),
103042
103270
  cacheWarmup: z$1.boolean().default(true).volatile().description(CACHE_WARMUP_SETTING_DESCRIPTION),
103043
103271
  cacheWarmupRetrieval: z$1.boolean().default(true).volatile().description(CACHE_WARMUP_RETRIEVAL_SETTING_DESCRIPTION),
103044
103272
  cacheWaitWarmup: z$1.boolean().default(true).volatile().description(CACHE_WAIT_WARMUP_SETTING_DESCRIPTION),
@@ -103107,6 +103335,10 @@ function apply(ctx, pluginConfig = {}) {
103107
103335
  const guard = installPtcSdkCacheGuard(ctx);
103108
103336
  return () => guard.dispose();
103109
103337
  }, "dsh-chatgpt-subscription: PTC SDK cache guard");
103338
+ ctx.effect(() => {
103339
+ const guard = installTeamPolicyCacheGuard(ctx, { enabled: () => resolveTeamPolicyCacheGuardEnabled(pluginConfig) });
103340
+ return () => guard.dispose();
103341
+ }, "dsh-chatgpt-subscription: team policy cache guard");
103110
103342
  ctx.effect(() => {
103111
103343
  const guard = installCompactionPolicyGuard(ctx);
103112
103344
  return () => guard.dispose();
@@ -1 +1 @@
1
- {"version":3,"file":"progress-updates.d.ts","sourceRoot":"","sources":["../../../../src/client/locales-ru/progress-updates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AAE9E,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,wBAAwB,EAAE,MAAM,CA6C/D,CAAA"}
1
+ {"version":3,"file":"progress-updates.d.ts","sourceRoot":"","sources":["../../../../src/client/locales-ru/progress-updates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AAE9E,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,wBAAwB,EAAE,MAAM,CA+C/D,CAAA"}
@@ -48,6 +48,8 @@ export declare const zh: {
48
48
  readonly settingsPlanModePipelineNote: "澄清访谈收敛后自动进入计划模式出计划,再交审批(仅调度模式生效);关闭后该模式会请用户手动输入 /plan";
49
49
  readonly settingsDispatchExecutionGuardName: "调度执行守卫";
50
50
  readonly settingsDispatchExecutionGuardNote: "执行期拦截子代理越权调用主控工具及等待子代理时的纯 sleep 空等;不改工具声明面,零损耗保护 Kimi 缓存";
51
+ readonly settingsTeamPolicyCacheGuardName: "智能体团队策略段";
52
+ readonly settingsTeamPolicyCacheGuardNote: "把内置 Agent Teams 的策略段从系统提示词摘掉,改为开启团队协作时以尾部消息投递一次;会话中途切开关不再刷掉整段前缀缓存(默认开启)";
51
53
  readonly settingsThresholdName: "催促阈值";
52
54
  readonly settingsThresholdNote: "连续这么多轮没有进展时,提醒 agent 汇报一次";
53
55
  readonly settingsLanguageName: "输出语言";
@@ -100,6 +102,8 @@ export declare const dictionaries: {
100
102
  readonly settingsPlanModePipelineNote: "澄清访谈收敛后自动进入计划模式出计划,再交审批(仅调度模式生效);关闭后该模式会请用户手动输入 /plan";
101
103
  readonly settingsDispatchExecutionGuardName: "调度执行守卫";
102
104
  readonly settingsDispatchExecutionGuardNote: "执行期拦截子代理越权调用主控工具及等待子代理时的纯 sleep 空等;不改工具声明面,零损耗保护 Kimi 缓存";
105
+ readonly settingsTeamPolicyCacheGuardName: "智能体团队策略段";
106
+ readonly settingsTeamPolicyCacheGuardNote: "把内置 Agent Teams 的策略段从系统提示词摘掉,改为开启团队协作时以尾部消息投递一次;会话中途切开关不再刷掉整段前缀缓存(默认开启)";
103
107
  readonly settingsThresholdName: "催促阈值";
104
108
  readonly settingsThresholdNote: "连续这么多轮没有进展时,提醒 agent 汇报一次";
105
109
  readonly settingsLanguageName: "输出语言";
@@ -148,6 +152,8 @@ export declare const dictionaries: {
148
152
  readonly settingsPlanModePipelineNote: "澄清访谈收敛后自动进入计划模式出计划,再交审批(仅调度模式生效);关闭后该模式会请用户手动输入 /plan";
149
153
  readonly settingsDispatchExecutionGuardName: "调度执行守卫";
150
154
  readonly settingsDispatchExecutionGuardNote: "执行期拦截子代理越权调用主控工具及等待子代理时的纯 sleep 空等;不改工具声明面,零损耗保护 Kimi 缓存";
155
+ readonly settingsTeamPolicyCacheGuardName: "智能体团队策略段";
156
+ readonly settingsTeamPolicyCacheGuardNote: "把内置 Agent Teams 的策略段从系统提示词摘掉,改为开启团队协作时以尾部消息投递一次;会话中途切开关不再刷掉整段前缀缓存(默认开启)";
151
157
  readonly settingsThresholdName: "催促阈值";
152
158
  readonly settingsThresholdNote: "连续这么多轮没有进展时,提醒 agent 汇报一次";
153
159
  readonly settingsLanguageName: "输出语言";
@@ -161,8 +167,8 @@ export declare const dictionaries: {
161
167
  readonly settingsUnavailable: "这项设置当前不可修改(宿主没有开放配置表单)";
162
168
  readonly settingsSaveFailed: "保存失败,请稍后再试";
163
169
  };
164
- en: Record<"navTitle" | "progressTitle" | "progressGuideNote" | "markdownCopy" | "markdownCopied" | "markdownFootnotes" | "progressLatest" | "progressCount" | "progressExpand" | "progressCollapse" | "progressEmptyTitle" | "progressEmptyHint" | "rowPending" | "rowRunning" | "rowDone" | "rowError" | "rowExpand" | "rowCollapse" | "settingsHint" | "settingsOpen" | "settingsEnabledName" | "settingsEnabledNote" | "settingsCacheWarmupName" | "settingsCacheWarmupNote" | "settingsRetrievalName" | "settingsRetrievalNote" | "settingsCacheWaitWarmupName" | "settingsCacheWaitWarmupNote" | "settingsPlanModePipelineName" | "settingsPlanModePipelineNote" | "settingsDispatchExecutionGuardName" | "settingsDispatchExecutionGuardNote" | "settingsThresholdName" | "settingsThresholdNote" | "settingsLanguageName" | "settingsLanguageNote" | "settingsLanguageAuto" | "settingsLanguageZh" | "settingsLanguageEn" | "settingsLanguageRu" | "settingsPanelName" | "settingsPanelNote" | "settingsUnavailable" | "settingsSaveFailed", string>;
165
- 'en-US': Record<"navTitle" | "progressTitle" | "progressGuideNote" | "markdownCopy" | "markdownCopied" | "markdownFootnotes" | "progressLatest" | "progressCount" | "progressExpand" | "progressCollapse" | "progressEmptyTitle" | "progressEmptyHint" | "rowPending" | "rowRunning" | "rowDone" | "rowError" | "rowExpand" | "rowCollapse" | "settingsHint" | "settingsOpen" | "settingsEnabledName" | "settingsEnabledNote" | "settingsCacheWarmupName" | "settingsCacheWarmupNote" | "settingsRetrievalName" | "settingsRetrievalNote" | "settingsCacheWaitWarmupName" | "settingsCacheWaitWarmupNote" | "settingsPlanModePipelineName" | "settingsPlanModePipelineNote" | "settingsDispatchExecutionGuardName" | "settingsDispatchExecutionGuardNote" | "settingsThresholdName" | "settingsThresholdNote" | "settingsLanguageName" | "settingsLanguageNote" | "settingsLanguageAuto" | "settingsLanguageZh" | "settingsLanguageEn" | "settingsLanguageRu" | "settingsPanelName" | "settingsPanelNote" | "settingsUnavailable" | "settingsSaveFailed", string>;
170
+ en: Record<"navTitle" | "progressTitle" | "progressGuideNote" | "markdownCopy" | "markdownCopied" | "markdownFootnotes" | "progressLatest" | "progressCount" | "progressExpand" | "progressCollapse" | "progressEmptyTitle" | "progressEmptyHint" | "rowPending" | "rowRunning" | "rowDone" | "rowError" | "rowExpand" | "rowCollapse" | "settingsHint" | "settingsOpen" | "settingsEnabledName" | "settingsEnabledNote" | "settingsCacheWarmupName" | "settingsCacheWarmupNote" | "settingsRetrievalName" | "settingsRetrievalNote" | "settingsCacheWaitWarmupName" | "settingsCacheWaitWarmupNote" | "settingsPlanModePipelineName" | "settingsPlanModePipelineNote" | "settingsDispatchExecutionGuardName" | "settingsDispatchExecutionGuardNote" | "settingsTeamPolicyCacheGuardName" | "settingsTeamPolicyCacheGuardNote" | "settingsThresholdName" | "settingsThresholdNote" | "settingsLanguageName" | "settingsLanguageNote" | "settingsLanguageAuto" | "settingsLanguageZh" | "settingsLanguageEn" | "settingsLanguageRu" | "settingsPanelName" | "settingsPanelNote" | "settingsUnavailable" | "settingsSaveFailed", string>;
171
+ 'en-US': Record<"navTitle" | "progressTitle" | "progressGuideNote" | "markdownCopy" | "markdownCopied" | "markdownFootnotes" | "progressLatest" | "progressCount" | "progressExpand" | "progressCollapse" | "progressEmptyTitle" | "progressEmptyHint" | "rowPending" | "rowRunning" | "rowDone" | "rowError" | "rowExpand" | "rowCollapse" | "settingsHint" | "settingsOpen" | "settingsEnabledName" | "settingsEnabledNote" | "settingsCacheWarmupName" | "settingsCacheWarmupNote" | "settingsRetrievalName" | "settingsRetrievalNote" | "settingsCacheWaitWarmupName" | "settingsCacheWaitWarmupNote" | "settingsPlanModePipelineName" | "settingsPlanModePipelineNote" | "settingsDispatchExecutionGuardName" | "settingsDispatchExecutionGuardNote" | "settingsTeamPolicyCacheGuardName" | "settingsTeamPolicyCacheGuardNote" | "settingsThresholdName" | "settingsThresholdNote" | "settingsLanguageName" | "settingsLanguageNote" | "settingsLanguageAuto" | "settingsLanguageZh" | "settingsLanguageEn" | "settingsLanguageRu" | "settingsPanelName" | "settingsPanelNote" | "settingsUnavailable" | "settingsSaveFailed", string>;
166
172
  };
167
173
  /** 本命名空间的字典键联合,供类型化 `t` 座位使用。 */
168
174
  export type ProgressUpdatesLocaleKey = keyof typeof zh;
@@ -1 +1 @@
1
- {"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../../src/client/progress-updates/locales.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAG,sBAA+B,CAAA;AAElE;;;;;;GAMG;AACH,eAAO,MAAM,EAAE;IACb,4BAA4B;;;IAG5B,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CpB,CAAA;AAEV,wBAAwB;AACxB,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,wBAAwB,EAAE,MAAM,CA6CvD,CAAA;AAED,qCAAqC;AACrC,eAAO,MAAM,YAAY;;QAjGvB,4BAA4B;;;QAG5B,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAH5B,4BAA4B;;;QAG5B,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmG7B,CAAA;AAED,iCAAiC;AACjC,MAAM,MAAM,wBAAwB,GAAG,MAAM,OAAO,EAAE,CAAA;AAEtD,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,kBAAkB;QAC1B,mBAAmB;QACnB,sBAAsB,EAAE,wBAAwB,CAAA;KACjD;CACF"}
1
+ {"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../../../src/client/progress-updates/locales.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAG,sBAA+B,CAAA;AAElE;;;;;;GAMG;AACH,eAAO,MAAM,EAAE;IACb,4BAA4B;;;IAG5B,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6CpB,CAAA;AAEV,wBAAwB;AACxB,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,wBAAwB,EAAE,MAAM,CA+CvD,CAAA;AAED,qCAAqC;AACrC,eAAO,MAAM,YAAY;;QArGvB,4BAA4B;;;QAG5B,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAH5B,4BAA4B;;;QAG5B,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuG7B,CAAA;AAED,iCAAiC;AACjC,MAAM,MAAM,wBAAwB,GAAG,MAAM,OAAO,EAAE,CAAA;AAEtD,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,kBAAkB;QAC1B,mBAAmB;QACnB,sBAAsB,EAAE,wBAAwB,CAAA;KACjD;CACF"}
@@ -72,11 +72,18 @@ export interface ProgressUpdatesSettingsValues {
72
72
  * 关着」与「实际是开着的」会同时成立。
73
73
  */
74
74
  dispatchExecutionGuard?: boolean;
75
+ /**
76
+ * Agent Teams 策略段缓存守卫开关(缺键 = 开)。
77
+ *
78
+ * 与宿主 src/index.ts 的 Config 同一个对象里的字段、名字逐字一致;宿主那边是
79
+ * default(true),所以缺键时界面必须同样读成开。
80
+ */
81
+ teamPolicyCacheGuard?: boolean;
75
82
  }
76
83
  /** 输出语言的三种取值,供界面侧声明变量类型。 */
77
84
  export type ProgressUpdatesLanguage = NonNullable<ProgressUpdatesSettingsValues['progressUpdatesLanguage']>;
78
85
  /** 表单可写的那三个字段名(联合类型,写错名字编译期就报)。 */
79
- export type ProgressUpdatesField = 'progressUpdates' | 'progressUpdatesNudgeThreshold' | 'progressUpdatesLanguage' | 'cacheWarmup' | 'cacheWarmupRetrieval' | 'cacheWaitWarmup' | 'planModePipeline' | 'dispatchExecutionGuard';
86
+ export type ProgressUpdatesField = 'progressUpdates' | 'progressUpdatesNudgeThreshold' | 'progressUpdatesLanguage' | 'cacheWarmup' | 'cacheWarmupRetrieval' | 'cacheWaitWarmup' | 'planModePipeline' | 'dispatchExecutionGuard' | 'teamPolicyCacheGuard';
80
87
  /**
81
88
  * 候选条目 id,按可能性从高到低。
82
89
  *
@@ -1 +1 @@
1
- {"version":3,"file":"settings-binding.d.ts","sourceRoot":"","sources":["../../../../src/client/progress-updates/settings-binding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,aAAa,CAAA;IAC3C,KAAK,EAAE,CAAC,GAAG,SAAS,CAAA;IACpB,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,QAAQ,EAAE,OAAO,CAAA;CAClB;AAQD;;;;;GAKG;AACH,MAAM,WAAW,6BAA6B;IAC5C,WAAW;IACX,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,0BAA0B;IAC1B,6BAA6B,CAAC,EAAE,MAAM,CAAA;IACtC;;;;;;OAMG;IACH,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACrD,2BAA2B;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,yBAAyB;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,gCAAgC;IAChC,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;;;;;OAMG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAA;CACjC;AAED,4BAA4B;AAC5B,MAAM,MAAM,uBAAuB,GAAG,WAAW,CAAC,6BAA6B,CAAC,yBAAyB,CAAC,CAAC,CAAA;AAE3G,mCAAmC;AACnC,MAAM,MAAM,oBAAoB,GAC5B,iBAAiB,GACjB,+BAA+B,GAC/B,yBAAyB,GACzB,aAAa,GACb,sBAAsB,GACtB,iBAAiB,GACjB,kBAAkB,GAClB,wBAAwB,CAAA;AAE5B;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,2BAA2B,EAAE,SAAS,MAAM,EAIxD,CAAA;AAED,6BAA6B;AAC7B,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,WAAW,IAAI,kBAAkB,CAAC,6BAA6B,CAAC,CAAA;IAChE,cAAc;IACd,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;IAC3C,uBAAuB;IACvB,GAAG,CAAC,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACpF,8BAA8B;IAC9B,OAAO,IAAI,IAAI,CAAA;CAChB;AAoED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE;IAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GAAG,oBAAoB,GAAG,SAAS,CA4FhH"}
1
+ {"version":3,"file":"settings-binding.d.ts","sourceRoot":"","sources":["../../../../src/client/progress-updates/settings-binding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,aAAa,CAAA;IAC3C,KAAK,EAAE,CAAC,GAAG,SAAS,CAAA;IACpB,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,QAAQ,EAAE,OAAO,CAAA;CAClB;AAQD;;;;;GAKG;AACH,MAAM,WAAW,6BAA6B;IAC5C,WAAW;IACX,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,0BAA0B;IAC1B,6BAA6B,CAAC,EAAE,MAAM,CAAA;IACtC;;;;;;OAMG;IACH,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACrD,2BAA2B;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,yBAAyB;IACzB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,gCAAgC;IAChC,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;;;;;OAMG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAED,4BAA4B;AAC5B,MAAM,MAAM,uBAAuB,GAAG,WAAW,CAAC,6BAA6B,CAAC,yBAAyB,CAAC,CAAC,CAAA;AAE3G,mCAAmC;AACnC,MAAM,MAAM,oBAAoB,GAC5B,iBAAiB,GACjB,+BAA+B,GAC/B,yBAAyB,GACzB,aAAa,GACb,sBAAsB,GACtB,iBAAiB,GACjB,kBAAkB,GAClB,wBAAwB,GACxB,sBAAsB,CAAA;AAE1B;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,2BAA2B,EAAE,SAAS,MAAM,EAIxD,CAAA;AAED,6BAA6B;AAC7B,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,WAAW,IAAI,kBAAkB,CAAC,6BAA6B,CAAC,CAAA;IAChE,cAAc;IACd,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;IAC3C,uBAAuB;IACvB,GAAG,CAAC,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACpF,8BAA8B;IAC9B,OAAO,IAAI,IAAI,CAAA;CAChB;AAoED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE;IAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GAAG,oBAAoB,GAAG,SAAS,CA4FhH"}
@@ -1,5 +1,6 @@
1
1
  /**
2
- * 设置页里的「进展更新」分区:说明 + 七行卡片(进展 / 两个缓存开关 / 计划模式管线 / 阈值 / 语言 / 面板)。
2
+ * 设置页里的「进展更新」分区:说明 + 十行卡片(进展 / 三个缓存开关 / 计划模式管线 /
3
+ * 调度执行守卫 / Agent Teams 策略段 / 阈值 / 语言 / 面板)。
3
4
  *
4
5
  * ## 视觉来源
5
6
  *
@@ -1 +1 @@
1
- {"version":3,"file":"settings-section.d.ts","sourceRoot":"","sources":["../../../../src/client/progress-updates/settings-section.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAA6C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACjF,OAAO,EAAqB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACtE,OAAO,KAAK,EAEV,oBAAoB,EAIrB,MAAM,uBAAuB,CAAA;AAE9B,iCAAiC;AACjC,MAAM,WAAW,+BAA+B;IAC9C,iCAAiC;IACjC,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,oBAAoB,CAAA;CAChC;AAED,6BAA6B;AAC7B,MAAM,WAAW,kBAAkB;IACjC,wBAAwB;IACxB,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED,6CAA6C;AAC7C,MAAM,MAAM,4BAA4B,GAAG,+BAA+B,GAAG,kBAAkB,GAAG,QAAQ,CAAA;AAE1G,8CAA8C;AAC9C,eAAO,MAAM,mBAAmB,IAAI,CAAA;AACpC,YAAY;AACZ,eAAO,MAAM,mBAAmB,KAAK,CAAA;AACrC,kDAAkD;AAClD,eAAO,MAAM,uBAAuB,IAAI,CAAA;AA0KxC;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,4BAA4B,GAAG,SAAS,CAkT7F"}
1
+ {"version":3,"file":"settings-section.d.ts","sourceRoot":"","sources":["../../../../src/client/progress-updates/settings-section.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAA6C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACjF,OAAO,EAAqB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACtE,OAAO,KAAK,EAEV,oBAAoB,EAIrB,MAAM,uBAAuB,CAAA;AAE9B,iCAAiC;AACjC,MAAM,WAAW,+BAA+B;IAC9C,iCAAiC;IACjC,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,oBAAoB,CAAA;CAChC;AAED,6BAA6B;AAC7B,MAAM,WAAW,kBAAkB;IACjC,wBAAwB;IACxB,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED,6CAA6C;AAC7C,MAAM,MAAM,4BAA4B,GAAG,+BAA+B,GAAG,kBAAkB,GAAG,QAAQ,CAAA;AAE1G,8CAA8C;AAC9C,eAAO,MAAM,mBAAmB,IAAI,CAAA;AACpC,YAAY;AACZ,eAAO,MAAM,mBAAmB,KAAK,CAAA;AACrC,kDAAkD;AAClD,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAwLxC;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,4BAA4B,GAAG,SAAS,CAyU7F"}
@@ -76,7 +76,7 @@ export declare const ROUTE_PREFIX: "/api/dsh-chatgpt-subscription";
76
76
  * `test/responses-client.test.ts` asserts the two agree, so a release that
77
77
  * forgets this constant fails the suite instead of shipping quietly.
78
78
  */
79
- export declare const PLUGIN_VERSION: "0.56.0";
79
+ export declare const PLUGIN_VERSION: "0.57.0";
80
80
  export declare const CODEX_CHATGPT_PROVIDER_ID: "codex-chatgpt";
81
81
  export { MINIMAX_CODE_PROVIDER_ID, MINIMAX_CODE_ROUTE_PREFIX } from './shared/minimax-code-contracts.ts';
82
82
  export declare const CODEX_API_BASE: "https://chatgpt.com/backend-api/codex";
@@ -0,0 +1,44 @@
1
+ /** 官方 Agent Teams 的指引段名。 */
2
+ export declare const TEAM_POLICY_SECTION = "team:policy";
3
+ /** 尾部撤销通知的来源 kind(本包自有,见下方 MessageSourceMap 增补)。 */
4
+ export declare const TEAM_BOARD_NOTICE_SOURCE_KIND = "team-board-notice";
5
+ declare module '@deepseek-ai/dsh-llm' {
6
+ interface MessageSourceMap {
7
+ /** 本包在 agent/pre-step 末尾追加的团队任务板提示(不是新的用户回合)。 */
8
+ 'team-board-notice': {
9
+ kind: 'team-board-notice';
10
+ } & {
11
+ form?: 'notice';
12
+ summary?: string;
13
+ };
14
+ }
15
+ }
16
+ /** 守卫交回的句柄。 */
17
+ export interface TeamPolicyCacheGuard {
18
+ /** 摘掉本守卫挂上的全部东西(幂等)。 */
19
+ dispose(): void;
20
+ }
21
+ /** 守卫选项。 */
22
+ export interface TeamPolicyCacheGuardOptions {
23
+ /** 是否启用;每次装配与每步都重读,所以设置保存后下一步就生效。默认开启。 */
24
+ readonly enabled?: () => boolean;
25
+ }
26
+ /**
27
+ * 从插件配置里读开关。
28
+ * @param config - 插件配置(结构化:只读一个键)。
29
+ * @returns 是否启用本守卫;未声明时按开启处理(宿主 schema 的默认值)。
30
+ */
31
+ export declare function resolveTeamPolicyCacheGuardEnabled(config: {
32
+ teamPolicyCacheGuard?: unknown;
33
+ } | undefined): boolean;
34
+ /**
35
+ * 装一台「Agent Teams 策略段缓存守卫」。
36
+ *
37
+ * 幂等性留给调用方:同一个 ctx 装两次会得到两条监听器,宿主入口应当只装一次。
38
+ * @param ctx - 宿主上下文(结构化:老代 ctx 也认)。
39
+ * @param options - 开关读取器。
40
+ * @returns 句柄,dispose 摘掉全部挂载。
41
+ */
42
+ export declare function installTeamPolicyCacheGuard(ctx: unknown, options?: TeamPolicyCacheGuardOptions): TeamPolicyCacheGuard;
43
+ export default installTeamPolicyCacheGuard;
44
+ //# sourceMappingURL=team-policy-cache-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-policy-cache-guard.d.ts","sourceRoot":"","sources":["../../../src/host/team-policy-cache-guard.ts"],"names":[],"mappings":"AAuCA,4BAA4B;AAC5B,eAAO,MAAM,mBAAmB,gBAAgB,CAAA;AAEhD,oDAAoD;AACpD,eAAO,MAAM,6BAA6B,sBAAsB,CAAA;AAEhE,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,gBAAgB;QACxB,iDAAiD;QACjD,mBAAmB,EAAE;YAAE,IAAI,EAAE,mBAAmB,CAAA;SAAE,GAAG;YAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAC3F;CACF;AAMD,eAAe;AACf,MAAM,WAAW,oBAAoB;IACnC,wBAAwB;IACxB,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,YAAY;AACZ,MAAM,WAAW,2BAA2B;IAC1C,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,OAAO,CAAA;CACjC;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAChD,MAAM,EAAE;IAAE,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,GACrD,OAAO,CAET;AAmID;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE,2BAAgC,GACxC,oBAAoB,CAyHtB;AAED,eAAe,2BAA2B,CAAA"}
@@ -60,6 +60,18 @@ export interface Config {
60
60
  * 的 `tools:sdk` 段与顶层工具 schema)保持逐字节恒定,前缀缓存零漂移。
61
61
  */
62
62
  dispatchExecutionGuard?: Volatile<boolean>;
63
+ /**
64
+ * 「Agent Teams 策略段」缓存守卫:默认开启。
65
+ *
66
+ * 内置 `@deepseek-ai/dsh-tool-agent-team` 的 `team:policy` 段在开关关闭时是空串、
67
+ * 打开时是整段指引,中途切换会改写 system prompt 并刷掉整段前缀缓存。打开本开关
68
+ * 后守卫把该段从装配结果里摘掉,改为切换时以**尾部用户消息**投递一次(与计划模式
69
+ * 同一套做法),system 段因此逐字节恒定。
70
+ *
71
+ * 只有「会话中途切开关」才付那次重建;开会话时就是目标状态则本来就零成本,所以
72
+ * 默认开启。volatile:设置保存后下一步就生效,不重挂任何一行。
73
+ */
74
+ teamPolicyCacheGuard?: Volatile<boolean>;
63
75
  /**
64
76
  * 「结果预览」总开关:Kimi 线路上超大的 `run_code` 结果会被换成带 `ref://`
65
77
  * 引用的预览,原文由 `cache_warmup_result` 精确补读。默认开启。
@@ -197,6 +209,8 @@ export interface ConfigInput {
197
209
  planModePipeline?: boolean;
198
210
  /** 「调度执行守卫」总开关(默认开启):执行期拦截子代理越权调用与等待期空等。 */
199
211
  dispatchExecutionGuard?: boolean;
212
+ /** 「Agent Teams 策略段」缓存守卫(默认开启):摘段并改为尾部投递。 */
213
+ teamPolicyCacheGuard?: boolean;
200
214
  /** 「结果预览」总开关(默认开启;只影响之后产生的新结果)。 */
201
215
  cacheWarmup?: boolean;
202
216
  /** 检索型结果投影独立开关(默认开启;只影响之后产生的新结果)。 */