@hmbown/kytchen-reasoning 0.1.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.
Files changed (45) hide show
  1. package/dist/autocode.d.ts +89 -0
  2. package/dist/autocode.d.ts.map +1 -0
  3. package/dist/autocode.js +282 -0
  4. package/dist/autocode.js.map +1 -0
  5. package/dist/autocode.test.d.ts +2 -0
  6. package/dist/autocode.test.d.ts.map +1 -0
  7. package/dist/autocode.test.js +149 -0
  8. package/dist/autocode.test.js.map +1 -0
  9. package/dist/coherence.d.ts +123 -0
  10. package/dist/coherence.d.ts.map +1 -0
  11. package/dist/coherence.js +289 -0
  12. package/dist/coherence.js.map +1 -0
  13. package/dist/coherence.test.d.ts +2 -0
  14. package/dist/coherence.test.d.ts.map +1 -0
  15. package/dist/coherence.test.js +14 -0
  16. package/dist/coherence.test.js.map +1 -0
  17. package/dist/dialectic.d.ts +126 -0
  18. package/dist/dialectic.d.ts.map +1 -0
  19. package/dist/dialectic.js +317 -0
  20. package/dist/dialectic.js.map +1 -0
  21. package/dist/index.d.ts +6 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +6 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/recursive.d.ts +214 -0
  26. package/dist/recursive.d.ts.map +1 -0
  27. package/dist/recursive.js +570 -0
  28. package/dist/recursive.js.map +1 -0
  29. package/dist/recursive.test.d.ts +2 -0
  30. package/dist/recursive.test.d.ts.map +1 -0
  31. package/dist/recursive.test.js +94 -0
  32. package/dist/recursive.test.js.map +1 -0
  33. package/dist/router.d.ts +28 -0
  34. package/dist/router.d.ts.map +1 -0
  35. package/dist/router.golden.test.d.ts +2 -0
  36. package/dist/router.golden.test.d.ts.map +1 -0
  37. package/dist/router.golden.test.js +84 -0
  38. package/dist/router.golden.test.js.map +1 -0
  39. package/dist/router.js +272 -0
  40. package/dist/router.js.map +1 -0
  41. package/dist/router.test.d.ts +2 -0
  42. package/dist/router.test.d.ts.map +1 -0
  43. package/dist/router.test.js +86 -0
  44. package/dist/router.test.js.map +1 -0
  45. package/package.json +40 -0
