@aexol/spectral 0.9.185 → 0.9.187
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/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +1 -1
- package/dist/memory/tools/compact-context.d.ts +12 -12
- package/dist/memory/tools/compact-context.d.ts.map +1 -1
- package/dist/memory/tools/compact-context.js +147 -117
- package/dist/sdk/coding-agent/core/agent-session.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/agent-session.js +0 -1
- package/dist/sdk/coding-agent/core/compaction/compaction.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/compaction/compaction.js +2 -2
- package/dist/sdk/coding-agent/core/compaction/policy.d.ts +22 -4
- package/dist/sdk/coding-agent/core/compaction/policy.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/compaction/policy.js +39 -6
- package/dist/server/session-stream.d.ts.map +1 -1
- package/dist/server/session-stream.js +4 -4
- package/dist/server/sqlite-adapter.d.ts +11 -8
- package/dist/server/sqlite-adapter.d.ts.map +1 -1
- package/dist/server/sqlite-adapter.js +195 -44
- package/dist/server/storage.d.ts +8 -5
- package/dist/server/storage.d.ts.map +1 -1
- package/dist/server/storage.js +9 -6
- package/package.json +1 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
/** Built-in fraction of the model context window that triggers compaction/pruning. */
|
|
2
|
+
export declare const CONTEXT_LIMIT_RATIO = 0.8;
|
|
1
3
|
export interface ConversationCompactionPolicy {
|
|
2
4
|
enabled: boolean;
|
|
3
5
|
reserveTokens: number;
|
|
4
6
|
keepRecentTokens: number;
|
|
5
|
-
contextLimitRatio: number;
|
|
6
7
|
}
|
|
7
8
|
export interface ManualCompactionPolicy {
|
|
8
9
|
keepRecentTokens: number;
|
|
@@ -11,10 +12,13 @@ export interface ManualCompactionPolicy {
|
|
|
11
12
|
}
|
|
12
13
|
export interface AutoOlderHistoryCompactionPolicy {
|
|
13
14
|
enabled: boolean;
|
|
14
|
-
contextLimitRatio: number;
|
|
15
15
|
keepRecentTokens: number;
|
|
16
16
|
cooldownTurns: number;
|
|
17
17
|
minRawTokens: number;
|
|
18
|
+
/** Window-relative floor for the raw suffix kept by request-time pruning. */
|
|
19
|
+
keepRecentRatio: number;
|
|
20
|
+
/** Window-relative growth budget that triggers a fresh re-prune of a frozen cut. */
|
|
21
|
+
hysteresisRatio: number;
|
|
18
22
|
}
|
|
19
23
|
export interface AgentDrivenCompactionPolicy {
|
|
20
24
|
enabled: boolean;
|
|
@@ -55,8 +59,6 @@ export interface CompactionPolicySettings {
|
|
|
55
59
|
reserveTokens?: number;
|
|
56
60
|
/** Legacy/current recent raw suffix for automatic older-history compaction. */
|
|
57
61
|
keepRecentTokens?: number;
|
|
58
|
-
/** Context-window pressure ratio for automatic older-history compaction. */
|
|
59
|
-
contextLimitRatio?: number;
|
|
60
62
|
manual?: Partial<ManualCompactionPolicy>;
|
|
61
63
|
autoOlderHistory?: Partial<AutoOlderHistoryCompactionPolicy>;
|
|
62
64
|
agentDriven?: Partial<AgentDrivenCompactionPolicy>;
|
|
@@ -67,5 +69,21 @@ export declare const DEFAULT_COMPACTION_POLICY: CompactionPolicy;
|
|
|
67
69
|
export declare function normalizeManualKeepRecentTokens(value: unknown, manualPolicy?: ManualCompactionPolicy): number;
|
|
68
70
|
export declare function normalizeAgentDrivenOlderHistoryKeepRecentTokens(value: unknown, agentPolicy?: AgentDrivenCompactionPolicy): number;
|
|
69
71
|
export declare function getAutoOlderHistoryContextThresholdTokens(policy: CompactionPolicy, contextWindow: number | null | undefined): number | null;
|
|
72
|
+
/**
|
|
73
|
+
* Resolve the recent raw suffix to keep for virtual request-time pruning.
|
|
74
|
+
*
|
|
75
|
+
* The suffix is window-relative by default: `keepRecentRatio * contextWindow`
|
|
76
|
+
* with the agent-driven absolute value acting only as a safety floor. An
|
|
77
|
+
* explicit caller-provided value always wins so existing tool/manual callers
|
|
78
|
+
* keep their current behavior.
|
|
79
|
+
*/
|
|
80
|
+
export declare function getAutoOlderHistoryKeepRecentTokens(policy: CompactionPolicy, contextWindow: number | null | undefined, explicitKeepRecentTokens?: number): number | undefined;
|
|
81
|
+
/**
|
|
82
|
+
* Resolve the growth budget that triggers a frozen request-time cut to re-prune.
|
|
83
|
+
*
|
|
84
|
+
* The floor is twice the kept suffix; on large windows the window-relative
|
|
85
|
+
* `hysteresisRatio * contextWindow` wins so re-pruning tracks the model size.
|
|
86
|
+
*/
|
|
87
|
+
export declare function getAutoOlderHistoryHysteresisTokens(policy: CompactionPolicy, contextWindow: number | null | undefined, keepRecentTokens: number): number;
|
|
70
88
|
export declare function normalizeCompactionPolicy(settings?: CompactionPolicySettings): CompactionPolicy;
|
|
71
89
|
//# sourceMappingURL=policy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../../../src/sdk/coding-agent/core/compaction/policy.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,4BAA4B;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../../../src/sdk/coding-agent/core/compaction/policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
/** Built-in fraction of the model context window that triggers compaction/pruning. */
|
|
2
|
+
export const CONTEXT_LIMIT_RATIO = 0.8;
|
|
1
3
|
export const DEFAULT_COMPACTION_POLICY = {
|
|
2
4
|
conversation: {
|
|
3
5
|
enabled: true,
|
|
4
6
|
reserveTokens: 16_384,
|
|
5
7
|
keepRecentTokens: 20_000,
|
|
6
|
-
contextLimitRatio: 0.8,
|
|
7
8
|
},
|
|
8
9
|
manual: {
|
|
9
10
|
keepRecentTokens: 8_000,
|
|
@@ -12,10 +13,11 @@ export const DEFAULT_COMPACTION_POLICY = {
|
|
|
12
13
|
},
|
|
13
14
|
autoOlderHistory: {
|
|
14
15
|
enabled: true,
|
|
15
|
-
contextLimitRatio: 0.4,
|
|
16
16
|
keepRecentTokens: 12_000,
|
|
17
17
|
cooldownTurns: 0,
|
|
18
18
|
minRawTokens: 0,
|
|
19
|
+
keepRecentRatio: 0.1,
|
|
20
|
+
hysteresisRatio: 0.3,
|
|
19
21
|
},
|
|
20
22
|
agentDriven: {
|
|
21
23
|
enabled: true,
|
|
@@ -73,7 +75,39 @@ export function getAutoOlderHistoryContextThresholdTokens(policy, contextWindow)
|
|
|
73
75
|
return null;
|
|
74
76
|
if (typeof contextWindow !== "number" || !Number.isFinite(contextWindow) || contextWindow <= 0)
|
|
75
77
|
return null;
|
|
76
|
-
return Math.max(1, Math.floor(contextWindow *
|
|
78
|
+
return Math.max(1, Math.floor(contextWindow * CONTEXT_LIMIT_RATIO));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Resolve the recent raw suffix to keep for virtual request-time pruning.
|
|
82
|
+
*
|
|
83
|
+
* The suffix is window-relative by default: `keepRecentRatio * contextWindow`
|
|
84
|
+
* with the agent-driven absolute value acting only as a safety floor. An
|
|
85
|
+
* explicit caller-provided value always wins so existing tool/manual callers
|
|
86
|
+
* keep their current behavior.
|
|
87
|
+
*/
|
|
88
|
+
export function getAutoOlderHistoryKeepRecentTokens(policy, contextWindow, explicitKeepRecentTokens) {
|
|
89
|
+
if (typeof explicitKeepRecentTokens === "number" &&
|
|
90
|
+
Number.isFinite(explicitKeepRecentTokens) &&
|
|
91
|
+
explicitKeepRecentTokens > 0) {
|
|
92
|
+
return explicitKeepRecentTokens;
|
|
93
|
+
}
|
|
94
|
+
if (typeof contextWindow !== "number" || !Number.isFinite(contextWindow) || contextWindow <= 0) {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
return Math.max(policy.agentDriven.olderHistoryKeepRecentTokens, Math.floor(contextWindow * policy.autoOlderHistory.keepRecentRatio));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Resolve the growth budget that triggers a frozen request-time cut to re-prune.
|
|
101
|
+
*
|
|
102
|
+
* The floor is twice the kept suffix; on large windows the window-relative
|
|
103
|
+
* `hysteresisRatio * contextWindow` wins so re-pruning tracks the model size.
|
|
104
|
+
*/
|
|
105
|
+
export function getAutoOlderHistoryHysteresisTokens(policy, contextWindow, keepRecentTokens) {
|
|
106
|
+
const floor = Math.max(0, keepRecentTokens * 2);
|
|
107
|
+
if (typeof contextWindow !== "number" || !Number.isFinite(contextWindow) || contextWindow <= 0) {
|
|
108
|
+
return floor;
|
|
109
|
+
}
|
|
110
|
+
return Math.max(floor, Math.floor(contextWindow * policy.autoOlderHistory.hysteresisRatio));
|
|
77
111
|
}
|
|
78
112
|
function normalizeManualPolicy(settings) {
|
|
79
113
|
const defaults = DEFAULT_COMPACTION_POLICY.manual;
|
|
@@ -121,16 +155,15 @@ export function normalizeCompactionPolicy(settings) {
|
|
|
121
155
|
enabled: normalizeBoolean(settings?.enabled, defaults.conversation.enabled),
|
|
122
156
|
reserveTokens: normalizePositiveInteger(settings?.reserveTokens, defaults.conversation.reserveTokens),
|
|
123
157
|
keepRecentTokens: normalizePositiveInteger(settings?.keepRecentTokens, defaults.conversation.keepRecentTokens),
|
|
124
|
-
contextLimitRatio: normalizeRatio(settings?.contextLimitRatio, defaults.conversation.contextLimitRatio),
|
|
125
158
|
};
|
|
126
159
|
const autoOlderHistory = settings?.autoOlderHistory;
|
|
127
|
-
const autoContextLimitRatioFallback = normalizeRatio(settings?.contextLimitRatio, defaults.autoOlderHistory.contextLimitRatio);
|
|
128
160
|
const autoPolicy = {
|
|
129
161
|
enabled: normalizeBoolean(autoOlderHistory?.enabled, conversation.enabled),
|
|
130
|
-
contextLimitRatio: normalizeRatio(autoOlderHistory?.contextLimitRatio, autoContextLimitRatioFallback),
|
|
131
162
|
keepRecentTokens: normalizePositiveInteger(autoOlderHistory?.keepRecentTokens, conversation.keepRecentTokens),
|
|
132
163
|
cooldownTurns: normalizeNonNegativeInteger(autoOlderHistory?.cooldownTurns, defaults.autoOlderHistory.cooldownTurns),
|
|
133
164
|
minRawTokens: normalizeNonNegativeInteger(autoOlderHistory?.minRawTokens, defaults.autoOlderHistory.minRawTokens),
|
|
165
|
+
keepRecentRatio: normalizeRatio(autoOlderHistory?.keepRecentRatio, defaults.autoOlderHistory.keepRecentRatio),
|
|
166
|
+
hysteresisRatio: normalizeRatio(autoOlderHistory?.hysteresisRatio, defaults.autoOlderHistory.hysteresisRatio),
|
|
134
167
|
};
|
|
135
168
|
const truncationContinuation = settings?.truncationContinuation;
|
|
136
169
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-stream.d.ts","sourceRoot":"","sources":["../../src/server/session-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAIH,OAAO,EAAe,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"session-stream.d.ts","sourceRoot":"","sources":["../../src/server/session-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,7 +41,7 @@ import { AgentBridge } from "./agent-bridge.js";
|
|
|
41
41
|
import { SettingsManager, } from "../sdk/coding-agent/index.js";
|
|
42
42
|
import { InterAgentBroker } from "./inter-agent-broker.js";
|
|
43
43
|
import { setInterAgentBroker } from "../memory/inter-agent-broker-singleton.js";
|
|
44
|
-
import { DEFAULT_COMPACTION_POLICY, getAutoOlderHistoryContextThresholdTokens, } from "../sdk/coding-agent/core/compaction/policy.js";
|
|
44
|
+
import { CONTEXT_LIMIT_RATIO, DEFAULT_COMPACTION_POLICY, getAutoOlderHistoryContextThresholdTokens, } from "../sdk/coding-agent/core/compaction/policy.js";
|
|
45
45
|
import { getMemoryState, isSourceEntry, rawTokensSinceLastBound, rawTokensSinceLastCompaction, } from "../memory/branch.js";
|
|
46
46
|
import { observationPoolTokens, renderSummary } from "../memory/compaction.js";
|
|
47
47
|
import { loadConfig } from "../memory/config.js";
|
|
@@ -404,7 +404,7 @@ function prunePersistedHistoryAfterCompaction(store, sessionId, bridge) {
|
|
|
404
404
|
function buildDcpLiteThresholds(config, policy) {
|
|
405
405
|
return {
|
|
406
406
|
postRunCompactionThresholdTokens: Math.max(config.compactionThresholdTokens, policy.autoOlderHistory.minRawTokens),
|
|
407
|
-
autoContextLimitRatio:
|
|
407
|
+
autoContextLimitRatio: CONTEXT_LIMIT_RATIO,
|
|
408
408
|
olderHistoryKeepRecentTokens: policy.agentDriven.olderHistoryKeepRecentTokens,
|
|
409
409
|
olderHistoryMinCompactableTokens: policy.agentDriven.olderHistoryMinCompactableTokens,
|
|
410
410
|
cooldownTurns: policy.agentDriven.cooldownTurns,
|
|
@@ -1552,9 +1552,9 @@ export class SessionStreamManager {
|
|
|
1552
1552
|
const contextWindowUsed = stream.contextWindowUsed;
|
|
1553
1553
|
const shouldCompact = loopThresholdTokens !== null &&
|
|
1554
1554
|
typeof contextWindowUsed === "number" &&
|
|
1555
|
-
contextWindowUsed
|
|
1555
|
+
contextWindowUsed >= loopThresholdTokens;
|
|
1556
1556
|
if (shouldCompact) {
|
|
1557
|
-
console.log(`[loop] compacting context (~${contextWindowUsed.toLocaleString()} tokens
|
|
1557
|
+
console.log(`[loop] compacting context (~${contextWindowUsed.toLocaleString()} tokens >= ` +
|
|
1558
1558
|
`${loopThresholdTokens.toLocaleString()} policy threshold)`);
|
|
1559
1559
|
const outcome = await this.requestManagerCompaction(stream, {
|
|
1560
1560
|
source: "loop",
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Abstract SQLite interface to decouple SessionStore from a specific SQLite
|
|
3
|
-
* binding. Enables Bun standalone binary builds (bun:sqlite)
|
|
4
|
-
* the existing better-sqlite3 path
|
|
3
|
+
* binding. Enables Bun standalone binary builds (bun:sqlite) and modern
|
|
4
|
+
* Node.js (node:sqlite) while preserving the existing better-sqlite3 path as
|
|
5
|
+
* a fallback for older Node runtimes that lack a built-in SQLite module.
|
|
5
6
|
*
|
|
6
|
-
*
|
|
7
|
-
* -
|
|
8
|
-
* -
|
|
7
|
+
* Three implementations:
|
|
8
|
+
* - NodeBuiltinSqliteAdapter — wraps node:sqlite (Node >= 22.5, zero deps)
|
|
9
|
+
* - NodeSqliteAdapter — wraps better-sqlite3 (legacy Node fallback)
|
|
10
|
+
* - BunSqliteAdapter — wraps bun:sqlite (Bun built-in, zero deps)
|
|
9
11
|
*
|
|
10
12
|
* The factory `createSqliteAdapter()` detects the runtime and returns the
|
|
11
13
|
* correct adapter. Callers (SessionStore) only interact with the `SqliteAdapter`
|
|
12
|
-
* interface — they never import better-sqlite3 or bun:sqlite
|
|
14
|
+
* interface — they never import better-sqlite3, node:sqlite or bun:sqlite
|
|
15
|
+
* directly.
|
|
13
16
|
*/
|
|
14
17
|
/** Result shape from statement.run(). Matches both better-sqlite3 and bun:sqlite. */
|
|
15
18
|
export interface SqliteRunResult {
|
|
@@ -65,8 +68,8 @@ export interface SqliteAdapter {
|
|
|
65
68
|
}
|
|
66
69
|
/**
|
|
67
70
|
* Create a SQLite adapter for the given filesystem path. Auto-detects the
|
|
68
|
-
* runtime (
|
|
69
|
-
* matching implementation.
|
|
71
|
+
* runtime (Bun → bun:sqlite, Node >= 22.5 → node:sqlite, older Node →
|
|
72
|
+
* better-sqlite3) and returns the matching implementation.
|
|
70
73
|
*/
|
|
71
74
|
export declare function createSqliteAdapter(path: string): SqliteAdapter;
|
|
72
75
|
//# sourceMappingURL=sqlite-adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-adapter.d.ts","sourceRoot":"","sources":["../../src/server/sqlite-adapter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sqlite-adapter.d.ts","sourceRoot":"","sources":["../../src/server/sqlite-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAwFH,qFAAqF;AACrF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe,CAC9B,MAAM,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,EACpC,GAAG,GAAG,OAAO;IAEb,GAAG,CAAC,GAAG,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;IAC9B,GAAG,CAAC,GAAG,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC;IACxC,GAAG,CAAC,GAAG,MAAM,EAAE,MAAM,GAAG,eAAe,CAAC;IACxC;;;;;OAKG;IACH,OAAO,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;CACpD;AAED,wFAAwF;AACxF,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,MAAM,SAAS,OAAO,EAAE,EAAE,GAAG,GAAG,OAAO,EAC7C,GAAG,EAAE,MAAM,GACV,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,GAAG,GAAG,OAAO,EACpB,GAAG,EAAE,MAAM,EACX,GAAG,MAAM,EAAE,OAAO,EAAE,GACnB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAClB;;;;;OAKG;IACH,aAAa,CAAC,GAAG,GAAG,OAAO,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,GAAG,MAAM,EAAE,OAAO,EAAE,GACnB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAClB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;IACrC,KAAK,IAAI,IAAI,CAAC;CACf;AAwSD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAQ/D"}
|
|
@@ -1,18 +1,92 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Abstract SQLite interface to decouple SessionStore from a specific SQLite
|
|
3
|
-
* binding. Enables Bun standalone binary builds (bun:sqlite)
|
|
4
|
-
* the existing better-sqlite3 path
|
|
3
|
+
* binding. Enables Bun standalone binary builds (bun:sqlite) and modern
|
|
4
|
+
* Node.js (node:sqlite) while preserving the existing better-sqlite3 path as
|
|
5
|
+
* a fallback for older Node runtimes that lack a built-in SQLite module.
|
|
5
6
|
*
|
|
6
|
-
*
|
|
7
|
-
* -
|
|
8
|
-
* -
|
|
7
|
+
* Three implementations:
|
|
8
|
+
* - NodeBuiltinSqliteAdapter — wraps node:sqlite (Node >= 22.5, zero deps)
|
|
9
|
+
* - NodeSqliteAdapter — wraps better-sqlite3 (legacy Node fallback)
|
|
10
|
+
* - BunSqliteAdapter — wraps bun:sqlite (Bun built-in, zero deps)
|
|
9
11
|
*
|
|
10
12
|
* The factory `createSqliteAdapter()` detects the runtime and returns the
|
|
11
13
|
* correct adapter. Callers (SessionStore) only interact with the `SqliteAdapter`
|
|
12
|
-
* interface — they never import better-sqlite3 or bun:sqlite
|
|
14
|
+
* interface — they never import better-sqlite3, node:sqlite or bun:sqlite
|
|
15
|
+
* directly.
|
|
13
16
|
*/
|
|
14
17
|
import { createRequire } from "node:module";
|
|
15
18
|
const _require = createRequire(import.meta.url);
|
|
19
|
+
// node:sqlite is still flagged "experimental" by Node and emits an
|
|
20
|
+
// ExperimentalWarning on first load. We deliberately opt into the built-in
|
|
21
|
+
// binding (validated by the full test suite), so we cache the load and narrow
|
|
22
|
+
// the warning suppression to that one message to keep `spectral serve` clean.
|
|
23
|
+
let nodeSqliteModule;
|
|
24
|
+
let nodeSqliteProbed = false;
|
|
25
|
+
function loadNodeSqlite() {
|
|
26
|
+
if (nodeSqliteProbed)
|
|
27
|
+
return nodeSqliteModule;
|
|
28
|
+
nodeSqliteProbed = true;
|
|
29
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
30
|
+
const proc = process;
|
|
31
|
+
const originalEmitWarning = proc.emitWarning;
|
|
32
|
+
try {
|
|
33
|
+
proc.emitWarning = (warning, ...rest) => {
|
|
34
|
+
const message = typeof warning === "string"
|
|
35
|
+
? warning
|
|
36
|
+
: warning instanceof Error
|
|
37
|
+
? warning.message
|
|
38
|
+
: String(warning);
|
|
39
|
+
if (message.includes("SQLite is an experimental feature"))
|
|
40
|
+
return;
|
|
41
|
+
return originalEmitWarning.call(process, warning, ...rest);
|
|
42
|
+
};
|
|
43
|
+
nodeSqliteModule = _require("node:sqlite");
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
nodeSqliteModule = null;
|
|
47
|
+
}
|
|
48
|
+
finally {
|
|
49
|
+
proc.emitWarning = originalEmitWarning;
|
|
50
|
+
}
|
|
51
|
+
return nodeSqliteModule;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Paged iterator collector shared by the Node adapters. Reads rows from a
|
|
55
|
+
* lazy statement iterator in bounded chunks, yielding to the event loop
|
|
56
|
+
* between chunks so large result sets don't block the process in one
|
|
57
|
+
* uninterrupted burst.
|
|
58
|
+
*/
|
|
59
|
+
function collectPaged(iterator, pageSize) {
|
|
60
|
+
return new Promise((resolve, reject) => {
|
|
61
|
+
const rows = [];
|
|
62
|
+
const page = [];
|
|
63
|
+
const safePageSize = Number.isFinite(pageSize) && pageSize > 0
|
|
64
|
+
? Math.floor(pageSize)
|
|
65
|
+
: 200;
|
|
66
|
+
const advance = () => {
|
|
67
|
+
try {
|
|
68
|
+
let next = iterator.next();
|
|
69
|
+
while (!next.done) {
|
|
70
|
+
page.push(next.value);
|
|
71
|
+
if (page.length >= safePageSize) {
|
|
72
|
+
rows.push(...page);
|
|
73
|
+
page.length = 0;
|
|
74
|
+
setImmediate(advance);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
next = iterator.next();
|
|
78
|
+
}
|
|
79
|
+
if (page.length > 0)
|
|
80
|
+
rows.push(...page);
|
|
81
|
+
resolve(rows);
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
reject(err instanceof Error ? err : new Error(String(err)));
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
advance();
|
|
88
|
+
});
|
|
89
|
+
}
|
|
16
90
|
// ---------------------------------------------------------------------------
|
|
17
91
|
// Node.js adapter (better-sqlite3)
|
|
18
92
|
// ---------------------------------------------------------------------------
|
|
@@ -44,42 +118,14 @@ class NodeSqliteAdapter {
|
|
|
44
118
|
return this.queryAllPaged(sql, 200, ...params);
|
|
45
119
|
}
|
|
46
120
|
queryAllPaged(sql, pageSize, ...params) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
: 200;
|
|
56
|
-
const advance = () => {
|
|
57
|
-
try {
|
|
58
|
-
let next = iterator.next();
|
|
59
|
-
while (!next.done) {
|
|
60
|
-
page.push(next.value);
|
|
61
|
-
if (page.length >= safePageSize) {
|
|
62
|
-
rows.push(...page);
|
|
63
|
-
page.length = 0;
|
|
64
|
-
setImmediate(advance);
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
next = iterator.next();
|
|
68
|
-
}
|
|
69
|
-
if (page.length > 0)
|
|
70
|
-
rows.push(...page);
|
|
71
|
-
resolve(rows);
|
|
72
|
-
}
|
|
73
|
-
catch (err) {
|
|
74
|
-
reject(err instanceof Error ? err : new Error(String(err)));
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
advance();
|
|
78
|
-
}
|
|
79
|
-
catch (err) {
|
|
80
|
-
reject(err instanceof Error ? err : new Error(String(err)));
|
|
81
|
-
}
|
|
82
|
-
});
|
|
121
|
+
try {
|
|
122
|
+
const stmt = this.db.prepare(sql);
|
|
123
|
+
const iterator = stmt.iterate(...params);
|
|
124
|
+
return collectPaged(iterator, pageSize);
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
return Promise.reject(err instanceof Error ? err : new Error(String(err)));
|
|
128
|
+
}
|
|
83
129
|
}
|
|
84
130
|
exec(sql) {
|
|
85
131
|
this.db.exec(sql);
|
|
@@ -95,6 +141,98 @@ class NodeSqliteAdapter {
|
|
|
95
141
|
}
|
|
96
142
|
}
|
|
97
143
|
// ---------------------------------------------------------------------------
|
|
144
|
+
// Node.js built-in adapter (node:sqlite)
|
|
145
|
+
// ---------------------------------------------------------------------------
|
|
146
|
+
/**
|
|
147
|
+
* Statement wrapper for node:sqlite's `StatementSync`. Its `.all`, `.get`,
|
|
148
|
+
* `.run` and `.iterate` methods match the adapter surface directly; `run` is
|
|
149
|
+
* normalized to the shared `{ changes }` result shape.
|
|
150
|
+
*/
|
|
151
|
+
class NodeBuiltinStatement {
|
|
152
|
+
stmt;
|
|
153
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
154
|
+
constructor(stmt) {
|
|
155
|
+
this.stmt = stmt;
|
|
156
|
+
}
|
|
157
|
+
all(...params) {
|
|
158
|
+
return this.stmt.all(...params);
|
|
159
|
+
}
|
|
160
|
+
get(...params) {
|
|
161
|
+
return this.stmt.get(...params);
|
|
162
|
+
}
|
|
163
|
+
run(...params) {
|
|
164
|
+
return { changes: this.stmt.run(...params).changes };
|
|
165
|
+
}
|
|
166
|
+
iterate(...params) {
|
|
167
|
+
return this.stmt.iterate(...params);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* SQLite adapter backed by Node's built-in `node:sqlite` module (available
|
|
172
|
+
* without a flag since Node 22.13 / 23.4, and in earlier 22.5+ builds behind
|
|
173
|
+
* `--experimental-sqlite`). Using the built-in removes the native
|
|
174
|
+
* better-sqlite3 compilation/prebuild download from the common `npm install
|
|
175
|
+
* -g @aexol/spectral` path.
|
|
176
|
+
*
|
|
177
|
+
* PRAGMAs and transactions are expressed via `exec()` because `node:sqlite`
|
|
178
|
+
* exposes neither a `.pragma()` convenience method nor a `.transaction()`
|
|
179
|
+
* helper.
|
|
180
|
+
*/
|
|
181
|
+
class NodeBuiltinSqliteAdapter {
|
|
182
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
183
|
+
db;
|
|
184
|
+
constructor(path) {
|
|
185
|
+
const { DatabaseSync } = loadNodeSqlite();
|
|
186
|
+
this.db = new DatabaseSync(path);
|
|
187
|
+
this.db.exec("PRAGMA journal_mode = WAL");
|
|
188
|
+
this.db.exec("PRAGMA foreign_keys = ON");
|
|
189
|
+
}
|
|
190
|
+
prepare(sql) {
|
|
191
|
+
return new NodeBuiltinStatement(this.db.prepare(sql));
|
|
192
|
+
}
|
|
193
|
+
queryAll(sql, ...params) {
|
|
194
|
+
return this.queryAllPaged(sql, 200, ...params);
|
|
195
|
+
}
|
|
196
|
+
queryAllPaged(sql, pageSize, ...params) {
|
|
197
|
+
try {
|
|
198
|
+
const stmt = this.db.prepare(sql);
|
|
199
|
+
const iterator = stmt.iterate(...params);
|
|
200
|
+
return collectPaged(iterator, pageSize);
|
|
201
|
+
}
|
|
202
|
+
catch (err) {
|
|
203
|
+
return Promise.reject(err instanceof Error ? err : new Error(String(err)));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
exec(sql) {
|
|
207
|
+
this.db.exec(sql);
|
|
208
|
+
}
|
|
209
|
+
pragma(sql) {
|
|
210
|
+
this.db.exec(`PRAGMA ${sql}`);
|
|
211
|
+
}
|
|
212
|
+
transaction(fn) {
|
|
213
|
+
return () => {
|
|
214
|
+
this.db.exec("BEGIN");
|
|
215
|
+
try {
|
|
216
|
+
const result = fn();
|
|
217
|
+
this.db.exec("COMMIT");
|
|
218
|
+
return result;
|
|
219
|
+
}
|
|
220
|
+
catch (err) {
|
|
221
|
+
try {
|
|
222
|
+
this.db.exec("ROLLBACK");
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
// ignore rollback failures; the original error is more useful
|
|
226
|
+
}
|
|
227
|
+
throw err;
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
close() {
|
|
232
|
+
this.db.close();
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// ---------------------------------------------------------------------------
|
|
98
236
|
// Bun adapter (bun:sqlite)
|
|
99
237
|
// ---------------------------------------------------------------------------
|
|
100
238
|
/**
|
|
@@ -168,14 +306,27 @@ class BunSqliteAdapter {
|
|
|
168
306
|
function isBun() {
|
|
169
307
|
return typeof globalThis.Bun !== "undefined";
|
|
170
308
|
}
|
|
309
|
+
/**
|
|
310
|
+
* Detect Node's built-in SQLite module. Returns true when `node:sqlite` is
|
|
311
|
+
* available and usable (Node >= 22.5 with the experimental flag, or any
|
|
312
|
+
* unflagged build since 22.13 / 23.4). On older Node this throws and we fall
|
|
313
|
+
* back to better-sqlite3.
|
|
314
|
+
*/
|
|
315
|
+
function canUseNodeSqlite() {
|
|
316
|
+
const mod = loadNodeSqlite();
|
|
317
|
+
return typeof mod?.DatabaseSync === "function";
|
|
318
|
+
}
|
|
171
319
|
/**
|
|
172
320
|
* Create a SQLite adapter for the given filesystem path. Auto-detects the
|
|
173
|
-
* runtime (
|
|
174
|
-
* matching implementation.
|
|
321
|
+
* runtime (Bun → bun:sqlite, Node >= 22.5 → node:sqlite, older Node →
|
|
322
|
+
* better-sqlite3) and returns the matching implementation.
|
|
175
323
|
*/
|
|
176
324
|
export function createSqliteAdapter(path) {
|
|
177
325
|
if (isBun()) {
|
|
178
326
|
return new BunSqliteAdapter(path);
|
|
179
327
|
}
|
|
328
|
+
if (canUseNodeSqlite()) {
|
|
329
|
+
return new NodeBuiltinSqliteAdapter(path);
|
|
330
|
+
}
|
|
180
331
|
return new NodeSqliteAdapter(path);
|
|
181
332
|
}
|
package/dist/server/storage.d.ts
CHANGED
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
* Two-tier model:
|
|
5
5
|
* projects ─< sessions ─< messages
|
|
6
6
|
*
|
|
7
|
-
* Single-process, single-file.
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* Single-process, single-file. The storage layer goes through the `SqliteAdapter`
|
|
8
|
+
* abstraction (see `sqlite-adapter.ts`) which prefers Node's built-in
|
|
9
|
+
* `node:sqlite` on modern Node, `bun:sqlite` under Bun, and only falls back
|
|
10
|
+
* to `better-sqlite3` on older Node runtimes. The synchronous adapter API is a
|
|
11
|
+
* perfect fit for the per-WS-event write pattern: no connection pool, no
|
|
12
|
+
* callback churn, transactions are trivial.
|
|
11
13
|
*
|
|
12
14
|
* Schema migrations:
|
|
13
15
|
* We track schema with the `user_version` PRAGMA. When opening a DB whose
|
|
@@ -469,7 +471,8 @@ export declare class SessionStore {
|
|
|
469
471
|
close(): void;
|
|
470
472
|
}
|
|
471
473
|
/**
|
|
472
|
-
* Pre-flight: verify that
|
|
474
|
+
* Pre-flight: verify that the SQLite adapter loads and a writable DB can be
|
|
475
|
+
* opened.
|
|
473
476
|
*
|
|
474
477
|
* Called before binding the port so a broken native build fails loudly with
|
|
475
478
|
* a helpful hint instead of crashing later when the first WS connection
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/server/storage.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/server/storage.ts"],"names":[],"mappings":"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"}
|