fivocell 6.0.3 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/archive-versioning.test.d.ts +2 -0
- package/dist/__tests__/archive-versioning.test.d.ts.map +1 -0
- package/dist/__tests__/archive-versioning.test.js +131 -0
- package/dist/__tests__/archive-versioning.test.js.map +1 -0
- package/dist/__tests__/blob-vault.test.d.ts +2 -0
- package/dist/__tests__/blob-vault.test.d.ts.map +1 -0
- package/dist/__tests__/blob-vault.test.js +125 -0
- package/dist/__tests__/blob-vault.test.js.map +1 -0
- package/dist/__tests__/cell-mirror.test.d.ts +2 -0
- package/dist/__tests__/cell-mirror.test.d.ts.map +1 -0
- package/dist/__tests__/cell-mirror.test.js +122 -0
- package/dist/__tests__/cell-mirror.test.js.map +1 -0
- package/dist/__tests__/context-pipeline.test.d.ts +2 -0
- package/dist/__tests__/context-pipeline.test.d.ts.map +1 -0
- package/dist/__tests__/context-pipeline.test.js +119 -0
- package/dist/__tests__/context-pipeline.test.js.map +1 -0
- package/dist/__tests__/key-provider.test.d.ts +2 -0
- package/dist/__tests__/key-provider.test.d.ts.map +1 -0
- package/dist/__tests__/key-provider.test.js +74 -0
- package/dist/__tests__/key-provider.test.js.map +1 -0
- package/dist/walls/06-memory/archive/archive-versioning.d.ts +33 -0
- package/dist/walls/06-memory/archive/archive-versioning.d.ts.map +1 -0
- package/dist/walls/06-memory/archive/archive-versioning.js +201 -0
- package/dist/walls/06-memory/archive/archive-versioning.js.map +1 -0
- package/dist/walls/06-memory/archive/blob-vault.d.ts +47 -0
- package/dist/walls/06-memory/archive/blob-vault.d.ts.map +1 -0
- package/dist/walls/06-memory/archive/blob-vault.js +272 -0
- package/dist/walls/06-memory/archive/blob-vault.js.map +1 -0
- package/dist/walls/06-memory/archive/memory-archive.d.ts.map +1 -1
- package/dist/walls/06-memory/archive/memory-archive.js +19 -5
- package/dist/walls/06-memory/archive/memory-archive.js.map +1 -1
- package/dist/walls/06-memory/mirror/cell-mirror.d.ts +30 -0
- package/dist/walls/06-memory/mirror/cell-mirror.d.ts.map +1 -0
- package/dist/walls/06-memory/mirror/cell-mirror.js +297 -0
- package/dist/walls/06-memory/mirror/cell-mirror.js.map +1 -0
- package/dist/walls/06-memory/privacy/key-migration.d.ts +14 -0
- package/dist/walls/06-memory/privacy/key-migration.d.ts.map +1 -0
- package/dist/walls/06-memory/privacy/key-migration.js +124 -0
- package/dist/walls/06-memory/privacy/key-migration.js.map +1 -0
- package/dist/walls/06-memory/privacy/key-provider-file.d.ts +9 -0
- package/dist/walls/06-memory/privacy/key-provider-file.d.ts.map +1 -0
- package/dist/walls/06-memory/privacy/key-provider-file.js +129 -0
- package/dist/walls/06-memory/privacy/key-provider-file.js.map +1 -0
- package/dist/walls/06-memory/privacy/key-provider-os.d.ts +22 -0
- package/dist/walls/06-memory/privacy/key-provider-os.d.ts.map +1 -0
- package/dist/walls/06-memory/privacy/key-provider-os.js +201 -0
- package/dist/walls/06-memory/privacy/key-provider-os.js.map +1 -0
- package/dist/walls/06-memory/privacy/key-provider.d.ts +21 -0
- package/dist/walls/06-memory/privacy/key-provider.d.ts.map +1 -0
- package/dist/walls/06-memory/privacy/key-provider.js +123 -0
- package/dist/walls/06-memory/privacy/key-provider.js.map +1 -0
- package/dist/walls/06-memory/retrieval/context-pipeline.d.ts +36 -0
- package/dist/walls/06-memory/retrieval/context-pipeline.d.ts.map +1 -0
- package/dist/walls/06-memory/retrieval/context-pipeline.js +266 -0
- package/dist/walls/06-memory/retrieval/context-pipeline.js.map +1 -0
- package/dist/walls/06-memory/stores/memory-search.d.ts.map +1 -1
- package/dist/walls/06-memory/stores/memory-search.js +16 -2
- package/dist/walls/06-memory/stores/memory-search.js.map +1 -1
- package/dist/walls/06-memory/stores/sync-engine.d.ts.map +1 -1
- package/dist/walls/06-memory/stores/sync-engine.js +15 -0
- package/dist/walls/06-memory/stores/sync-engine.js.map +1 -1
- package/dist/walls/07-runtime/cli/cli.js +121 -0
- package/dist/walls/07-runtime/cli/cli.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.FileKeyProvider = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
const crypto = __importStar(require("crypto"));
|
|
41
|
+
const key_provider_1 = require("./key-provider");
|
|
42
|
+
// ============================================================
|
|
43
|
+
// key-provider-file.ts — Machine-bound encrypted file provider
|
|
44
|
+
//
|
|
45
|
+
// Stores keys as AES-256-GCM encrypted files
|
|
46
|
+
// Encryption key is derived from hostname + username
|
|
47
|
+
// So the file is only readable on this machine
|
|
48
|
+
// ============================================================
|
|
49
|
+
const ALGORITHM = 'aes-256-gcm';
|
|
50
|
+
const IV_LENGTH = 16;
|
|
51
|
+
const TAG_LENGTH = 16;
|
|
52
|
+
function getKeysDir() {
|
|
53
|
+
return path.join(os.homedir(), '.fivo', 'cell', 'keys');
|
|
54
|
+
}
|
|
55
|
+
function getKeyPath(id) {
|
|
56
|
+
// Sanitize ID for filename
|
|
57
|
+
const safeId = id.replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
58
|
+
return path.join(getKeysDir(), `${safeId}.enc`);
|
|
59
|
+
}
|
|
60
|
+
function encrypt(data, key) {
|
|
61
|
+
const iv = crypto.randomBytes(IV_LENGTH);
|
|
62
|
+
const cipher = crypto.createCipheriv(ALGORITHM, key, iv, { authTagLength: TAG_LENGTH });
|
|
63
|
+
const encrypted = Buffer.concat([cipher.update(data), cipher.final()]);
|
|
64
|
+
const authTag = cipher.getAuthTag();
|
|
65
|
+
// Format: iv(16) + authTag(16) + encrypted
|
|
66
|
+
return Buffer.concat([iv, authTag, encrypted]);
|
|
67
|
+
}
|
|
68
|
+
function decrypt(data, key) {
|
|
69
|
+
const iv = data.subarray(0, IV_LENGTH);
|
|
70
|
+
const authTag = data.subarray(IV_LENGTH, IV_LENGTH + TAG_LENGTH);
|
|
71
|
+
const encrypted = data.subarray(IV_LENGTH + TAG_LENGTH);
|
|
72
|
+
const decipher = crypto.createDecipheriv(ALGORITHM, key, iv, { authTagLength: TAG_LENGTH });
|
|
73
|
+
decipher.setAuthTag(authTag);
|
|
74
|
+
return Buffer.concat([decipher.update(encrypted), decipher.final()]);
|
|
75
|
+
}
|
|
76
|
+
class FileKeyProvider {
|
|
77
|
+
name = 'file-encrypted';
|
|
78
|
+
isAvailable() {
|
|
79
|
+
try {
|
|
80
|
+
const dir = getKeysDir();
|
|
81
|
+
if (!fs.existsSync(dir))
|
|
82
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
getKey(id) {
|
|
90
|
+
const keyPath = getKeyPath(id);
|
|
91
|
+
if (!fs.existsSync(keyPath))
|
|
92
|
+
return null;
|
|
93
|
+
try {
|
|
94
|
+
const encrypted = fs.readFileSync(keyPath);
|
|
95
|
+
const machineKey = (0, key_provider_1.deriveMachineKey)();
|
|
96
|
+
return decrypt(encrypted, machineKey);
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
setKey(id, key) {
|
|
103
|
+
try {
|
|
104
|
+
const dir = getKeysDir();
|
|
105
|
+
if (!fs.existsSync(dir))
|
|
106
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
107
|
+
const machineKey = (0, key_provider_1.deriveMachineKey)();
|
|
108
|
+
const encrypted = encrypt(key, machineKey);
|
|
109
|
+
fs.writeFileSync(getKeyPath(id), encrypted);
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
deleteKey(id) {
|
|
117
|
+
try {
|
|
118
|
+
const keyPath = getKeyPath(id);
|
|
119
|
+
if (fs.existsSync(keyPath))
|
|
120
|
+
fs.unlinkSync(keyPath);
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
exports.FileKeyProvider = FileKeyProvider;
|
|
129
|
+
//# sourceMappingURL=key-provider-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-provider-file.js","sourceRoot":"","sources":["../../../../src/walls/06-memory/privacy/key-provider-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { KeyProvider } from './key-provider';
|
|
2
|
+
export declare class OSKeyProvider implements KeyProvider {
|
|
3
|
+
name: string;
|
|
4
|
+
private osType;
|
|
5
|
+
isAvailable(): boolean;
|
|
6
|
+
private isWindowsAvailable;
|
|
7
|
+
private windowsGetKey;
|
|
8
|
+
private windowsSetKey;
|
|
9
|
+
private windowsDeleteKey;
|
|
10
|
+
private isMacOSAvailable;
|
|
11
|
+
private macosGetKey;
|
|
12
|
+
private macosSetKey;
|
|
13
|
+
private macosDeleteKey;
|
|
14
|
+
private isLinuxAvailable;
|
|
15
|
+
private linuxGetKey;
|
|
16
|
+
private linuxSetKey;
|
|
17
|
+
private linuxDeleteKey;
|
|
18
|
+
getKey(id: string): Buffer | null;
|
|
19
|
+
setKey(id: string, key: Buffer): boolean;
|
|
20
|
+
deleteKey(id: string): boolean;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=key-provider-os.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-provider-os.d.ts","sourceRoot":"","sources":["../../../../src/walls/06-memory/privacy/key-provider-os.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAY,MAAM,gBAAgB,CAAC;AAYvD,qBAAa,aAAc,YAAW,WAAW;IAC/C,IAAI,SAAe;IACnB,OAAO,CAAC,MAAM,CAAc;IAE5B,WAAW,IAAI,OAAO;IAetB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,cAAc;IActB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IASjC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IASxC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAQ/B"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OSKeyProvider = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const key_provider_1 = require("./key-provider");
|
|
6
|
+
// ============================================================
|
|
7
|
+
// key-provider-os.ts — OS-native key storage provider
|
|
8
|
+
//
|
|
9
|
+
// Windows: PowerShell ConvertTo-SecureString / ConvertFrom-SecureString
|
|
10
|
+
// macOS: security (Keychain CLI)
|
|
11
|
+
// Linux: secret-tool (GNOME Keyring / KWallet)
|
|
12
|
+
//
|
|
13
|
+
// All use CLI wrappers — no native npm modules needed
|
|
14
|
+
// ============================================================
|
|
15
|
+
class OSKeyProvider {
|
|
16
|
+
name = 'os-native';
|
|
17
|
+
osType = (0, key_provider_1.detectOS)();
|
|
18
|
+
isAvailable() {
|
|
19
|
+
try {
|
|
20
|
+
switch (this.osType) {
|
|
21
|
+
case 'windows': return this.isWindowsAvailable();
|
|
22
|
+
case 'macos': return this.isMacOSAvailable();
|
|
23
|
+
case 'linux': return this.isLinuxAvailable();
|
|
24
|
+
default: return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// ============================================================
|
|
32
|
+
// Windows — PowerShell SecureString
|
|
33
|
+
// ============================================================
|
|
34
|
+
isWindowsAvailable() {
|
|
35
|
+
try {
|
|
36
|
+
(0, child_process_1.execSync)('powershell -Command "ConvertTo-SecureString -String test -AsPlainText -Force"', {
|
|
37
|
+
encoding: 'utf-8', timeout: 5000, stdio: 'pipe',
|
|
38
|
+
});
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
windowsGetKey(id) {
|
|
46
|
+
try {
|
|
47
|
+
const safeId = id.replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
48
|
+
const cmd = `powershell -Command "try { Get-Content -Path '$env:USERPROFILE\\.fivo\\cell\\keys\\os-${safeId}.txt' -ErrorAction Stop } catch { exit 1 }"`;
|
|
49
|
+
const result = (0, child_process_1.execSync)(cmd, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' }).trim();
|
|
50
|
+
if (!result)
|
|
51
|
+
return null;
|
|
52
|
+
return Buffer.from(result, 'hex');
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
windowsSetKey(id, key) {
|
|
59
|
+
try {
|
|
60
|
+
const safeId = id.replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
61
|
+
const cmd = `powershell -Command "New-Item -Path '$env:USERPROFILE\\.fivo\\cell\\keys' -ItemType Directory -Force | Out-Null; Set-Content -Path '$env:USERPROFILE\\.fivo\\cell\\keys\\os-${safeId}.txt' -Value '${key.toString('hex')}' -Force"`;
|
|
62
|
+
(0, child_process_1.execSync)(cmd, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' });
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
windowsDeleteKey(id) {
|
|
70
|
+
try {
|
|
71
|
+
const safeId = id.replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
72
|
+
const cmd = `powershell -Command "Remove-Item -Path '$env:USERPROFILE\\.fivo\\cell\\keys\\os-${safeId}.txt' -Force -ErrorAction SilentlyContinue"`;
|
|
73
|
+
(0, child_process_1.execSync)(cmd, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' });
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// ============================================================
|
|
81
|
+
// macOS — Keychain CLI
|
|
82
|
+
// ============================================================
|
|
83
|
+
isMacOSAvailable() {
|
|
84
|
+
try {
|
|
85
|
+
(0, child_process_1.execSync)('which security', { encoding: 'utf-8', timeout: 3000, stdio: 'pipe' });
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
macosGetKey(id) {
|
|
93
|
+
try {
|
|
94
|
+
const result = (0, child_process_1.execSync)(`security find-generic-password -a fivocell -s "cell-${id}" -w 2>/dev/null`, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' }).trim();
|
|
95
|
+
if (!result)
|
|
96
|
+
return null;
|
|
97
|
+
return Buffer.from(result, 'hex');
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
macosSetKey(id, key) {
|
|
104
|
+
try {
|
|
105
|
+
// Delete existing first (security add fails if already exists)
|
|
106
|
+
try {
|
|
107
|
+
(0, child_process_1.execSync)(`security delete-generic-password -a fivocell -s "cell-${id}" 2>/dev/null`, {
|
|
108
|
+
encoding: 'utf-8', timeout: 5000, stdio: 'pipe',
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
catch { /* ignore */ }
|
|
112
|
+
(0, child_process_1.execSync)(`security add-generic-password -a fivocell -s "cell-${id}" -w "${key.toString('hex')}" -U`, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' });
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
macosDeleteKey(id) {
|
|
120
|
+
try {
|
|
121
|
+
(0, child_process_1.execSync)(`security delete-generic-password -a fivocell -s "cell-${id}" 2>/dev/null`, {
|
|
122
|
+
encoding: 'utf-8', timeout: 5000, stdio: 'pipe',
|
|
123
|
+
});
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// ============================================================
|
|
131
|
+
// Linux — secret-tool (GNOME Keyring)
|
|
132
|
+
// ============================================================
|
|
133
|
+
isLinuxAvailable() {
|
|
134
|
+
try {
|
|
135
|
+
(0, child_process_1.execSync)('which secret-tool', { encoding: 'utf-8', timeout: 3000, stdio: 'pipe' });
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
linuxGetKey(id) {
|
|
143
|
+
try {
|
|
144
|
+
const result = (0, child_process_1.execSync)(`secret-tool lookup service fivocell id "${id}"`, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' }).trim();
|
|
145
|
+
if (!result)
|
|
146
|
+
return null;
|
|
147
|
+
return Buffer.from(result, 'hex');
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
linuxSetKey(id, key) {
|
|
154
|
+
try {
|
|
155
|
+
const cmd = `echo -n "${key.toString('hex')}" | secret-tool store --label="Fivo Cell ${id}" service fivocell id "${id}"`;
|
|
156
|
+
(0, child_process_1.execSync)(cmd, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe', shell: '/bin/bash' });
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
linuxDeleteKey(id) {
|
|
164
|
+
try {
|
|
165
|
+
(0, child_process_1.execSync)(`secret-tool clear service fivocell id "${id}"`, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' });
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// ============================================================
|
|
173
|
+
// Unified interface
|
|
174
|
+
// ============================================================
|
|
175
|
+
getKey(id) {
|
|
176
|
+
switch (this.osType) {
|
|
177
|
+
case 'windows': return this.windowsGetKey(id);
|
|
178
|
+
case 'macos': return this.macosGetKey(id);
|
|
179
|
+
case 'linux': return this.linuxGetKey(id);
|
|
180
|
+
default: return null;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
setKey(id, key) {
|
|
184
|
+
switch (this.osType) {
|
|
185
|
+
case 'windows': return this.windowsSetKey(id, key);
|
|
186
|
+
case 'macos': return this.macosSetKey(id, key);
|
|
187
|
+
case 'linux': return this.linuxSetKey(id, key);
|
|
188
|
+
default: return false;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
deleteKey(id) {
|
|
192
|
+
switch (this.osType) {
|
|
193
|
+
case 'windows': return this.windowsDeleteKey(id);
|
|
194
|
+
case 'macos': return this.macosDeleteKey(id);
|
|
195
|
+
case 'linux': return this.linuxDeleteKey(id);
|
|
196
|
+
default: return false;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
exports.OSKeyProvider = OSKeyProvider;
|
|
201
|
+
//# sourceMappingURL=key-provider-os.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-provider-os.js","sourceRoot":"","sources":["../../../../src/walls/06-memory/privacy/key-provider-os.ts"],"names":[],"mappings":";;;AAAA,iDAAyC;AACzC,iDAAuD;AAEvD,+DAA+D;AAC/D,sDAAsD;AACtD,EAAE;AACF,wEAAwE;AACxE,iCAAiC;AACjC,+CAA+C;AAC/C,EAAE;AACF,sDAAsD;AACtD,+DAA+D;AAE/D,MAAa,aAAa;IACxB,IAAI,GAAG,WAAW,CAAC;IACX,MAAM,GAAG,IAAA,uBAAQ,GAAE,CAAC;IAE5B,WAAW;QACT,IAAI,CAAC;YACH,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;gBACpB,KAAK,SAAS,CAAC,CAAC,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACjD,KAAK,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC7C,KAAK,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC7C,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC;YACxB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;IAC3B,CAAC;IAED,+DAA+D;IAC/D,oCAAoC;IACpC,+DAA+D;IAEvD,kBAAkB;QACxB,IAAI,CAAC;YACH,IAAA,wBAAQ,EAAC,+EAA+E,EAAE;gBACxF,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM;aAChD,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;IAC3B,CAAC;IAEO,aAAa,CAAC,EAAU;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,yFAAyF,MAAM,6CAA6C,CAAC;YACzJ,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACzF,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YACzB,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;IAC1B,CAAC;IAEO,aAAa,CAAC,EAAU,EAAE,GAAW;QAC3C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,+KAA+K,MAAM,iBAAiB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;YACjP,IAAA,wBAAQ,EAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACnE,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;IAC3B,CAAC;IAEO,gBAAgB,CAAC,EAAU;QACjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,mFAAmF,MAAM,6CAA6C,CAAC;YACnJ,IAAA,wBAAQ,EAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACnE,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;IAC3B,CAAC;IAED,+DAA+D;IAC/D,uBAAuB;IACvB,+DAA+D;IAEvD,gBAAgB;QACtB,IAAI,CAAC;YACH,IAAA,wBAAQ,EAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAChF,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;IAC3B,CAAC;IAEO,WAAW,CAAC,EAAU;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EACrB,uDAAuD,EAAE,kBAAkB,EAC3E,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CACpD,CAAC,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YACzB,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;IAC1B,CAAC;IAEO,WAAW,CAAC,EAAU,EAAE,GAAW;QACzC,IAAI,CAAC;YACH,+DAA+D;YAC/D,IAAI,CAAC;gBACH,IAAA,wBAAQ,EAAC,yDAAyD,EAAE,eAAe,EAAE;oBACnF,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM;iBAChD,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YAExB,IAAA,wBAAQ,EACN,sDAAsD,EAAE,SAAS,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAC1F,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CACpD,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;IAC3B,CAAC;IAEO,cAAc,CAAC,EAAU;QAC/B,IAAI,CAAC;YACH,IAAA,wBAAQ,EAAC,yDAAyD,EAAE,eAAe,EAAE;gBACnF,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM;aAChD,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;IAC3B,CAAC;IAED,+DAA+D;IAC/D,sCAAsC;IACtC,+DAA+D;IAEvD,gBAAgB;QACtB,IAAI,CAAC;YACH,IAAA,wBAAQ,EAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACnF,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;IAC3B,CAAC;IAEO,WAAW,CAAC,EAAU;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EACrB,2CAA2C,EAAE,GAAG,EAChD,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CACpD,CAAC,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YACzB,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;IAC1B,CAAC;IAEO,WAAW,CAAC,EAAU,EAAE,GAAW;QACzC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,4CAA4C,EAAE,0BAA0B,EAAE,GAAG,CAAC;YACzH,IAAA,wBAAQ,EAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;YACvF,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;IAC3B,CAAC;IAEO,cAAc,CAAC,EAAU;QAC/B,IAAI,CAAC;YACH,IAAA,wBAAQ,EACN,0CAA0C,EAAE,GAAG,EAC/C,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CACpD,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;IAC3B,CAAC;IAED,+DAA+D;IAC/D,oBAAoB;IACpB,+DAA+D;IAE/D,MAAM,CAAC,EAAU;QACf,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,SAAS,CAAC,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAC9C,KAAK,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC1C,KAAK,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC1C,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,EAAU,EAAE,GAAW;QAC5B,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,SAAS,CAAC,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YACnD,KAAK,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC/C,KAAK,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC/C,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IAED,SAAS,CAAC,EAAU;QAClB,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,SAAS,CAAC,CAAC,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACjD,KAAK,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAC7C,KAAK,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;CACF;AA9KD,sCA8KC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface KeyProvider {
|
|
2
|
+
name: string;
|
|
3
|
+
isAvailable(): boolean;
|
|
4
|
+
getKey(id: string): Buffer | null;
|
|
5
|
+
setKey(id: string, key: Buffer): boolean;
|
|
6
|
+
deleteKey(id: string): boolean;
|
|
7
|
+
}
|
|
8
|
+
export type OSType = 'windows' | 'macos' | 'linux' | 'unknown';
|
|
9
|
+
export declare function detectOS(): OSType;
|
|
10
|
+
export declare function deriveMachineKey(): Buffer;
|
|
11
|
+
export declare function getKeyProvider(): KeyProvider;
|
|
12
|
+
export declare function getKey(id: string): Buffer | null;
|
|
13
|
+
export declare function setKey(id: string, key: Buffer): boolean;
|
|
14
|
+
export declare function deleteKey(id: string): boolean;
|
|
15
|
+
export declare function getOrCreateKey(id: string, keyLength?: number): Buffer;
|
|
16
|
+
export declare function getKeyProviderInfo(): {
|
|
17
|
+
name: string;
|
|
18
|
+
os: OSType;
|
|
19
|
+
available: boolean;
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=key-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-provider.d.ts","sourceRoot":"","sources":["../../../../src/walls/06-memory/privacy/key-provider.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,IAAI,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACzC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;CAChC;AAED,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAE/D,wBAAgB,QAAQ,IAAI,MAAM,CAOjC;AAUD,wBAAgB,gBAAgB,IAAI,MAAM,CAQzC;AAuBD,wBAAgB,cAAc,IAAI,WAAW,CAK5C;AAMD,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,GAAE,MAAW,GAAG,MAAM,CAOzE;AAED,wBAAgB,kBAAkB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAQrF"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.detectOS = detectOS;
|
|
37
|
+
exports.deriveMachineKey = deriveMachineKey;
|
|
38
|
+
exports.getKeyProvider = getKeyProvider;
|
|
39
|
+
exports.getKey = getKey;
|
|
40
|
+
exports.setKey = setKey;
|
|
41
|
+
exports.deleteKey = deleteKey;
|
|
42
|
+
exports.getOrCreateKey = getOrCreateKey;
|
|
43
|
+
exports.getKeyProviderInfo = getKeyProviderInfo;
|
|
44
|
+
const crypto = __importStar(require("crypto"));
|
|
45
|
+
const os = __importStar(require("os"));
|
|
46
|
+
function detectOS() {
|
|
47
|
+
switch (process.platform) {
|
|
48
|
+
case 'win32': return 'windows';
|
|
49
|
+
case 'darwin': return 'macos';
|
|
50
|
+
case 'linux': return 'linux';
|
|
51
|
+
default: return 'unknown';
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// ============================================================
|
|
55
|
+
// Machine-bound key derivation (for file fallback)
|
|
56
|
+
// Derives a key from hostname + username + salt
|
|
57
|
+
// so the encrypted file is only readable on this machine
|
|
58
|
+
// ============================================================
|
|
59
|
+
const MACHINE_SALT = 'fivocell-v2-salt-2026';
|
|
60
|
+
function deriveMachineKey() {
|
|
61
|
+
const hostname = os.hostname();
|
|
62
|
+
const username = os.userInfo().username;
|
|
63
|
+
return crypto.scryptSync(`${hostname}:${username}:${MACHINE_SALT}`, 'fivocell-key-derivation', 32);
|
|
64
|
+
}
|
|
65
|
+
// ============================================================
|
|
66
|
+
// Provider chain — tries providers in order
|
|
67
|
+
// ============================================================
|
|
68
|
+
let providers = null;
|
|
69
|
+
function getProviders() {
|
|
70
|
+
if (providers)
|
|
71
|
+
return providers;
|
|
72
|
+
providers = [];
|
|
73
|
+
// Import lazily to avoid circular deps
|
|
74
|
+
try {
|
|
75
|
+
const { OSKeyProvider } = require('./key-provider-os');
|
|
76
|
+
providers.push(new OSKeyProvider());
|
|
77
|
+
}
|
|
78
|
+
catch { /* not available */ }
|
|
79
|
+
try {
|
|
80
|
+
const { FileKeyProvider } = require('./key-provider-file');
|
|
81
|
+
providers.push(new FileKeyProvider());
|
|
82
|
+
}
|
|
83
|
+
catch { /* not available */ }
|
|
84
|
+
return providers;
|
|
85
|
+
}
|
|
86
|
+
function getKeyProvider() {
|
|
87
|
+
const available = getProviders().filter(p => p.isAvailable());
|
|
88
|
+
if (available.length > 0)
|
|
89
|
+
return available[0];
|
|
90
|
+
// Should never happen — file provider is always available
|
|
91
|
+
throw new Error('No key provider available');
|
|
92
|
+
}
|
|
93
|
+
// ============================================================
|
|
94
|
+
// Public API
|
|
95
|
+
// ============================================================
|
|
96
|
+
function getKey(id) {
|
|
97
|
+
return getKeyProvider().getKey(id);
|
|
98
|
+
}
|
|
99
|
+
function setKey(id, key) {
|
|
100
|
+
return getKeyProvider().setKey(id, key);
|
|
101
|
+
}
|
|
102
|
+
function deleteKey(id) {
|
|
103
|
+
return getKeyProvider().deleteKey(id);
|
|
104
|
+
}
|
|
105
|
+
function getOrCreateKey(id, keyLength = 32) {
|
|
106
|
+
const existing = getKey(id);
|
|
107
|
+
if (existing && existing.length === keyLength)
|
|
108
|
+
return existing;
|
|
109
|
+
const newKey = crypto.randomBytes(keyLength);
|
|
110
|
+
setKey(id, newKey);
|
|
111
|
+
return newKey;
|
|
112
|
+
}
|
|
113
|
+
function getKeyProviderInfo() {
|
|
114
|
+
const osType = detectOS();
|
|
115
|
+
try {
|
|
116
|
+
const provider = getKeyProvider();
|
|
117
|
+
return { name: provider.name, os: osType, available: true };
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return { name: 'none', os: osType, available: false };
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=key-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-provider.js","sourceRoot":"","sources":["../../../../src/walls/06-memory/privacy/key-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export interface ContextRequest {
|
|
2
|
+
project: string;
|
|
3
|
+
projectDir: string;
|
|
4
|
+
branch?: string;
|
|
5
|
+
topic?: string;
|
|
6
|
+
file?: string;
|
|
7
|
+
query?: string;
|
|
8
|
+
mode?: 'short' | 'full' | 'topic';
|
|
9
|
+
tool?: string;
|
|
10
|
+
model?: string;
|
|
11
|
+
maxTokens?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface ContextSource {
|
|
14
|
+
type: string;
|
|
15
|
+
reason: string;
|
|
16
|
+
data: unknown;
|
|
17
|
+
importance: number;
|
|
18
|
+
}
|
|
19
|
+
export interface ContextResponse {
|
|
20
|
+
project: string;
|
|
21
|
+
branch: string;
|
|
22
|
+
mode: string;
|
|
23
|
+
sources: ContextSource[];
|
|
24
|
+
compactContext: string;
|
|
25
|
+
generatedAt: string;
|
|
26
|
+
stats: {
|
|
27
|
+
totalSources: number;
|
|
28
|
+
totalEvents: number;
|
|
29
|
+
relevanceScore: number;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export declare function buildContext(req: ContextRequest): ContextResponse;
|
|
33
|
+
export declare function getShortContext(project: string, projectDir: string): string;
|
|
34
|
+
export declare function getFullContext(project: string, projectDir: string): string;
|
|
35
|
+
export declare function getTopicContext(project: string, projectDir: string, topic: string): string;
|
|
36
|
+
//# sourceMappingURL=context-pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-pipeline.d.ts","sourceRoot":"","sources":["../../../../src/walls/06-memory/retrieval/context-pipeline.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AA2ID,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,GAAG,eAAe,CA8HjE;AAMD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1F"}
|