fivocell 6.0.3 → 6.2.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.
Files changed (65) hide show
  1. package/dist/__tests__/archive-versioning.test.d.ts +2 -0
  2. package/dist/__tests__/archive-versioning.test.d.ts.map +1 -0
  3. package/dist/__tests__/archive-versioning.test.js +131 -0
  4. package/dist/__tests__/archive-versioning.test.js.map +1 -0
  5. package/dist/__tests__/blob-vault.test.d.ts +2 -0
  6. package/dist/__tests__/blob-vault.test.d.ts.map +1 -0
  7. package/dist/__tests__/blob-vault.test.js +125 -0
  8. package/dist/__tests__/blob-vault.test.js.map +1 -0
  9. package/dist/__tests__/cell-mirror.test.d.ts +2 -0
  10. package/dist/__tests__/cell-mirror.test.d.ts.map +1 -0
  11. package/dist/__tests__/cell-mirror.test.js +122 -0
  12. package/dist/__tests__/cell-mirror.test.js.map +1 -0
  13. package/dist/__tests__/context-pipeline.test.d.ts +2 -0
  14. package/dist/__tests__/context-pipeline.test.d.ts.map +1 -0
  15. package/dist/__tests__/context-pipeline.test.js +119 -0
  16. package/dist/__tests__/context-pipeline.test.js.map +1 -0
  17. package/dist/__tests__/key-provider.test.d.ts +2 -0
  18. package/dist/__tests__/key-provider.test.d.ts.map +1 -0
  19. package/dist/__tests__/key-provider.test.js +74 -0
  20. package/dist/__tests__/key-provider.test.js.map +1 -0
  21. package/dist/walls/06-memory/archive/archive-versioning.d.ts +33 -0
  22. package/dist/walls/06-memory/archive/archive-versioning.d.ts.map +1 -0
  23. package/dist/walls/06-memory/archive/archive-versioning.js +201 -0
  24. package/dist/walls/06-memory/archive/archive-versioning.js.map +1 -0
  25. package/dist/walls/06-memory/archive/blob-vault.d.ts +47 -0
  26. package/dist/walls/06-memory/archive/blob-vault.d.ts.map +1 -0
  27. package/dist/walls/06-memory/archive/blob-vault.js +289 -0
  28. package/dist/walls/06-memory/archive/blob-vault.js.map +1 -0
  29. package/dist/walls/06-memory/archive/memory-archive.d.ts.map +1 -1
  30. package/dist/walls/06-memory/archive/memory-archive.js +29 -5
  31. package/dist/walls/06-memory/archive/memory-archive.js.map +1 -1
  32. package/dist/walls/06-memory/mirror/cell-mirror.d.ts +32 -0
  33. package/dist/walls/06-memory/mirror/cell-mirror.d.ts.map +1 -0
  34. package/dist/walls/06-memory/mirror/cell-mirror.js +380 -0
  35. package/dist/walls/06-memory/mirror/cell-mirror.js.map +1 -0
  36. package/dist/walls/06-memory/privacy/key-migration.d.ts +14 -0
  37. package/dist/walls/06-memory/privacy/key-migration.d.ts.map +1 -0
  38. package/dist/walls/06-memory/privacy/key-migration.js +124 -0
  39. package/dist/walls/06-memory/privacy/key-migration.js.map +1 -0
  40. package/dist/walls/06-memory/privacy/key-provider-file.d.ts +9 -0
  41. package/dist/walls/06-memory/privacy/key-provider-file.d.ts.map +1 -0
  42. package/dist/walls/06-memory/privacy/key-provider-file.js +129 -0
  43. package/dist/walls/06-memory/privacy/key-provider-file.js.map +1 -0
  44. package/dist/walls/06-memory/privacy/key-provider-os.d.ts +28 -0
  45. package/dist/walls/06-memory/privacy/key-provider-os.d.ts.map +1 -0
  46. package/dist/walls/06-memory/privacy/key-provider-os.js +225 -0
  47. package/dist/walls/06-memory/privacy/key-provider-os.js.map +1 -0
  48. package/dist/walls/06-memory/privacy/key-provider.d.ts +38 -0
  49. package/dist/walls/06-memory/privacy/key-provider.d.ts.map +1 -0
  50. package/dist/walls/06-memory/privacy/key-provider.js +135 -0
  51. package/dist/walls/06-memory/privacy/key-provider.js.map +1 -0
  52. package/dist/walls/06-memory/retrieval/context-pipeline.d.ts +36 -0
  53. package/dist/walls/06-memory/retrieval/context-pipeline.d.ts.map +1 -0
  54. package/dist/walls/06-memory/retrieval/context-pipeline.js +321 -0
  55. package/dist/walls/06-memory/retrieval/context-pipeline.js.map +1 -0
  56. package/dist/walls/06-memory/stores/memory-search.d.ts +12 -0
  57. package/dist/walls/06-memory/stores/memory-search.d.ts.map +1 -1
  58. package/dist/walls/06-memory/stores/memory-search.js +51 -2
  59. package/dist/walls/06-memory/stores/memory-search.js.map +1 -1
  60. package/dist/walls/06-memory/stores/sync-engine.d.ts.map +1 -1
  61. package/dist/walls/06-memory/stores/sync-engine.js +15 -0
  62. package/dist/walls/06-memory/stores/sync-engine.js.map +1 -1
  63. package/dist/walls/07-runtime/cli/cli.js +254 -0
  64. package/dist/walls/07-runtime/cli/cli.js.map +1 -1
  65. package/package.json +1 -1
