@ornexus/neocortex 3.8.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 (156) hide show
  1. package/LICENSE +56 -0
  2. package/README.md +661 -0
  3. package/install.js +453 -0
  4. package/install.ps1 +1478 -0
  5. package/install.sh +1409 -0
  6. package/package.json +93 -0
  7. package/packages/client/dist/adapters/adapter-registry.d.ts +62 -0
  8. package/packages/client/dist/adapters/adapter-registry.d.ts.map +1 -0
  9. package/packages/client/dist/adapters/adapter-registry.js +107 -0
  10. package/packages/client/dist/adapters/adapter-registry.js.map +1 -0
  11. package/packages/client/dist/adapters/antigravity-adapter.d.ts +19 -0
  12. package/packages/client/dist/adapters/antigravity-adapter.d.ts.map +1 -0
  13. package/packages/client/dist/adapters/antigravity-adapter.js +78 -0
  14. package/packages/client/dist/adapters/antigravity-adapter.js.map +1 -0
  15. package/packages/client/dist/adapters/claude-code-adapter.d.ts +20 -0
  16. package/packages/client/dist/adapters/claude-code-adapter.d.ts.map +1 -0
  17. package/packages/client/dist/adapters/claude-code-adapter.js +80 -0
  18. package/packages/client/dist/adapters/claude-code-adapter.js.map +1 -0
  19. package/packages/client/dist/adapters/codex-adapter.d.ts +20 -0
  20. package/packages/client/dist/adapters/codex-adapter.d.ts.map +1 -0
  21. package/packages/client/dist/adapters/codex-adapter.js +81 -0
  22. package/packages/client/dist/adapters/codex-adapter.js.map +1 -0
  23. package/packages/client/dist/adapters/cursor-adapter.d.ts +20 -0
  24. package/packages/client/dist/adapters/cursor-adapter.d.ts.map +1 -0
  25. package/packages/client/dist/adapters/cursor-adapter.js +116 -0
  26. package/packages/client/dist/adapters/cursor-adapter.js.map +1 -0
  27. package/packages/client/dist/adapters/gemini-adapter.d.ts +19 -0
  28. package/packages/client/dist/adapters/gemini-adapter.d.ts.map +1 -0
  29. package/packages/client/dist/adapters/gemini-adapter.js +72 -0
  30. package/packages/client/dist/adapters/gemini-adapter.js.map +1 -0
  31. package/packages/client/dist/adapters/index.d.ts +20 -0
  32. package/packages/client/dist/adapters/index.d.ts.map +1 -0
  33. package/packages/client/dist/adapters/index.js +22 -0
  34. package/packages/client/dist/adapters/index.js.map +1 -0
  35. package/packages/client/dist/adapters/platform-detector.d.ts +47 -0
  36. package/packages/client/dist/adapters/platform-detector.d.ts.map +1 -0
  37. package/packages/client/dist/adapters/platform-detector.js +107 -0
  38. package/packages/client/dist/adapters/platform-detector.js.map +1 -0
  39. package/packages/client/dist/adapters/target-adapter.d.ts +71 -0
  40. package/packages/client/dist/adapters/target-adapter.d.ts.map +1 -0
  41. package/packages/client/dist/adapters/target-adapter.js +13 -0
  42. package/packages/client/dist/adapters/target-adapter.js.map +1 -0
  43. package/packages/client/dist/adapters/vscode-adapter.d.ts +20 -0
  44. package/packages/client/dist/adapters/vscode-adapter.d.ts.map +1 -0
  45. package/packages/client/dist/adapters/vscode-adapter.js +73 -0
  46. package/packages/client/dist/adapters/vscode-adapter.js.map +1 -0
  47. package/packages/client/dist/cache/crypto-utils.d.ts +31 -0
  48. package/packages/client/dist/cache/crypto-utils.d.ts.map +1 -0
  49. package/packages/client/dist/cache/crypto-utils.js +77 -0
  50. package/packages/client/dist/cache/crypto-utils.js.map +1 -0
  51. package/packages/client/dist/cache/encrypted-cache.d.ts +31 -0
  52. package/packages/client/dist/cache/encrypted-cache.d.ts.map +1 -0
  53. package/packages/client/dist/cache/encrypted-cache.js +92 -0
  54. package/packages/client/dist/cache/encrypted-cache.js.map +1 -0
  55. package/packages/client/dist/cache/index.d.ts +14 -0
  56. package/packages/client/dist/cache/index.d.ts.map +1 -0
  57. package/packages/client/dist/cache/index.js +14 -0
  58. package/packages/client/dist/cache/index.js.map +1 -0
  59. package/packages/client/dist/cli.d.ts +15 -0
  60. package/packages/client/dist/cli.d.ts.map +1 -0
  61. package/packages/client/dist/cli.js +182 -0
  62. package/packages/client/dist/cli.js.map +1 -0
  63. package/packages/client/dist/commands/activate.d.ts +48 -0
  64. package/packages/client/dist/commands/activate.d.ts.map +1 -0
  65. package/packages/client/dist/commands/activate.js +186 -0
  66. package/packages/client/dist/commands/activate.js.map +1 -0
  67. package/packages/client/dist/commands/cache-status.d.ts +40 -0
  68. package/packages/client/dist/commands/cache-status.d.ts.map +1 -0
  69. package/packages/client/dist/commands/cache-status.js +113 -0
  70. package/packages/client/dist/commands/cache-status.js.map +1 -0
  71. package/packages/client/dist/commands/invoke.d.ts +71 -0
  72. package/packages/client/dist/commands/invoke.d.ts.map +1 -0
  73. package/packages/client/dist/commands/invoke.js +345 -0
  74. package/packages/client/dist/commands/invoke.js.map +1 -0
  75. package/packages/client/dist/config/resolver-selection.d.ts +41 -0
  76. package/packages/client/dist/config/resolver-selection.d.ts.map +1 -0
  77. package/packages/client/dist/config/resolver-selection.js +278 -0
  78. package/packages/client/dist/config/resolver-selection.js.map +1 -0
  79. package/packages/client/dist/context/context-collector.d.ts +29 -0
  80. package/packages/client/dist/context/context-collector.d.ts.map +1 -0
  81. package/packages/client/dist/context/context-collector.js +223 -0
  82. package/packages/client/dist/context/context-collector.js.map +1 -0
  83. package/packages/client/dist/context/context-sanitizer.d.ts +29 -0
  84. package/packages/client/dist/context/context-sanitizer.d.ts.map +1 -0
  85. package/packages/client/dist/context/context-sanitizer.js +146 -0
  86. package/packages/client/dist/context/context-sanitizer.js.map +1 -0
  87. package/packages/client/dist/index.d.ts +55 -0
  88. package/packages/client/dist/index.d.ts.map +1 -0
  89. package/packages/client/dist/index.js +37 -0
  90. package/packages/client/dist/index.js.map +1 -0
  91. package/packages/client/dist/license/index.d.ts +6 -0
  92. package/packages/client/dist/license/index.d.ts.map +1 -0
  93. package/packages/client/dist/license/index.js +6 -0
  94. package/packages/client/dist/license/index.js.map +1 -0
  95. package/packages/client/dist/license/license-client.d.ts +53 -0
  96. package/packages/client/dist/license/license-client.d.ts.map +1 -0
  97. package/packages/client/dist/license/license-client.js +164 -0
  98. package/packages/client/dist/license/license-client.js.map +1 -0
  99. package/packages/client/dist/machine/fingerprint.d.ts +24 -0
  100. package/packages/client/dist/machine/fingerprint.d.ts.map +1 -0
  101. package/packages/client/dist/machine/fingerprint.js +61 -0
  102. package/packages/client/dist/machine/fingerprint.js.map +1 -0
  103. package/packages/client/dist/machine/index.d.ts +6 -0
  104. package/packages/client/dist/machine/index.d.ts.map +1 -0
  105. package/packages/client/dist/machine/index.js +6 -0
  106. package/packages/client/dist/machine/index.js.map +1 -0
  107. package/packages/client/dist/resilience/circuit-breaker.d.ts +71 -0
  108. package/packages/client/dist/resilience/circuit-breaker.d.ts.map +1 -0
  109. package/packages/client/dist/resilience/circuit-breaker.js +171 -0
  110. package/packages/client/dist/resilience/circuit-breaker.js.map +1 -0
  111. package/packages/client/dist/resilience/degradation-manager.d.ts +68 -0
  112. package/packages/client/dist/resilience/degradation-manager.d.ts.map +1 -0
  113. package/packages/client/dist/resilience/degradation-manager.js +165 -0
  114. package/packages/client/dist/resilience/degradation-manager.js.map +1 -0
  115. package/packages/client/dist/resilience/freshness-indicator.d.ts +60 -0
  116. package/packages/client/dist/resilience/freshness-indicator.d.ts.map +1 -0
  117. package/packages/client/dist/resilience/freshness-indicator.js +101 -0
  118. package/packages/client/dist/resilience/freshness-indicator.js.map +1 -0
  119. package/packages/client/dist/resilience/index.d.ts +9 -0
  120. package/packages/client/dist/resilience/index.d.ts.map +1 -0
  121. package/packages/client/dist/resilience/index.js +9 -0
  122. package/packages/client/dist/resilience/index.js.map +1 -0
  123. package/packages/client/dist/resilience/recovery-detector.d.ts +60 -0
  124. package/packages/client/dist/resilience/recovery-detector.d.ts.map +1 -0
  125. package/packages/client/dist/resilience/recovery-detector.js +75 -0
  126. package/packages/client/dist/resilience/recovery-detector.js.map +1 -0
  127. package/packages/client/dist/resolvers/asset-resolver.d.ts +80 -0
  128. package/packages/client/dist/resolvers/asset-resolver.d.ts.map +1 -0
  129. package/packages/client/dist/resolvers/asset-resolver.js +14 -0
  130. package/packages/client/dist/resolvers/asset-resolver.js.map +1 -0
  131. package/packages/client/dist/resolvers/local-resolver.d.ts +27 -0
  132. package/packages/client/dist/resolvers/local-resolver.d.ts.map +1 -0
  133. package/packages/client/dist/resolvers/local-resolver.js +219 -0
  134. package/packages/client/dist/resolvers/local-resolver.js.map +1 -0
  135. package/packages/client/dist/resolvers/remote-resolver.d.ts +63 -0
  136. package/packages/client/dist/resolvers/remote-resolver.d.ts.map +1 -0
  137. package/packages/client/dist/resolvers/remote-resolver.js +207 -0
  138. package/packages/client/dist/resolvers/remote-resolver.js.map +1 -0
  139. package/packages/client/dist/telemetry/index.d.ts +6 -0
  140. package/packages/client/dist/telemetry/index.d.ts.map +1 -0
  141. package/packages/client/dist/telemetry/index.js +6 -0
  142. package/packages/client/dist/telemetry/index.js.map +1 -0
  143. package/packages/client/dist/telemetry/offline-queue.d.ts +58 -0
  144. package/packages/client/dist/telemetry/offline-queue.d.ts.map +1 -0
  145. package/packages/client/dist/telemetry/offline-queue.js +132 -0
  146. package/packages/client/dist/telemetry/offline-queue.js.map +1 -0
  147. package/packages/client/dist/types/index.d.ts +141 -0
  148. package/packages/client/dist/types/index.d.ts.map +1 -0
  149. package/packages/client/dist/types/index.js +39 -0
  150. package/packages/client/dist/types/index.js.map +1 -0
  151. package/targets-stubs/antigravity/README.md +20 -0
  152. package/targets-stubs/claude-code/README.md +20 -0
  153. package/targets-stubs/codex/README.md +20 -0
  154. package/targets-stubs/cursor/README.md +20 -0
  155. package/targets-stubs/gemini-cli/README.md +20 -0
  156. package/targets-stubs/vscode/README.md +20 -0
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * This file is part of Neocortex CLI, licensed under the
6
+ * Functional Source License, Version 1.1 (FSL-1.1).
7
+ *
8
+ * Change Date: February 20, 2029
9
+ * Change License: MIT
10
+ *
11
+ * See the LICENSE file in the project root for full license text.
12
+ */
13
+ /** On-disk envelope format. expiresAt is inside the encrypted data payload. */
14
+ export interface EncryptedEnvelope {
15
+ /** Base64-encoded initialization vector (12 bytes) */
16
+ iv: string;
17
+ /** Base64-encoded PBKDF2 salt */
18
+ salt: string;
19
+ /** Base64-encoded GCM auth tag */
20
+ tag: string;
21
+ /** Base64-encoded encrypted data (contains plaintext + expiresAt) */
22
+ data: string;
23
+ }
24
+ export declare function deriveKey(passphrase: string, salt: Buffer): Buffer;
25
+ export declare function encrypt(plaintext: string, passphrase: string, ttlMs?: number): string;
26
+ export interface DecryptResult {
27
+ plaintext: string;
28
+ expired: boolean;
29
+ }
30
+ export declare function decrypt(envelopeJson: string, passphrase: string): DecryptResult;
31
+ //# sourceMappingURL=crypto-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto-utils.d.ts","sourceRoot":"","sources":["../../src/cache/crypto-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA6BH,+EAA+E;AAC/E,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,EAAE,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;CACd;AAUD,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAElE;AAID,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAqBrF;AAID,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,CAyB/E"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * This file is part of Neocortex CLI, licensed under the
6
+ * Functional Source License, Version 1.1 (FSL-1.1).
7
+ *
8
+ * Change Date: February 20, 2029
9
+ * Change License: MIT
10
+ *
11
+ * See the LICENSE file in the project root for full license text.
12
+ */
13
+ /**
14
+ * @neocortex/client - Crypto Utilities
15
+ *
16
+ * AES-256-GCM encryption/decryption with PBKDF2 key derivation.
17
+ * Used by EncryptedCache to protect cached assets at rest.
18
+ *
19
+ * Security design:
20
+ * - IV: 12 bytes (NIST SP 800-38D recommended for GCM)
21
+ * - Salt: 32 bytes random per entry
22
+ * - Key: PBKDF2 with 100k iterations, SHA-512
23
+ * - expiresAt is inside the encrypted payload (authenticated by GCM tag)
24
+ */
25
+ import { randomBytes, pbkdf2Sync, createCipheriv, createDecipheriv } from 'node:crypto';
26
+ // ── Constants ────────────────────────────────────────────────────────────
27
+ const ALGORITHM = 'aes-256-gcm';
28
+ const IV_LENGTH = 12; // NIST SP 800-38D recommended for AES-GCM
29
+ const SALT_LENGTH = 32;
30
+ const KEY_LENGTH = 32;
31
+ const AUTH_TAG_LENGTH = 16;
32
+ const PBKDF2_ITERATIONS = 100_000;
33
+ const PBKDF2_DIGEST = 'sha512';
34
+ // ── Key Derivation ───────────────────────────────────────────────────────
35
+ export function deriveKey(passphrase, salt) {
36
+ return pbkdf2Sync(passphrase, salt, PBKDF2_ITERATIONS, KEY_LENGTH, PBKDF2_DIGEST);
37
+ }
38
+ // ── Encrypt ──────────────────────────────────────────────────────────────
39
+ export function encrypt(plaintext, passphrase, ttlMs) {
40
+ const iv = randomBytes(IV_LENGTH);
41
+ const salt = randomBytes(SALT_LENGTH);
42
+ const key = deriveKey(passphrase, salt);
43
+ const expiresAt = ttlMs != null ? Date.now() + ttlMs : null;
44
+ const payload = { plaintext, expiresAt };
45
+ const payloadJson = JSON.stringify(payload);
46
+ const cipher = createCipheriv(ALGORITHM, key, iv, { authTagLength: AUTH_TAG_LENGTH });
47
+ const encrypted = Buffer.concat([cipher.update(payloadJson, 'utf8'), cipher.final()]);
48
+ const tag = cipher.getAuthTag();
49
+ const envelope = {
50
+ iv: iv.toString('base64'),
51
+ salt: salt.toString('base64'),
52
+ tag: tag.toString('base64'),
53
+ data: encrypted.toString('base64'),
54
+ };
55
+ return JSON.stringify(envelope);
56
+ }
57
+ export function decrypt(envelopeJson, passphrase) {
58
+ const raw = JSON.parse(envelopeJson);
59
+ if (!raw.iv || !raw.salt || !raw.tag || !raw.data) {
60
+ throw new Error('Invalid cache envelope: missing required fields');
61
+ }
62
+ const iv = Buffer.from(raw.iv, 'base64');
63
+ const salt = Buffer.from(raw.salt, 'base64');
64
+ const tag = Buffer.from(raw.tag, 'base64');
65
+ const data = Buffer.from(raw.data, 'base64');
66
+ const key = deriveKey(passphrase, salt);
67
+ const decipher = createDecipheriv(ALGORITHM, key, iv, { authTagLength: AUTH_TAG_LENGTH });
68
+ decipher.setAuthTag(tag);
69
+ const decrypted = Buffer.concat([decipher.update(data), decipher.final()]);
70
+ const payload = JSON.parse(decrypted.toString('utf8'));
71
+ const expired = payload.expiresAt != null && Date.now() > payload.expiresAt;
72
+ return {
73
+ plaintext: payload.plaintext,
74
+ expired,
75
+ };
76
+ }
77
+ //# sourceMappingURL=crypto-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto-utils.js","sourceRoot":"","sources":["../../src/cache/crypto-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * This file is part of Neocortex CLI, licensed under the
6
+ * Functional Source License, Version 1.1 (FSL-1.1).
7
+ *
8
+ * Change Date: February 20, 2029
9
+ * Change License: MIT
10
+ *
11
+ * See the LICENSE file in the project root for full license text.
12
+ */
13
+ import type { CacheProvider } from '../types/index.js';
14
+ export interface EncryptedCacheOptions {
15
+ /** Directory where encrypted cache files are stored */
16
+ cacheDir: string;
17
+ /** Passphrase for encryption (typically the license key) */
18
+ passphrase: string;
19
+ }
20
+ export declare class EncryptedCache implements CacheProvider {
21
+ private readonly cacheDir;
22
+ private readonly passphrase;
23
+ private initPromise;
24
+ constructor(options: EncryptedCacheOptions);
25
+ get(key: string): Promise<string | null>;
26
+ set(key: string, value: string, ttlMs?: number): Promise<void>;
27
+ clear(): Promise<void>;
28
+ private keyToPath;
29
+ private ensureDir;
30
+ }
31
+ //# sourceMappingURL=encrypted-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encrypted-cache.d.ts","sourceRoot":"","sources":["../../src/cache/encrypted-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAgBH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AASvD,MAAM,WAAW,qBAAqB;IACpC,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,qBAAa,cAAe,YAAW,aAAa;IAClD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,WAAW,CAA8B;gBAErC,OAAO,EAAE,qBAAqB;IAKpC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAkBxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW9D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5B,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,SAAS;CASlB"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * This file is part of Neocortex CLI, licensed under the
6
+ * Functional Source License, Version 1.1 (FSL-1.1).
7
+ *
8
+ * Change Date: February 20, 2029
9
+ * Change License: MIT
10
+ *
11
+ * See the LICENSE file in the project root for full license text.
12
+ */
13
+ /**
14
+ * @neocortex/client - EncryptedCache
15
+ *
16
+ * Filesystem-backed encrypted cache implementing the CacheProvider interface.
17
+ * Stores assets as AES-256-GCM encrypted files with PBKDF2 key derivation.
18
+ * Cache keys are hashed with SHA-256 to produce safe filenames.
19
+ *
20
+ * All public methods are designed to never throw - cache failures are
21
+ * silently handled since caching is a non-critical optimization.
22
+ */
23
+ import { mkdir, writeFile, readFile, rm, readdir } from 'node:fs/promises';
24
+ import { join } from 'node:path';
25
+ import { createHash } from 'node:crypto';
26
+ import { encrypt, decrypt } from './crypto-utils.js';
27
+ // ── Constants ────────────────────────────────────────────────────────────
28
+ const CACHE_FILE_EXTENSION = '.enc';
29
+ // ── EncryptedCache Implementation ────────────────────────────────────────
30
+ export class EncryptedCache {
31
+ cacheDir;
32
+ passphrase;
33
+ initPromise = null;
34
+ constructor(options) {
35
+ this.cacheDir = options.cacheDir;
36
+ this.passphrase = options.passphrase;
37
+ }
38
+ async get(key) {
39
+ try {
40
+ const filePath = this.keyToPath(key);
41
+ const raw = await readFile(filePath, 'utf8');
42
+ const result = decrypt(raw, this.passphrase);
43
+ if (result.expired) {
44
+ // Clean up expired entry (fire-and-forget)
45
+ rm(filePath, { force: true }).catch(() => { });
46
+ return null;
47
+ }
48
+ return result.plaintext;
49
+ }
50
+ catch {
51
+ return null;
52
+ }
53
+ }
54
+ async set(key, value, ttlMs) {
55
+ try {
56
+ await this.ensureDir();
57
+ const filePath = this.keyToPath(key);
58
+ const encrypted = encrypt(value, this.passphrase, ttlMs);
59
+ await writeFile(filePath, encrypted, 'utf8');
60
+ }
61
+ catch {
62
+ // Cache write failures are non-critical
63
+ }
64
+ }
65
+ async clear() {
66
+ try {
67
+ const entries = await readdir(this.cacheDir).catch(() => []);
68
+ const removals = entries
69
+ .filter((entry) => entry.endsWith(CACHE_FILE_EXTENSION))
70
+ .map((entry) => rm(join(this.cacheDir, entry), { force: true }).catch(() => { }));
71
+ await Promise.all(removals);
72
+ }
73
+ catch {
74
+ // Clear failures are non-critical
75
+ }
76
+ }
77
+ // ── Private Methods ─────────────────────────────────────────────────
78
+ keyToPath(key) {
79
+ const hash = createHash('sha256').update(key).digest('hex');
80
+ return join(this.cacheDir, `${hash}${CACHE_FILE_EXTENSION}`);
81
+ }
82
+ ensureDir() {
83
+ if (!this.initPromise) {
84
+ this.initPromise = mkdir(this.cacheDir, { recursive: true }).then(() => undefined).catch((err) => {
85
+ this.initPromise = null; // allow retry on next call
86
+ throw err;
87
+ });
88
+ }
89
+ return this.initPromise;
90
+ }
91
+ }
92
+ //# sourceMappingURL=encrypted-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encrypted-cache.js","sourceRoot":"","sources":["../../src/cache/encrypted-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * This file is part of Neocortex CLI, licensed under the
6
+ * Functional Source License, Version 1.1 (FSL-1.1).
7
+ *
8
+ * Change Date: February 20, 2029
9
+ * Change License: MIT
10
+ *
11
+ * See the LICENSE file in the project root for full license text.
12
+ */
13
+ export { EncryptedCache, type EncryptedCacheOptions } from './encrypted-cache.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * This file is part of Neocortex CLI, licensed under the
6
+ * Functional Source License, Version 1.1 (FSL-1.1).
7
+ *
8
+ * Change Date: February 20, 2029
9
+ * Change License: MIT
10
+ *
11
+ * See the LICENSE file in the project root for full license text.
12
+ */
13
+ export { EncryptedCache } from './encrypted-cache.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAA8B,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @license FSL-1.1
4
+ * Copyright (c) 2026 OrNexus AI
5
+ *
6
+ * This file is part of Neocortex CLI, licensed under the
7
+ * Functional Source License, Version 1.1 (FSL-1.1).
8
+ *
9
+ * Change Date: February 20, 2029
10
+ * Change License: MIT
11
+ *
12
+ * See the LICENSE file in the project root for full license text.
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,182 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @license FSL-1.1
4
+ * Copyright (c) 2026 OrNexus AI
5
+ *
6
+ * This file is part of Neocortex CLI, licensed under the
7
+ * Functional Source License, Version 1.1 (FSL-1.1).
8
+ *
9
+ * Change Date: February 20, 2029
10
+ * Change License: MIT
11
+ *
12
+ * See the LICENSE file in the project root for full license text.
13
+ */
14
+ /**
15
+ * @neocortex/client - CLI Entry Point
16
+ *
17
+ * Routes subcommands to their respective handlers:
18
+ * neocortex-client invoke --args "..."
19
+ * neocortex-client activate NX-PRO-xxx
20
+ * neocortex-client cache-status
21
+ * neocortex-client --help
22
+ * neocortex-client --version
23
+ *
24
+ * Story 46.2 - AC1-AC7
25
+ */
26
+ import { readFileSync } from 'node:fs';
27
+ import { fileURLToPath } from 'node:url';
28
+ import { dirname, join } from 'node:path';
29
+ // ── Version Resolution ─────────────────────────────────────────────────────
30
+ function getVersion() {
31
+ try {
32
+ // Walk up from dist/cli.js to find the root package.json
33
+ const thisFile = fileURLToPath(import.meta.url);
34
+ let dir = dirname(thisFile);
35
+ // Try up to 5 levels
36
+ for (let i = 0; i < 5; i++) {
37
+ try {
38
+ const pkg = JSON.parse(readFileSync(join(dir, 'package.json'), 'utf-8'));
39
+ if (pkg.name === '@ornexus/neocortex' || pkg.name === '@neocortex/client') {
40
+ return pkg.version ?? '0.0.0';
41
+ }
42
+ }
43
+ catch {
44
+ // no package.json at this level
45
+ }
46
+ dir = dirname(dir);
47
+ }
48
+ }
49
+ catch {
50
+ // fallback
51
+ }
52
+ return '0.0.0';
53
+ }
54
+ // ── Help Text ──────────────────────────────────────────────────────────────
55
+ const HELP_TEXT = `
56
+ neocortex-client - Neocortex Client CLI
57
+
58
+ Usage:
59
+ neocortex-client <command> [options]
60
+
61
+ Commands:
62
+ invoke Send orchestration request to server
63
+ activate Activate license key
64
+ cache-status Show cache and circuit breaker status
65
+
66
+ Options:
67
+ --help, -h Show this help message
68
+ --version, -v Show version number
69
+
70
+ Invoke Options:
71
+ --args <string> Raw args to send (e.g., "*yolo @docs/stories/1.1.story.md")
72
+ --project-root <path> Project root directory (default: cwd)
73
+ --format <type> Output format: json | plain (default: plain)
74
+ --server-url <url> Server URL override
75
+
76
+ Activate Options:
77
+ <license-key> License key (e.g., NX-PRO-ABC-123)
78
+ --server-url <url> Server URL override
79
+ --non-interactive Skip interactive prompts
80
+
81
+ Examples:
82
+ neocortex-client invoke --args "*status"
83
+ neocortex-client invoke --args "*yolo @docs/stories/1.1.story.md" --format json
84
+ neocortex-client activate NX-PRO-ABC-123
85
+ neocortex-client cache-status
86
+ `.trim();
87
+ // ── Main ───────────────────────────────────────────────────────────────────
88
+ async function main() {
89
+ const args = process.argv.slice(2);
90
+ const command = args[0];
91
+ if (!command || command === '--help' || command === '-h') {
92
+ console.log(HELP_TEXT);
93
+ process.exit(0);
94
+ }
95
+ if (command === '--version' || command === '-v') {
96
+ console.log(getVersion());
97
+ process.exit(0);
98
+ }
99
+ const subArgs = args.slice(1);
100
+ switch (command) {
101
+ case 'invoke': {
102
+ const { invokeCliHandler } = await import('./commands/invoke.js');
103
+ const exitCode = await invokeCliHandler(subArgs);
104
+ process.exit(exitCode);
105
+ break;
106
+ }
107
+ case 'activate': {
108
+ const { activate } = await import('./commands/activate.js');
109
+ // Parse activate args
110
+ let licenseKey;
111
+ let serverUrl;
112
+ let nonInteractive = false;
113
+ for (let i = 0; i < subArgs.length; i++) {
114
+ const arg = subArgs[i];
115
+ if (arg === '--server-url') {
116
+ serverUrl = subArgs[++i];
117
+ }
118
+ else if (arg === '--non-interactive') {
119
+ nonInteractive = true;
120
+ }
121
+ else if (arg === '--help' || arg === '-h') {
122
+ console.log(HELP_TEXT);
123
+ process.exit(0);
124
+ }
125
+ else if (!arg.startsWith('-')) {
126
+ licenseKey = arg;
127
+ }
128
+ }
129
+ if (!licenseKey) {
130
+ console.error('Error: License key is required.');
131
+ console.error('Usage: neocortex-client activate <license-key>');
132
+ console.error('Example: neocortex-client activate NX-PRO-ABC-123');
133
+ process.exit(1);
134
+ }
135
+ try {
136
+ const result = await activate({
137
+ licenseKey,
138
+ serverUrl,
139
+ nonInteractive,
140
+ });
141
+ if (result.success) {
142
+ console.log(result.message);
143
+ if (result.tier) {
144
+ console.log(`Tier: ${result.tier}`);
145
+ }
146
+ if (result.configPath) {
147
+ console.log(`Config: ${result.configPath}`);
148
+ }
149
+ process.exit(0);
150
+ }
151
+ else {
152
+ console.error(result.message);
153
+ process.exit(1);
154
+ }
155
+ }
156
+ catch (err) {
157
+ const message = err instanceof Error ? err.message : String(err);
158
+ console.error(`Activation failed: ${message}`);
159
+ process.exit(1);
160
+ }
161
+ break;
162
+ }
163
+ case 'cache-status': {
164
+ // cache-status requires initialized circuit breaker and telemetry queue.
165
+ // For CLI use, we provide a simplified status report.
166
+ console.log('Cache status requires an active client session.');
167
+ console.log('Use this command within a running Neocortex client context.');
168
+ process.exit(0);
169
+ break;
170
+ }
171
+ default: {
172
+ console.error(`Unknown command: ${command}`);
173
+ console.error('Run "neocortex-client --help" for usage information.');
174
+ process.exit(1);
175
+ }
176
+ }
177
+ }
178
+ main().catch((err) => {
179
+ console.error(`Fatal error: ${err instanceof Error ? err.message : String(err)}`);
180
+ process.exit(1);
181
+ });
182
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * This file is part of Neocortex CLI, licensed under the
6
+ * Functional Source License, Version 1.1 (FSL-1.1).
7
+ *
8
+ * Change Date: February 20, 2029
9
+ * Change License: MIT
10
+ *
11
+ * See the LICENSE file in the project root for full license text.
12
+ */
13
+ export interface ActivateOptions {
14
+ /** License key to activate (e.g., NX-PRO-ABC-123) */
15
+ readonly licenseKey?: string;
16
+ /** Server URL override (default: production server) */
17
+ readonly serverUrl?: string;
18
+ /** Skip interactive prompt */
19
+ readonly nonInteractive?: boolean;
20
+ }
21
+ export interface ActivateResult {
22
+ readonly success: boolean;
23
+ readonly message: string;
24
+ readonly tier?: string;
25
+ readonly serverUrl?: string;
26
+ readonly configPath?: string;
27
+ }
28
+ /**
29
+ * Validate license key format.
30
+ * Format: NX-{TIER}-{random}-{random}
31
+ * Tiers: FREE, PRO, ENT
32
+ */
33
+ export declare function validateLicenseKeyFormat(key: string): {
34
+ valid: boolean;
35
+ error?: string;
36
+ };
37
+ /**
38
+ * Activate a Neocortex license.
39
+ *
40
+ * Flow:
41
+ * 1. Validate license key format
42
+ * 2. Call IP Protection Server to activate
43
+ * 3. Cache JWT token via LicenseClient
44
+ * 4. Create/update ~/.neocortex/config.json
45
+ * 5. Return result with feedback
46
+ */
47
+ export declare function activate(options: ActivateOptions): Promise<ActivateResult>;
48
+ //# sourceMappingURL=activate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activate.d.ts","sourceRoot":"","sources":["../../src/commands/activate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA8BH,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,uDAAuD;IACvD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,8BAA8B;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAYD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAmBxF;AA8BD;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAuGhF"}