@ornexus/neocortex 3.9.21 → 3.9.22
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/install.ps1 +1 -1
- package/install.sh +10 -1
- package/package.json +4 -2
- package/packages/client/dist/commands/activate.js +23 -2
- package/packages/client/dist/commands/invoke.js +46 -22
- package/packages/client/dist/config/secure-config.d.ts +69 -0
- package/packages/client/dist/config/secure-config.js +179 -0
- package/targets-stubs/antigravity/gemini.md +1 -1
- package/targets-stubs/antigravity/skill/SKILL.md +1 -1
- package/targets-stubs/claude-code/neocortex.agent.yaml +1 -1
- package/targets-stubs/claude-code/neocortex.md +2 -2
- package/targets-stubs/codex/agents.md +1 -1
- package/targets-stubs/cursor/agent.md +2 -2
- package/targets-stubs/gemini-cli/agent.md +2 -2
- package/targets-stubs/vscode/agent.md +2 -2
- package/packages/client/dist/adapters/adapter-registry.d.ts.map +0 -1
- package/packages/client/dist/adapters/adapter-registry.js.map +0 -1
- package/packages/client/dist/adapters/antigravity-adapter.d.ts.map +0 -1
- package/packages/client/dist/adapters/antigravity-adapter.js.map +0 -1
- package/packages/client/dist/adapters/claude-code-adapter.d.ts.map +0 -1
- package/packages/client/dist/adapters/claude-code-adapter.js.map +0 -1
- package/packages/client/dist/adapters/codex-adapter.d.ts.map +0 -1
- package/packages/client/dist/adapters/codex-adapter.js.map +0 -1
- package/packages/client/dist/adapters/cursor-adapter.d.ts.map +0 -1
- package/packages/client/dist/adapters/cursor-adapter.js.map +0 -1
- package/packages/client/dist/adapters/gemini-adapter.d.ts.map +0 -1
- package/packages/client/dist/adapters/gemini-adapter.js.map +0 -1
- package/packages/client/dist/adapters/index.d.ts.map +0 -1
- package/packages/client/dist/adapters/index.js.map +0 -1
- package/packages/client/dist/adapters/platform-detector.d.ts.map +0 -1
- package/packages/client/dist/adapters/platform-detector.js.map +0 -1
- package/packages/client/dist/adapters/target-adapter.d.ts.map +0 -1
- package/packages/client/dist/adapters/target-adapter.js.map +0 -1
- package/packages/client/dist/adapters/vscode-adapter.d.ts.map +0 -1
- package/packages/client/dist/adapters/vscode-adapter.js.map +0 -1
- package/packages/client/dist/agent/refresh-stubs.d.ts.map +0 -1
- package/packages/client/dist/agent/refresh-stubs.js.map +0 -1
- package/packages/client/dist/agent/update-agent-yaml.d.ts.map +0 -1
- package/packages/client/dist/agent/update-agent-yaml.js.map +0 -1
- package/packages/client/dist/agent/update-description.d.ts.map +0 -1
- package/packages/client/dist/agent/update-description.js.map +0 -1
- package/packages/client/dist/cache/crypto-utils.d.ts.map +0 -1
- package/packages/client/dist/cache/crypto-utils.js.map +0 -1
- package/packages/client/dist/cache/encrypted-cache.d.ts.map +0 -1
- package/packages/client/dist/cache/encrypted-cache.js.map +0 -1
- package/packages/client/dist/cache/index.d.ts.map +0 -1
- package/packages/client/dist/cache/index.js.map +0 -1
- package/packages/client/dist/cli.d.ts.map +0 -1
- package/packages/client/dist/cli.js.map +0 -1
- package/packages/client/dist/commands/activate.d.ts.map +0 -1
- package/packages/client/dist/commands/activate.js.map +0 -1
- package/packages/client/dist/commands/cache-status.d.ts.map +0 -1
- package/packages/client/dist/commands/cache-status.js.map +0 -1
- package/packages/client/dist/commands/invoke.d.ts.map +0 -1
- package/packages/client/dist/commands/invoke.js.map +0 -1
- package/packages/client/dist/config/resolver-selection.d.ts.map +0 -1
- package/packages/client/dist/config/resolver-selection.js.map +0 -1
- package/packages/client/dist/context/context-collector.d.ts.map +0 -1
- package/packages/client/dist/context/context-collector.js.map +0 -1
- package/packages/client/dist/context/context-sanitizer.d.ts.map +0 -1
- package/packages/client/dist/context/context-sanitizer.js.map +0 -1
- package/packages/client/dist/index.d.ts.map +0 -1
- package/packages/client/dist/index.js.map +0 -1
- package/packages/client/dist/license/index.d.ts.map +0 -1
- package/packages/client/dist/license/index.js.map +0 -1
- package/packages/client/dist/license/license-client.d.ts.map +0 -1
- package/packages/client/dist/license/license-client.js.map +0 -1
- package/packages/client/dist/machine/fingerprint.d.ts.map +0 -1
- package/packages/client/dist/machine/fingerprint.js.map +0 -1
- package/packages/client/dist/machine/index.d.ts.map +0 -1
- package/packages/client/dist/machine/index.js.map +0 -1
- package/packages/client/dist/resilience/circuit-breaker.d.ts.map +0 -1
- package/packages/client/dist/resilience/circuit-breaker.js.map +0 -1
- package/packages/client/dist/resilience/degradation-manager.d.ts.map +0 -1
- package/packages/client/dist/resilience/degradation-manager.js.map +0 -1
- package/packages/client/dist/resilience/freshness-indicator.d.ts.map +0 -1
- package/packages/client/dist/resilience/freshness-indicator.js.map +0 -1
- package/packages/client/dist/resilience/index.d.ts.map +0 -1
- package/packages/client/dist/resilience/index.js.map +0 -1
- package/packages/client/dist/resilience/recovery-detector.d.ts.map +0 -1
- package/packages/client/dist/resilience/recovery-detector.js.map +0 -1
- package/packages/client/dist/resolvers/asset-resolver.d.ts.map +0 -1
- package/packages/client/dist/resolvers/asset-resolver.js.map +0 -1
- package/packages/client/dist/resolvers/local-resolver.d.ts.map +0 -1
- package/packages/client/dist/resolvers/local-resolver.js.map +0 -1
- package/packages/client/dist/resolvers/remote-resolver.d.ts.map +0 -1
- package/packages/client/dist/resolvers/remote-resolver.js.map +0 -1
- package/packages/client/dist/telemetry/index.d.ts.map +0 -1
- package/packages/client/dist/telemetry/index.js.map +0 -1
- package/packages/client/dist/telemetry/offline-queue.d.ts.map +0 -1
- package/packages/client/dist/telemetry/offline-queue.js.map +0 -1
- package/packages/client/dist/tier/index.d.ts.map +0 -1
- package/packages/client/dist/tier/index.js.map +0 -1
- package/packages/client/dist/tier/tier-aware-client.d.ts.map +0 -1
- package/packages/client/dist/tier/tier-aware-client.js.map +0 -1
- package/packages/client/dist/types/index.d.ts.map +0 -1
- package/packages/client/dist/types/index.js.map +0 -1
package/install.ps1
CHANGED
package/install.sh
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# Development Orchestrator
|
|
5
5
|
|
|
6
6
|
# Versao do instalador
|
|
7
|
-
VERSION="3.9.
|
|
7
|
+
VERSION="3.9.22"
|
|
8
8
|
|
|
9
9
|
# Flags
|
|
10
10
|
MIGRATION_DETECTED=false
|
|
@@ -569,12 +569,18 @@ setup_thin_client_config() {
|
|
|
569
569
|
mkdir -p "$config_dir" 2>/dev/null
|
|
570
570
|
mkdir -p "$config_dir/cache" 2>/dev/null
|
|
571
571
|
|
|
572
|
+
# Story 61.4 - F4 remediation: restrictive permissions
|
|
573
|
+
chmod 700 "$config_dir" 2>/dev/null
|
|
574
|
+
chmod 700 "$config_dir/cache" 2>/dev/null
|
|
575
|
+
|
|
572
576
|
if [ -f "$config_file" ]; then
|
|
573
577
|
# Preservar config existente, atualizar apenas serverUrl se necessario
|
|
574
578
|
local existing_mode
|
|
575
579
|
existing_mode=$(grep '"mode"' "$config_file" 2>/dev/null | head -1 | sed 's/.*"mode"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/')
|
|
576
580
|
|
|
577
581
|
if [ "$existing_mode" = "active" ] || [ "$existing_mode" = "local" ] || [ "$existing_mode" = "remote" ]; then
|
|
582
|
+
# Story 61.4 - ensure permissions are always enforced even on existing configs
|
|
583
|
+
chmod 600 "$config_file" 2>/dev/null
|
|
578
584
|
debug "Config existente preservada (mode=$existing_mode)"
|
|
579
585
|
return 0
|
|
580
586
|
fi
|
|
@@ -602,6 +608,9 @@ setup_thin_client_config() {
|
|
|
602
608
|
}
|
|
603
609
|
EOFCONFIG
|
|
604
610
|
|
|
611
|
+
# Story 61.4 - F4 remediation: config file readable only by owner
|
|
612
|
+
chmod 600 "$config_file" 2>/dev/null
|
|
613
|
+
|
|
605
614
|
debug "Thin client config criada: $config_file"
|
|
606
615
|
}
|
|
607
616
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ornexus/neocortex",
|
|
3
|
-
"version": "3.9.
|
|
4
|
-
"description": "Neocortex v3.9.
|
|
3
|
+
"version": "3.9.22",
|
|
4
|
+
"description": "Neocortex v3.9.22 - Orquestrador de Desenvolvimento de Epics & Stories para Claude Code",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude",
|
|
7
7
|
"claude-code",
|
|
@@ -53,6 +53,8 @@
|
|
|
53
53
|
"install.sh",
|
|
54
54
|
"install.ps1",
|
|
55
55
|
"packages/client/dist/",
|
|
56
|
+
"!packages/client/dist/**/*.js.map",
|
|
57
|
+
"!packages/client/dist/**/*.d.ts.map",
|
|
56
58
|
"targets-stubs/"
|
|
57
59
|
],
|
|
58
60
|
"scripts": {
|
|
@@ -29,6 +29,7 @@ import { getMachineFingerprint } from '../machine/fingerprint.js';
|
|
|
29
29
|
import { updateAgentDescription } from '../agent/update-description.js';
|
|
30
30
|
import { refreshStubs } from '../agent/refresh-stubs.js';
|
|
31
31
|
import { updateAgentYaml } from '../agent/update-agent-yaml.js';
|
|
32
|
+
import { saveSecureConfig, setSecureDirPermissions } from '../config/secure-config.js';
|
|
32
33
|
// ── Version Resolution ────────────────────────────────────────────────────
|
|
33
34
|
function getInstalledVersion() {
|
|
34
35
|
try {
|
|
@@ -94,11 +95,31 @@ function loadExistingConfig() {
|
|
|
94
95
|
}
|
|
95
96
|
/**
|
|
96
97
|
* Save user config after successful activation.
|
|
97
|
-
* License key is
|
|
98
|
+
* License key is encrypted using machine fingerprint (Story 61.2).
|
|
99
|
+
* File permissions set to 600 (Story 61.4).
|
|
98
100
|
*/
|
|
99
101
|
function saveConfig(config) {
|
|
102
|
+
// Ensure directories exist with secure permissions
|
|
100
103
|
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
101
|
-
|
|
104
|
+
setSecureDirPermissions(CONFIG_DIR);
|
|
105
|
+
const cacheDir = join(CONFIG_DIR, 'cache');
|
|
106
|
+
mkdirSync(cacheDir, { recursive: true });
|
|
107
|
+
setSecureDirPermissions(cacheDir);
|
|
108
|
+
if (config.licenseKey) {
|
|
109
|
+
// Use secure config writer which encrypts the license key
|
|
110
|
+
saveSecureConfig({
|
|
111
|
+
serverUrl: config.serverUrl,
|
|
112
|
+
mode: config.mode,
|
|
113
|
+
machineId: config.machineId,
|
|
114
|
+
activatedAt: config.activatedAt,
|
|
115
|
+
tier: config.tier,
|
|
116
|
+
licenseKey: config.licenseKey,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// Fallback: write without license key (should not happen in normal flow)
|
|
121
|
+
writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
122
|
+
}
|
|
102
123
|
}
|
|
103
124
|
// ── Activate Command ──────────────────────────────────────────────────────
|
|
104
125
|
/**
|
|
@@ -19,17 +19,17 @@
|
|
|
19
19
|
*
|
|
20
20
|
* Story 45.2 - AC1-AC6
|
|
21
21
|
*/
|
|
22
|
-
import { existsSync, readFileSync,
|
|
22
|
+
import { existsSync, readFileSync, unlinkSync } from 'node:fs';
|
|
23
23
|
import { join } from 'node:path';
|
|
24
24
|
import { homedir } from 'node:os';
|
|
25
25
|
import { LicenseClient } from '../license/license-client.js';
|
|
26
26
|
import { EncryptedCache } from '../cache/encrypted-cache.js';
|
|
27
27
|
import { NoOpCache } from '../types/index.js';
|
|
28
28
|
import { TierAwareClient } from '../tier/tier-aware-client.js';
|
|
29
|
+
import { loadSecureConfig } from '../config/secure-config.js';
|
|
29
30
|
// ── Constants ─────────────────────────────────────────────────────────────
|
|
30
31
|
const DEFAULT_SERVER_URL = 'https://api.neocortex.ornexus.com';
|
|
31
32
|
const CONFIG_DIR = join(homedir(), '.neocortex');
|
|
32
|
-
const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
|
|
33
33
|
const CACHE_DIR = join(CONFIG_DIR, 'cache');
|
|
34
34
|
const MENU_CACHE_FILE = join(CACHE_DIR, 'menu-cache.json');
|
|
35
35
|
const MENU_CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
@@ -115,18 +115,24 @@ export function collectStateSnapshot(projectRoot) {
|
|
|
115
115
|
epics,
|
|
116
116
|
};
|
|
117
117
|
}
|
|
118
|
-
// ── Menu Cache
|
|
119
|
-
|
|
118
|
+
// ── Menu Cache (Encrypted - Story 61.1) ──────────────────────────────────
|
|
119
|
+
const MENU_CACHE_KEY = 'neocortex:menu:cache';
|
|
120
|
+
/**
|
|
121
|
+
* Read menu cache from EncryptedCache.
|
|
122
|
+
* Falls back gracefully: if decryption fails or data is stale, returns null.
|
|
123
|
+
* Also cleans up legacy plaintext menu-cache.json if it exists.
|
|
124
|
+
*/
|
|
125
|
+
async function getMenuCache(encryptedCache) {
|
|
120
126
|
try {
|
|
121
|
-
|
|
127
|
+
const raw = await encryptedCache.get(MENU_CACHE_KEY);
|
|
128
|
+
if (!raw)
|
|
122
129
|
return null;
|
|
123
|
-
const raw = readFileSync(MENU_CACHE_FILE, 'utf-8');
|
|
124
130
|
const cache = JSON.parse(raw);
|
|
125
131
|
// Invalidate on version mismatch (stale cache from previous install)
|
|
126
132
|
if (cache.version !== CLIENT_VERSION) {
|
|
127
133
|
return null;
|
|
128
134
|
}
|
|
129
|
-
// Check TTL
|
|
135
|
+
// Check TTL (EncryptedCache also has TTL, but we double-check for version-based invalidation)
|
|
130
136
|
if (Date.now() - cache.cachedAt > MENU_CACHE_TTL_MS) {
|
|
131
137
|
return null; // Expired
|
|
132
138
|
}
|
|
@@ -136,33 +142,47 @@ function getMenuCache() {
|
|
|
136
142
|
return null;
|
|
137
143
|
}
|
|
138
144
|
}
|
|
139
|
-
|
|
145
|
+
/**
|
|
146
|
+
* Write menu cache to EncryptedCache.
|
|
147
|
+
* Deletes legacy plaintext menu-cache.json on first encrypted write.
|
|
148
|
+
*/
|
|
149
|
+
async function setMenuCache(encryptedCache, instructions, metadata) {
|
|
140
150
|
try {
|
|
141
|
-
mkdirSync(CACHE_DIR, { recursive: true });
|
|
142
151
|
const cache = {
|
|
143
152
|
instructions,
|
|
144
153
|
metadata,
|
|
145
154
|
cachedAt: Date.now(),
|
|
146
155
|
version: CLIENT_VERSION,
|
|
147
156
|
};
|
|
148
|
-
|
|
157
|
+
await encryptedCache.set(MENU_CACHE_KEY, JSON.stringify(cache), MENU_CACHE_TTL_MS);
|
|
158
|
+
// Delete legacy plaintext menu-cache.json if it exists (F1 remediation)
|
|
159
|
+
deleteLegacyMenuCache();
|
|
149
160
|
}
|
|
150
161
|
catch {
|
|
151
162
|
// Cache write failure is non-critical
|
|
152
163
|
}
|
|
153
164
|
}
|
|
154
|
-
|
|
155
|
-
|
|
165
|
+
/**
|
|
166
|
+
* Remove legacy plaintext menu-cache.json file.
|
|
167
|
+
* Called after successful encrypted write to prevent IP leakage.
|
|
168
|
+
*/
|
|
169
|
+
function deleteLegacyMenuCache() {
|
|
156
170
|
try {
|
|
157
|
-
if (existsSync(
|
|
158
|
-
|
|
159
|
-
return JSON.parse(raw);
|
|
171
|
+
if (existsSync(MENU_CACHE_FILE)) {
|
|
172
|
+
unlinkSync(MENU_CACHE_FILE);
|
|
160
173
|
}
|
|
161
174
|
}
|
|
162
175
|
catch {
|
|
163
|
-
//
|
|
176
|
+
// Non-critical: best-effort cleanup
|
|
164
177
|
}
|
|
165
|
-
|
|
178
|
+
}
|
|
179
|
+
// ── Config Loading (Story 61.2 - Secure) ─────────────────────────────────
|
|
180
|
+
/**
|
|
181
|
+
* Load config with automatic decryption of license key.
|
|
182
|
+
* Handles migration from plaintext licenseKey to encryptedLicenseKey.
|
|
183
|
+
*/
|
|
184
|
+
function loadConfig() {
|
|
185
|
+
return loadSecureConfig();
|
|
166
186
|
}
|
|
167
187
|
async function getAuthTokenAndClient(serverUrl, licenseKey) {
|
|
168
188
|
try {
|
|
@@ -262,10 +282,14 @@ export async function invoke(options) {
|
|
|
262
282
|
const serverUrl = (options.serverUrl ?? config?.serverUrl ?? DEFAULT_SERVER_URL).replace(/\/+$/, '');
|
|
263
283
|
// 2. Collect state snapshot
|
|
264
284
|
const stateSnapshot = collectStateSnapshot(projectRoot);
|
|
285
|
+
// 2a. Create encrypted cache for menu (uses licenseKey as passphrase)
|
|
286
|
+
const menuCache = config?.licenseKey
|
|
287
|
+
? new EncryptedCache({ cacheDir: CACHE_DIR, passphrase: config.licenseKey })
|
|
288
|
+
: null;
|
|
265
289
|
// 3. Check menu cache for empty invocations (AC6)
|
|
266
290
|
const trimmedArgs = options.args.trim();
|
|
267
|
-
if (!trimmedArgs) {
|
|
268
|
-
const cachedMenu = getMenuCache();
|
|
291
|
+
if (!trimmedArgs && menuCache) {
|
|
292
|
+
const cachedMenu = await getMenuCache(menuCache);
|
|
269
293
|
if (cachedMenu) {
|
|
270
294
|
return {
|
|
271
295
|
success: true,
|
|
@@ -331,9 +355,9 @@ export async function invoke(options) {
|
|
|
331
355
|
exitCode,
|
|
332
356
|
};
|
|
333
357
|
}
|
|
334
|
-
// 6. Cache menu responses (AC6)
|
|
335
|
-
if (!trimmedArgs && result.data.metadata?.mode === 'menu') {
|
|
336
|
-
setMenuCache(result.data.instructions, result.data.metadata);
|
|
358
|
+
// 6. Cache menu responses (AC6) - encrypted (Story 61.1)
|
|
359
|
+
if (!trimmedArgs && result.data.metadata?.mode === 'menu' && menuCache) {
|
|
360
|
+
setMenuCache(menuCache, result.data.instructions, result.data.metadata).catch(() => { });
|
|
337
361
|
}
|
|
338
362
|
// 6a. Update cached quota from server response metadata (Epic 60)
|
|
339
363
|
if (result.data.metadata) {
|
|
@@ -0,0 +1,69 @@
|
|
|
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
|
+
/** Resolved config with decrypted license key */
|
|
14
|
+
export interface SecureConfig {
|
|
15
|
+
readonly serverUrl?: string;
|
|
16
|
+
readonly mode?: string;
|
|
17
|
+
readonly machineId?: string;
|
|
18
|
+
readonly activatedAt?: string;
|
|
19
|
+
readonly tier?: string;
|
|
20
|
+
readonly licenseKey?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Encrypt a license key using the machine fingerprint as passphrase.
|
|
24
|
+
* Returns the encrypted envelope string.
|
|
25
|
+
*/
|
|
26
|
+
export declare function encryptLicenseKey(licenseKey: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Decrypt a license key using the machine fingerprint as passphrase.
|
|
29
|
+
* Returns the plaintext key or null if decryption fails (hardware changed).
|
|
30
|
+
*/
|
|
31
|
+
export declare function decryptLicenseKey(encryptedKey: string): string | null;
|
|
32
|
+
/**
|
|
33
|
+
* Set restrictive file permissions (600) on config files.
|
|
34
|
+
* Skipped on Windows where chmod is not meaningful.
|
|
35
|
+
* Story 61.4 - F4 remediation.
|
|
36
|
+
*/
|
|
37
|
+
export declare function setSecureFilePermissions(filePath: string): void;
|
|
38
|
+
/**
|
|
39
|
+
* Set restrictive directory permissions (700) on config directories.
|
|
40
|
+
* Skipped on Windows where chmod is not meaningful.
|
|
41
|
+
* Story 61.4 - F4 remediation.
|
|
42
|
+
*/
|
|
43
|
+
export declare function setSecureDirPermissions(dirPath: string): void;
|
|
44
|
+
/**
|
|
45
|
+
* Load config from ~/.neocortex/config.json with automatic migration.
|
|
46
|
+
*
|
|
47
|
+
* If the config contains a plaintext `licenseKey` (old format), it is:
|
|
48
|
+
* 1. Encrypted using machine fingerprint
|
|
49
|
+
* 2. Stored as `encryptedLicenseKey`
|
|
50
|
+
* 3. Old `licenseKey` field removed
|
|
51
|
+
* 4. Config rewritten to disk
|
|
52
|
+
*
|
|
53
|
+
* If decryption of `encryptedLicenseKey` fails (hardware change),
|
|
54
|
+
* returns config with licenseKey = undefined.
|
|
55
|
+
*/
|
|
56
|
+
export declare function loadSecureConfig(): SecureConfig | null;
|
|
57
|
+
/**
|
|
58
|
+
* Save config after activation with encrypted license key.
|
|
59
|
+
* This is the primary write path called from activate.ts.
|
|
60
|
+
*/
|
|
61
|
+
export declare function saveSecureConfig(config: {
|
|
62
|
+
serverUrl: string;
|
|
63
|
+
mode: string;
|
|
64
|
+
machineId: string;
|
|
65
|
+
activatedAt: string;
|
|
66
|
+
tier?: string;
|
|
67
|
+
licenseKey: string;
|
|
68
|
+
}): void;
|
|
69
|
+
//# sourceMappingURL=secure-config.d.ts.map
|
|
@@ -0,0 +1,179 @@
|
|
|
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 - Secure Config
|
|
15
|
+
*
|
|
16
|
+
* Handles reading and writing config.json with encrypted license key.
|
|
17
|
+
* Uses machine fingerprint as encryption seed so the key is bound
|
|
18
|
+
* to the physical machine.
|
|
19
|
+
*
|
|
20
|
+
* Story 61.2 - F2 remediation: license key no longer stored in plaintext.
|
|
21
|
+
*
|
|
22
|
+
* Migration: if config has plaintext `licenseKey`, it is silently
|
|
23
|
+
* migrated to `encryptedLicenseKey` on first read.
|
|
24
|
+
*
|
|
25
|
+
* If decryption fails (e.g. hardware change), returns null for
|
|
26
|
+
* licenseKey, requiring re-activation.
|
|
27
|
+
*/
|
|
28
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, chmodSync } from 'node:fs';
|
|
29
|
+
import { join } from 'node:path';
|
|
30
|
+
import { homedir } from 'node:os';
|
|
31
|
+
import { encrypt, decrypt } from '../cache/crypto-utils.js';
|
|
32
|
+
import { getMachineFingerprint } from '../machine/fingerprint.js';
|
|
33
|
+
// ── Constants ────────────────────────────────────────────────────────────
|
|
34
|
+
const CONFIG_DIR = join(homedir(), '.neocortex');
|
|
35
|
+
const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
|
|
36
|
+
// ── License Key Encryption ──────────────────────────────────────────────
|
|
37
|
+
/**
|
|
38
|
+
* Encrypt a license key using the machine fingerprint as passphrase.
|
|
39
|
+
* Returns the encrypted envelope string.
|
|
40
|
+
*/
|
|
41
|
+
export function encryptLicenseKey(licenseKey) {
|
|
42
|
+
const fingerprint = getMachineFingerprint();
|
|
43
|
+
return encrypt(licenseKey, fingerprint);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Decrypt a license key using the machine fingerprint as passphrase.
|
|
47
|
+
* Returns the plaintext key or null if decryption fails (hardware changed).
|
|
48
|
+
*/
|
|
49
|
+
export function decryptLicenseKey(encryptedKey) {
|
|
50
|
+
try {
|
|
51
|
+
const fingerprint = getMachineFingerprint();
|
|
52
|
+
const result = decrypt(encryptedKey, fingerprint);
|
|
53
|
+
// expired flag is not relevant for license keys (no TTL)
|
|
54
|
+
return result.plaintext;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// ── Secure File Permissions ─────────────────────────────────────────────
|
|
61
|
+
/**
|
|
62
|
+
* Set restrictive file permissions (600) on config files.
|
|
63
|
+
* Skipped on Windows where chmod is not meaningful.
|
|
64
|
+
* Story 61.4 - F4 remediation.
|
|
65
|
+
*/
|
|
66
|
+
export function setSecureFilePermissions(filePath) {
|
|
67
|
+
if (process.platform === 'win32')
|
|
68
|
+
return;
|
|
69
|
+
try {
|
|
70
|
+
chmodSync(filePath, 0o600);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Non-critical: best-effort
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Set restrictive directory permissions (700) on config directories.
|
|
78
|
+
* Skipped on Windows where chmod is not meaningful.
|
|
79
|
+
* Story 61.4 - F4 remediation.
|
|
80
|
+
*/
|
|
81
|
+
export function setSecureDirPermissions(dirPath) {
|
|
82
|
+
if (process.platform === 'win32')
|
|
83
|
+
return;
|
|
84
|
+
try {
|
|
85
|
+
chmodSync(dirPath, 0o700);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// Non-critical: best-effort
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// ── Config Read/Write ───────────────────────────────────────────────────
|
|
92
|
+
/**
|
|
93
|
+
* Load config from ~/.neocortex/config.json with automatic migration.
|
|
94
|
+
*
|
|
95
|
+
* If the config contains a plaintext `licenseKey` (old format), it is:
|
|
96
|
+
* 1. Encrypted using machine fingerprint
|
|
97
|
+
* 2. Stored as `encryptedLicenseKey`
|
|
98
|
+
* 3. Old `licenseKey` field removed
|
|
99
|
+
* 4. Config rewritten to disk
|
|
100
|
+
*
|
|
101
|
+
* If decryption of `encryptedLicenseKey` fails (hardware change),
|
|
102
|
+
* returns config with licenseKey = undefined.
|
|
103
|
+
*/
|
|
104
|
+
export function loadSecureConfig() {
|
|
105
|
+
try {
|
|
106
|
+
if (!existsSync(CONFIG_FILE))
|
|
107
|
+
return null;
|
|
108
|
+
const raw = readFileSync(CONFIG_FILE, 'utf-8');
|
|
109
|
+
const config = JSON.parse(raw);
|
|
110
|
+
// Migration path: plaintext licenseKey -> encrypted
|
|
111
|
+
if (config.licenseKey && !config.encryptedLicenseKey) {
|
|
112
|
+
const encrypted = encryptLicenseKey(config.licenseKey);
|
|
113
|
+
const migratedConfig = { ...config };
|
|
114
|
+
const plainKey = migratedConfig.licenseKey;
|
|
115
|
+
delete migratedConfig.licenseKey;
|
|
116
|
+
migratedConfig.encryptedLicenseKey = encrypted;
|
|
117
|
+
writeSecureConfig(migratedConfig);
|
|
118
|
+
return {
|
|
119
|
+
serverUrl: config.serverUrl,
|
|
120
|
+
mode: config.mode,
|
|
121
|
+
machineId: config.machineId,
|
|
122
|
+
activatedAt: config.activatedAt,
|
|
123
|
+
tier: config.tier,
|
|
124
|
+
licenseKey: plainKey,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
// Decrypt encrypted license key
|
|
128
|
+
let licenseKey;
|
|
129
|
+
if (config.encryptedLicenseKey) {
|
|
130
|
+
const decrypted = decryptLicenseKey(config.encryptedLicenseKey);
|
|
131
|
+
if (decrypted) {
|
|
132
|
+
licenseKey = decrypted;
|
|
133
|
+
}
|
|
134
|
+
// If decryption fails, licenseKey remains undefined -> requires re-activation
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
serverUrl: config.serverUrl,
|
|
138
|
+
mode: config.mode,
|
|
139
|
+
machineId: config.machineId,
|
|
140
|
+
activatedAt: config.activatedAt,
|
|
141
|
+
tier: config.tier,
|
|
142
|
+
licenseKey,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Write config to disk with encrypted license key and secure permissions.
|
|
151
|
+
* The licenseKey field should already be encrypted as encryptedLicenseKey.
|
|
152
|
+
*/
|
|
153
|
+
function writeSecureConfig(config) {
|
|
154
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
155
|
+
setSecureDirPermissions(CONFIG_DIR);
|
|
156
|
+
const cacheDir = join(CONFIG_DIR, 'cache');
|
|
157
|
+
if (existsSync(cacheDir)) {
|
|
158
|
+
setSecureDirPermissions(cacheDir);
|
|
159
|
+
}
|
|
160
|
+
writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
161
|
+
setSecureFilePermissions(CONFIG_FILE);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Save config after activation with encrypted license key.
|
|
165
|
+
* This is the primary write path called from activate.ts.
|
|
166
|
+
*/
|
|
167
|
+
export function saveSecureConfig(config) {
|
|
168
|
+
const encrypted = encryptLicenseKey(config.licenseKey);
|
|
169
|
+
const diskConfig = {
|
|
170
|
+
serverUrl: config.serverUrl,
|
|
171
|
+
mode: config.mode,
|
|
172
|
+
machineId: config.machineId,
|
|
173
|
+
activatedAt: config.activatedAt,
|
|
174
|
+
tier: config.tier,
|
|
175
|
+
encryptedLicenseKey: encrypted,
|
|
176
|
+
};
|
|
177
|
+
writeSecureConfig(diskConfig);
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=secure-config.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: neocortex
|
|
3
|
-
description: "🧠 Neocortex v3.9.
|
|
3
|
+
description: "🧠 Neocortex v3.9.22 (Free) | OrNexus Team"
|
|
4
4
|
model: opus
|
|
5
5
|
color: blue
|
|
6
6
|
tools:
|
|
@@ -56,7 +56,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
|
|
|
56
56
|
┌────────────────────────────────────────────────────────────┐
|
|
57
57
|
│ │
|
|
58
58
|
│ ####### N E O C O R T E X │
|
|
59
|
-
│ ### ######## v3.9.
|
|
59
|
+
│ ### ######## v3.9.22 │
|
|
60
60
|
│ ######### ##### │
|
|
61
61
|
│ ## ############## Development Orchestrator │
|
|
62
62
|
│ ## ### ###### ## OrNexus Team (Free) │
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: neocortex
|
|
3
|
-
description: "🧠 Neocortex v3.9.
|
|
3
|
+
description: "🧠 Neocortex v3.9.22 (Free) | OrNexus Team"
|
|
4
4
|
model: fast
|
|
5
5
|
readonly: false
|
|
6
6
|
is_background: false
|
|
@@ -18,7 +18,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
|
|
|
18
18
|
┌────────────────────────────────────────────────────────────┐
|
|
19
19
|
│ │
|
|
20
20
|
│ ####### N E O C O R T E X │
|
|
21
|
-
│ ### ######## v3.9.
|
|
21
|
+
│ ### ######## v3.9.22 │
|
|
22
22
|
│ ######### ##### │
|
|
23
23
|
│ ## ############## Development Orchestrator │
|
|
24
24
|
│ ## ### ###### ## OrNexus Team (Free) │
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: neocortex
|
|
3
|
-
description: "🧠 Neocortex v3.9.
|
|
3
|
+
description: "🧠 Neocortex v3.9.22 (Free) | OrNexus Team"
|
|
4
4
|
kind: local
|
|
5
5
|
tools:
|
|
6
6
|
- read_file
|
|
@@ -25,7 +25,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
|
|
|
25
25
|
┌────────────────────────────────────────────────────────────┐
|
|
26
26
|
│ │
|
|
27
27
|
│ ####### N E O C O R T E X │
|
|
28
|
-
│ ### ######## v3.9.
|
|
28
|
+
│ ### ######## v3.9.22 │
|
|
29
29
|
│ ######### ##### │
|
|
30
30
|
│ ## ############## Development Orchestrator │
|
|
31
31
|
│ ## ### ###### ## OrNexus Team (Free) │
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "neocortex"
|
|
3
|
-
description: "🧠 Neocortex v3.9.
|
|
3
|
+
description: "🧠 Neocortex v3.9.22 (Free) | OrNexus Team"
|
|
4
4
|
tools:
|
|
5
5
|
- readFile
|
|
6
6
|
- editFiles
|
|
@@ -26,7 +26,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
|
|
|
26
26
|
┌────────────────────────────────────────────────────────────┐
|
|
27
27
|
│ │
|
|
28
28
|
│ ####### N E O C O R T E X │
|
|
29
|
-
│ ### ######## v3.9.
|
|
29
|
+
│ ### ######## v3.9.22 │
|
|
30
30
|
│ ######### ##### │
|
|
31
31
|
│ ## ############## Development Orchestrator │
|
|
32
32
|
│ ## ### ###### ## OrNexus Team (Free) │
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-registry.d.ts","sourceRoot":"","sources":["../../src/adapters/adapter-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAUzD,qBAAa,kBAAmB,SAAQ,KAAK;aACf,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM;CAM7C;AAeD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAE7D;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAQtC;;;;;OAKG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIhD;;;;;;OAMG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa;IAQ3C;;;;;OAKG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9B;;;;OAIG;IACH,WAAW,IAAI,MAAM,EAAE;CAGxB;AAID;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAQvD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-registry.js","sourceRoot":"","sources":["../../src/adapters/adapter-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"antigravity-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/antigravity-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACb,MAAM,qBAAqB,CAAC;AAiB7B,qBAAa,kBAAmB,YAAW,aAAa;IACtD,YAAY,CACV,eAAe,EAAE,MAAM,EACvB,oBAAoB,EAAE,oBAAoB,EAC1C,MAAM,EAAE,YAAY,GACnB,MAAM;IAqDT,WAAW,IAAI,MAAM;IAIrB,eAAe,IAAI,kBAAkB;IAIrC,kBAAkB,IAAI,eAAe;CAGtC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"antigravity-adapter.js","sourceRoot":"","sources":["../../src/adapters/antigravity-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/claude-code-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACb,MAAM,qBAAqB,CAAC;AAiB7B,qBAAa,iBAAkB,YAAW,aAAa;IACrD,YAAY,CACV,eAAe,EAAE,MAAM,EACvB,oBAAoB,EAAE,oBAAoB,EAC1C,MAAM,EAAE,YAAY,GACnB,MAAM;IAsDT,WAAW,IAAI,MAAM;IAIrB,eAAe,IAAI,kBAAkB;IAIrC,kBAAkB,IAAI,eAAe;CAGtC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code-adapter.js","sourceRoot":"","sources":["../../src/adapters/claude-code-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/codex-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACb,MAAM,qBAAqB,CAAC;AAiB7B,qBAAa,YAAa,YAAW,aAAa;IAChD,YAAY,CACV,eAAe,EAAE,MAAM,EACvB,oBAAoB,EAAE,oBAAoB,EAC1C,MAAM,EAAE,YAAY,GACnB,MAAM;IAsDT,WAAW,IAAI,MAAM;IAIrB,eAAe,IAAI,kBAAkB;IAIrC,kBAAkB,IAAI,eAAe;CAGtC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex-adapter.js","sourceRoot":"","sources":["../../src/adapters/codex-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/cursor-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACb,MAAM,qBAAqB,CAAC;AAgF7B,qBAAa,aAAc,YAAW,aAAa;IACjD,YAAY,CACV,eAAe,EAAE,MAAM,EACvB,oBAAoB,EAAE,oBAAoB,EAC1C,MAAM,EAAE,YAAY,GACnB,MAAM;IAsCT,WAAW,IAAI,MAAM;IAIrB,eAAe,IAAI,kBAAkB;IAIrC,kBAAkB,IAAI,eAAe;CAGtC"}
|