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.
Files changed (51) hide show
  1. package/dist/cli/abmind-deps.d.ts +3 -0
  2. package/dist/cli/abmind-deps.d.ts.map +1 -1
  3. package/dist/cli/abmind-deps.js +28 -11
  4. package/dist/cli/abmind-deps.js.map +1 -1
  5. package/dist/cli/abmind-doctor.js +30 -2
  6. package/dist/cli/abmind-doctor.js.map +1 -1
  7. package/dist/cli/abmind-install.js +4 -34
  8. package/dist/cli/abmind-install.js.map +1 -1
  9. package/dist/cli/abmind-update.js +34 -3
  10. package/dist/cli/abmind-update.js.map +1 -1
  11. package/dist/cli/abmind.js +0 -0
  12. package/dist/src/context-checkpoint-store.d.ts +99 -0
  13. package/dist/src/context-checkpoint-store.d.ts.map +1 -0
  14. package/dist/src/context-checkpoint-store.js +196 -0
  15. package/dist/src/context-checkpoint-store.js.map +1 -0
  16. package/dist/src/deploy-lib/index.d.ts +1 -0
  17. package/dist/src/deploy-lib/index.d.ts.map +1 -1
  18. package/dist/src/deploy-lib/index.js +1 -0
  19. package/dist/src/deploy-lib/index.js.map +1 -1
  20. package/dist/src/deploy-lib/shared-native-deps-activate.d.ts +11 -0
  21. package/dist/src/deploy-lib/shared-native-deps-activate.d.ts.map +1 -0
  22. package/dist/src/deploy-lib/shared-native-deps-activate.js +102 -0
  23. package/dist/src/deploy-lib/shared-native-deps-activate.js.map +1 -0
  24. package/dist/src/deploy-lib/shared-native-deps-lock.d.ts +8 -0
  25. package/dist/src/deploy-lib/shared-native-deps-lock.d.ts.map +1 -0
  26. package/dist/src/deploy-lib/shared-native-deps-lock.js +102 -0
  27. package/dist/src/deploy-lib/shared-native-deps-lock.js.map +1 -0
  28. package/dist/src/deploy-lib/shared-native-deps-manifest.d.ts +12 -0
  29. package/dist/src/deploy-lib/shared-native-deps-manifest.d.ts.map +1 -0
  30. package/dist/src/deploy-lib/shared-native-deps-manifest.js +110 -0
  31. package/dist/src/deploy-lib/shared-native-deps-manifest.js.map +1 -0
  32. package/dist/src/deploy-lib/shared-native-deps-paths.d.ts +12 -0
  33. package/dist/src/deploy-lib/shared-native-deps-paths.d.ts.map +1 -0
  34. package/dist/src/deploy-lib/shared-native-deps-paths.js +29 -0
  35. package/dist/src/deploy-lib/shared-native-deps-paths.js.map +1 -0
  36. package/dist/src/deploy-lib/shared-native-deps-types.d.ts +48 -0
  37. package/dist/src/deploy-lib/shared-native-deps-types.d.ts.map +1 -0
  38. package/dist/src/deploy-lib/shared-native-deps-types.js +3 -0
  39. package/dist/src/deploy-lib/shared-native-deps-types.js.map +1 -0
  40. package/dist/src/deploy-lib/shared-native-deps.d.ts +24 -0
  41. package/dist/src/deploy-lib/shared-native-deps.d.ts.map +1 -0
  42. package/dist/src/deploy-lib/shared-native-deps.js +78 -0
  43. package/dist/src/deploy-lib/shared-native-deps.js.map +1 -0
  44. package/dist/src/index.d.ts +2 -0
  45. package/dist/src/index.d.ts.map +1 -1
  46. package/dist/src/index.js +2 -0
  47. package/dist/src/index.js.map +1 -1
  48. package/dist/src/memory-db.d.ts.map +1 -1
  49. package/dist/src/memory-db.js +33 -0
  50. package/dist/src/memory-db.js.map +1 -1
  51. 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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"}
@@ -17,4 +17,5 @@ export * from './lock.js';
17
17
  export * from './releases.js';
18
18
  export * from './cleanup.js';
19
19
  export * from './safe-copy.js';
20
+ export * from './shared-native-deps.js';
20
21
  //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -17,4 +17,5 @@ export * from './lock.js';
17
17
  export * from './releases.js';
18
18
  export * from './cleanup.js';
19
19
  export * from './safe-copy.js';
20
+ export * from './shared-native-deps.js';
20
21
  //# sourceMappingURL=index.js.map
@@ -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"}