@fractalsynapse/dsh-chapters 0.0.0-stage → 0.2.20
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/LICENSE +14 -0
- package/README.md +76 -2
- package/cordis.patch.yml +363 -0
- package/docs/architecture.md +692 -0
- package/docs/autorun-guide.md +248 -0
- package/docs/backlog.md +2022 -0
- package/docs/contract.md +938 -0
- package/docs/development.md +990 -0
- package/docs/host-compaction-seam.md +225 -0
- package/docs/host-protected-head-ask.md +80 -0
- package/docs/knowledge-repo.md +1332 -0
- package/docs/plans-carriage.md +571 -0
- package/docs/project-state.md +642 -0
- package/docs/provider.md +98 -0
- package/docs/superpowers/plans/2026-10-17-chapters-save.md +198 -0
- package/docs/superpowers/plans/2026-11-02-chapter-removal.md +151 -0
- package/docs/superpowers/specs/2026-11-02-chapter-removal-design.md +115 -0
- package/docs/verify.md +561 -0
- package/lib/archive.d.ts +161 -0
- package/lib/archive.js +229 -0
- package/lib/archive.js.map +1 -0
- package/lib/arrival.d.ts +23 -0
- package/lib/arrival.js +125 -0
- package/lib/arrival.js.map +1 -0
- package/lib/artifact-query.d.ts +62 -0
- package/lib/artifact-query.js +187 -0
- package/lib/artifact-query.js.map +1 -0
- package/lib/attach.d.ts +46 -0
- package/lib/attach.js +120 -0
- package/lib/attach.js.map +1 -0
- package/lib/auto-save.d.ts +145 -0
- package/lib/auto-save.js +334 -0
- package/lib/auto-save.js.map +1 -0
- package/lib/aux-message.d.ts +17 -0
- package/lib/aux-message.js +20 -0
- package/lib/aux-message.js.map +1 -0
- package/lib/client.js +1419 -0
- package/lib/client.js.map +1 -0
- package/lib/codegraph.d.ts +76 -0
- package/lib/codegraph.js +190 -0
- package/lib/codegraph.js.map +1 -0
- package/lib/commands.d.ts +52 -0
- package/lib/commands.js +946 -0
- package/lib/commands.js.map +1 -0
- package/lib/compose.d.ts +30 -0
- package/lib/compose.js +185 -0
- package/lib/compose.js.map +1 -0
- package/lib/continue-core.d.ts +245 -0
- package/lib/continue-core.js +405 -0
- package/lib/continue-core.js.map +1 -0
- package/lib/diag.d.ts +55 -0
- package/lib/diag.js +186 -0
- package/lib/diag.js.map +1 -0
- package/lib/engine-core.d.ts +301 -0
- package/lib/engine-core.js +531 -0
- package/lib/engine-core.js.map +1 -0
- package/lib/engine-note.d.ts +35 -0
- package/lib/engine-note.js +32 -0
- package/lib/engine-note.js.map +1 -0
- package/lib/engine.d.ts +329 -0
- package/lib/engine.js +1179 -0
- package/lib/engine.js.map +1 -0
- package/lib/enrich-queue.d.ts +66 -0
- package/lib/enrich-queue.js +126 -0
- package/lib/enrich-queue.js.map +1 -0
- package/lib/enrich-store.d.ts +31 -0
- package/lib/enrich-store.js +103 -0
- package/lib/enrich-store.js.map +1 -0
- package/lib/enrich-wire.d.ts +163 -0
- package/lib/enrich-wire.js +353 -0
- package/lib/enrich-wire.js.map +1 -0
- package/lib/enrich.d.ts +102 -0
- package/lib/enrich.js +267 -0
- package/lib/enrich.js.map +1 -0
- package/lib/gitops.d.ts +107 -0
- package/lib/gitops.js +539 -0
- package/lib/gitops.js.map +1 -0
- package/lib/index.d.ts +241 -0
- package/lib/index.js +1162 -0
- package/lib/index.js.map +1 -0
- package/lib/indexing.d.ts +98 -0
- package/lib/indexing.js +223 -0
- package/lib/indexing.js.map +1 -0
- package/lib/injections.d.ts +90 -0
- package/lib/injections.js +165 -0
- package/lib/injections.js.map +1 -0
- package/lib/last-resort.d.ts +24 -0
- package/lib/last-resort.js +27 -0
- package/lib/last-resort.js.map +1 -0
- package/lib/log-shape.d.ts +38 -0
- package/lib/log-shape.js +93 -0
- package/lib/log-shape.js.map +1 -0
- package/lib/models-command.d.ts +74 -0
- package/lib/models-command.js +100 -0
- package/lib/models-command.js.map +1 -0
- package/lib/notice.d.ts +74 -0
- package/lib/notice.js +92 -0
- package/lib/notice.js.map +1 -0
- package/lib/plans.d.ts +154 -0
- package/lib/plans.js +315 -0
- package/lib/plans.js.map +1 -0
- package/lib/preset.d.ts +186 -0
- package/lib/preset.js +212 -0
- package/lib/preset.js.map +1 -0
- package/lib/prompt-keys.d.ts +7 -0
- package/lib/prompt-keys.js +8 -0
- package/lib/prompt-keys.js.map +1 -0
- package/lib/prompt-loop.d.ts +73 -0
- package/lib/prompt-loop.js +147 -0
- package/lib/prompt-loop.js.map +1 -0
- package/lib/prompt-push.d.ts +47 -0
- package/lib/prompt-push.js +115 -0
- package/lib/prompt-push.js.map +1 -0
- package/lib/prompt-runner.d.ts +48 -0
- package/lib/prompt-runner.js +90 -0
- package/lib/prompt-runner.js.map +1 -0
- package/lib/prompt-state.d.ts +142 -0
- package/lib/prompt-state.js +101 -0
- package/lib/prompt-state.js.map +1 -0
- package/lib/prompt.d.ts +270 -0
- package/lib/prompt.js +408 -0
- package/lib/prompt.js.map +1 -0
- package/lib/provider.d.ts +44 -0
- package/lib/provider.js +66 -0
- package/lib/provider.js.map +1 -0
- package/lib/redact.d.ts +24 -0
- package/lib/redact.js +85 -0
- package/lib/redact.js.map +1 -0
- package/lib/registry.d.ts +187 -0
- package/lib/registry.js +235 -0
- package/lib/registry.js.map +1 -0
- package/lib/removal.d.ts +159 -0
- package/lib/removal.js +556 -0
- package/lib/removal.js.map +1 -0
- package/lib/render.d.ts +97 -0
- package/lib/render.js +530 -0
- package/lib/render.js.map +1 -0
- package/lib/repair-run.d.ts +76 -0
- package/lib/repair-run.js +506 -0
- package/lib/repair-run.js.map +1 -0
- package/lib/repair.d.ts +208 -0
- package/lib/repair.js +357 -0
- package/lib/repair.js.map +1 -0
- package/lib/repo.d.ts +78 -0
- package/lib/repo.js +184 -0
- package/lib/repo.js.map +1 -0
- package/lib/rules-commands.d.ts +46 -0
- package/lib/rules-commands.js +379 -0
- package/lib/rules-commands.js.map +1 -0
- package/lib/rules.d.ts +267 -0
- package/lib/rules.js +478 -0
- package/lib/rules.js.map +1 -0
- package/lib/save-core.d.ts +72 -0
- package/lib/save-core.js +220 -0
- package/lib/save-core.js.map +1 -0
- package/lib/search.d.ts +112 -0
- package/lib/search.js +282 -0
- package/lib/search.js.map +1 -0
- package/lib/session-rules.d.ts +222 -0
- package/lib/session-rules.js +454 -0
- package/lib/session-rules.js.map +1 -0
- package/lib/signature.d.ts +45 -0
- package/lib/signature.js +199 -0
- package/lib/signature.js.map +1 -0
- package/lib/store.d.ts +156 -0
- package/lib/store.js +368 -0
- package/lib/store.js.map +1 -0
- package/lib/sync.d.ts +220 -0
- package/lib/sync.js +810 -0
- package/lib/sync.js.map +1 -0
- package/lib/tools.d.ts +113 -0
- package/lib/tools.js +1090 -0
- package/lib/tools.js.map +1 -0
- package/lib/treedx/client.d.ts +57 -0
- package/lib/treedx/client.js +82 -0
- package/lib/treedx/client.js.map +1 -0
- package/lib/treedx/provider.d.ts +39 -0
- package/lib/treedx/provider.js +479 -0
- package/lib/treedx/provider.js.map +1 -0
- package/lib/treedx/state.d.ts +27 -0
- package/lib/treedx/state.js +65 -0
- package/lib/treedx/state.js.map +1 -0
- package/lib/types.d.ts +210 -0
- package/lib/types.js +31 -0
- package/lib/types.js.map +1 -0
- package/lib/version.d.ts +9 -0
- package/lib/version.js +10 -0
- package/lib/version.js.map +1 -0
- package/lib/vocabulary.d.ts +41 -0
- package/lib/vocabulary.js +118 -0
- package/lib/vocabulary.js.map +1 -0
- package/lib/warnings.d.ts +10 -0
- package/lib/warnings.js +18 -0
- package/lib/warnings.js.map +1 -0
- package/package.json +151 -4
package/lib/engine.d.ts
ADDED
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ChaptersCompactionEngine — the cordis-facing adapter over the pure
|
|
3
|
+
* engine-core logic. Mounted INSIDE a preset realm's compaction group (never
|
|
4
|
+
* the host plane beside `basic`: two engines double-fire across planes,
|
|
5
|
+
* FINDINGS § Phase 0b), it overrides exactly the sanctioned hook plus the two
|
|
6
|
+
* entry points whose results the finalizer needs.
|
|
7
|
+
*
|
|
8
|
+
* Everything decision-shaped lives in engine-core.ts, where it is
|
|
9
|
+
* harness-free testable. This file is glue: service resolution, durable
|
|
10
|
+
* reads/writes, and the never-break-the-caller containment the base's own
|
|
11
|
+
* listeners already model.
|
|
12
|
+
*/
|
|
13
|
+
import { BasicCompactionEngine } from '@deepseek-ai/dsh-compaction-basic';
|
|
14
|
+
import type { BasicCompactionConfig } from '@deepseek-ai/dsh-compaction-basic';
|
|
15
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
16
|
+
import type { Agent } from '@deepseek-ai/dsh-agent';
|
|
17
|
+
import type { CompactionResult, CompactionTrigger } from '@deepseek-ai/dsh-compaction';
|
|
18
|
+
import type { CommandId } from '@deepseek-ai/dsh-commands/brand';
|
|
19
|
+
import z from '@deepseek-ai/schemastery';
|
|
20
|
+
import { type SummarizeInputLike, type SummarizeResultLike } from './engine-core.ts';
|
|
21
|
+
/** Row config: the base's keys (so realm rows validate) plus the archive's own. */
|
|
22
|
+
export interface ChaptersRowConfig extends BasicCompactionConfig {
|
|
23
|
+
/** Lines of the chapter index a continuation notice lists (0 = all). A fixed-size notice is what lets a
|
|
24
|
+
* boundary-sitting leg be captured and replayed at all (#56). */
|
|
25
|
+
noticeIndexCap?: number | undefined;
|
|
26
|
+
artifactStoreRoot?: string;
|
|
27
|
+
/** #85: pool-mirror root for rules/knowledge reads that produce model-visible text. */
|
|
28
|
+
knowledgeMirrorDir?: string;
|
|
29
|
+
/** #87: verbatim carry of the newest human turn, capped; the cap is stated, never silent. */
|
|
30
|
+
openRequestCarryMaxChars?: number;
|
|
31
|
+
/** #78 A: defer a node relief cannot coexist with, after a measured decline. */
|
|
32
|
+
lastResortArtifact?: boolean;
|
|
33
|
+
/** #95 follow-up: sink size cap; 0 = uncapped. */
|
|
34
|
+
diagnosticsMaxBytes?: number;
|
|
35
|
+
chapterTokenTarget?: number;
|
|
36
|
+
toolResultDeferFloorTokens?: number;
|
|
37
|
+
mergeThreshold?: number;
|
|
38
|
+
/** #61 Amendment A: the seventh archive moment, and its re-arm lag. */
|
|
39
|
+
childAutoArchive?: boolean | undefined;
|
|
40
|
+
childAutoArchiveMinTurns?: number | undefined;
|
|
41
|
+
chapterLimit?: number;
|
|
42
|
+
syncDebounceMs?: number;
|
|
43
|
+
toolResultArtifactTokens?: number;
|
|
44
|
+
/** Plans (docs/plans-carriage.md § 7): verbatim plan chars in a chapter's Plans
|
|
45
|
+
* block, and the tool-call-argument artifact floor (0 = off). */
|
|
46
|
+
planInlineChars?: number;
|
|
47
|
+
callArgArtifactTokens?: number;
|
|
48
|
+
/** Carry the operative plan into every checkpoint (plans-carriage § 9). */
|
|
49
|
+
plansInCheckpoint?: boolean;
|
|
50
|
+
planCheckpointChars?: number;
|
|
51
|
+
elicitedPlot?: boolean;
|
|
52
|
+
harnessId?: string;
|
|
53
|
+
sessionRulesEnabled?: boolean;
|
|
54
|
+
rulesMarkerPrefix?: string;
|
|
55
|
+
coreRulesBudgetTokens?: number;
|
|
56
|
+
projectRulesDisplayCap?: number;
|
|
57
|
+
sessionRulesDisplayCap?: number;
|
|
58
|
+
rulesRelevance?: boolean;
|
|
59
|
+
/** §7.5 model-mined rules; default ON. */
|
|
60
|
+
rulesEnrichment?: boolean;
|
|
61
|
+
/** §7.5 per-chapter cap on mined rules */
|
|
62
|
+
rulesMinedPerChapter?: number;
|
|
63
|
+
/** One auxiliary completion budget (annotation+mining, conflicts): must cover
|
|
64
|
+
* reasoning tokens as well as the visible answer — see enrich.ts. */
|
|
65
|
+
enrichmentMaxTokens?: number;
|
|
66
|
+
/** §7.5: mined rules govern on arrival unless false (then they wait for review).
|
|
67
|
+
* Default true — inferring what nobody spelled out is the whole point. */
|
|
68
|
+
rulesAutoActivate?: boolean;
|
|
69
|
+
/** §7.5: 'provider/model' for a dedicated mining call; '' ⇒ the annotation pass */
|
|
70
|
+
rulesModel?: string;
|
|
71
|
+
enrichmentEnabled?: boolean;
|
|
72
|
+
enrichmentModel?: string;
|
|
73
|
+
enrichmentTrigger?: 'afterPush' | 'idle' | 'both' | 'manual';
|
|
74
|
+
enrichmentIdleMs?: number;
|
|
75
|
+
enrichmentBatchCap?: number;
|
|
76
|
+
vocabApply?: boolean;
|
|
77
|
+
vocabCoMin?: number;
|
|
78
|
+
vocabOverlapMin?: number;
|
|
79
|
+
treedxFetchTimeoutMs?: number;
|
|
80
|
+
treedxWorkspaceTtlSeconds?: number;
|
|
81
|
+
treedxLeaseRetries?: number;
|
|
82
|
+
treedxLeaseRetryDelayMs?: number;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Per-turn deterministic signature listener (knowledge-repo.md §4.1), as a
|
|
86
|
+
* plain factory so the LOGIC is unit-testable against the real host Session
|
|
87
|
+
* shape without a full cordis Service context. Never-break containment: the
|
|
88
|
+
* handler reports through `warn`, it never throws into the session.
|
|
89
|
+
*
|
|
90
|
+
* r28 found the load-bearing fact: the host Session is a CLASS exposing
|
|
91
|
+
* snapshotEvents() — a `.events` property does not exist, and the first cut
|
|
92
|
+
* read `.events`, no-op'd silently in every real boot, and passed its L0
|
|
93
|
+
* test because the test stubbed the shape that does not exist.
|
|
94
|
+
*/
|
|
95
|
+
export declare function makeSignatureListener(deps: {
|
|
96
|
+
store: () => Promise<{
|
|
97
|
+
store: import('./store.ts').RegistryStore;
|
|
98
|
+
}>;
|
|
99
|
+
warn: (error: unknown) => void;
|
|
100
|
+
onCollected?: (id: string, sig: {
|
|
101
|
+
seqs: number[];
|
|
102
|
+
paths: string[];
|
|
103
|
+
terms: string[];
|
|
104
|
+
size: number;
|
|
105
|
+
}) => void;
|
|
106
|
+
/** Optional subprocess service for CodeGraph symbol verification. */
|
|
107
|
+
subprocess?: import('./codegraph.ts').SubprocessLike | undefined;
|
|
108
|
+
/** #61: `<store-root>` so the diagnostics sink can default to a file without any env setup. */
|
|
109
|
+
storeRoot?: string | undefined;
|
|
110
|
+
}): (session: unknown, event: unknown) => void;
|
|
111
|
+
/**
|
|
112
|
+
* Pull-on-first-turn (§5.1) as a plain factory, same testability discipline
|
|
113
|
+
* as the signature listener. Process-scoped "first turn seen" — a resumed
|
|
114
|
+
* old session pulling once more is harmless and bounded.
|
|
115
|
+
*/
|
|
116
|
+
export declare function makeFirstTurnPullListener(deps: {
|
|
117
|
+
pull: (cwd: string) => Promise<unknown>;
|
|
118
|
+
}): (session: unknown, event: unknown) => void;
|
|
119
|
+
/**
|
|
120
|
+
* #87 — carry the instruction that relief is about to shadow.
|
|
121
|
+
*
|
|
122
|
+
* Measured in the field: a `heavy` session whose thirteen compactions shadowed ten of the eleven
|
|
123
|
+
* copies of the human's follow-up question. What survives in the surface is the summary — a plot, not
|
|
124
|
+
* a request — so the model is never shown the thing it is being asked to do. Nothing errors; the user
|
|
125
|
+
* sees an agent that stopped answering.
|
|
126
|
+
*
|
|
127
|
+
* The fix stays inside our own seams and honors invariant 1 (nothing recorded is rewritten): WE author
|
|
128
|
+
* the summary text, so the newest human instruction travels INTO it, verbatim. Truncation is never
|
|
129
|
+
* silent — the cap is stated in the block. Injected scaffolding (workspace reminders, the host's own
|
|
130
|
+
* checkpoint preamble, our notices) is skipped: those are represented elsewhere, and carrying them
|
|
131
|
+
* would re-inject machine state as if it were a request.
|
|
132
|
+
*/
|
|
133
|
+
type SummaryPart = {
|
|
134
|
+
type: 'text';
|
|
135
|
+
text: string;
|
|
136
|
+
};
|
|
137
|
+
export declare function carryOpenRequest(parts: readonly SummaryPart[], messages: readonly unknown[], capChars: number): SummaryPart[];
|
|
138
|
+
export declare class ChaptersCompactionEngine extends BasicCompactionEngine {
|
|
139
|
+
#private;
|
|
140
|
+
static inject: string[];
|
|
141
|
+
static Config: z<Schemastery.ObjectS<{
|
|
142
|
+
thresholdRatio: z<number, number>;
|
|
143
|
+
retainRatio: z<number, number>;
|
|
144
|
+
retainTokens: z<number, number>;
|
|
145
|
+
headroomTokens: z<number, number>;
|
|
146
|
+
summarizationProvider: z<string, string>;
|
|
147
|
+
summarizationModel: z<string, string>;
|
|
148
|
+
maxTokens: z<number, number>;
|
|
149
|
+
compactionRetries: z<number, number>;
|
|
150
|
+
maxOverflowRetries: z<number, number>;
|
|
151
|
+
modelPolicies: z<({
|
|
152
|
+
provider?: string | null;
|
|
153
|
+
model?: string | null;
|
|
154
|
+
thresholdRatio?: number | null;
|
|
155
|
+
retainRatio?: number | null;
|
|
156
|
+
retainTokens?: number | null;
|
|
157
|
+
headroomTokens?: number | null;
|
|
158
|
+
summarizationProvider?: string | null;
|
|
159
|
+
summarizationModel?: string | null;
|
|
160
|
+
maxTokens?: number | null;
|
|
161
|
+
compactionRetries?: number | null;
|
|
162
|
+
maxOverflowRetries?: number | null;
|
|
163
|
+
} & import("@deepseek-ai/cosmokit").Dict)[], Schemastery.ObjectT<{
|
|
164
|
+
provider: z<string, string>;
|
|
165
|
+
model: z<string, string>;
|
|
166
|
+
thresholdRatio: z<number, number>;
|
|
167
|
+
retainRatio: z<number, number>;
|
|
168
|
+
retainTokens: z<number, number>;
|
|
169
|
+
headroomTokens: z<number, number>;
|
|
170
|
+
summarizationProvider: z<string, string>;
|
|
171
|
+
summarizationModel: z<string, string>;
|
|
172
|
+
maxTokens: z<number, number>;
|
|
173
|
+
compactionRetries: z<number, number>;
|
|
174
|
+
maxOverflowRetries: z<number, number>;
|
|
175
|
+
}>[]>;
|
|
176
|
+
auto: z<boolean, boolean>;
|
|
177
|
+
artifactStoreRoot: z<string, string>;
|
|
178
|
+
knowledgeMirrorDir: z<string, string>;
|
|
179
|
+
openRequestCarryMaxChars: z<number, number>;
|
|
180
|
+
/** #78 A: the last-resort deferral switch. Operator-visible, default on. */
|
|
181
|
+
lastResortArtifact: z<boolean, boolean>;
|
|
182
|
+
/** #95 follow-up: diagnostics sink cap, bytes. 0 = uncapped. */
|
|
183
|
+
diagnosticsMaxBytes: z<number, number>;
|
|
184
|
+
chapterTokenTarget: z<number, number>;
|
|
185
|
+
toolResultDeferFloorTokens: z<number, number>;
|
|
186
|
+
mergeThreshold: z<number, number>;
|
|
187
|
+
chapterLimit: z<number, number>;
|
|
188
|
+
syncDebounceMs: z<number, number>;
|
|
189
|
+
toolResultArtifactTokens: z<number, number>;
|
|
190
|
+
childAutoArchive: z<boolean, boolean>;
|
|
191
|
+
childAutoArchiveMinTurns: z<number, number>;
|
|
192
|
+
elicitedPlot: z<boolean, boolean>;
|
|
193
|
+
harnessId: z<string, string>;
|
|
194
|
+
sessionRulesEnabled: z<boolean, boolean>;
|
|
195
|
+
rulesMarkerPrefix: z<string, string>;
|
|
196
|
+
coreRulesBudgetTokens: z<number, number>;
|
|
197
|
+
projectRulesDisplayCap: z<number, number>;
|
|
198
|
+
sessionRulesDisplayCap: z<number, number>;
|
|
199
|
+
rulesRelevance: z<boolean, boolean>;
|
|
200
|
+
rulesEnrichment: z<boolean, boolean>;
|
|
201
|
+
rulesMinedPerChapter: z<number, number>;
|
|
202
|
+
rulesAutoActivate: z<boolean, boolean>;
|
|
203
|
+
rulesModel: z<string, string>;
|
|
204
|
+
enrichmentEnabled: z<boolean, boolean>;
|
|
205
|
+
enrichmentModel: z<string, string>;
|
|
206
|
+
enrichmentTrigger: z<string, string>;
|
|
207
|
+
enrichmentIdleMs: z<number, number>;
|
|
208
|
+
enrichmentBatchCap: z<number, number>;
|
|
209
|
+
enrichmentMaxTokens: z<number, number>;
|
|
210
|
+
vocabApply: z<boolean, boolean>;
|
|
211
|
+
vocabCoMin: z<number, number>;
|
|
212
|
+
vocabOverlapMin: z<number, number>;
|
|
213
|
+
treedxFetchTimeoutMs: z<number, number>;
|
|
214
|
+
treedxWorkspaceTtlSeconds: z<number, number>;
|
|
215
|
+
treedxLeaseRetries: z<number, number>;
|
|
216
|
+
treedxLeaseRetryDelayMs: z<number, number>;
|
|
217
|
+
}>, Schemastery.ObjectT<{
|
|
218
|
+
thresholdRatio: z<number, number>;
|
|
219
|
+
retainRatio: z<number, number>;
|
|
220
|
+
retainTokens: z<number, number>;
|
|
221
|
+
headroomTokens: z<number, number>;
|
|
222
|
+
summarizationProvider: z<string, string>;
|
|
223
|
+
summarizationModel: z<string, string>;
|
|
224
|
+
maxTokens: z<number, number>;
|
|
225
|
+
compactionRetries: z<number, number>;
|
|
226
|
+
maxOverflowRetries: z<number, number>;
|
|
227
|
+
modelPolicies: z<({
|
|
228
|
+
provider?: string | null;
|
|
229
|
+
model?: string | null;
|
|
230
|
+
thresholdRatio?: number | null;
|
|
231
|
+
retainRatio?: number | null;
|
|
232
|
+
retainTokens?: number | null;
|
|
233
|
+
headroomTokens?: number | null;
|
|
234
|
+
summarizationProvider?: string | null;
|
|
235
|
+
summarizationModel?: string | null;
|
|
236
|
+
maxTokens?: number | null;
|
|
237
|
+
compactionRetries?: number | null;
|
|
238
|
+
maxOverflowRetries?: number | null;
|
|
239
|
+
} & import("@deepseek-ai/cosmokit").Dict)[], Schemastery.ObjectT<{
|
|
240
|
+
provider: z<string, string>;
|
|
241
|
+
model: z<string, string>;
|
|
242
|
+
thresholdRatio: z<number, number>;
|
|
243
|
+
retainRatio: z<number, number>;
|
|
244
|
+
retainTokens: z<number, number>;
|
|
245
|
+
headroomTokens: z<number, number>;
|
|
246
|
+
summarizationProvider: z<string, string>;
|
|
247
|
+
summarizationModel: z<string, string>;
|
|
248
|
+
maxTokens: z<number, number>;
|
|
249
|
+
compactionRetries: z<number, number>;
|
|
250
|
+
maxOverflowRetries: z<number, number>;
|
|
251
|
+
}>[]>;
|
|
252
|
+
auto: z<boolean, boolean>;
|
|
253
|
+
artifactStoreRoot: z<string, string>;
|
|
254
|
+
knowledgeMirrorDir: z<string, string>;
|
|
255
|
+
openRequestCarryMaxChars: z<number, number>;
|
|
256
|
+
/** #78 A: the last-resort deferral switch. Operator-visible, default on. */
|
|
257
|
+
lastResortArtifact: z<boolean, boolean>;
|
|
258
|
+
/** #95 follow-up: diagnostics sink cap, bytes. 0 = uncapped. */
|
|
259
|
+
diagnosticsMaxBytes: z<number, number>;
|
|
260
|
+
chapterTokenTarget: z<number, number>;
|
|
261
|
+
toolResultDeferFloorTokens: z<number, number>;
|
|
262
|
+
mergeThreshold: z<number, number>;
|
|
263
|
+
chapterLimit: z<number, number>;
|
|
264
|
+
syncDebounceMs: z<number, number>;
|
|
265
|
+
toolResultArtifactTokens: z<number, number>;
|
|
266
|
+
childAutoArchive: z<boolean, boolean>;
|
|
267
|
+
childAutoArchiveMinTurns: z<number, number>;
|
|
268
|
+
elicitedPlot: z<boolean, boolean>;
|
|
269
|
+
harnessId: z<string, string>;
|
|
270
|
+
sessionRulesEnabled: z<boolean, boolean>;
|
|
271
|
+
rulesMarkerPrefix: z<string, string>;
|
|
272
|
+
coreRulesBudgetTokens: z<number, number>;
|
|
273
|
+
projectRulesDisplayCap: z<number, number>;
|
|
274
|
+
sessionRulesDisplayCap: z<number, number>;
|
|
275
|
+
rulesRelevance: z<boolean, boolean>;
|
|
276
|
+
rulesEnrichment: z<boolean, boolean>;
|
|
277
|
+
rulesMinedPerChapter: z<number, number>;
|
|
278
|
+
rulesAutoActivate: z<boolean, boolean>;
|
|
279
|
+
rulesModel: z<string, string>;
|
|
280
|
+
enrichmentEnabled: z<boolean, boolean>;
|
|
281
|
+
enrichmentModel: z<string, string>;
|
|
282
|
+
enrichmentTrigger: z<string, string>;
|
|
283
|
+
enrichmentIdleMs: z<number, number>;
|
|
284
|
+
enrichmentBatchCap: z<number, number>;
|
|
285
|
+
enrichmentMaxTokens: z<number, number>;
|
|
286
|
+
vocabApply: z<boolean, boolean>;
|
|
287
|
+
vocabCoMin: z<number, number>;
|
|
288
|
+
vocabOverlapMin: z<number, number>;
|
|
289
|
+
treedxFetchTimeoutMs: z<number, number>;
|
|
290
|
+
treedxWorkspaceTtlSeconds: z<number, number>;
|
|
291
|
+
treedxLeaseRetries: z<number, number>;
|
|
292
|
+
treedxLeaseRetryDelayMs: z<number, number>;
|
|
293
|
+
}>>;
|
|
294
|
+
private readonly chaptersConfig;
|
|
295
|
+
/** #50 §7.5/§7.3: capture + rendering numbers, host plane mirrored in. */
|
|
296
|
+
private ruleCfg;
|
|
297
|
+
private storePromise;
|
|
298
|
+
/** #52: the delegation-edge reader, built lazily because a field initializer
|
|
299
|
+
* cannot see the constructor parameter and the realm may hold neither service.
|
|
300
|
+
* null = not built yet; undefined = built and unavailable (registry edges only). */
|
|
301
|
+
private parentOfReader;
|
|
302
|
+
/** The reader the rule-ancestry walk uses. Absent ⇒ delegation contributes no edge. */
|
|
303
|
+
private ruleParentOf;
|
|
304
|
+
constructor(ctx: Context, config?: ChaptersRowConfig);
|
|
305
|
+
/**
|
|
306
|
+
* Per-turn deterministic signatures at turn/end (knowledge-repo §4.1):
|
|
307
|
+
* synchronous extraction, async store append, and never-break containment —
|
|
308
|
+
* a signature failure must never touch the compaction path (AGENTS hard
|
|
309
|
+
* rule: the listener reports, it never throws into the session). The base
|
|
310
|
+
* engine's own listeners model the same shape.
|
|
311
|
+
*/
|
|
312
|
+
/** The realm's own scheduler (§5): same code as the host plane's; the file
|
|
313
|
+
* lock and debounce keep the two honest against each other. */
|
|
314
|
+
private syncDebounceMs;
|
|
315
|
+
private vocabCfg;
|
|
316
|
+
private enrichCfg;
|
|
317
|
+
private enrichPromise;
|
|
318
|
+
private lastCwd;
|
|
319
|
+
private lastRoute;
|
|
320
|
+
private lastWindowTokens;
|
|
321
|
+
private schedulerPromise;
|
|
322
|
+
/** Lazy, once. `storageDomain` is a host-plane singleton the realm resolves;
|
|
323
|
+
* acquire (never bare-open): a mounted tools-plugin may already own the reservation. */
|
|
324
|
+
private store;
|
|
325
|
+
protected summarize(input: SummarizeInputLike, agent: unknown, _signal?: AbortSignal): Promise<SummarizeResultLike>;
|
|
326
|
+
compactIfNeeded(agent: Agent, trigger: CompactionTrigger, signal: AbortSignal): Promise<CompactionResult | null>;
|
|
327
|
+
compactNow(agent: Agent, signal: AbortSignal, sourceCommandId?: CommandId): Promise<CompactionResult | null>;
|
|
328
|
+
}
|
|
329
|
+
export default ChaptersCompactionEngine;
|