atabey-shared 0.0.36 → 0.1.0-beta.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/README.md +2 -2
- package/dist/agent-identity.d.ts +34 -0
- package/dist/agent-identity.js +77 -0
- package/dist/agent-identity.js.map +1 -0
- package/dist/api-catalog.d.ts +57 -0
- package/dist/api-catalog.js +254 -0
- package/dist/api-catalog.js.map +1 -0
- package/dist/audit-chain.d.ts +32 -3
- package/dist/audit-chain.js +188 -11
- package/dist/audit-chain.js.map +1 -1
- package/dist/audit.d.ts +8 -0
- package/dist/audit.js +44 -7
- package/dist/audit.js.map +1 -1
- package/dist/constants.d.ts +4 -3
- package/dist/constants.js +11 -12
- package/dist/constants.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.js +1 -1
- package/dist/file-lock.d.ts +5 -0
- package/dist/file-lock.js +20 -31
- package/dist/file-lock.js.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +1 -0
- package/dist/logger.js +33 -7
- package/dist/logger.js.map +1 -1
- package/dist/memory-prune.d.ts +18 -0
- package/dist/memory-prune.js +48 -0
- package/dist/memory-prune.js.map +1 -0
- package/dist/migrations.d.ts +69 -0
- package/dist/migrations.js +375 -0
- package/dist/migrations.js.map +1 -0
- package/dist/otel.d.ts +39 -0
- package/dist/otel.js +93 -0
- package/dist/otel.js.map +1 -0
- package/dist/outbound-http.d.ts +32 -0
- package/dist/outbound-http.js +88 -0
- package/dist/outbound-http.js.map +1 -0
- package/dist/pii.d.ts +1 -0
- package/dist/pii.js +82 -26
- package/dist/pii.js.map +1 -1
- package/dist/policy-gate.js +27 -3
- package/dist/policy-gate.js.map +1 -1
- package/dist/retention.d.ts +6 -1
- package/dist/retention.js +56 -9
- package/dist/retention.js.map +1 -1
- package/dist/sandbox-fs.d.ts +1 -1
- package/dist/sandbox-fs.js +34 -39
- package/dist/sandbox-fs.js.map +1 -1
- package/dist/sandbox-runtime.d.ts +21 -28
- package/dist/sandbox-runtime.js +124 -92
- package/dist/sandbox-runtime.js.map +1 -1
- package/dist/secrets.d.ts +99 -0
- package/dist/secrets.js +371 -0
- package/dist/secrets.js.map +1 -0
- package/dist/storage.d.ts +67 -0
- package/dist/storage.js +291 -11
- package/dist/storage.js.map +1 -1
- package/dist/time.js +6 -2
- package/dist/time.js.map +1 -1
- package/dist/tls.d.ts +87 -0
- package/dist/tls.js +154 -0
- package/dist/tls.js.map +1 -0
- package/dist/tokenizer.d.ts +54 -0
- package/dist/tokenizer.js +272 -0
- package/dist/tokenizer.js.map +1 -0
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/worker-pool.js +19 -0
- package/dist/worker-pool.js.map +1 -1
- package/package.json +18 -6
package/dist/file-lock.js
CHANGED
|
@@ -34,7 +34,7 @@ export class AtomicFileLock {
|
|
|
34
34
|
? resource
|
|
35
35
|
: path.resolve(this.projectRoot, resource);
|
|
36
36
|
let relative = path.relative(this.projectRoot, abs);
|
|
37
|
-
if (relative.startsWith(
|
|
37
|
+
if (relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) {
|
|
38
38
|
// Outside project root — hash path to avoid escaping locks dir
|
|
39
39
|
relative = `_ext/${Buffer.from(abs).toString("base64url")}`;
|
|
40
40
|
}
|
|
@@ -61,40 +61,18 @@ export class AtomicFileLock {
|
|
|
61
61
|
pid: process.pid,
|
|
62
62
|
hostname: os.hostname(),
|
|
63
63
|
};
|
|
64
|
-
let fd;
|
|
65
64
|
try {
|
|
66
|
-
// Atomic exclusive create
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
catch (writeErr) {
|
|
72
|
-
// CRITICAL: meta write failed after wx create (e.g. ENOSPC) — remove orphan lock
|
|
73
|
-
try {
|
|
74
|
-
if (fd !== undefined)
|
|
75
|
-
fs.closeSync(fd);
|
|
76
|
-
}
|
|
77
|
-
catch { /* ignore */ }
|
|
78
|
-
fd = undefined;
|
|
79
|
-
this.forceRemove(lockPath, null);
|
|
80
|
-
throw writeErr;
|
|
81
|
-
}
|
|
82
|
-
fs.closeSync(fd);
|
|
83
|
-
fd = undefined;
|
|
65
|
+
// Atomic exclusive create WITH content in one syscall sequence
|
|
66
|
+
// (writeFileSync + flag 'wx' = O_CREAT|O_EXCL|O_WRONLY): there is no
|
|
67
|
+
// window where the lock file exists empty for a reader to misread.
|
|
68
|
+
fs.writeFileSync(lockPath, JSON.stringify(meta, null, 2), { encoding: "utf8", flag: "wx" });
|
|
84
69
|
return { acquired: true, meta };
|
|
85
70
|
}
|
|
86
71
|
catch (err) {
|
|
87
|
-
if (fd !== undefined) {
|
|
88
|
-
try {
|
|
89
|
-
fs.closeSync(fd);
|
|
90
|
-
}
|
|
91
|
-
catch { /* ignore */ }
|
|
92
|
-
}
|
|
93
72
|
const code = err.code;
|
|
94
73
|
if (code === "EEXIST") {
|
|
95
|
-
//
|
|
74
|
+
// Another process holds it. Reclaim only if corrupt/empty or expired.
|
|
96
75
|
const heldBy = this.readMeta(lockPath) ?? undefined;
|
|
97
|
-
// Corrupt lock (unreadable JSON) or expired → reclaim and retry once
|
|
98
76
|
if ((!heldBy || this.isExpired(heldBy)) && _reclaimDepth < 1) {
|
|
99
77
|
this.forceRemove(lockPath, heldBy ?? null);
|
|
100
78
|
return this.tryAcquire(resource, ownerId, reason, _reclaimDepth + 1);
|
|
@@ -132,6 +110,8 @@ export class AtomicFileLock {
|
|
|
132
110
|
return true;
|
|
133
111
|
const meta = this.readMeta(lockPath);
|
|
134
112
|
if (!meta) {
|
|
113
|
+
// Corrupt/empty lock — safe to drop (atomic create means a real
|
|
114
|
+
// holder always has readable meta).
|
|
135
115
|
this.forceRemove(lockPath, null);
|
|
136
116
|
return true;
|
|
137
117
|
}
|
|
@@ -209,11 +189,20 @@ export class AtomicFileLock {
|
|
|
209
189
|
reclaimIfStale(lockPath) {
|
|
210
190
|
if (!fs.existsSync(lockPath))
|
|
211
191
|
return;
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
this.forceRemove(lockPath, meta);
|
|
192
|
+
if (this.isReclaimable(lockPath)) {
|
|
193
|
+
this.forceRemove(lockPath, this.readMeta(lockPath));
|
|
215
194
|
}
|
|
216
195
|
}
|
|
196
|
+
/**
|
|
197
|
+
* True when an existing lock file may be safely stolen: unparseable/empty
|
|
198
|
+
* (corrupt, e.g. crashed mid-write) or past its TTL.
|
|
199
|
+
*/
|
|
200
|
+
isReclaimable(lockPath) {
|
|
201
|
+
const meta = this.readMeta(lockPath);
|
|
202
|
+
if (!meta)
|
|
203
|
+
return true;
|
|
204
|
+
return this.isExpired(meta);
|
|
205
|
+
}
|
|
217
206
|
isExpired(meta) {
|
|
218
207
|
const exp = Date.parse(meta.expiresAt);
|
|
219
208
|
if (Number.isNaN(exp)) {
|
package/dist/file-lock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../src/file-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAyBxB,MAAM,OAAO,cAAc;IACN,QAAQ,CAAS;IACjB,WAAW,CAAS;IACpB,KAAK,CAAS;IACd,OAAO,CAAS;IAChB,SAAS,CAAS;IAEnC,YAAY,UAA2B,EAAE;QACrC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACxD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ;YAC5B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QAC5C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC;IACjD,CAAC;IAED,qDAAqD;IAC9C,WAAW,CAAC,QAAgB;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YACjC,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACpD,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../src/file-lock.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -20,3 +20,12 @@ export * from "./resilience.js";
|
|
|
20
20
|
export * from "./policy-gate.js";
|
|
21
21
|
export * from "./storage.js";
|
|
22
22
|
export * from "./time.js";
|
|
23
|
+
export * from "./secrets.js";
|
|
24
|
+
export * from "./tokenizer.js";
|
|
25
|
+
export * from "./migrations.js";
|
|
26
|
+
export * from "./tls.js";
|
|
27
|
+
export * from "./outbound-http.js";
|
|
28
|
+
export * from "./api-catalog.js";
|
|
29
|
+
export * from "./agent-identity.js";
|
|
30
|
+
export * from "./memory-prune.js";
|
|
31
|
+
export * from "./otel.js";
|
package/dist/index.js
CHANGED
|
@@ -20,4 +20,13 @@ export * from "./resilience.js";
|
|
|
20
20
|
export * from "./policy-gate.js";
|
|
21
21
|
export * from "./storage.js";
|
|
22
22
|
export * from "./time.js";
|
|
23
|
+
export * from "./secrets.js";
|
|
24
|
+
export * from "./tokenizer.js";
|
|
25
|
+
export * from "./migrations.js";
|
|
26
|
+
export * from "./tls.js";
|
|
27
|
+
export * from "./outbound-http.js";
|
|
28
|
+
export * from "./api-catalog.js";
|
|
29
|
+
export * from "./agent-identity.js";
|
|
30
|
+
export * from "./memory-prune.js";
|
|
31
|
+
export * from "./otel.js";
|
|
23
32
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC"}
|
package/dist/logger.d.ts
CHANGED
package/dist/logger.js
CHANGED
|
@@ -2,6 +2,27 @@ import chalk from "chalk";
|
|
|
2
2
|
import path from "path";
|
|
3
3
|
import { appendFile, ensureDir } from "./fs.js";
|
|
4
4
|
import { containsPII, maskObject, maskText } from "./pii.js";
|
|
5
|
+
/** JSON.stringify that tolerates circular references instead of throwing. */
|
|
6
|
+
function safeStringify(value) {
|
|
7
|
+
const seen = new WeakSet();
|
|
8
|
+
try {
|
|
9
|
+
return JSON.stringify(value, (_key, v) => {
|
|
10
|
+
if (typeof v === "object" && v !== null) {
|
|
11
|
+
if (typeof Buffer !== "undefined" && Buffer.isBuffer(v))
|
|
12
|
+
return `<Buffer ${v.length} bytes>`;
|
|
13
|
+
if (v instanceof Uint8Array)
|
|
14
|
+
return `<bytes ${v.length}>`;
|
|
15
|
+
if (seen.has(v))
|
|
16
|
+
return "[Circular]";
|
|
17
|
+
seen.add(v);
|
|
18
|
+
}
|
|
19
|
+
return v;
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return "[Unserializable]";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
5
26
|
export var LogLevel;
|
|
6
27
|
(function (LogLevel) {
|
|
7
28
|
LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
|
|
@@ -15,12 +36,14 @@ export class EnterpriseLogger {
|
|
|
15
36
|
static instance;
|
|
16
37
|
constructor() {
|
|
17
38
|
const isProd = process.env.NODE_ENV === "production";
|
|
39
|
+
const isStdio = process.env.MCP_TRANSPORT === "stdio";
|
|
18
40
|
this.config = {
|
|
19
41
|
minLevel: isProd ? LogLevel.INFO : LogLevel.DEBUG,
|
|
20
|
-
enableColors: !isProd,
|
|
42
|
+
enableColors: !isProd && !isStdio,
|
|
21
43
|
jsonFormat: isProd,
|
|
22
44
|
enablePiiMasking: true, // KVKK: PII masking ON by default
|
|
23
45
|
piiWarning: true,
|
|
46
|
+
useStderr: isStdio,
|
|
24
47
|
};
|
|
25
48
|
}
|
|
26
49
|
static getInstance() {
|
|
@@ -47,12 +70,15 @@ export class EnterpriseLogger {
|
|
|
47
70
|
// [KVKK] PII masking — mask sensitive data before logging
|
|
48
71
|
const safeMessage = this.config.enablePiiMasking ? maskText(message) : message;
|
|
49
72
|
const safeMeta = this.config.enablePiiMasking && meta ? maskObject(meta) : meta;
|
|
50
|
-
// [KVKK] Warn if PII detected in production
|
|
51
|
-
if (this.config.piiWarning && (containsPII(message) || (meta && containsPII(
|
|
52
|
-
|
|
73
|
+
// [KVKK] Warn if PII detected in production (safe against circular meta)
|
|
74
|
+
if (this.config.piiWarning && (containsPII(message) || (meta !== undefined && containsPII(safeStringify(meta))))) {
|
|
75
|
+
// Only pollute stderr in non-JSON mode so structured streams stay clean.
|
|
76
|
+
if (!this.config.jsonFormat) {
|
|
77
|
+
process.stderr.write(`[PII WARNING] Potential PII detected in log at ${timestamp}\n`);
|
|
78
|
+
}
|
|
53
79
|
}
|
|
54
80
|
if (this.config.jsonFormat) {
|
|
55
|
-
return
|
|
81
|
+
return safeStringify({
|
|
56
82
|
timestamp,
|
|
57
83
|
level: LogLevel[level],
|
|
58
84
|
pid,
|
|
@@ -88,9 +114,9 @@ export class EnterpriseLogger {
|
|
|
88
114
|
if (level < this.config.minLevel)
|
|
89
115
|
return;
|
|
90
116
|
const formatted = this.formatMessage(level, message, meta);
|
|
91
|
-
// Route to stderr for ERROR/FATAL,
|
|
117
|
+
// Route to stderr for ERROR/FATAL, or when useStderr / MCP stdio transport is active.
|
|
92
118
|
// Using process.write directly here is intentional — this IS the logger.
|
|
93
|
-
if (level >= LogLevel.ERROR) {
|
|
119
|
+
if (this.config.useStderr || process.env.MCP_TRANSPORT === "stdio" || level >= LogLevel.ERROR) {
|
|
94
120
|
process.stderr.write(formatted + "\n");
|
|
95
121
|
}
|
|
96
122
|
else {
|
package/dist/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE7D,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAChB,yCAAS,CAAA;IACT,uCAAQ,CAAA;IACR,uCAAQ,CAAA;IACR,yCAAS,CAAA;IACT,yCAAS,CAAA;AACb,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Specialty memory pruning — deduplication + cap + summary.
|
|
3
|
+
*
|
|
4
|
+
* `updateSpecialtyMemory` appends raw markdown lessons forever, which bloats
|
|
5
|
+
* prompts and accumulates contradictions. This pure function deduplicates
|
|
6
|
+
* identical lessons (ignoring the timestamp) and caps the retained count,
|
|
7
|
+
* leaving a summary marker for pruned entries.
|
|
8
|
+
*/
|
|
9
|
+
export interface PruneResult {
|
|
10
|
+
content: string;
|
|
11
|
+
removed: number;
|
|
12
|
+
kept: number;
|
|
13
|
+
}
|
|
14
|
+
export interface PruneOptions {
|
|
15
|
+
/** Maximum number of lessons retained (newest kept). Default: 100. */
|
|
16
|
+
maxLessons?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare function pruneSpecialtyMarkdown(content: string, options?: PruneOptions): PruneResult;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Specialty memory pruning — deduplication + cap + summary.
|
|
3
|
+
*
|
|
4
|
+
* `updateSpecialtyMemory` appends raw markdown lessons forever, which bloats
|
|
5
|
+
* prompts and accumulates contradictions. This pure function deduplicates
|
|
6
|
+
* identical lessons (ignoring the timestamp) and caps the retained count,
|
|
7
|
+
* leaving a summary marker for pruned entries.
|
|
8
|
+
*/
|
|
9
|
+
const LESSON_PREFIX = /^\s*-\s+\*\*\[/;
|
|
10
|
+
const TIMESTAMP = /\[[^\]]*\]/g;
|
|
11
|
+
export function pruneSpecialtyMarkdown(content, options = {}) {
|
|
12
|
+
const maxLessons = options.maxLessons ?? 100;
|
|
13
|
+
if (!content)
|
|
14
|
+
return { content: content ?? "", removed: 0, kept: 0 };
|
|
15
|
+
const lines = content.split(/\r?\n/);
|
|
16
|
+
const header = [];
|
|
17
|
+
const lessons = [];
|
|
18
|
+
const seen = new Set();
|
|
19
|
+
let removed = 0;
|
|
20
|
+
for (const line of lines) {
|
|
21
|
+
if (LESSON_PREFIX.test(line)) {
|
|
22
|
+
const key = line.replace(TIMESTAMP, "").trim().toLowerCase();
|
|
23
|
+
if (seen.has(key)) {
|
|
24
|
+
removed++;
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
seen.add(key);
|
|
28
|
+
lessons.push(line);
|
|
29
|
+
}
|
|
30
|
+
else if (line.trim() === "" && lessons.length > 0) {
|
|
31
|
+
// collapse blank lines between lessons
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
header.push(line);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
let kept = lessons;
|
|
39
|
+
if (lessons.length > maxLessons) {
|
|
40
|
+
const dropped = lessons.length - maxLessons;
|
|
41
|
+
removed += dropped;
|
|
42
|
+
kept = lessons.slice(-maxLessons);
|
|
43
|
+
header.push(`- _[memory-prune] ${dropped} older lesson(s) pruned to control prompt size._`);
|
|
44
|
+
}
|
|
45
|
+
const body = [...header, ...kept].join("\n").replace(/\n{3,}/g, "\n\n").trimEnd();
|
|
46
|
+
return { content: body ? `${body}\n` : "", removed, kept: kept.length };
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=memory-prune.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-prune.js","sourceRoot":"","sources":["../src/memory-prune.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,MAAM,aAAa,GAAG,gBAAgB,CAAC;AACvC,MAAM,SAAS,GAAG,aAAa,CAAC;AAEhC,MAAM,UAAU,sBAAsB,CAAC,OAAe,EAAE,UAAwB,EAAE;IAC9E,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC;IAC7C,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAErE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC7D,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChB,OAAO,EAAE,CAAC;gBACV,SAAS;YACb,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,uCAAuC;YACvC,SAAS;QACb,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACL,CAAC;IAED,IAAI,IAAI,GAAG,OAAO,CAAC;IACnB,IAAI,OAAO,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC;QAC5C,OAAO,IAAI,OAAO,CAAC;QACnB,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,qBAAqB,OAAO,kDAAkD,CAAC,CAAC;IAChG,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;IAClF,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite Schema Migration Runner, Startup Integrity Check & Online Backup/Restore (Phase 1.5)
|
|
3
|
+
*
|
|
4
|
+
* Provides:
|
|
5
|
+
* 1. Versioned, checksummed schema migrations (`schema_migrations` table).
|
|
6
|
+
* 2. Startup integrity verification (`PRAGMA quick_check` / `PRAGMA integrity_check`).
|
|
7
|
+
* 3. Atomic online backup (`VACUUM INTO` + `.sha256` manifest) and verified restore.
|
|
8
|
+
*/
|
|
9
|
+
import Database from "better-sqlite3";
|
|
10
|
+
export interface SchemaMigration {
|
|
11
|
+
version: number;
|
|
12
|
+
name: string;
|
|
13
|
+
sql: string;
|
|
14
|
+
}
|
|
15
|
+
export interface AppliedMigration {
|
|
16
|
+
version: number;
|
|
17
|
+
name: string;
|
|
18
|
+
checksum: string;
|
|
19
|
+
applied_at: string;
|
|
20
|
+
}
|
|
21
|
+
export interface IntegrityCheckResult {
|
|
22
|
+
ok: boolean;
|
|
23
|
+
messages: string[];
|
|
24
|
+
foreignKeyViolations: number;
|
|
25
|
+
}
|
|
26
|
+
export interface BackupResult {
|
|
27
|
+
backupPath: string;
|
|
28
|
+
sha256: string;
|
|
29
|
+
sizeBytes: number;
|
|
30
|
+
createdAt: string;
|
|
31
|
+
schemaVersion: number;
|
|
32
|
+
}
|
|
33
|
+
export declare const BUILTIN_MIGRATIONS: SchemaMigration[];
|
|
34
|
+
/**
|
|
35
|
+
* Run all pending schema migrations transactionally and return applied version numbers.
|
|
36
|
+
*/
|
|
37
|
+
export declare function runPendingMigrations(db: Database.Database, migrations?: SchemaMigration[]): {
|
|
38
|
+
applied: number[];
|
|
39
|
+
currentVersion: number;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Return applied and pending migrations for diagnostics/CLI.
|
|
43
|
+
*/
|
|
44
|
+
export declare function getMigrationStatus(db: Database.Database, migrations?: SchemaMigration[]): {
|
|
45
|
+
currentVersion: number;
|
|
46
|
+
applied: AppliedMigration[];
|
|
47
|
+
pending: Array<{
|
|
48
|
+
version: number;
|
|
49
|
+
name: string;
|
|
50
|
+
}>;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Run SQLite integrity_check / quick_check and foreign_key_check.
|
|
54
|
+
*/
|
|
55
|
+
export declare function verifyDatabaseIntegrity(db: Database.Database, mode?: "quick" | "full"): IntegrityCheckResult;
|
|
56
|
+
/**
|
|
57
|
+
* Perform a consistent online backup using SQLite `VACUUM INTO` and write a `.sha256` sidecar.
|
|
58
|
+
*/
|
|
59
|
+
export declare function backupDatabase(db: Database.Database, destinationPath: string): BackupResult;
|
|
60
|
+
/**
|
|
61
|
+
* Verify a backup file (checksum sidecar + SQLite integrity_check) and atomically restore it.
|
|
62
|
+
*/
|
|
63
|
+
export declare function restoreDatabase(backupPath: string, targetDbPath: string, options?: {
|
|
64
|
+
verifyChecksum?: boolean;
|
|
65
|
+
}): {
|
|
66
|
+
restoredPath: string;
|
|
67
|
+
sha256: string;
|
|
68
|
+
schemaVersion: number;
|
|
69
|
+
};
|