parallax-opencode 0.2.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/dist/score.js ADDED
@@ -0,0 +1,160 @@
1
+ /**
2
+ * PARALLAX ENGINE -- Coherence Score Computation
3
+ *
4
+ * Computes an evidence-based quality score (0-100) from a Parallax trace.
5
+ * Measures how well the agent followed the methodology.
6
+ *
7
+ * Score components:
8
+ * - Protocol Coverage (30%): Did all 5 protocol phases execute?
9
+ * - Verification Integrity (35%): Pass rate on first attempt?
10
+ * - Edge Case Coverage (20%): How many edge categories analyzed?
11
+ * - Timing Discipline (15%): Were phases in correct order?
12
+ *
13
+ * License: MIT
14
+ * Copyright (c) 2026 Master0fFate
15
+ */
16
+ import { join } from "path";
17
+ import { existsSync, appendFileSync, readFileSync, mkdirSync } from "fs";
18
+ // ---------------------------------------------------------------------------
19
+ // Constants
20
+ // ---------------------------------------------------------------------------
21
+ const REQUIRED_PHASES = [
22
+ "ambiguity_check",
23
+ "four_invariants",
24
+ "verification_gate",
25
+ "commit_decision",
26
+ "summary",
27
+ ];
28
+ const PHASE_ORDER = [
29
+ "ambiguity_check",
30
+ "four_invariants",
31
+ "verification_gate",
32
+ "mode_switch",
33
+ "execution",
34
+ "commit_decision",
35
+ "summary",
36
+ ];
37
+ // ---------------------------------------------------------------------------
38
+ // Score computation
39
+ // ---------------------------------------------------------------------------
40
+ /**
41
+ * Compute the coherence score (0-100) from a trace.
42
+ * Handles missing data and partial traces gracefully.
43
+ */
44
+ export function computeCoherenceScore(trace) {
45
+ // 1. Protocol Coverage (30 points max)
46
+ const phaseNames = new Set(trace.phases.map((p) => p.phase));
47
+ const completed = REQUIRED_PHASES.filter((r) => phaseNames.has(r)).length;
48
+ const protocolCoverage = Math.round((completed / REQUIRED_PHASES.length) * 30);
49
+ // 2. Verification Integrity (35 points max)
50
+ let verificationIntegrity = 0;
51
+ const writesWithData = trace.writes.filter((w) => w.verification !== "unknown");
52
+ if (writesWithData.length > 0) {
53
+ const firstPass = writesWithData.filter((w) => w.verification === "pass" && w.frictionRetriesLeft >= 3).length;
54
+ verificationIntegrity = Math.round((firstPass / writesWithData.length) * 35);
55
+ }
56
+ // 3. Edge Case Coverage (20 points max)
57
+ // Count unique edge categories from analyze phases
58
+ const analyzePhases = trace.phases.filter((p) => p.phase === "mode_switch" && p.data && typeof p.data.analysisTopic === "string");
59
+ // Each unique analysis topic counts as an edge category
60
+ const edgeCategories = new Set(analyzePhases.map((p) => p.data.analysisTopic));
61
+ const edgeCaseCoverage = Math.min(Math.round((edgeCategories.size / 7) * 20), 20);
62
+ // 4. Timing Discipline (15 points max)
63
+ let inOrder = 0;
64
+ let lastIdx = -1;
65
+ for (const phase of trace.phases) {
66
+ const idx = PHASE_ORDER.indexOf(phase.phase);
67
+ if (idx > lastIdx) {
68
+ inOrder++;
69
+ lastIdx = idx;
70
+ }
71
+ }
72
+ const timingDiscipline = Math.min(Math.round((inOrder / REQUIRED_PHASES.length) * 15), 15);
73
+ const total = Math.min(protocolCoverage + verificationIntegrity + edgeCaseCoverage + timingDiscipline, 100);
74
+ return {
75
+ total,
76
+ protocolCoverage,
77
+ verificationIntegrity,
78
+ edgeCaseCoverage,
79
+ timingDiscipline,
80
+ };
81
+ }
82
+ // ---------------------------------------------------------------------------
83
+ // Score display helpers
84
+ // ---------------------------------------------------------------------------
85
+ /**
86
+ * Get a human-readable grade for a score.
87
+ */
88
+ export function scoreToGrade(score) {
89
+ if (score >= 90)
90
+ return "S";
91
+ if (score >= 80)
92
+ return "A";
93
+ if (score >= 70)
94
+ return "B";
95
+ if (score >= 60)
96
+ return "C";
97
+ if (score >= 40)
98
+ return "D";
99
+ return "F";
100
+ }
101
+ /**
102
+ * Format score breakdown for display.
103
+ */
104
+ export function formatScoreBreakdown(breakdown) {
105
+ return [
106
+ `Coherence Score: ${breakdown.total}/100 (${scoreToGrade(breakdown.total)})`,
107
+ ``,
108
+ ` Protocol Coverage: ${breakdown.protocolCoverage}/30 (phases completed)`,
109
+ ` Verification Integrity: ${breakdown.verificationIntegrity}/35 (first-pass rate)`,
110
+ ` Edge Case Coverage: ${breakdown.edgeCaseCoverage}/20 (categories analyzed)`,
111
+ ` Timing Discipline: ${breakdown.timingDiscipline}/15 (phase ordering)`,
112
+ ].join("\n");
113
+ }
114
+ // ---------------------------------------------------------------------------
115
+ // Trend tracking
116
+ // ---------------------------------------------------------------------------
117
+ const SCORES_DIR = ".parallax";
118
+ const SCORES_FILE = join(SCORES_DIR, "scores.jsonl");
119
+ function getScoresFilePath() {
120
+ return join(process.cwd(), SCORES_FILE);
121
+ }
122
+ /**
123
+ * Record a score entry to the append-only scores file.
124
+ */
125
+ export function recordScore(entry) {
126
+ const filePath = getScoresFilePath();
127
+ const dir = join(process.cwd(), SCORES_DIR);
128
+ if (!existsSync(dir)) {
129
+ mkdirSync(dir, { recursive: true });
130
+ }
131
+ appendFileSync(filePath, JSON.stringify(entry) + "\n", "utf8");
132
+ }
133
+ /**
134
+ * Read all score entries from the scores file.
135
+ */
136
+ export function readScoreHistory() {
137
+ const filePath = getScoresFilePath();
138
+ if (!existsSync(filePath))
139
+ return [];
140
+ try {
141
+ const raw = readFileSync(filePath, "utf8");
142
+ return raw
143
+ .split("\n")
144
+ .filter((line) => line.trim().length > 0)
145
+ .map((line) => JSON.parse(line));
146
+ }
147
+ catch {
148
+ return [];
149
+ }
150
+ }
151
+ /**
152
+ * Compute a simple sparkline representation of scores over time.
153
+ */
154
+ export function sparkline(scores) {
155
+ if (scores.length === 0)
156
+ return "";
157
+ const chars = ["_", "▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"];
158
+ const max = Math.max(...scores, 1);
159
+ return scores.map((s) => chars[Math.min(Math.floor((s / max) * (chars.length - 1)), chars.length - 1)]).join("");
160
+ }
@@ -0,0 +1,62 @@
1
+ /**
2
+ * PARALLAX ENGINE -- Trace Recording & Export
3
+ *
4
+ * Manages the per-session structured reasoning trace. Traces capture every
5
+ * protocol phase, write operation, verification result, and mode switch.
6
+ *
7
+ * Traces persist to `.parallax/traces/<session-id>.json` on demand or
8
+ * on session compaction.
9
+ *
10
+ * License: MIT
11
+ * Copyright (c) 2026 Master0fFate
12
+ */
13
+ import type { ParallaxTrace, PhaseName, WriteVerdict, TraceMetrics, ProjectType } from "./types";
14
+ /**
15
+ * Get or create a trace for the given session ID.
16
+ */
17
+ export declare function getTrace(sessionId: string): ParallaxTrace;
18
+ /**
19
+ * Initialize trace with session and project metadata.
20
+ */
21
+ export declare function initTrace(sessionId: string, project: string | null, projectType: ProjectType): void;
22
+ /**
23
+ * Record a protocol phase in the trace.
24
+ */
25
+ export declare function addPhase(sessionId: string, phase: PhaseName, data?: Record<string, unknown>): void;
26
+ /**
27
+ * Record a write/edit operation in the trace.
28
+ */
29
+ export declare function addWrite(sessionId: string, file: string, verification: WriteVerdict, frictionRetriesLeft: number): void;
30
+ /**
31
+ * Compute metrics for the trace.
32
+ */
33
+ export declare function computeMetrics(trace: ParallaxTrace): TraceMetrics;
34
+ /**
35
+ * Finalize the trace (set end time and compute metrics).
36
+ */
37
+ export declare function finalizeTrace(sessionId: string): ParallaxTrace;
38
+ /**
39
+ * Export the current trace to a JSON file on disk.
40
+ * Returns the file path.
41
+ */
42
+ export declare function exportTrace(sessionId: string, pretty?: boolean): string;
43
+ /**
44
+ * Export trace with pretty formatting (human-readable).
45
+ */
46
+ export declare function exportTracePretty(sessionId: string): string;
47
+ /**
48
+ * List all trace files in the project's trace directory.
49
+ */
50
+ export declare function listTraceFiles(): Array<{
51
+ sessionId: string;
52
+ filePath: string;
53
+ mtime: Date;
54
+ }>;
55
+ /**
56
+ * Load a trace from disk by session ID.
57
+ */
58
+ export declare function loadTrace(sessionId: string): ParallaxTrace | null;
59
+ /**
60
+ * Delete all in-memory trace state for a session (cleanup).
61
+ */
62
+ export declare function cleanupTrace(sessionId: string): void;
package/dist/trace.js ADDED
@@ -0,0 +1,206 @@
1
+ /**
2
+ * PARALLAX ENGINE -- Trace Recording & Export
3
+ *
4
+ * Manages the per-session structured reasoning trace. Traces capture every
5
+ * protocol phase, write operation, verification result, and mode switch.
6
+ *
7
+ * Traces persist to `.parallax/traces/<session-id>.json` on demand or
8
+ * on session compaction.
9
+ *
10
+ * License: MIT
11
+ * Copyright (c) 2026 Master0fFate
12
+ */
13
+ import { existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync, statSync } from "fs";
14
+ import { join } from "path";
15
+ // ---------------------------------------------------------------------------
16
+ // Constants
17
+ // ---------------------------------------------------------------------------
18
+ const TRACE_DIR_RELATIVE = join(".parallax", "traces");
19
+ const TRACE_SCHEMA_VERSION = "1.0";
20
+ // ---------------------------------------------------------------------------
21
+ // In-memory trace store (per session ID)
22
+ // ---------------------------------------------------------------------------
23
+ const traceStore = new Map();
24
+ /**
25
+ * Get or create a trace for the given session ID.
26
+ */
27
+ export function getTrace(sessionId) {
28
+ if (!traceStore.has(sessionId)) {
29
+ traceStore.set(sessionId, createEmptyTrace(sessionId));
30
+ }
31
+ return traceStore.get(sessionId);
32
+ }
33
+ /**
34
+ * Create a fresh empty trace for a session.
35
+ */
36
+ function createEmptyTrace(sessionId) {
37
+ return {
38
+ schemaVersion: TRACE_SCHEMA_VERSION,
39
+ session: {
40
+ id: sessionId,
41
+ agent: "parallax",
42
+ agentVersion: "0.2.0",
43
+ startedAt: new Date().toISOString(),
44
+ endedAt: null,
45
+ project: null,
46
+ projectType: null,
47
+ },
48
+ phases: [],
49
+ writes: [],
50
+ metrics: null,
51
+ coherenceScore: null,
52
+ };
53
+ }
54
+ /**
55
+ * Initialize trace with session and project metadata.
56
+ */
57
+ export function initTrace(sessionId, project, projectType) {
58
+ const trace = getTrace(sessionId);
59
+ trace.session.project = project;
60
+ trace.session.projectType = projectType;
61
+ }
62
+ /**
63
+ * Record a protocol phase in the trace.
64
+ */
65
+ export function addPhase(sessionId, phase, data = {}) {
66
+ const trace = getTrace(sessionId);
67
+ const record = {
68
+ phase,
69
+ timestamp: new Date().toISOString(),
70
+ data,
71
+ };
72
+ trace.phases.push(record);
73
+ }
74
+ /**
75
+ * Record a write/edit operation in the trace.
76
+ */
77
+ export function addWrite(sessionId, file, verification, frictionRetriesLeft) {
78
+ const trace = getTrace(sessionId);
79
+ const record = {
80
+ file,
81
+ timestamp: new Date().toISOString(),
82
+ verification,
83
+ frictionRetriesLeft,
84
+ };
85
+ trace.writes.push(record);
86
+ }
87
+ /**
88
+ * Compute metrics for the trace.
89
+ */
90
+ export function computeMetrics(trace) {
91
+ const started = new Date(trace.session.startedAt).getTime();
92
+ const now = Date.now();
93
+ const durationSeconds = Math.round((now - started) / 1000);
94
+ const totalWrites = trace.writes.length;
95
+ const totalWritesWithData = trace.writes.filter((w) => w.verification !== "unknown").length;
96
+ const passes = trace.writes.filter((w) => w.verification === "pass").length;
97
+ const firstPass = trace.writes.filter((w) => w.verification === "pass" && w.frictionRetriesLeft >= 3).length;
98
+ const totalFrictionRetries = trace.writes.reduce((sum, w) => sum + (3 - w.frictionRetriesLeft), 0);
99
+ const requiredPhases = [
100
+ "ambiguity_check",
101
+ "four_invariants",
102
+ "verification_gate",
103
+ "commit_decision",
104
+ "summary",
105
+ ];
106
+ const uniqueRequiredPhases = new Set(trace.phases
107
+ .filter((p) => requiredPhases.includes(p.phase))
108
+ .map((p) => p.phase));
109
+ return {
110
+ durationSeconds,
111
+ totalPhases: trace.phases.length,
112
+ totalWrites,
113
+ verificationPassRate: totalWritesWithData > 0 ? passes / totalWritesWithData : 0,
114
+ firstAttemptPassRate: totalWrites > 0 ? firstPass / totalWrites : 0,
115
+ totalFrictionRetries,
116
+ protocolStepsCompleted: uniqueRequiredPhases.size,
117
+ };
118
+ }
119
+ /**
120
+ * Finalize the trace (set end time and compute metrics).
121
+ */
122
+ export function finalizeTrace(sessionId) {
123
+ const trace = getTrace(sessionId);
124
+ trace.session.endedAt = new Date().toISOString();
125
+ trace.metrics = computeMetrics(trace);
126
+ return trace;
127
+ }
128
+ // ---------------------------------------------------------------------------
129
+ // Persistence
130
+ // ---------------------------------------------------------------------------
131
+ /**
132
+ * Get the trace directory path for the current project.
133
+ * Creates the directory if it doesn't exist.
134
+ */
135
+ function getTraceDir() {
136
+ const dir = join(process.cwd(), TRACE_DIR_RELATIVE);
137
+ if (!existsSync(dir)) {
138
+ mkdirSync(dir, { recursive: true });
139
+ }
140
+ return dir;
141
+ }
142
+ /**
143
+ * Export the current trace to a JSON file on disk.
144
+ * Returns the file path.
145
+ */
146
+ export function exportTrace(sessionId, pretty = false) {
147
+ const trace = finalizeTrace(sessionId);
148
+ const dir = getTraceDir();
149
+ const filePath = join(dir, `${sessionId}.json`);
150
+ const json = pretty ? JSON.stringify(trace, null, 2) : JSON.stringify(trace);
151
+ writeFileSync(filePath, json, "utf8");
152
+ return filePath;
153
+ }
154
+ /**
155
+ * Export trace with pretty formatting (human-readable).
156
+ */
157
+ export function exportTracePretty(sessionId) {
158
+ return exportTrace(sessionId, true);
159
+ }
160
+ /**
161
+ * List all trace files in the project's trace directory.
162
+ */
163
+ export function listTraceFiles() {
164
+ const dir = getTraceDir();
165
+ if (!existsSync(dir))
166
+ return [];
167
+ return readdirSync(dir)
168
+ .filter((f) => f.endsWith(".json"))
169
+ .map((f) => {
170
+ const filePath = join(dir, f);
171
+ let mtime = new Date();
172
+ try {
173
+ mtime = statSync(filePath).mtime;
174
+ }
175
+ catch {
176
+ // fall through to current time
177
+ }
178
+ return {
179
+ sessionId: f.replace(/\.json$/, ""),
180
+ filePath,
181
+ mtime,
182
+ };
183
+ });
184
+ }
185
+ /**
186
+ * Load a trace from disk by session ID.
187
+ */
188
+ export function loadTrace(sessionId) {
189
+ const dir = getTraceDir();
190
+ const filePath = join(dir, `${sessionId}.json`);
191
+ if (!existsSync(filePath))
192
+ return null;
193
+ try {
194
+ const raw = readFileSync(filePath, "utf8");
195
+ return JSON.parse(raw);
196
+ }
197
+ catch {
198
+ return null;
199
+ }
200
+ }
201
+ /**
202
+ * Delete all in-memory trace state for a session (cleanup).
203
+ */
204
+ export function cleanupTrace(sessionId) {
205
+ traceStore.delete(sessionId);
206
+ }
@@ -0,0 +1,94 @@
1
+ /**
2
+ * PARALLAX ENGINE -- Shared Types
3
+ *
4
+ * Central type definitions used across the plugin, trace system, score
5
+ * computation, and CLI.
6
+ *
7
+ * License: MIT
8
+ * Copyright (c) 2026 Master0fFate
9
+ */
10
+ export type AgentMode = "free" | "plan" | "build" | "debug";
11
+ export type ProtocolStep = "ambiguity" | "invariants" | "gate" | "commit" | "summary";
12
+ export type ProjectType = "cargo" | "tsc" | "lint" | "python" | null;
13
+ export interface FrictionState {
14
+ successes: number;
15
+ trials: number;
16
+ retriesLeft: number;
17
+ lastObservation: string | null;
18
+ }
19
+ export interface ModeState {
20
+ mode: AgentMode;
21
+ }
22
+ export interface ProtocolState {
23
+ ambiguityDone: boolean;
24
+ invariantsDone: boolean;
25
+ gateDone: boolean;
26
+ commitDone: boolean;
27
+ summaryDone: boolean;
28
+ writesBeforeGate: number;
29
+ gateBlocked: boolean;
30
+ }
31
+ export interface VerifyResult {
32
+ exitCode: number;
33
+ stdout: string;
34
+ stderr: string;
35
+ combined: string;
36
+ }
37
+ export type PhaseName = "ambiguity_check" | "four_invariants" | "verification_gate" | "mode_switch" | "execution" | "commit_decision" | "summary";
38
+ export type WriteVerdict = "pass" | "fail" | "skipped" | "unknown";
39
+ export interface PhaseRecord {
40
+ phase: PhaseName;
41
+ timestamp: string;
42
+ data: Record<string, unknown>;
43
+ }
44
+ export interface WriteRecord {
45
+ file: string;
46
+ timestamp: string;
47
+ verification: WriteVerdict;
48
+ frictionRetriesLeft: number;
49
+ }
50
+ export interface TraceSessionMeta {
51
+ id: string | null;
52
+ agent: "parallax";
53
+ agentVersion: string;
54
+ startedAt: string;
55
+ endedAt: string | null;
56
+ project: string | null;
57
+ projectType: string | null;
58
+ }
59
+ export interface TraceMetrics {
60
+ durationSeconds: number;
61
+ totalPhases: number;
62
+ totalWrites: number;
63
+ verificationPassRate: number;
64
+ firstAttemptPassRate: number;
65
+ totalFrictionRetries: number;
66
+ protocolStepsCompleted: number;
67
+ }
68
+ export interface ParallaxTrace {
69
+ schemaVersion: "1.0";
70
+ session: TraceSessionMeta;
71
+ phases: PhaseRecord[];
72
+ writes: WriteRecord[];
73
+ metrics: TraceMetrics | null;
74
+ coherenceScore: number | null;
75
+ }
76
+ export interface ScoreBreakdown {
77
+ total: number;
78
+ protocolCoverage: number;
79
+ verificationIntegrity: number;
80
+ edgeCaseCoverage: number;
81
+ timingDiscipline: number;
82
+ }
83
+ export interface ScoreEntry {
84
+ sessionId: string;
85
+ date: string;
86
+ score: number;
87
+ project: string | null;
88
+ }
89
+ export interface CliCommand {
90
+ name: string;
91
+ description: string;
92
+ usage: string;
93
+ run: (args: string[]) => Promise<number>;
94
+ }
package/dist/types.js ADDED
@@ -0,0 +1,10 @@
1
+ /**
2
+ * PARALLAX ENGINE -- Shared Types
3
+ *
4
+ * Central type definitions used across the plugin, trace system, score
5
+ * computation, and CLI.
6
+ *
7
+ * License: MIT
8
+ * Copyright (c) 2026 Master0fFate
9
+ */
10
+ export {};
@@ -0,0 +1,99 @@
1
+ /**
2
+ * PARALLAX ENGINE -- Canonical TypeScript Plugin
3
+ *
4
+ * Consolidated source of truth for the Parallax Engine OpenCode plugin.
5
+ * Contains all 7 custom tools, mode state machine (free/plan/build/debug),
6
+ * protocol enforcement, friction-loop verification, skill injection,
7
+ * session state preservation, and trace recording.
8
+ *
9
+ * License: MIT
10
+ * Copyright (c) 2026 Master0fFate
11
+ */
12
+ declare const _default: {
13
+ id: string;
14
+ server: ({ client }: import("@opencode-ai/plugin").PluginInput) => Promise<{
15
+ tool: {
16
+ parallax_verify: {
17
+ description: string;
18
+ args: {};
19
+ execute(args: Record<string, never>, context: import("@opencode-ai/plugin").ToolContext): Promise<import("@opencode-ai/plugin").ToolResult>;
20
+ };
21
+ parallax_analyze: {
22
+ description: string;
23
+ args: {
24
+ topic: import("zod").ZodString;
25
+ };
26
+ execute(args: {
27
+ topic: string;
28
+ }, context: import("@opencode-ai/plugin").ToolContext): Promise<import("@opencode-ai/plugin").ToolResult>;
29
+ };
30
+ parallax_checkin: {
31
+ description: string;
32
+ args: {
33
+ step: import("zod").ZodString;
34
+ };
35
+ execute(args: {
36
+ step: string;
37
+ }, context: import("@opencode-ai/plugin").ToolContext): Promise<import("@opencode-ai/plugin").ToolResult>;
38
+ };
39
+ parallax_plan: {
40
+ description: string;
41
+ args: {};
42
+ execute(args: Record<string, never>, context: import("@opencode-ai/plugin").ToolContext): Promise<import("@opencode-ai/plugin").ToolResult>;
43
+ };
44
+ parallax_build: {
45
+ description: string;
46
+ args: {};
47
+ execute(args: Record<string, never>, context: import("@opencode-ai/plugin").ToolContext): Promise<import("@opencode-ai/plugin").ToolResult>;
48
+ };
49
+ parallax_debug: {
50
+ description: string;
51
+ args: {};
52
+ execute(args: Record<string, never>, context: import("@opencode-ai/plugin").ToolContext): Promise<import("@opencode-ai/plugin").ToolResult>;
53
+ };
54
+ parallax_trace_export: {
55
+ description: string;
56
+ args: {
57
+ pretty: import("zod").ZodOptional<import("zod").ZodBoolean>;
58
+ };
59
+ execute(args: {
60
+ pretty?: boolean | undefined;
61
+ }, context: import("@opencode-ai/plugin").ToolContext): Promise<import("@opencode-ai/plugin").ToolResult>;
62
+ };
63
+ };
64
+ "tool.execute.before": (input: {
65
+ tool: string;
66
+ }) => Promise<void>;
67
+ "tool.execute.after": (input: {
68
+ tool: string;
69
+ args?: Record<string, unknown>;
70
+ }) => Promise<void>;
71
+ event: (input: {
72
+ event: {
73
+ type: string;
74
+ properties?: Record<string, unknown>;
75
+ };
76
+ }) => Promise<void>;
77
+ "chat.message": (input: {
78
+ sessionID: string;
79
+ agent?: string;
80
+ model?: {
81
+ modelID?: string;
82
+ };
83
+ }) => Promise<void>;
84
+ "chat.params": (input: {
85
+ sessionID: string;
86
+ agent: string;
87
+ model: {
88
+ id: string;
89
+ };
90
+ }) => Promise<void>;
91
+ "experimental.chat.system.transform": (_input: unknown, output: {
92
+ system?: string[];
93
+ }) => Promise<void>;
94
+ "experimental.session.compacting": (_input: unknown, output: {
95
+ context?: string[];
96
+ }) => Promise<void>;
97
+ }>;
98
+ };
99
+ export default _default;