abmind 0.2.7-alpha.1 → 0.2.7-alpha.2
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/cli/abmind-deps.d.ts +3 -0
- package/dist/cli/abmind-deps.d.ts.map +1 -1
- package/dist/cli/abmind-deps.js +28 -11
- package/dist/cli/abmind-deps.js.map +1 -1
- package/dist/cli/abmind-doctor.js +30 -2
- package/dist/cli/abmind-doctor.js.map +1 -1
- package/dist/cli/abmind-install.js +4 -34
- package/dist/cli/abmind-install.js.map +1 -1
- package/dist/cli/abmind-update.js +34 -3
- package/dist/cli/abmind-update.js.map +1 -1
- package/dist/cli/abmind.js +0 -0
- package/dist/src/context-checkpoint-store.d.ts +99 -0
- package/dist/src/context-checkpoint-store.d.ts.map +1 -0
- package/dist/src/context-checkpoint-store.js +196 -0
- package/dist/src/context-checkpoint-store.js.map +1 -0
- package/dist/src/deploy-lib/index.d.ts +1 -0
- package/dist/src/deploy-lib/index.d.ts.map +1 -1
- package/dist/src/deploy-lib/index.js +1 -0
- package/dist/src/deploy-lib/index.js.map +1 -1
- package/dist/src/deploy-lib/shared-native-deps-activate.d.ts +11 -0
- package/dist/src/deploy-lib/shared-native-deps-activate.d.ts.map +1 -0
- package/dist/src/deploy-lib/shared-native-deps-activate.js +102 -0
- package/dist/src/deploy-lib/shared-native-deps-activate.js.map +1 -0
- package/dist/src/deploy-lib/shared-native-deps-lock.d.ts +8 -0
- package/dist/src/deploy-lib/shared-native-deps-lock.d.ts.map +1 -0
- package/dist/src/deploy-lib/shared-native-deps-lock.js +102 -0
- package/dist/src/deploy-lib/shared-native-deps-lock.js.map +1 -0
- package/dist/src/deploy-lib/shared-native-deps-manifest.d.ts +12 -0
- package/dist/src/deploy-lib/shared-native-deps-manifest.d.ts.map +1 -0
- package/dist/src/deploy-lib/shared-native-deps-manifest.js +110 -0
- package/dist/src/deploy-lib/shared-native-deps-manifest.js.map +1 -0
- package/dist/src/deploy-lib/shared-native-deps-paths.d.ts +12 -0
- package/dist/src/deploy-lib/shared-native-deps-paths.d.ts.map +1 -0
- package/dist/src/deploy-lib/shared-native-deps-paths.js +29 -0
- package/dist/src/deploy-lib/shared-native-deps-paths.js.map +1 -0
- package/dist/src/deploy-lib/shared-native-deps-types.d.ts +48 -0
- package/dist/src/deploy-lib/shared-native-deps-types.d.ts.map +1 -0
- package/dist/src/deploy-lib/shared-native-deps-types.js +3 -0
- package/dist/src/deploy-lib/shared-native-deps-types.js.map +1 -0
- package/dist/src/deploy-lib/shared-native-deps.d.ts +24 -0
- package/dist/src/deploy-lib/shared-native-deps.d.ts.map +1 -0
- package/dist/src/deploy-lib/shared-native-deps.js +78 -0
- package/dist/src/deploy-lib/shared-native-deps.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/memory-db.d.ts.map +1 -1
- package/dist/src/memory-db.js +33 -0
- package/dist/src/memory-db.js.map +1 -1
- package/package.json +7 -3
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* context-checkpoint-store.ts — Cumulative checkpoint lineage for cache-stable
|
|
3
|
+
* context assembly (#1335).
|
|
4
|
+
*
|
|
5
|
+
* Provides append-only checkpoint records with a generation-guarded active
|
|
6
|
+
* pointer. One active cumulative checkpoint per session; historical checkpoints
|
|
7
|
+
* remain as append-only provenance but are not injected into context.
|
|
8
|
+
*
|
|
9
|
+
* Every added column has a writer, reader, and round-trip test.
|
|
10
|
+
*/
|
|
11
|
+
import { CHARS_PER_TOKEN } from "./context-engine.js";
|
|
12
|
+
const TAG = "context-checkpoint";
|
|
13
|
+
// ── schema helpers ───────────────────────────────────────────────────────────
|
|
14
|
+
const CHECKPOINT_TABLE = "context_checkpoints";
|
|
15
|
+
const ACTIVE_POINTER_TABLE = "active_context_checkpoint";
|
|
16
|
+
const SCHEMA_VERSION = 1;
|
|
17
|
+
export const CHECKPOINT_SCHEMA_SQL = `
|
|
18
|
+
CREATE TABLE IF NOT EXISTS ${CHECKPOINT_TABLE} (
|
|
19
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
20
|
+
chat_id TEXT NOT NULL,
|
|
21
|
+
previous_checkpoint_id INTEGER,
|
|
22
|
+
source_message_start INTEGER NOT NULL,
|
|
23
|
+
source_message_end INTEGER NOT NULL,
|
|
24
|
+
first_kept_message_id INTEGER NOT NULL,
|
|
25
|
+
content TEXT NOT NULL,
|
|
26
|
+
source_token_count INTEGER NOT NULL,
|
|
27
|
+
checkpoint_token_count INTEGER NOT NULL,
|
|
28
|
+
source_digest TEXT NOT NULL,
|
|
29
|
+
checkpoint_digest TEXT NOT NULL,
|
|
30
|
+
summarizer_model TEXT,
|
|
31
|
+
summarizer_provider TEXT,
|
|
32
|
+
active_request_model TEXT NOT NULL,
|
|
33
|
+
reason TEXT NOT NULL,
|
|
34
|
+
budget_json TEXT NOT NULL,
|
|
35
|
+
classification INTEGER NOT NULL,
|
|
36
|
+
prompt_version TEXT NOT NULL,
|
|
37
|
+
schema_version INTEGER NOT NULL,
|
|
38
|
+
serializer_version TEXT NOT NULL,
|
|
39
|
+
created_at INTEGER NOT NULL
|
|
40
|
+
);
|
|
41
|
+
CREATE INDEX IF NOT EXISTS idx_checkpoints_chat ON ${CHECKPOINT_TABLE}(chat_id, created_at);
|
|
42
|
+
|
|
43
|
+
CREATE TABLE IF NOT EXISTS ${ACTIVE_POINTER_TABLE} (
|
|
44
|
+
chat_id TEXT PRIMARY KEY,
|
|
45
|
+
checkpoint_id INTEGER NOT NULL,
|
|
46
|
+
generation INTEGER NOT NULL,
|
|
47
|
+
updated_at INTEGER NOT NULL
|
|
48
|
+
);
|
|
49
|
+
`;
|
|
50
|
+
// ── CheckpointStore ──────────────────────────────────────────────────────────
|
|
51
|
+
export class CheckpointStore {
|
|
52
|
+
db;
|
|
53
|
+
constructor(db) {
|
|
54
|
+
this.db = db;
|
|
55
|
+
}
|
|
56
|
+
/** Get the active checkpoint pointer for a session, or null. */
|
|
57
|
+
getActivePointer(chatId) {
|
|
58
|
+
const row = this.db.prepare(`SELECT * FROM ${ACTIVE_POINTER_TABLE} WHERE chat_id = ?`).get(chatId);
|
|
59
|
+
if (!row)
|
|
60
|
+
return null;
|
|
61
|
+
return {
|
|
62
|
+
chatId: row.chat_id,
|
|
63
|
+
checkpointId: row.checkpoint_id,
|
|
64
|
+
generation: row.generation,
|
|
65
|
+
updatedAt: row.updated_at,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/** Get a single checkpoint record by ID. */
|
|
69
|
+
getCheckpoint(checkpointId) {
|
|
70
|
+
const row = this.db.prepare(`SELECT * FROM ${CHECKPOINT_TABLE} WHERE id = ?`).get(checkpointId);
|
|
71
|
+
if (!row)
|
|
72
|
+
return null;
|
|
73
|
+
return this.rowToRecord(row);
|
|
74
|
+
}
|
|
75
|
+
/** Get checkpoints for a session, newest first. */
|
|
76
|
+
getCheckpoints(chatId, limit = 10) {
|
|
77
|
+
const rows = this.db.prepare(`SELECT * FROM ${CHECKPOINT_TABLE} WHERE chat_id = ? ORDER BY created_at DESC LIMIT ?`).all(chatId, limit);
|
|
78
|
+
return rows.map(r => this.rowToRecord(r));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Atomically insert a new checkpoint and CAS-update the active pointer.
|
|
82
|
+
* Returns the new checkpoint ID, or -1 if generation is stale (CAS miss).
|
|
83
|
+
*/
|
|
84
|
+
commitCheckpoint(chatId, record, expectedGeneration) {
|
|
85
|
+
const txn = this.db.transaction(() => {
|
|
86
|
+
// CAS: verify generation hasn't changed
|
|
87
|
+
const current = this.getActivePointer(chatId);
|
|
88
|
+
if (current && current.generation !== expectedGeneration) {
|
|
89
|
+
return -1;
|
|
90
|
+
}
|
|
91
|
+
// Insert checkpoint record
|
|
92
|
+
const stmt = this.db.prepare(`
|
|
93
|
+
INSERT INTO ${CHECKPOINT_TABLE}
|
|
94
|
+
(chat_id, previous_checkpoint_id, source_message_start, source_message_end,
|
|
95
|
+
first_kept_message_id, content, source_token_count, checkpoint_token_count,
|
|
96
|
+
source_digest, checkpoint_digest, summarizer_model, summarizer_provider,
|
|
97
|
+
active_request_model, reason, budget_json, classification,
|
|
98
|
+
prompt_version, schema_version, serializer_version, created_at)
|
|
99
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
100
|
+
`);
|
|
101
|
+
const result = stmt.run(chatId, record.previousCheckpointId, record.sourceMessageStart, record.sourceMessageEnd, record.firstKeptMessageId, record.content, record.sourceTokenCount, record.checkpointTokenCount, record.sourceDigest, record.checkpointDigest, record.summarizerModel, record.summarizerProvider, record.activeRequestModel, record.reason, record.budgetJson, record.classification, record.promptVersion, record.schemaVersion, record.serializerVersion, Date.now());
|
|
102
|
+
const newId = Number(result.lastInsertRowid);
|
|
103
|
+
// CAS-update active pointer
|
|
104
|
+
this.db.prepare(`
|
|
105
|
+
INSERT INTO ${ACTIVE_POINTER_TABLE} (chat_id, checkpoint_id, generation, updated_at)
|
|
106
|
+
VALUES (?, ?, ?, ?)
|
|
107
|
+
ON CONFLICT(chat_id) DO UPDATE SET
|
|
108
|
+
checkpoint_id = excluded.checkpoint_id,
|
|
109
|
+
generation = generation + 1,
|
|
110
|
+
updated_at = excluded.updated_at
|
|
111
|
+
`).run(chatId, newId, expectedGeneration, Date.now());
|
|
112
|
+
return newId;
|
|
113
|
+
});
|
|
114
|
+
return txn();
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Read-only stable context view: one active cumulative checkpoint plus
|
|
118
|
+
* contiguous verbatim suffix bounded by the cursor.
|
|
119
|
+
*
|
|
120
|
+
* Invariant:
|
|
121
|
+
* activeCheckpoint.firstKeptMessageId <= rawMessage.id < beforeMessageId
|
|
122
|
+
*/
|
|
123
|
+
getStableContext(chatId, messages, options) {
|
|
124
|
+
const activePtr = this.getActivePointer(chatId);
|
|
125
|
+
let checkpoint;
|
|
126
|
+
let checkpointFirstKept = 0;
|
|
127
|
+
if (activePtr) {
|
|
128
|
+
const cp = this.getCheckpoint(activePtr.checkpointId);
|
|
129
|
+
if (cp) {
|
|
130
|
+
checkpoint = {
|
|
131
|
+
id: cp.id,
|
|
132
|
+
content: cp.content,
|
|
133
|
+
digest: cp.checkpointDigest,
|
|
134
|
+
firstKeptMessageId: cp.firstKeptMessageId,
|
|
135
|
+
generation: activePtr.generation,
|
|
136
|
+
};
|
|
137
|
+
checkpointFirstKept = cp.firstKeptMessageId;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Filter messages to the suffix: firstKeptMessageId <= id < beforeMessageId
|
|
141
|
+
const upperId = options?.beforeMessageId ?? Number.MAX_SAFE_INTEGER;
|
|
142
|
+
const suffixMessages = messages.filter(m => m.id >= checkpointFirstKept && m.id < upperId);
|
|
143
|
+
// Compute stable prefix digest from checkpoint + suffix
|
|
144
|
+
const checkpointPart = checkpoint ? checkpoint.content : "";
|
|
145
|
+
const suffixPart = suffixMessages.map(m => `${m.role}:${m.content}`).join("\n");
|
|
146
|
+
const stablePrefix = `${checkpointPart}\n${suffixPart}`;
|
|
147
|
+
const stablePrefixDigest = computeDigest(stablePrefix);
|
|
148
|
+
const estimatedTokens = checkpoint
|
|
149
|
+
? checkpoint.content.length / CHARS_PER_TOKEN
|
|
150
|
+
: 0;
|
|
151
|
+
const suffixTokens = suffixMessages.reduce((s, m) => s + Math.ceil(m.content.length / CHARS_PER_TOKEN), 0);
|
|
152
|
+
return {
|
|
153
|
+
checkpoint,
|
|
154
|
+
messages: suffixMessages,
|
|
155
|
+
estimatedTokens: Math.ceil(estimatedTokens + suffixTokens),
|
|
156
|
+
stablePrefixDigest,
|
|
157
|
+
rendererVersion: "checkpoint-v1",
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/** Reset/archive checkpoint lineage for a session. */
|
|
161
|
+
resetCheckpoints(chatId) {
|
|
162
|
+
this.db.prepare(`DELETE FROM ${ACTIVE_POINTER_TABLE} WHERE chat_id = ?`).run(chatId);
|
|
163
|
+
}
|
|
164
|
+
// ── private ────────────────────────────────────────────────────────────────
|
|
165
|
+
rowToRecord(row) {
|
|
166
|
+
return {
|
|
167
|
+
id: row.id,
|
|
168
|
+
chatId: row.chat_id,
|
|
169
|
+
previousCheckpointId: row.previous_checkpoint_id,
|
|
170
|
+
sourceMessageStart: row.source_message_start,
|
|
171
|
+
sourceMessageEnd: row.source_message_end,
|
|
172
|
+
firstKeptMessageId: row.first_kept_message_id,
|
|
173
|
+
content: row.content,
|
|
174
|
+
sourceTokenCount: row.source_token_count,
|
|
175
|
+
checkpointTokenCount: row.checkpoint_token_count,
|
|
176
|
+
sourceDigest: row.source_digest,
|
|
177
|
+
checkpointDigest: row.checkpoint_digest,
|
|
178
|
+
summarizerModel: row.summarizer_model,
|
|
179
|
+
summarizerProvider: row.summarizer_provider,
|
|
180
|
+
activeRequestModel: row.active_request_model,
|
|
181
|
+
reason: row.reason,
|
|
182
|
+
budgetJson: row.budget_json,
|
|
183
|
+
classification: row.classification,
|
|
184
|
+
promptVersion: row.prompt_version,
|
|
185
|
+
schemaVersion: row.schema_version,
|
|
186
|
+
serializerVersion: row.serializer_version,
|
|
187
|
+
createdAt: row.created_at,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// ── helpers ──────────────────────────────────────────────────────────────────
|
|
192
|
+
import { createHash } from "node:crypto";
|
|
193
|
+
export function computeDigest(input) {
|
|
194
|
+
return createHash("sha256").update(input).digest("hex").slice(0, 16);
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=context-checkpoint-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-checkpoint-store.js","sourceRoot":"","sources":["../../src/context-checkpoint-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/deploy-lib/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/deploy-lib/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/deploy-lib/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/deploy-lib/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { NativePackageRecord, PackageRequest } from "./shared-native-deps-types.js";
|
|
2
|
+
export declare function hashDirectory(dir: string): string;
|
|
3
|
+
export declare function probePackage(nodeExec: string, modulePath: string, probeModule: string): boolean;
|
|
4
|
+
export declare function stagePackage(sourceDir: string, pkgName: string): string;
|
|
5
|
+
export interface ActivateResult {
|
|
6
|
+
record: NativePackageRecord;
|
|
7
|
+
previousDeleted: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function activatePackage(opId: string, pkgName: string, request: PackageRequest, hash: string, probeResult: string): ActivateResult;
|
|
10
|
+
export declare function rollbackActivation(opId: string, pkgName: string): void;
|
|
11
|
+
//# sourceMappingURL=shared-native-deps-activate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-native-deps-activate.d.ts","sourceRoot":"","sources":["../../../src/deploy-lib/shared-native-deps-activate.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAkB,mBAAmB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAGzG,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBjD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAc/F;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAgBvE;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,cAAc,CAuChB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CActE"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { execSync } from "node:child_process";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
import { stagingDirPath, packageLivePath, packageStagingPath } from "./shared-native-deps-paths.js";
|
|
7
|
+
import { readManifest, writeManifest, upsertRecord } from "./shared-native-deps-manifest.js";
|
|
8
|
+
export function hashDirectory(dir) {
|
|
9
|
+
const hash = createHash("sha256");
|
|
10
|
+
hash.update(`dir:${dir}`);
|
|
11
|
+
const entries = readdirSync(dir, { recursive: true }).sort();
|
|
12
|
+
for (const entry of entries) {
|
|
13
|
+
const full = join(dir, entry);
|
|
14
|
+
try {
|
|
15
|
+
const stat = readdirSync.length > 0 ? undefined : undefined;
|
|
16
|
+
const content = readFileSync(full);
|
|
17
|
+
hash.update(`${entry}:${content.length}:`);
|
|
18
|
+
hash.update(content);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// skip
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return hash.digest("hex").slice(0, 16);
|
|
25
|
+
}
|
|
26
|
+
export function probePackage(nodeExec, modulePath, probeModule) {
|
|
27
|
+
try {
|
|
28
|
+
const code = `require(${JSON.stringify(join(modulePath, probeModule))}); console.log("ok");`;
|
|
29
|
+
const result = execSync(`"${nodeExec}" -e ${JSON.stringify(code)}`, {
|
|
30
|
+
cwd: modulePath,
|
|
31
|
+
timeout: 10000,
|
|
32
|
+
encoding: "utf-8",
|
|
33
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
34
|
+
env: { ...process.env, NODE_PATH: "" },
|
|
35
|
+
});
|
|
36
|
+
return result.trim() === "ok";
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export function stagePackage(sourceDir, pkgName) {
|
|
43
|
+
const opId = `op_${Date.now()}_${randomBytes(4).toString("hex")}`;
|
|
44
|
+
const staging = packageStagingPath(opId, pkgName);
|
|
45
|
+
mkdirSync(staging, { recursive: true });
|
|
46
|
+
// Copy source dir contents into staging
|
|
47
|
+
execSync(`cp -R "${sourceDir}/." "${staging}/"`, { stdio: "ignore", timeout: 30000 });
|
|
48
|
+
// Write operation marker
|
|
49
|
+
writeFileSync(join(stagingDirPath(), opId + ".marker"), JSON.stringify({
|
|
50
|
+
opId,
|
|
51
|
+
pkgName,
|
|
52
|
+
createdAt: new Date().toISOString(),
|
|
53
|
+
}) + "\n");
|
|
54
|
+
return opId;
|
|
55
|
+
}
|
|
56
|
+
export function activatePackage(opId, pkgName, request, hash, probeResult) {
|
|
57
|
+
const live = packageLivePath(pkgName);
|
|
58
|
+
const staged = packageStagingPath(opId, pkgName);
|
|
59
|
+
const prev = live + ".prev." + opId;
|
|
60
|
+
// Step 1: Rename live to prev (if exists)
|
|
61
|
+
if (existsSync(live)) {
|
|
62
|
+
renameSync(live, prev);
|
|
63
|
+
}
|
|
64
|
+
// Step 2: Rename staged to live
|
|
65
|
+
renameSync(staged, live);
|
|
66
|
+
// Step 3: Read and update manifest
|
|
67
|
+
const manifest = readManifest() ?? { protocolVersion: 1, generation: 0, updatedAt: new Date().toISOString(), packages: {} };
|
|
68
|
+
const record = {
|
|
69
|
+
version: request.version,
|
|
70
|
+
nodeAbi: request.nodeAbi,
|
|
71
|
+
nodeVersion: request.nodeVersion,
|
|
72
|
+
platform: request.platform,
|
|
73
|
+
arch: request.arch,
|
|
74
|
+
contentHash: hash,
|
|
75
|
+
installedAt: new Date().toISOString(),
|
|
76
|
+
installedBy: request.sourceDir.includes("abtars") ? "abtars" : "abmind",
|
|
77
|
+
consumers: [],
|
|
78
|
+
probe: probeResult,
|
|
79
|
+
};
|
|
80
|
+
const updated = upsertRecord(manifest, pkgName, record);
|
|
81
|
+
writeManifest(updated);
|
|
82
|
+
// Step 4: Delete prev
|
|
83
|
+
const prevExists = existsSync(prev);
|
|
84
|
+
if (prevExists) {
|
|
85
|
+
rmSync(prev, { recursive: true, force: true });
|
|
86
|
+
}
|
|
87
|
+
return { record, previousDeleted: prevExists };
|
|
88
|
+
}
|
|
89
|
+
export function rollbackActivation(opId, pkgName) {
|
|
90
|
+
const live = packageLivePath(pkgName);
|
|
91
|
+
const prev = live + ".prev." + opId;
|
|
92
|
+
const staged = packageStagingPath(opId, pkgName);
|
|
93
|
+
// Restore prev → live
|
|
94
|
+
if (existsSync(prev) && !existsSync(live)) {
|
|
95
|
+
renameSync(prev, live);
|
|
96
|
+
}
|
|
97
|
+
// Clean up staging
|
|
98
|
+
if (existsSync(staged)) {
|
|
99
|
+
rmSync(stagingDirPath(), { recursive: true, force: true });
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=shared-native-deps-activate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-native-deps-activate.js","sourceRoot":"","sources":["../../../src/deploy-lib/shared-native-deps-activate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { NativeConsumer } from "./shared-native-deps-types.js";
|
|
2
|
+
export declare class LockError extends Error {
|
|
3
|
+
constructor(msg: string);
|
|
4
|
+
}
|
|
5
|
+
export declare function generateLockToken(): string;
|
|
6
|
+
export declare function acquireLock(product: NativeConsumer, operation: string, token: string, timeoutMs?: number): void;
|
|
7
|
+
export declare function releaseLock(token: string): void;
|
|
8
|
+
//# sourceMappingURL=shared-native-deps-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-native-deps-lock.d.ts","sourceRoot":"","sources":["../../../src/deploy-lib/shared-native-deps-lock.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAG/E,qBAAa,SAAU,SAAQ,KAAK;gBACtB,GAAG,EAAE,MAAM;CACxB;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAMD,wBAAgB,WAAW,CACzB,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,SAAS,SAAO,GACf,IAAI,CAiDN;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAY/C"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { hostname } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { lockDirPath, OWNER_FILE } from "./shared-native-deps-paths.js";
|
|
6
|
+
import { PROTOCOL_VERSION } from "./shared-native-deps-types.js";
|
|
7
|
+
export class LockError extends Error {
|
|
8
|
+
constructor(msg) { super(msg); this.name = "LockError"; }
|
|
9
|
+
}
|
|
10
|
+
export function generateLockToken() {
|
|
11
|
+
return randomUUID();
|
|
12
|
+
}
|
|
13
|
+
function ownerPath() {
|
|
14
|
+
return join(lockDirPath(), OWNER_FILE);
|
|
15
|
+
}
|
|
16
|
+
export function acquireLock(product, operation, token, timeoutMs = 6000) {
|
|
17
|
+
const dir = lockDirPath();
|
|
18
|
+
const deadline = Date.now() + timeoutMs;
|
|
19
|
+
while (Date.now() < deadline) {
|
|
20
|
+
try {
|
|
21
|
+
mkdirSync(dir, { recursive: true });
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Directory exists — someone else holds the lock
|
|
25
|
+
}
|
|
26
|
+
if (!existsSync(dir)) {
|
|
27
|
+
wait(200);
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
const ownerP = ownerPath();
|
|
31
|
+
if (existsSync(ownerP)) {
|
|
32
|
+
const owner = parseOwner();
|
|
33
|
+
if (owner) {
|
|
34
|
+
if (owner.token === token)
|
|
35
|
+
return;
|
|
36
|
+
const staleReason = isStale(owner);
|
|
37
|
+
if (staleReason) {
|
|
38
|
+
rmSync(dir, { recursive: true, force: true });
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (Date.now() >= deadline) {
|
|
42
|
+
throw new LockError(`Lock held by ${owner.product} (PID ${owner.pid}) — try again later`);
|
|
43
|
+
}
|
|
44
|
+
wait(200);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const owner = {
|
|
49
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
50
|
+
token,
|
|
51
|
+
product,
|
|
52
|
+
operation,
|
|
53
|
+
pid: process.pid,
|
|
54
|
+
hostname: hostname(),
|
|
55
|
+
processStartedAt: Date.now(),
|
|
56
|
+
acquiredAt: new Date().toISOString(),
|
|
57
|
+
};
|
|
58
|
+
writeFileSync(ownerP, JSON.stringify(owner, null, 2) + "\n", { mode: 0o644 });
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
throw new LockError("Lock acquisition timed out");
|
|
62
|
+
}
|
|
63
|
+
export function releaseLock(token) {
|
|
64
|
+
try {
|
|
65
|
+
const ownerP = ownerPath();
|
|
66
|
+
if (!existsSync(ownerP))
|
|
67
|
+
return;
|
|
68
|
+
const raw = readFileSync(ownerP, "utf-8");
|
|
69
|
+
const owner = JSON.parse(raw);
|
|
70
|
+
if (owner.token === token) {
|
|
71
|
+
rmSync(lockDirPath(), { recursive: true, force: true });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Best-effort
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function parseOwner() {
|
|
79
|
+
try {
|
|
80
|
+
const raw = readFileSync(join(lockDirPath(), OWNER_FILE), "utf-8");
|
|
81
|
+
return JSON.parse(raw);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function isStale(owner) {
|
|
88
|
+
if (owner.hostname !== hostname())
|
|
89
|
+
return null;
|
|
90
|
+
try {
|
|
91
|
+
process.kill(owner.pid, 0);
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return "owner process gone";
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function wait(ms) {
|
|
99
|
+
const deadline = Date.now() + ms;
|
|
100
|
+
while (Date.now() < deadline) { /* busy-spin */ }
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=shared-native-deps-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-native-deps-lock.js","sourceRoot":"","sources":["../../../src/deploy-lib/shared-native-deps-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SharedNativeManifest, NativePackageRecord, NativeConsumer, PackageRequest, CompatibilityDecision } from "./shared-native-deps-types.js";
|
|
2
|
+
export declare function readManifest(): SharedNativeManifest | null;
|
|
3
|
+
export declare function createEmptyManifest(): SharedNativeManifest;
|
|
4
|
+
export declare function writeManifest(m: SharedNativeManifest): void;
|
|
5
|
+
export declare function resolveCompatibility(request: PackageRequest, manifest: SharedNativeManifest, diskExists: boolean): CompatibilityDecision;
|
|
6
|
+
export declare function addConsumer(manifest: SharedNativeManifest, pkgName: string, consumer: NativeConsumer): SharedNativeManifest;
|
|
7
|
+
export declare function removeConsumer(manifest: SharedNativeManifest, pkgName: string, consumer: NativeConsumer): {
|
|
8
|
+
manifest: SharedNativeManifest;
|
|
9
|
+
canDelete: boolean;
|
|
10
|
+
};
|
|
11
|
+
export declare function upsertRecord(manifest: SharedNativeManifest, pkgName: string, record: NativePackageRecord): SharedNativeManifest;
|
|
12
|
+
//# sourceMappingURL=shared-native-deps-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-native-deps-manifest.d.ts","sourceRoot":"","sources":["../../../src/deploy-lib/shared-native-deps-manifest.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,cAAc,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAGtJ,wBAAgB,YAAY,IAAI,oBAAoB,GAAG,IAAI,CAS1D;AAED,wBAAgB,mBAAmB,IAAI,oBAAoB,CAO1D;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAO3D;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,oBAAoB,EAC9B,UAAU,EAAE,OAAO,GAClB,qBAAqB,CAkCvB;AAED,wBAAgB,WAAW,CACzB,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,cAAc,GACvB,oBAAoB,CActB;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,cAAc,GACvB;IAAE,QAAQ,EAAE,oBAAoB,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAsBxD;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,oBAAoB,EAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,mBAAmB,GAC1B,oBAAoB,CAOtB"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, renameSync, mkdirSync } from "node:fs";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
import { manifestFilePath } from "./shared-native-deps-paths.js";
|
|
4
|
+
import { PROTOCOL_VERSION } from "./shared-native-deps-types.js";
|
|
5
|
+
export function readManifest() {
|
|
6
|
+
try {
|
|
7
|
+
const raw = readFileSync(manifestFilePath(), "utf-8");
|
|
8
|
+
const m = JSON.parse(raw);
|
|
9
|
+
if (m.protocolVersion !== PROTOCOL_VERSION)
|
|
10
|
+
return null;
|
|
11
|
+
return m;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function createEmptyManifest() {
|
|
18
|
+
return {
|
|
19
|
+
protocolVersion: PROTOCOL_VERSION,
|
|
20
|
+
generation: 0,
|
|
21
|
+
updatedAt: new Date().toISOString(),
|
|
22
|
+
packages: {},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function writeManifest(m) {
|
|
26
|
+
const p = manifestFilePath();
|
|
27
|
+
mkdirSync(dirname(p), { recursive: true });
|
|
28
|
+
// Atomic write: write to tmp, then rename
|
|
29
|
+
const tmp = p + ".tmp." + process.pid;
|
|
30
|
+
writeFileSync(tmp, JSON.stringify(m, null, 2) + "\n", { mode: 0o644 });
|
|
31
|
+
renameSync(tmp, p);
|
|
32
|
+
}
|
|
33
|
+
export function resolveCompatibility(request, manifest, diskExists) {
|
|
34
|
+
const existing = manifest.packages[request.name];
|
|
35
|
+
if (!existing) {
|
|
36
|
+
if (diskExists) {
|
|
37
|
+
return { kind: "conflict", reason: `Package ${request.name} exists on disk but is untracked in manifest` };
|
|
38
|
+
}
|
|
39
|
+
return { kind: "install", reason: "new package" };
|
|
40
|
+
}
|
|
41
|
+
// Check consumer compatibility
|
|
42
|
+
if (existing.nodeAbi !== request.nodeAbi) {
|
|
43
|
+
return {
|
|
44
|
+
kind: "conflict",
|
|
45
|
+
reason: `Node ABI mismatch: installed ${existing.nodeAbi}, requested ${request.nodeAbi} — ${existing.consumers.join("/")} require ${existing.nodeAbi}`,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
if (existing.platform !== request.platform) {
|
|
49
|
+
return { kind: "conflict", reason: `Platform mismatch: installed ${existing.platform}, requested ${request.platform}` };
|
|
50
|
+
}
|
|
51
|
+
if (existing.arch !== request.arch) {
|
|
52
|
+
return { kind: "conflict", reason: `Arch mismatch: installed ${existing.arch}, requested ${request.arch}` };
|
|
53
|
+
}
|
|
54
|
+
// Version check — allow same or newer
|
|
55
|
+
if (existing.version === request.version) {
|
|
56
|
+
return { kind: "reuse", reason: "already installed at requested version", record: existing };
|
|
57
|
+
}
|
|
58
|
+
// Different version — check if all consumers can accept it
|
|
59
|
+
// For now, only add consumer if compatible
|
|
60
|
+
return { kind: "install", reason: `version change: ${existing.version} → ${request.version}`, record: existing };
|
|
61
|
+
}
|
|
62
|
+
export function addConsumer(manifest, pkgName, consumer) {
|
|
63
|
+
const rec = manifest.packages[pkgName];
|
|
64
|
+
if (!rec)
|
|
65
|
+
return manifest;
|
|
66
|
+
const set = new Set(rec.consumers);
|
|
67
|
+
set.add(consumer);
|
|
68
|
+
return {
|
|
69
|
+
...manifest,
|
|
70
|
+
packages: {
|
|
71
|
+
...manifest.packages,
|
|
72
|
+
[pkgName]: { ...rec, consumers: [...set].sort() },
|
|
73
|
+
},
|
|
74
|
+
generation: manifest.generation + 1,
|
|
75
|
+
updatedAt: new Date().toISOString(),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
export function removeConsumer(manifest, pkgName, consumer) {
|
|
79
|
+
const rec = manifest.packages[pkgName];
|
|
80
|
+
if (!rec)
|
|
81
|
+
return { manifest, canDelete: false };
|
|
82
|
+
const set = new Set(rec.consumers);
|
|
83
|
+
set.delete(consumer);
|
|
84
|
+
const consumers = [...set].sort();
|
|
85
|
+
if (consumers.length === 0) {
|
|
86
|
+
const { [pkgName]: _, ...rest } = manifest.packages;
|
|
87
|
+
return {
|
|
88
|
+
manifest: { ...manifest, packages: rest, generation: manifest.generation + 1, updatedAt: new Date().toISOString() },
|
|
89
|
+
canDelete: true,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
manifest: {
|
|
94
|
+
...manifest,
|
|
95
|
+
packages: { ...manifest.packages, [pkgName]: { ...rec, consumers } },
|
|
96
|
+
generation: manifest.generation + 1,
|
|
97
|
+
updatedAt: new Date().toISOString(),
|
|
98
|
+
},
|
|
99
|
+
canDelete: false,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
export function upsertRecord(manifest, pkgName, record) {
|
|
103
|
+
return {
|
|
104
|
+
...manifest,
|
|
105
|
+
packages: { ...manifest.packages, [pkgName]: record },
|
|
106
|
+
generation: manifest.generation + 1,
|
|
107
|
+
updatedAt: new Date().toISOString(),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=shared-native-deps-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-native-deps-manifest.js","sourceRoot":"","sources":["../../../src/deploy-lib/shared-native-deps-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
declare const LOCK_DIR_NAME = ".native-deps.lock";
|
|
2
|
+
declare const STAGING_DIR_NAME = ".native-deps-staging";
|
|
3
|
+
declare const MANIFEST_FILE = "native-deps.manifest.json";
|
|
4
|
+
declare const OWNER_FILE = "owner.json";
|
|
5
|
+
export { LOCK_DIR_NAME, STAGING_DIR_NAME, MANIFEST_FILE, OWNER_FILE };
|
|
6
|
+
export declare function resolveSharedNativeRoot(): string;
|
|
7
|
+
export declare function lockDirPath(): string;
|
|
8
|
+
export declare function manifestFilePath(): string;
|
|
9
|
+
export declare function stagingDirPath(): string;
|
|
10
|
+
export declare function packageLivePath(pkgName: string): string;
|
|
11
|
+
export declare function packageStagingPath(opId: string, pkgName: string): string;
|
|
12
|
+
//# sourceMappingURL=shared-native-deps-paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-native-deps-paths.d.ts","sourceRoot":"","sources":["../../../src/deploy-lib/shared-native-deps-paths.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,aAAa,sBAAsB,CAAC;AAC1C,QAAA,MAAM,gBAAgB,yBAAyB,CAAC;AAChD,QAAA,MAAM,aAAa,8BAA8B,CAAC;AAClD,QAAA,MAAM,UAAU,eAAe,CAAC;AAEhC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;AAMtE,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAExE"}
|