@@ -0,0 +1,123 @@
1
+ import type { CompactionSnapshot } from "@hmbown/kytchen-protocol";
2
+ export interface PressureVector {
3
+ actionComplexity: number;
4
+ toolComplexity: number;
5
+ referenceComplexity: number;
6
+ contextUsedRatio: number;
7
+ }
8
+ export declare function computeHHat(vector: PressureVector): number;
9
+ export interface ModelProfile {
10
+ name: string;
11
+ maxContextTokens: number;
12
+ /** Recommended compaction threshold ratio. */
13
+ tokenThresholdRatio: number;
14
+ /** Recommended message count threshold. */
15
+ messageThreshold: number;
16
+ }
17
+ export declare const MODEL_PROFILES: Record<string, ModelProfile>;
18
+ export declare function getModelProfile(model: string): ModelProfile;
19
+ export interface CoherenceThresholds {
20
+ warn: number;
21
+ critical: number;
22
+ }
23
+ export interface CoherenceConfig {
24
+ thresholds: CoherenceThresholds;
25
+ tokenThresholdRatio: number;
26
+ messageThreshold: number;
27
+ /** Auto-compact when thresholds are exceeded. */
28
+ autoCompact?: boolean;
29
+ /** Number of recent turns to always pin. */
30
+ keepRecentTurns?: number;
31
+ /** Max working-set paths to pin. */
32
+ maxPinnedPaths?: number;
33
+ }
34
+ export type CoherenceSeverity = "ok" | "warn" | "critical" | "emergency";
35
+ export interface CoherenceState {
36
+ hHat: number;
37
+ shouldCompact: boolean;
38
+ severity: CoherenceSeverity;
39
+ tokenRatio: number;
40
+ messageCount: number;
41
+ }
42
+ export declare function evaluateCoherence(config: CoherenceConfig, vector: PressureVector, usedTokens: number, maxTokens: number, messageCount: number): CoherenceState;
43
+ export interface WorkingSetEntry {
44
+ path: string;
45
+ reason: string;
46
+ addedAt: string;
47
+ }
48
+ export declare class WorkingSetTracker {
49
+ private readonly entries;
50
+ private readonly maxEntries;
51
+ constructor(maxEntries?: number);
52
+ add(path: string, reason: string): void;
53
+ remove(path: string): boolean;
54
+ getPinnedPaths(): string[];
55
+ getEntries(): WorkingSetEntry[];
56
+ clear(): void;
57
+ }
58
+ /**
59
+ * Callback to produce a summary from conversation history.
60
+ * Provider-agnostic — the caller wires this to whatever LLM is in use.
61
+ */
62
+ export type SummarizeCallback = (content: string, pinnedAnchors: string[]) => Promise<string>;
63
+ export interface CompactionInput {
64
+ threadId: string;
65
+ runId: string;
66
+ /** Full conversation content to compact. */
67
+ content: string;
68
+ /** Working set paths to pin through compaction. */
69
+ pinnedPaths: string[];
70
+ /** Recent turn IDs to pin. */
71
+ recentTurnIds: string[];
72
+ }
73
+ export interface CompactionResult {
74
+ snapshot: CompactionSnapshot;
75
+ success: boolean;
76
+ error?: string;
77
+ }
78
+ export declare class CompactionOrchestrator {
79
+ private readonly summarize?;
80
+ constructor(summarize?: SummarizeCallback | undefined);
81
+ /**
82
+ * Execute compaction on the given input.
83
+ * If model-assisted summarization fails, falls back to deterministic trim.
84
+ */
85
+ compact(input: CompactionInput): Promise<CompactionResult>;
86
+ /**
87
+ * Emergency compaction — more aggressive trimming when context budget
88
+ * is about to overflow.
89
+ */
90
+ emergencyCompact(input: CompactionInput): Promise<CompactionResult>;
91
+ /**
92
+ * Deterministic trim: keep only lines containing pinned anchors
93
+ * plus a tail of the most recent content.
94
+ */
95
+ private deterministicTrim;
96
+ }
97
+ export declare class CapacityController {
98
+ private readonly coherenceConfig;
99
+ private readonly workingSet;
100
+ private readonly compactor;
101
+ private readonly modelProfile;
102
+ constructor(config: {
103
+ coherence: CoherenceConfig;
104
+ model: string;
105
+ summarize?: SummarizeCallback;
106
+ maxWorkingSetPaths?: number;
107
+ });
108
+ /** Evaluate current coherence state. */
109
+ evaluate(vector: PressureVector, usedTokens: number, messageCount: number): CoherenceState;
110
+ /** Add a path to the working set (pinned through compaction). */
111
+ pin(path: string, reason: string): void;
112
+ /** Remove a path from the working set. */
113
+ unpin(path: string): void;
114
+ /** Get currently pinned paths. */
115
+ getPinnedPaths(): string[];
116
+ /** Get model profile. */
117
+ getModelProfile(): ModelProfile;
118
+ /** Trigger compaction. */
119
+ compact(input: CompactionInput): Promise<CompactionResult>;
120
+ /** Trigger emergency compaction. */
121
+ emergencyCompact(input: CompactionInput): Promise<CompactionResult>;
122
+ }
123
+ //# sourceMappingURL=coherence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coherence.d.ts","sourceRoot":"","sources":["../src/coherence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAMnE,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAQ1D;AAMD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,2CAA2C;IAC3C,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAmEvD,CAAC;AAEF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAE3D;AAMD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,mBAAmB,CAAC;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iDAAiD;IACjD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4CAA4C;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oCAAoC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,CAAC;AAEzE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,cAAc,CA6ChB;AAMD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,UAAU,SAAK;IAI3B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAevC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI7B,cAAc,IAAI,MAAM,EAAE;IAI1B,UAAU,IAAI,eAAe,EAAE;IAI/B,KAAK,IAAI,IAAI;CAGd;AAMD;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC9B,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EAAE,KACpB,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,8BAA8B;IAC9B,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAV,SAAS,CAAC,EAAE,iBAAiB,YAAA;IAGhD;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA8ChE;;;OAGG;IACG,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAezE;;;OAGG;IACH,OAAO,CAAC,iBAAiB;CAwB1B;AAMD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;gBAEhC,MAAM,EAAE;QAClB,SAAS,EAAE,eAAe,CAAC;QAC3B,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,iBAAiB,CAAC;QAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B;IAOD,wCAAwC;IACxC,QAAQ,CACN,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,cAAc;IAUjB,iEAAiE;IACjE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAIvC,0CAA0C;IAC1C,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzB,kCAAkC;IAClC,cAAc,IAAI,MAAM,EAAE;IAI1B,yBAAyB;IACzB,eAAe,IAAI,YAAY;IAI/B,0BAA0B;IACpB,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAUhE,oCAAoC;IAC9B,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAG1E"}
@@ -0,0 +1,289 @@
1
+ export function computeHHat(vector) {
2
+ const contextPressureBits = 6.0 * vector.contextUsedRatio;
3
+ return (0.35 * vector.actionComplexity +
4
+ 0.3 * vector.toolComplexity +
5
+ 0.2 * vector.referenceComplexity +
6
+ 0.15 * contextPressureBits);
7
+ }
8
+ export const MODEL_PROFILES = {
9
+ "gpt-5.3-codex": {
10
+ name: "gpt-5.3-codex",
11
+ maxContextTokens: 400_000,
12
+ tokenThresholdRatio: 0.68,
13
+ messageThreshold: 120,
14
+ },
15
+ "gpt-5.3-codex-spark": {
16
+ name: "gpt-5.3-codex-spark",
17
+ maxContextTokens: 400_000,
18
+ tokenThresholdRatio: 0.7,
19
+ messageThreshold: 110,
20
+ },
21
+ "gpt-5.3": {
22
+ name: "gpt-5.3",
23
+ maxContextTokens: 400_000,
24
+ tokenThresholdRatio: 0.7,
25
+ messageThreshold: 105,
26
+ },
27
+ "gpt-5.2-chat-latest": {
28
+ name: "gpt-5.2-chat-latest",
29
+ maxContextTokens: 128_000,
30
+ tokenThresholdRatio: 0.72,
31
+ messageThreshold: 70,
32
+ },
33
+ "gpt-5": {
34
+ name: "gpt-5",
35
+ maxContextTokens: 400_000,
36
+ tokenThresholdRatio: 0.7,
37
+ messageThreshold: 100,
38
+ },
39
+ "gpt-5.2": {
40
+ name: "gpt-5.2",
41
+ maxContextTokens: 400_000,
42
+ tokenThresholdRatio: 0.7,
43
+ messageThreshold: 100,
44
+ },
45
+ "gpt-5.2-codex": {
46
+ name: "gpt-5.2-codex",
47
+ maxContextTokens: 400_000,
48
+ tokenThresholdRatio: 0.69,
49
+ messageThreshold: 110,
50
+ },
51
+ "gpt-5.2-pro": {
52
+ name: "gpt-5.2-pro",
53
+ maxContextTokens: 400_000,
54
+ tokenThresholdRatio: 0.68,
55
+ messageThreshold: 120,
56
+ },
57
+ "gpt-5-mini": {
58
+ name: "gpt-5-mini",
59
+ maxContextTokens: 400_000,
60
+ tokenThresholdRatio: 0.72,
61
+ messageThreshold: 90,
62
+ },
63
+ "gpt-5-nano": {
64
+ name: "gpt-5-nano",
65
+ maxContextTokens: 400_000,
66
+ tokenThresholdRatio: 0.75,
67
+ messageThreshold: 75,
68
+ },
69
+ default: {
70
+ name: "default",
71
+ maxContextTokens: 400_000,
72
+ tokenThresholdRatio: 0.7,
73
+ messageThreshold: 100,
74
+ },
75
+ };
76
+ export function getModelProfile(model) {
77
+ return MODEL_PROFILES[model] ?? MODEL_PROFILES["default"];
78
+ }
79
+ export function evaluateCoherence(config, vector, usedTokens, maxTokens, messageCount) {
80
+ const hHat = computeHHat(vector);
81
+ const tokenRatio = maxTokens <= 0 ? 1 : usedTokens / maxTokens;
82
+ const tokenPressureTriggered = tokenRatio >= config.tokenThresholdRatio;
83
+ const messagePressureTriggered = messageCount >= config.messageThreshold;
84
+ const pressureTriggered = hHat >= config.thresholds.critical;
85
+ // Emergency: hard context overflow risk (>90% of max tokens)
86
+ if (tokenRatio >= 0.9) {
87
+ return {
88
+ hHat,
89
+ shouldCompact: true,
90
+ severity: "emergency",
91
+ tokenRatio,
92
+ messageCount,
93
+ };
94
+ }
95
+ if (pressureTriggered || tokenPressureTriggered || messagePressureTriggered) {
96
+ return {
97
+ hHat,
98
+ shouldCompact: config.autoCompact !== false,
99
+ severity: hHat >= config.thresholds.critical ? "critical" : "warn",
100
+ tokenRatio,
101
+ messageCount,
102
+ };
103
+ }
104
+ if (hHat >= config.thresholds.warn) {
105
+ return {
106
+ hHat,
107
+ shouldCompact: false,
108
+ severity: "warn",
109
+ tokenRatio,
110
+ messageCount,
111
+ };
112
+ }
113
+ return {
114
+ hHat,
115
+ shouldCompact: false,
116
+ severity: "ok",
117
+ tokenRatio,
118
+ messageCount,
119
+ };
120
+ }
121
+ export class WorkingSetTracker {
122
+ entries = new Map();
123
+ maxEntries;
124
+ constructor(maxEntries = 20) {
125
+ this.maxEntries = maxEntries;
126
+ }
127
+ add(path, reason) {
128
+ if (this.entries.size >= this.maxEntries && !this.entries.has(path)) {
129
+ // Evict oldest entry
130
+ const oldest = [...this.entries.entries()].sort(([, a], [, b]) => a.addedAt.localeCompare(b.addedAt))[0];
131
+ if (oldest)
132
+ this.entries.delete(oldest[0]);
133
+ }
134
+ this.entries.set(path, {
135
+ path,
136
+ reason,
137
+ addedAt: new Date().toISOString(),
138
+ });
139
+ }
140
+ remove(path) {
141
+ return this.entries.delete(path);
142
+ }
143
+ getPinnedPaths() {
144
+ return [...this.entries.keys()];
145
+ }
146
+ getEntries() {
147
+ return [...this.entries.values()];
148
+ }
149
+ clear() {
150
+ this.entries.clear();
151
+ }
152
+ }
153
+ export class CompactionOrchestrator {
154
+ summarize;
155
+ constructor(summarize) {
156
+ this.summarize = summarize;
157
+ }
158
+ /**
159
+ * Execute compaction on the given input.
160
+ * If model-assisted summarization fails, falls back to deterministic trim.
161
+ */
162
+ async compact(input) {
163
+ const pinnedAnchors = [
164
+ ...input.pinnedPaths,
165
+ ...input.recentTurnIds,
166
+ ];
167
+ try {
168
+ let summary;
169
+ if (this.summarize) {
170
+ summary = await this.summarize(input.content, pinnedAnchors);
171
+ }
172
+ else {
173
+ summary = this.deterministicTrim(input.content, pinnedAnchors);
174
+ }
175
+ const snapshot = {
176
+ threadId: input.threadId,
177
+ runId: input.runId,
178
+ summary,
179
+ pinnedAnchors,
180
+ createdAt: new Date().toISOString(),
181
+ };
182
+ return { snapshot, success: true };
183
+ }
184
+ catch (err) {
185
+ // Fallback: deterministic trim
186
+ const fallbackSummary = this.deterministicTrim(input.content, pinnedAnchors);
187
+ const snapshot = {
188
+ threadId: input.threadId,
189
+ runId: input.runId,
190
+ summary: fallbackSummary,
191
+ pinnedAnchors,
192
+ createdAt: new Date().toISOString(),
193
+ };
194
+ return {
195
+ snapshot,
196
+ success: false,
197
+ error: `Summarization failed, used deterministic trim: ${err instanceof Error ? err.message : String(err)}`,
198
+ };
199
+ }
200
+ }
201
+ /**
202
+ * Emergency compaction — more aggressive trimming when context budget
203
+ * is about to overflow.
204
+ */
205
+ async emergencyCompact(input) {
206
+ const pinnedAnchors = input.recentTurnIds.slice(-3);
207
+ const summary = this.deterministicTrim(input.content, pinnedAnchors);
208
+ const snapshot = {
209
+ threadId: input.threadId,
210
+ runId: input.runId,
211
+ summary: `[EMERGENCY COMPACTION]\n${summary}`,
212
+ pinnedAnchors,
213
+ createdAt: new Date().toISOString(),
214
+ };
215
+ return { snapshot, success: true };
216
+ }
217
+ /**
218
+ * Deterministic trim: keep only lines containing pinned anchors
219
+ * plus a tail of the most recent content.
220
+ */
221
+ deterministicTrim(content, anchors) {
222
+ const lines = content.split("\n");
223
+ const TAIL_SIZE = 50;
224
+ // Keep lines referencing any pinned anchor
225
+ const pinnedLines = lines.filter((line) => anchors.some((anchor) => line.includes(anchor)));
226
+ // Keep the tail
227
+ const tailLines = lines.slice(-TAIL_SIZE);
228
+ // Deduplicate
229
+ const seen = new Set();
230
+ const result = [];
231
+ for (const line of [...pinnedLines, ...tailLines]) {
232
+ if (!seen.has(line)) {
233
+ seen.add(line);
234
+ result.push(line);
235
+ }
236
+ }
237
+ return `[Compacted from ${lines.length} lines to ${result.length}]\n${result.join("\n")}`;
238
+ }
239
+ }
240
+ // ---------------------------------------------------------------------------
241
+ // Capacity controller (high-level orchestrator)
242
+ // ---------------------------------------------------------------------------
243
+ export class CapacityController {
244
+ coherenceConfig;
245
+ workingSet;
246
+ compactor;
247
+ modelProfile;
248
+ constructor(config) {
249
+ this.coherenceConfig = config.coherence;
250
+ this.modelProfile = getModelProfile(config.model);
251
+ this.workingSet = new WorkingSetTracker(config.maxWorkingSetPaths ?? 20);
252
+ this.compactor = new CompactionOrchestrator(config.summarize);
253
+ }
254
+ /** Evaluate current coherence state. */
255
+ evaluate(vector, usedTokens, messageCount) {
256
+ return evaluateCoherence(this.coherenceConfig, vector, usedTokens, this.modelProfile.maxContextTokens, messageCount);
257
+ }
258
+ /** Add a path to the working set (pinned through compaction). */
259
+ pin(path, reason) {
260
+ this.workingSet.add(path, reason);
261
+ }
262
+ /** Remove a path from the working set. */
263
+ unpin(path) {
264
+ this.workingSet.remove(path);
265
+ }
266
+ /** Get currently pinned paths. */
267
+ getPinnedPaths() {
268
+ return this.workingSet.getPinnedPaths();
269
+ }
270
+ /** Get model profile. */
271
+ getModelProfile() {
272
+ return this.modelProfile;
273
+ }
274
+ /** Trigger compaction. */
275
+ async compact(input) {
276
+ return this.compactor.compact({
277
+ ...input,
278
+ pinnedPaths: [
279
+ ...input.pinnedPaths,
280
+ ...this.workingSet.getPinnedPaths(),
281
+ ],
282
+ });
283
+ }
284
+ /** Trigger emergency compaction. */
285
+ async emergencyCompact(input) {
286
+ return this.compactor.emergencyCompact(input);
287
+ }
288
+ }
289
+ //# sourceMappingURL=coherence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coherence.js","sourceRoot":"","sources":["../src/coherence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=coherence.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coherence.test.d.ts","sourceRoot":"","sources":["../src/coherence.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+ import { getModelProfile, MODEL_PROFILES } from "./coherence.js";
4
+ test("MODEL_PROFILES includes gpt-5.3-codex and related codex entries", () => {
5
+ assert.ok(MODEL_PROFILES["gpt-5.3-codex"]);
6
+ assert.ok(MODEL_PROFILES["gpt-5.3-codex-spark"]);
7
+ assert.ok(MODEL_PROFILES["gpt-5.2-codex"]);
8
+ });
9
+ test("getModelProfile falls back to default profile for unknown models", () => {
10
+ const fallback = getModelProfile("unknown-model-name");
11
+ assert.equal(fallback.name, "default");
12
+ assert.equal(fallback.maxContextTokens, MODEL_PROFILES.default.maxContextTokens);
13
+ });
14
+ //# sourceMappingURL=coherence.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coherence.test.js","sourceRoot":"","sources":["../src/coherence.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEjE,IAAI,CAAC,iEAAiE,EAAE,GAAG,EAAE;IAC3E,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACjD,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kEAAkE,EAAE,GAAG,EAAE;IAC5E,MAAM,QAAQ,GAAG,eAAe,CAAC,oBAAoB,CAAC,CAAC;IACvD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AACnF,CAAC,CAAC,CAAC"}
@@ -0,0 +1,126 @@
1
+ import type { RunMode } from "@hmbown/kytchen-protocol";
2
+ /**
3
+ * Explicit states for the dialectical reasoning loop.
4
+ *
5
+ * Transitions:
6
+ * idle → proposing → critiquing → synthesizing → evaluating → proposing (next round)
7
+ * → done (threshold met or max rounds)
8
+ */
9
+ export type DialecticalState = "idle" | "proposing" | "critiquing" | "synthesizing" | "evaluating" | "done";
10
+ /** The three dialectical roles plus the evaluator gate. */
11
+ export type DialecticalRole = "proposer" | "critic" | "synthesizer" | "evaluator";
12
+ /**
13
+ * A provider-agnostic callback that the engine invokes to produce
14
+ * text for each role. The engine itself never imports a provider
15
+ * directly -- the caller wires the callback to whichever LLM
16
+ * backend is in use.
17
+ *
18
+ * @param systemPrompt - Role-specific system instruction
19
+ * @param userPrompt - The content the role should respond to
20
+ * @returns The generated text response
21
+ */
22
+ export type GenerateCallback = (systemPrompt: string, userPrompt: string) => Promise<string>;
23
+ /** Configuration for the dialectical reasoning loop. */
24
+ export interface DialecticalConfig {
25
+ /** Maximum rounds of thesis/antithesis/synthesis. */
26
+ maxRounds: number;
27
+ /** Confidence threshold (0-1) to terminate early. */
28
+ confidenceThreshold: number;
29
+ /**
30
+ * Provider-agnostic callback used to generate text for each role.
31
+ * If omitted the engine falls back to a stub that always returns
32
+ * placeholder text -- useful for testing state-machine logic.
33
+ */
34
+ generate?: GenerateCallback;
35
+ }
36
+ export interface DialecticalInput {
37
+ goal: string;
38
+ context: string;
39
+ maxTurns: number;
40
+ }
41
+ /** A single role's contribution within a round. */
42
+ export interface RoleArtifact {
43
+ role: DialecticalRole;
44
+ content: string;
45
+ timestamp: string;
46
+ }
47
+ /**
48
+ * One complete round of the dialectical loop.
49
+ * Captures every role artifact for full auditability.
50
+ */
51
+ export interface DialecticalTurn {
52
+ round: number;
53
+ thesis: string;
54
+ antithesis: string;
55
+ synthesis: string;
56
+ confidence: number;
57
+ /** Per-role artifacts for this round (proposer, critic, synthesizer, evaluator). */
58
+ artifacts: RoleArtifact[];
59
+ }
60
+ /** Aggregated result produced by `DialecticalEngine.run()`. */
61
+ export interface DialecticalArtifact {
62
+ synthesis: string;
63
+ rounds: DialecticalTurn[];
64
+ confidence: number;
65
+ }
66
+ export interface DialecticalResult {
67
+ artifact: DialecticalArtifact;
68
+ mode: RunMode;
69
+ }
70
+ /**
71
+ * Complete snapshot of the loop state machine. Can be serialized
72
+ * to JSON for persistence or forwarded to a recursive sub-engine.
73
+ */
74
+ export interface DialecticalSnapshot {
75
+ state: DialecticalState;
76
+ currentRound: number;
77
+ turns: DialecticalTurn[];
78
+ pendingThesis: string | null;
79
+ pendingAntithesis: string | null;
80
+ pendingSynthesis: string | null;
81
+ latestConfidence: number;
82
+ }
83
+ /**
84
+ * Structured output expected from the evaluator gate.
85
+ * The evaluator must return parseable JSON with this shape.
86
+ */
87
+ export interface EvaluatorVerdict {
88
+ /** 0-1 confidence that the synthesis satisfactorily resolves the tension. */
89
+ confidence: number;
90
+ /** When true the evaluator judges the synthesis complete. */
91
+ accept: boolean;
92
+ /** Short rationale for the verdict (logged for auditability). */
93
+ rationale: string;
94
+ }
95
+ export declare class DialecticalEngine {
96
+ private readonly config;
97
+ private readonly generate;
98
+ constructor(config: DialecticalConfig);
99
+ shouldContinue(round: number, confidence: number): boolean;
100
+ isApplicable(mode: RunMode): boolean;
101
+ /**
102
+ * Validate and execute a state transition.
103
+ * Throws if the transition is not allowed by the state machine.
104
+ */
105
+ transition(snapshot: DialecticalSnapshot, to: DialecticalState): DialecticalSnapshot;
106
+ /**
107
+ * Return a fresh snapshot for a new run.
108
+ */
109
+ createSnapshot(): DialecticalSnapshot;
110
+ private executeProposer;
111
+ private executeCritic;
112
+ private executeSynthesizer;
113
+ private executeEvaluator;
114
+ /**
115
+ * Execute the full dialectical reasoning loop.
116
+ *
117
+ * Rounds: thesis → antithesis → synthesis → evaluation
118
+ * Stops when the evaluator's confidence meets the threshold,
119
+ * the evaluator explicitly accepts, or max rounds are exhausted.
120
+ *
121
+ * The effective max rounds is the lesser of `config.maxRounds`
122
+ * and `input.maxTurns` (when provided).
123
+ */
124
+ run(input: DialecticalInput): Promise<DialecticalResult>;
125
+ }
126
+ //# sourceMappingURL=dialectic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialectic.d.ts","sourceRoot":"","sources":["../src/dialectic.ts"],"names":[],"mappings":"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"}