@jjh32456/dsh-longlive 1.6.7 → 1.8.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 +70 -1508
- package/LICENSE +1 -1
- package/QUICKSTART.md +34 -13
- package/README.en.md +18 -7
- package/README.md +34 -9
- package/SPEC.md +5 -5
- package/cordis.patch.yml +23 -9
- package/docs/ANSWER-GUARD.md +92 -0
- package/docs/ARCHITECTURE.md +4 -3
- package/docs/AUTO-RECALL-WIRING.md +1 -1
- package/docs/AUTO-RECALL.md +15 -9
- package/docs/CONFIG.md +168 -35
- package/docs/ERRORS.md +17 -5
- package/docs/FAQ.md +7 -7
- package/docs/FEATURES.md +96 -28
- package/docs/MIGRATION-1.6.0.md +2 -2
- package/docs/OPERATIONS.md +6 -6
- package/docs/PANEL-INTEGRATION.md +6 -0
- package/docs/PRIVACY.md +88 -0
- package/docs/QUICKSTART.md +5 -5
- package/docs/README.en.md +4 -2
- package/docs/RESIDENT-WATCHER.md +1 -1
- package/docs/SESSION-WATCH.md +6 -6
- package/docs/TROUBLESHOOTING.md +4 -4
- package/package.json +47 -117
- package/runbook.md +2 -2
- package/scripts/backfill-auto-cards.mjs +98 -0
- package/scripts/install-surgery-task.ps1 +5 -2
- package/scripts/lib/session-watch-fixture.mjs +1 -1
- package/scripts/longlive-doctor.mjs +6 -0
- package/scripts/migrate-180.mjs +163 -0
- package/scripts/recall-index-build.mjs +128 -0
- package/scripts/session-watch-drill.mjs +1 -1
- package/scripts/surgery-run.cmd +1 -1
- package/scripts/unattended-surgery.ps1 +5 -2
- package/scripts/verify-card-anchors.mjs +138 -0
- package/src/actions/audit.js +125 -0
- package/src/actions/evidence.js +122 -0
- package/src/actions/fs.js +162 -0
- package/src/activity/index.js +760 -0
- package/src/activity/model.js +351 -0
- package/src/activity/store.js +644 -0
- package/src/activity/thinking.js +176 -0
- package/src/adapters/constants.js +11 -0
- package/src/adapters/engram/data/aliases.json +51 -0
- package/src/adapters/engram/data/policy.json +8 -0
- package/src/adapters/engram/data/routing-rules.json +546 -0
- package/src/adapters/engram/index.js +235 -0
- package/src/adapters/registry.js +315 -0
- package/src/answer/audit.js +193 -0
- package/src/answer/evidence.js +30 -0
- package/src/answer/guard.js +1370 -0
- package/src/answer/index.js +1067 -0
- package/src/answer/query.js +111 -0
- package/src/answer/second-hop.mjs +101 -0
- package/src/auto-truncate.js +1 -1
- package/src/config.js +171 -47
- package/src/deps.js +6 -4
- package/src/features.js +182 -6
- package/src/heartbeat.js +156 -23
- package/src/identity/handover.js +52 -1
- package/src/identity/index.js +13 -5
- package/src/identity/inject-position.js +2 -2
- package/src/index.js +97 -7
- package/src/lifecycle/gap-clocks.js +328 -0
- package/src/lifecycle/index.js +269 -0
- package/src/live.js +22 -2
- package/src/memory/activity-capture.js +229 -0
- package/src/memory/anchors.js +194 -0
- package/src/memory/audit-records.js +222 -0
- package/src/memory/auto-cards.js +401 -0
- package/src/memory/capture.js +442 -0
- package/src/memory/card-anchors.js +203 -0
- package/src/memory/conflicts.js +106 -0
- package/src/memory/decay.js +311 -0
- package/src/memory/distill.js +471 -0
- package/src/memory/event-index.js +917 -0
- package/src/memory/evidence-chain.js +295 -0
- package/src/memory/evidence.js +145 -0
- package/src/memory/filter-runner.js +1 -1
- package/src/memory/filter.js +5 -1
- package/src/memory/forget-v2.js +410 -0
- package/src/memory/forget.js +71 -0
- package/src/memory/frames-activation.js +247 -0
- package/src/memory/fts-query.js +174 -0
- package/src/memory/governance.js +604 -0
- package/src/memory/index.js +1 -0
- package/src/memory/l2-gate.js +169 -0
- package/src/memory/lock.js +121 -0
- package/src/memory/migrate.js +139 -0
- package/src/memory/recall-v2.js +223 -0
- package/src/memory/recall.js +65 -2
- package/src/memory/records.js +425 -0
- package/src/memory/retention.js +128 -0
- package/src/memory/review.js +124 -0
- package/src/memory/trust.js +88 -0
- package/src/memory/version-chain.js +264 -0
- package/src/memory/wal.js +137 -0
- package/src/memory/working-frame.js +516 -0
- package/src/metrics/classify.mjs +5 -3
- package/src/metrics/index.mjs +21 -1
- package/src/metrics/prestep-latency.mjs +300 -0
- package/src/metrics/store.mjs +25 -0
- package/src/policy-profile.js +18 -3
- package/src/recall/anaphora.mjs +87 -0
- package/src/recall/cards.mjs +7 -0
- package/src/recall/embedding.mjs +8 -8
- package/src/recall/entities.mjs +112 -0
- package/src/recall/index.js +235 -19
- package/src/recall/inject-order.mjs +10 -8
- package/src/recall/privacy.mjs +105 -16
- package/src/recall/recall-core.mjs +116 -10
- package/src/recall/shared-visibility.js +302 -0
- package/src/recall/time-normalizer.mjs +196 -0
- package/src/role/activation.js +191 -0
- package/src/role/attention.js +318 -0
- package/src/role/base.js +36 -0
- package/src/role/channels.js +423 -0
- package/src/role/index.js +425 -0
- package/src/role/interfaces.js +115 -0
- package/src/role/personality.js +370 -0
- package/src/role/readers.js +151 -0
- package/src/role/relationships.js +477 -0
- package/src/role/store.js +202 -0
- package/src/role/writeprotect.js +373 -0
- package/src/router/aliases.json +176 -25
- package/src/router/background/agent-runner.mjs +1 -1
- package/src/router/background/anchor.mjs +1 -1
- package/src/router/background/audit.mjs +2 -2
- package/src/router/background/budget-ledger.mjs +2 -2
- package/src/router/background/host-sim.mjs +1 -1
- package/src/router/background/memory.mjs +4 -4
- package/src/router/background/queue.mjs +1 -1
- package/src/router/background/retry.mjs +1 -1
- package/src/router/background/router.mjs +1 -1
- package/src/router/background/stream.mjs +1 -1
- package/src/router/background/tool-policy.mjs +1 -1
- package/src/router/design-headings.json +5 -5
- package/src/router/face/config.mjs +1 -1
- package/src/router/face/identity.mjs +3 -3
- package/src/router/judge.mjs +8 -7
- package/src/router/policies/generic.json +21 -4
- package/src/router/route.js +109 -22
- package/src/router/router.mjs +10 -6
- package/src/router/routing-rules.json +260 -445
- package/src/router/run-sim.mjs +8 -8
- package/src/router/runtime.js +23 -12
- package/src/router/service/board.mjs +95 -15
- package/src/router/service/config.mjs +5 -5
- package/src/router/service/context.mjs +1 -1
- package/src/router/service/hint.mjs +14 -0
- package/src/router/service/queue.mjs +1 -1
- package/src/router/service/service.mjs +27 -11
- package/src/router/shadow.mjs +4 -3
- package/src/surgery-recovery.js +2 -2
- package/src/tool-output.js +2 -2
- package/src/tools.js +39 -7
- package/src/truncate-visible.js +2 -2
- package/src/ui/actions.js +1312 -0
- package/src/ui/panel-api.js +367 -0
- package/src/ui/panel-auth.js +251 -0
- package/src/ui/panel-integrity.js +243 -0
- package/src/ui/routes-readonly.js +695 -0
- package/src/ui/routes.js +3 -0
- package/docs/DEV.md +0 -279
- package/docs/PRESENCE-BUS-WIRING.md +0 -491
- package/docs/PRESENCE-BUS.md +0 -694
- package/docs/SURGERY.md +0 -186
- package/scripts/mark-core-cards.mjs +0 -289
- package/scripts/pack.mjs +0 -392
- package/scripts/router-proposals.mjs +0 -386
- package/src/router/fixtures/M1.json +0 -16
- package/src/router/fixtures/M2.json +0 -16
- package/src/router/fixtures/M3.json +0 -20
- package/src/router/fixtures/M4.json +0 -20
- package/src/router/fixtures/M5.json +0 -45
- package/src/router/fixtures/M6.json +0 -53
- package/src/router/fixtures/M7.json +0 -46
- package/src/router/fixtures/S1.json +0 -20
- package/src/router/fixtures/S2.json +0 -23
- package/src/router/fixtures/S3.json +0 -20
- package/src/router/fixtures/S4.json +0 -34
- package/src/router/fixtures/S5.json +0 -43
- package/src/router/fixtures/S6.json +0 -47
- package/src/router/fixtures/T1.json +0 -23
- package/src/router/fixtures/T2.json +0 -16
- package/src/router/fixtures/T3.json +0 -19
- package/src/router/fixtures/T4.json +0 -16
- package/src/router/fixtures/X1.json +0 -17
- package/src/router/fixtures/X2.json +0 -20
- package/src/router/gen-design-headings.mjs +0 -107
- package/src/router/policies/owner-rulings-2026-11-03.json +0 -62
- package/test/auto-recall.test.mjs +0 -474
- package/test/auto-truncate.test.mjs +0 -931
- package/test/autobind.test.mjs +0 -385
- package/test/bus.test.mjs +0 -1572
- package/test/cli-guard.test.mjs +0 -198
- package/test/conclusion.test.mjs +0 -408
- package/test/config-schema.test.mjs +0 -204
- package/test/d6-output.test.mjs +0 -194
- package/test/d6.test.mjs +0 -395
- package/test/deps.test.mjs +0 -342
- package/test/doctor-setup.test.mjs +0 -297
- package/test/embedding-recall.test.mjs +0 -347
- package/test/feature-flags.test.mjs +0 -568
- package/test/filter-shadow.test.mjs +0 -170
- package/test/fixtures/baseline-0.8.0-registration.json +0 -556
- package/test/fixtures/d6-header-tools.json +0 -1
- package/test/fixtures/lock-child.mjs +0 -67
- package/test/fixtures/pre-step-container.mjs +0 -100
- package/test/fixtures/privacy-memory/topics/pii-unmarked.md +0 -9
- package/test/fixtures/privacy-memory/topics/secret-local-only.md +0 -11
- package/test/fixtures/profile-session-longlive-config.json +0 -20
- package/test/fixtures/proposal-cas-child.mjs +0 -66
- package/test/host-engine-status.test.mjs +0 -307
- package/test/hot-truncate.test.mjs +0 -1349
- package/test/identity-card-marker.test.mjs +0 -307
- package/test/identity-router/run.mjs +0 -721
- package/test/integration-pre-step.test.mjs +0 -553
- package/test/live.test.mjs +0 -1020
- package/test/maintenance-schedule.test.mjs +0 -538
- package/test/memory.test.mjs +0 -2828
- package/test/metrics.test.mjs +0 -478
- package/test/orchestrator.test.mjs +0 -266
- package/test/p1_probe.mjs +0 -97
- package/test/packaging.test.mjs +0 -182
- package/test/portability.test.mjs +0 -343
- package/test/rc4-regressions.test.mjs +0 -562
- package/test/rc5-regressions.test.mjs +0 -197
- package/test/rc6-chinese.test.mjs +0 -394
- package/test/router-1100/apply-off.test.mjs +0 -175
- package/test/router-1100/budget-reconcile.test.mjs +0 -215
- package/test/router-1100/config-context.test.mjs +0 -211
- package/test/router-1100/helpers.mjs +0 -129
- package/test/router-1100/hint-envelope.test.mjs +0 -150
- package/test/router-1100/lock-crossproc.test.mjs +0 -206
- package/test/router-1100/proposal-cas-crossproc.test.mjs +0 -184
- package/test/router-1100/router-apply.test.mjs +0 -372
- package/test/router-1100/router-fixb.test.mjs +0 -602
- package/test/router-1100/router-proposals.test.mjs +0 -405
- package/test/router-1100/router-queue-lease-wal.test.mjs +0 -355
- package/test/router-1100/router-security-cr.test.mjs +0 -333
- package/test/router-1100/service-lifecycle.test.mjs +0 -220
- package/test/router-1100/tools-contract.test.mjs +0 -164
- package/test/router-1100/turn-reflect-tick.test.mjs +0 -89
- package/test/router-1100/v6-contract.test.mjs +0 -158
- package/test/router-1100/v6b-contract.test.mjs +0 -293
- package/test/router-1100/v6c-contract.test.mjs +0 -249
- package/test/router-1100/wal-rotation.test.mjs +0 -375
- package/test/router-1100/wp1-config.test.mjs +0 -170
- package/test/router-1100/wp1-default-off.test.mjs +0 -77
- package/test/router-1100/wp1-model-status.test.mjs +0 -90
- package/test/router-1100/wp1-status.test.mjs +0 -220
- package/test/router-1100/wp1-tools.test.mjs +0 -146
- package/test/router-1100/wp5-cli.test.mjs +0 -240
- package/test/router-1100/wp5-model-auto.test.mjs +0 -418
- package/test/router-1100/wp6-merge.test.mjs +0 -386
- package/test/router-1100/wp6-wake.test.mjs +0 -502
- package/test/router-background/audit.test.mjs +0 -37
- package/test/router-background/budget-ledger.test.mjs +0 -330
- package/test/router-background/cross-process.test.mjs +0 -222
- package/test/router-background/fixtures/cross-child.mjs +0 -85
- package/test/router-background/fixtures/real-shapes.mjs +0 -239
- package/test/router-background/router.test.mjs +0 -1044
- package/test/router-background/stream-retry.test.mjs +0 -358
- package/test/router-background/tool-agent.test.mjs +0 -384
- package/test/router-face/bridge.test.mjs +0 -169
- package/test/router-face/face.test.mjs +0 -316
- package/test/router-failclosed.test.mjs +0 -466
- package/test/router-identity.test.mjs +0 -384
- package/test/router-l1-l2.contract.test.mjs +0 -1075
- package/test/router-memory-tools.test.mjs +0 -262
- package/test/router-policy.test.mjs +0 -225
- package/test/router-runtime.test.mjs +0 -438
- package/test/router-shadow.test.mjs +0 -287
- package/test/router.test.mjs +0 -903
- package/test/run-rc.mjs +0 -299
- package/test/run.mjs +0 -2469
- package/test/safety-defaults.test.mjs +0 -179
- package/test/seeded-load.test.mjs +0 -436
- package/test/session-original.test.mjs +0 -338
- package/test/surgery-recovery.test.mjs +0 -936
- package/test/t7_drive.mjs +0 -151
- package/test/tool-output.test.mjs +0 -393
- package/test/tool-schema.test.mjs +0 -177
- package/test/tools_contract.test.mjs +0 -716
- package/test/truncate-visible.test.mjs +0 -1150
- package/test/ui-flags.test.mjs +0 -477
- package/test/v4-hardening.test.mjs +0 -427
package/src/tools.js
CHANGED
|
@@ -36,7 +36,9 @@ import { memoryIndex } from './memory/index.js';
|
|
|
36
36
|
import { memoryConsolidate } from './memory/consolidate.js';
|
|
37
37
|
import { memoryReinforce } from './memory/reinforce.js';
|
|
38
38
|
import { memoryForget } from './memory/forget.js';
|
|
39
|
+
import { forgetV2 } from './memory/forget-v2.js';
|
|
39
40
|
import { memoryRecall } from './memory/recall.js';
|
|
41
|
+
import { recallV2 } from './memory/recall-v2.js';
|
|
40
42
|
import { memoryProcedure, PROCEDURES_DIR, PROCEDURE_ACTIONS } from './memory/procedure.js';
|
|
41
43
|
import {
|
|
42
44
|
memoryError,
|
|
@@ -1643,9 +1645,9 @@ const WORKER_NO_SERVICE = 'unavailable: 本宿主未提供 subagents 服务';
|
|
|
1643
1645
|
* byte-identical to 1.5.0 while taking the capability away by default.
|
|
1644
1646
|
*/
|
|
1645
1647
|
export const WORKER_TOOL_NAMES = Object.freeze(['worker_spawn', 'worker_status', 'worker_kill']);
|
|
1646
|
-
export const WORKERS_DEFAULTS = Object.freeze({ enabled:
|
|
1648
|
+
export const WORKERS_DEFAULTS = Object.freeze({ enabled: true });
|
|
1647
1649
|
export const WORKERS_DISABLED_MESSAGE =
|
|
1648
|
-
'unavailable: worker_*
|
|
1650
|
+
'unavailable: worker_* 已关闭(workers.enabled=false);需要派子会话时显式设置 workers.enabled: true';
|
|
1649
1651
|
|
|
1650
1652
|
function workerUnavailable(message) {
|
|
1651
1653
|
return { ok: false, status: 'unavailable', available: false, message };
|
|
@@ -2003,6 +2005,13 @@ function memoryTool(name, fn) {
|
|
|
2003
2005
|
};
|
|
2004
2006
|
}
|
|
2005
2007
|
|
|
2008
|
+
/** Product path must use forgetV2 so hostkey gate + tombstone enrichment cannot be bypassed. */
|
|
2009
|
+
function memoryForgetTool(args, config) {
|
|
2010
|
+
// Preserve the legacy invalid-confirm error (throws before any execution).
|
|
2011
|
+
if (args.confirm !== undefined && args.confirm !== 'FORGET') return memoryForget(args, config);
|
|
2012
|
+
return forgetV2({ ...args, mode: args.confirm === 'FORGET' ? 'execute' : 'propose' }, config);
|
|
2013
|
+
}
|
|
2014
|
+
|
|
2006
2015
|
// --- D3: fetch the original text of one turn ------------------------------
|
|
2007
2016
|
//
|
|
2008
2017
|
// session_original is the deliberate escape hatch from the compressed view:
|
|
@@ -2638,7 +2647,7 @@ export const TOOLS = [
|
|
|
2638
2647
|
confirm: { type: 'string', description: 'Default absent = dry-run. Pass "FORGET" to execute the proposals.' },
|
|
2639
2648
|
},
|
|
2640
2649
|
output: { schema: { type: 'object', additionalProperties: true }, render: (_a, value) => OUTPUT_TEXT(value) },
|
|
2641
|
-
invoke: memoryTool('memory_forget',
|
|
2650
|
+
invoke: memoryTool('memory_forget', memoryForgetTool),
|
|
2642
2651
|
},
|
|
2643
2652
|
{
|
|
2644
2653
|
name: 'memory_procedure',
|
|
@@ -2697,6 +2706,26 @@ export const TOOLS = [
|
|
|
2697
2706
|
output: { schema: { type: 'object', additionalProperties: true }, render: (_a, value) => OUTPUT_TEXT(value) },
|
|
2698
2707
|
invoke: memoryTool('memory_recall', memoryRecall),
|
|
2699
2708
|
},
|
|
2709
|
+
{
|
|
2710
|
+
name: 'memory_recall_v2',
|
|
2711
|
+
description:
|
|
2712
|
+
'Multi-route recall with an evidence gate and a deterministic fast-answer channel (read-only). Returns ' +
|
|
2713
|
+
'{query,confidence,hits:[{card,anchor,quote,score}],didYouMean,slowPath,fastAnswer,evidenceGate}. ' +
|
|
2714
|
+
'Fail-safe: no hit => confidence "none" with E_NO_EVIDENCE and NO guess; multiple/ambiguous/non-live ' +
|
|
2715
|
+
'anchors => slowPath true and fallback "model"; only a unique high-confidence hit whose quote matches the ' +
|
|
2716
|
+
'asked value type (version/path/time/number) produces fastAnswer (quote + coordinate, no generation). ' +
|
|
2717
|
+
'Params: query (required), topK 1..10, project?, since?, until?, includeForgotten (default false).',
|
|
2718
|
+
parameters: {
|
|
2719
|
+
query: { type: 'string', description: 'Required. Natural-language question or keywords.' },
|
|
2720
|
+
topK: { type: 'integer', description: 'How many hits to return (default 3, clamped 1..10).' },
|
|
2721
|
+
project: { type: 'string', description: 'Optional project filter (card frontmatter project when present).' },
|
|
2722
|
+
since: { type: 'string', description: 'Optional ISO date lower bound on card date.' },
|
|
2723
|
+
until: { type: 'string', description: 'Optional ISO date upper bound on card date.' },
|
|
2724
|
+
includeForgotten: { type: 'boolean', description: 'Default false; true also returns archived/forgotten cards (marked stale anchors).' },
|
|
2725
|
+
},
|
|
2726
|
+
output: { schema: { type: 'object', additionalProperties: true }, render: (_a, value) => OUTPUT_TEXT(value) },
|
|
2727
|
+
invoke: memoryTool('memory_recall_v2', recallV2),
|
|
2728
|
+
},
|
|
2700
2729
|
{
|
|
2701
2730
|
name: 'session_live_update',
|
|
2702
2731
|
description:
|
|
@@ -2808,7 +2837,7 @@ export async function registerTools(ctx, config = {}) {
|
|
|
2808
2837
|
// neither can be reconstructed from arguments.
|
|
2809
2838
|
const bound = { ...config, host: () => ctx };
|
|
2810
2839
|
// Fan-out tools are opt-in from 1.6.0 on; `undefined` means the safe default.
|
|
2811
|
-
const workersEnabled = bound.workers?.enabled
|
|
2840
|
+
const workersEnabled = bound.workers?.enabled !== false;
|
|
2812
2841
|
// R1 runtime adapter. Absent (or `routerRuntime: 'off'`, which creates no
|
|
2813
2842
|
// adapter) means the execute closure below is byte-identical to before.
|
|
2814
2843
|
const routerRuntime = bound.routerRuntime && typeof bound.routerRuntime.intercept === 'function' ? bound.routerRuntime : null;
|
|
@@ -2823,8 +2852,11 @@ export async function registerTools(ctx, config = {}) {
|
|
|
2823
2852
|
// feature is enabled; appending it after the normal set keeps the baseline
|
|
2824
2853
|
// order byte-identical when D6 is off.
|
|
2825
2854
|
const d6Tools = Array.isArray(bound.d6Tools) ? bound.d6Tools : [];
|
|
2826
|
-
|
|
2827
|
-
|
|
2855
|
+
// 1.8.0 answer-guard: read-only answer_audit tool appended when enabled.
|
|
2856
|
+
const answerTools = Array.isArray(bound.answerTools) ? bound.answerTools : [];
|
|
2857
|
+
const extraTools = [...routerTools, ...d6Tools, ...answerTools];
|
|
2858
|
+
const allTools = extraTools.length > 0
|
|
2859
|
+
? [...TOOLS, ...extraTools]
|
|
2828
2860
|
: TOOLS;
|
|
2829
2861
|
const ownNames = new Set(allTools.map((tool) => tool.name));
|
|
2830
2862
|
for (const tool of allTools) {
|
|
@@ -2857,7 +2889,7 @@ export async function registerTools(ctx, config = {}) {
|
|
|
2857
2889
|
},
|
|
2858
2890
|
}));
|
|
2859
2891
|
}
|
|
2860
|
-
//
|
|
2892
|
+
// The external memory tool belongs to its plugin, not to this plugin, so wrapping
|
|
2861
2893
|
// cannot see it. The host's pre-execute guard is the only non-invasive hook
|
|
2862
2894
|
// that can: in shadow it returns undefined (allow) and only records; in `on`
|
|
2863
2895
|
// it may return a denial reason for a high-risk write. `ownNames` keeps the
|
package/src/truncate-visible.js
CHANGED
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
import fs from 'node:fs';
|
|
26
26
|
import path from 'node:path';
|
|
27
27
|
import crypto from 'node:crypto';
|
|
28
|
+
import { injectedMarkerPatterns } from './adapters/registry.js';
|
|
28
29
|
|
|
29
30
|
import {
|
|
30
31
|
compressFrame,
|
|
@@ -180,8 +181,7 @@ export const USER_TEXT_MARKERS = Object.freeze([
|
|
|
180
181
|
/This is an automatically generated checkpoint/i,
|
|
181
182
|
/Current runtime context/i,
|
|
182
183
|
/<current_user_request\b/i,
|
|
183
|
-
|
|
184
|
-
/<engram_memory_context\b/i,
|
|
184
|
+
...injectedMarkerPatterns(),
|
|
185
185
|
/<system-reminder\b/i,
|
|
186
186
|
/\[Compressed conversation section\]/i,
|
|
187
187
|
/background job[\s\S]{0,200}?\bfinished\b/i,
|