@@ -0,0 +1,124 @@
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.migrateKey = migrateKey;
37
+ exports.getMigrationStatus = getMigrationStatus;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const os = __importStar(require("os"));
41
+ const key_provider_1 = require("./key-provider");
42
+ // ============================================================
43
+ // key-migration.ts — Migrate old file keys to new provider
44
+ //
45
+ // Migration flow:
46
+ // 1. Check if new provider has key → done
47
+ // 2. Check old file key (~/.fivo/cell/keys/local.key) → migrate
48
+ // 3. Check project-local key (.cell/private/.archive.key) → migrate
49
+ // 4. Keep old files as backup (don't delete)
50
+ // ============================================================
51
+ const KEY_ID = 'fivocell-archive';
52
+ function getOldGlobalKeyPath() {
53
+ return path.join(os.homedir(), '.fivo', 'cell', 'keys', 'local.key');
54
+ }
55
+ function getOldProjectKeyPath(projectDir) {
56
+ return path.join(projectDir, '.cell', 'private', '.archive.key');
57
+ }
58
+ function migrateKey(projectDir) {
59
+ const provider = (0, key_provider_1.getKeyProvider)();
60
+ // 1. Check if provider already has the key
61
+ const existing = (0, key_provider_1.getKey)(KEY_ID);
62
+ if (existing) {
63
+ return {
64
+ migrated: false,
65
+ source: 'os-store',
66
+ provider: provider.name,
67
+ message: `Key already exists in ${provider.name}`,
68
+ };
69
+ }
70
+ // 2. Try old global file key
71
+ const oldGlobalPath = getOldGlobalKeyPath();
72
+ if (fs.existsSync(oldGlobalPath)) {
73
+ try {
74
+ const raw = fs.readFileSync(oldGlobalPath, 'utf-8').trim();
75
+ const key = Buffer.from(raw, 'hex');
76
+ if (key.length === 32) {
77
+ (0, key_provider_1.setKey)(KEY_ID, key);
78
+ return {
79
+ migrated: true,
80
+ source: 'global-file',
81
+ provider: provider.name,
82
+ message: `Migrated from ${oldGlobalPath} to ${provider.name}`,
83
+ };
84
+ }
85
+ }
86
+ catch { /* corrupt file, continue */ }
87
+ }
88
+ // 3. Try old project-local key
89
+ const oldProjectPath = getOldProjectKeyPath(projectDir);
90
+ if (fs.existsSync(oldProjectPath)) {
91
+ try {
92
+ const raw = fs.readFileSync(oldProjectPath, 'utf-8').trim();
93
+ const key = Buffer.from(raw, 'hex');
94
+ if (key.length === 32) {
95
+ (0, key_provider_1.setKey)(KEY_ID, key);
96
+ return {
97
+ migrated: true,
98
+ source: 'project-file',
99
+ provider: provider.name,
100
+ message: `Migrated from ${oldProjectPath} to ${provider.name}`,
101
+ };
102
+ }
103
+ }
104
+ catch { /* corrupt file, continue */ }
105
+ }
106
+ // 4. No existing key found — will be created on first use
107
+ return {
108
+ migrated: false,
109
+ source: 'none',
110
+ provider: provider.name,
111
+ message: 'No existing key found. New key will be created on first use.',
112
+ };
113
+ }
114
+ function getMigrationStatus() {
115
+ const existing = (0, key_provider_1.getKey)(KEY_ID);
116
+ const oldGlobal = fs.existsSync(getOldGlobalKeyPath());
117
+ return {
118
+ newProviderHas: !!existing,
119
+ oldGlobalExists: oldGlobal,
120
+ oldProjectExists: false, // checked per-project
121
+ needsMigration: !existing && oldGlobal,
122
+ };
123
+ }
124
+ //# sourceMappingURL=key-migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-migration.js","sourceRoot":"","sources":["../../../../src/walls/06-memory/privacy/key-migration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { KeyProvider } from './key-provider';
2
+ export declare class FileKeyProvider implements KeyProvider {
3
+ name: string;
4
+ isAvailable(): boolean;
5
+ getKey(id: string): Buffer | null;
6
+ setKey(id: string, key: Buffer): boolean;
7
+ deleteKey(id: string): boolean;
8
+ }
9
+ //# sourceMappingURL=key-provider-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-provider-file.d.ts","sourceRoot":"","sources":["../../../../src/walls/06-memory/privacy/key-provider-file.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAoB,MAAM,gBAAgB,CAAC;AA0C/D,qBAAa,eAAgB,YAAW,WAAW;IACjD,IAAI,SAAoB;IAExB,WAAW,IAAI,OAAO;IAQtB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAWjC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAYxC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAO/B"}
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,+CAAiC;AACjC,iDAA+D;AAE/D,+DAA+D;AAC/D,+DAA+D;AAC/D,EAAE;AACF,6CAA6C;AAC7C,qDAAqD;AACrD,+CAA+C;AAC/C,+DAA+D;AAE/D,MAAM,SAAS,GAAG,aAAa,CAAC;AAChC,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,SAAS,UAAU;IACjB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,UAAU,CAAC,EAAU;IAC5B,2BAA2B;IAC3B,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,OAAO,CAAC,IAAY,EAAE,GAAW;IACxC,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAC;IACxF,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IACpC,2CAA2C;IAC3C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,OAAO,CAAC,IAAY,EAAE,GAAW;IACxC,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAC;IAC5F,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,MAAa,eAAe;IAC1B,IAAI,GAAG,gBAAgB,CAAC;IAExB,WAAW;QACT,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;YACzB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,EAAU;QACf,MAAM,OAAO,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QAEzC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,UAAU,GAAG,IAAA,+BAAgB,GAAE,CAAC;YACtC,OAAO,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,EAAU,EAAE,GAAW;QAC5B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;YACzB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEhE,MAAM,UAAU,GAAG,IAAA,+BAAgB,GAAE,CAAC;YACtC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAC3C,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,EAAU;QAClB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;YAC/B,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;gBAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;IAC3B,CAAC;CACF;AAzCD,0CAyCC"}
@@ -0,0 +1,28 @@
1
+ import { KeyProvider } from './key-provider';
2
+ export declare class OSKeyProvider implements KeyProvider {
3
+ name: string;
4
+ private osType;
5
+ isAvailable(): boolean;
6
+ healthCheck(): {
7
+ available: boolean;
8
+ os: string;
9
+ method: string;
10
+ details: string;
11
+ };
12
+ private isWindowsAvailable;
13
+ private windowsGetKey;
14
+ private windowsSetKey;
15
+ private windowsDeleteKey;
16
+ private isMacOSAvailable;
17
+ private macosGetKey;
18
+ private macosSetKey;
19
+ private macosDeleteKey;
20
+ private isLinuxAvailable;
21
+ private linuxGetKey;
22
+ private linuxSetKey;
23
+ private linuxDeleteKey;
24
+ getKey(id: string): Buffer | null;
25
+ setKey(id: string, key: Buffer): boolean;
26
+ deleteKey(id: string): boolean;
27
+ }
28
+ //# 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;IAWtB,WAAW,IAAI;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAmBlF,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,WAAW;IAgBnB,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,225 @@
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: DPAPI via ConvertFrom-Clixml (real encryption, not hex file)
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
+ healthCheck() {
32
+ const available = this.isAvailable();
33
+ switch (this.osType) {
34
+ case 'windows':
35
+ return { available, os: 'windows', method: 'DPAPI-SecureString', details: available ? 'PowerShell ConvertTo-SecureString/ConvertFrom-SecureString' : 'PowerShell not available' };
36
+ case 'macos':
37
+ return { available, os: 'macos', method: 'Keychain', details: available ? 'security CLI available' : 'security CLI not found' };
38
+ case 'linux':
39
+ return { available, os: 'linux', method: 'SecretService', details: available ? 'secret-tool available' : 'secret-tool not found' };
40
+ default:
41
+ return { available: false, os: 'unknown', method: 'none', details: 'Unsupported OS' };
42
+ }
43
+ }
44
+ // ============================================================
45
+ // Windows — DPAPI via ConvertFrom-SecureString
46
+ // Uses current user's DPAPI scope — keys only readable by same user on same machine
47
+ // ============================================================
48
+ isWindowsAvailable() {
49
+ try {
50
+ (0, child_process_1.execSync)('powershell -Command "ConvertTo-SecureString -String test -AsPlainText -Force"', {
51
+ encoding: 'utf-8', timeout: 5000, stdio: 'pipe',
52
+ });
53
+ return true;
54
+ }
55
+ catch {
56
+ return false;
57
+ }
58
+ }
59
+ windowsGetKey(id) {
60
+ try {
61
+ const safeId = id.replace(/[^a-zA-Z0-9_-]/g, '_');
62
+ // Read the DPAPI-encrypted string from file, then decrypt with current user scope
63
+ const cmd = `powershell -Command "$enc = Get-Content -Path '$env:USERPROFILE\\.fivo\\cell\\keys\\os-${safeId}.dpapi' -ErrorAction Stop; $sec = ConvertTo-SecureString $enc; [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sec))"`;
64
+ const hex = (0, child_process_1.execSync)(cmd, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' }).trim();
65
+ if (!hex)
66
+ return null;
67
+ return Buffer.from(hex, 'hex');
68
+ }
69
+ catch {
70
+ return null;
71
+ }
72
+ }
73
+ windowsSetKey(id, key) {
74
+ try {
75
+ const safeId = id.replace(/[^a-zA-Z0-9_-]/g, '_');
76
+ // Convert hex to SecureString (DPAPI-encrypted in current user scope), then save
77
+ const hex = key.toString('hex');
78
+ const cmd = `powershell -Command "New-Item -Path '$env:USERPROFILE\\.fivo\\cell\\keys' -ItemType Directory -Force | Out-Null; $sec = ConvertTo-SecureString '${hex}' -AsPlainText -Force; $enc = ConvertFrom-SecureString $sec; Set-Content -Path '$env:USERPROFILE\\.fivo\\cell\\keys\\os-${safeId}.dpapi' -Value $enc -Force"`;
79
+ (0, child_process_1.execSync)(cmd, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' });
80
+ // Clean up old hex file if it exists
81
+ try {
82
+ const fs = require('fs');
83
+ const oldPath = require('path').join(require('os').homedir(), '.fivo', 'cell', 'keys', `os-${safeId}.txt`);
84
+ if (fs.existsSync(oldPath))
85
+ fs.unlinkSync(oldPath);
86
+ }
87
+ catch { /* ignore */ }
88
+ return true;
89
+ }
90
+ catch {
91
+ return false;
92
+ }
93
+ }
94
+ windowsDeleteKey(id) {
95
+ try {
96
+ const safeId = id.replace(/[^a-zA-Z0-9_-]/g, '_');
97
+ const cmd = `powershell -Command "Remove-Item -Path '$env:USERPROFILE\\.fivo\\cell\\keys\\os-${safeId}.dpapi' -Force -ErrorAction SilentlyContinue; Remove-Item -Path '$env:USERPROFILE\\.fivo\\cell\\keys\\os-${safeId}.txt' -Force -ErrorAction SilentlyContinue"`;
98
+ (0, child_process_1.execSync)(cmd, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' });
99
+ return true;
100
+ }
101
+ catch {
102
+ return false;
103
+ }
104
+ }
105
+ // ============================================================
106
+ // macOS — Keychain CLI
107
+ // ============================================================
108
+ isMacOSAvailable() {
109
+ try {
110
+ (0, child_process_1.execSync)('which security', { encoding: 'utf-8', timeout: 3000, stdio: 'pipe' });
111
+ return true;
112
+ }
113
+ catch {
114
+ return false;
115
+ }
116
+ }
117
+ macosGetKey(id) {
118
+ try {
119
+ 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();
120
+ if (!result)
121
+ return null;
122
+ return Buffer.from(result, 'hex');
123
+ }
124
+ catch {
125
+ return null;
126
+ }
127
+ }
128
+ macosSetKey(id, key) {
129
+ try {
130
+ try {
131
+ (0, child_process_1.execSync)(`security delete-generic-password -a fivocell -s "cell-${id}" 2>/dev/null`, {
132
+ encoding: 'utf-8', timeout: 5000, stdio: 'pipe',
133
+ });
134
+ }
135
+ catch { /* ignore */ }
136
+ (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' });
137
+ return true;
138
+ }
139
+ catch {
140
+ return false;
141
+ }
142
+ }
143
+ macosDeleteKey(id) {
144
+ try {
145
+ (0, child_process_1.execSync)(`security delete-generic-password -a fivocell -s "cell-${id}" 2>/dev/null`, {
146
+ encoding: 'utf-8', timeout: 5000, stdio: 'pipe',
147
+ });
148
+ return true;
149
+ }
150
+ catch {
151
+ return false;
152
+ }
153
+ }
154
+ // ============================================================
155
+ // Linux — secret-tool (GNOME Keyring)
156
+ // ============================================================
157
+ isLinuxAvailable() {
158
+ try {
159
+ (0, child_process_1.execSync)('which secret-tool', { encoding: 'utf-8', timeout: 3000, stdio: 'pipe' });
160
+ return true;
161
+ }
162
+ catch {
163
+ return false;
164
+ }
165
+ }
166
+ linuxGetKey(id) {
167
+ try {
168
+ const result = (0, child_process_1.execSync)(`secret-tool lookup service fivocell id "${id}"`, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' }).trim();
169
+ if (!result)
170
+ return null;
171
+ return Buffer.from(result, 'hex');
172
+ }
173
+ catch {
174
+ return null;
175
+ }
176
+ }
177
+ linuxSetKey(id, key) {
178
+ try {
179
+ const cmd = `echo -n "${key.toString('hex')}" | secret-tool store --label="Fivo Cell ${id}" service fivocell id "${id}"`;
180
+ (0, child_process_1.execSync)(cmd, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe', shell: '/bin/bash' });
181
+ return true;
182
+ }
183
+ catch {
184
+ return false;
185
+ }
186
+ }
187
+ linuxDeleteKey(id) {
188
+ try {
189
+ (0, child_process_1.execSync)(`secret-tool clear service fivocell id "${id}"`, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' });
190
+ return true;
191
+ }
192
+ catch {
193
+ return false;
194
+ }
195
+ }
196
+ // ============================================================
197
+ // Unified interface
198
+ // ============================================================
199
+ getKey(id) {
200
+ switch (this.osType) {
201
+ case 'windows': return this.windowsGetKey(id);
202
+ case 'macos': return this.macosGetKey(id);
203
+ case 'linux': return this.linuxGetKey(id);
204
+ default: return null;
205
+ }
206
+ }
207
+ setKey(id, key) {
208
+ switch (this.osType) {
209
+ case 'windows': return this.windowsSetKey(id, key);
210
+ case 'macos': return this.macosSetKey(id, key);
211
+ case 'linux': return this.linuxSetKey(id, key);
212
+ default: return false;
213
+ }
214
+ }
215
+ deleteKey(id) {
216
+ switch (this.osType) {
217
+ case 'windows': return this.windowsDeleteKey(id);
218
+ case 'macos': return this.macosDeleteKey(id);
219
+ case 'linux': return this.linuxDeleteKey(id);
220
+ default: return false;
221
+ }
222
+ }
223
+ }
224
+ exports.OSKeyProvider = OSKeyProvider;
225
+ //# 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":"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"}
@@ -0,0 +1,38 @@
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
+ healthCheck?(): {
8
+ available: boolean;
9
+ os: string;
10
+ method: string;
11
+ details: string;
12
+ };
13
+ }
14
+ export type OSType = 'windows' | 'macos' | 'linux' | 'unknown';
15
+ export declare function detectOS(): OSType;
16
+ export declare function deriveMachineKey(): Buffer;
17
+ export declare function getKeyProvider(): KeyProvider;
18
+ export declare function getKey(id: string): Buffer | null;
19
+ export declare function setKey(id: string, key: Buffer): boolean;
20
+ export declare function deleteKey(id: string): boolean;
21
+ export declare function getOrCreateKey(id: string, keyLength?: number): Buffer;
22
+ export declare function getKeyProviderInfo(): {
23
+ name: string;
24
+ os: OSType;
25
+ available: boolean;
26
+ };
27
+ export declare function getProviderHealthCheck(): {
28
+ name: string;
29
+ os: OSType;
30
+ available: boolean;
31
+ health?: {
32
+ available: boolean;
33
+ os: string;
34
+ method: string;
35
+ details: string;
36
+ };
37
+ };
38
+ //# 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;IAC/B,WAAW,CAAC,IAAI;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACrF;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;AAED,wBAAgB,sBAAsB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CASvK"}