@nexus-cortex/core 4.130.0 → 4.131.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/.env.defaults +172 -2
  2. package/dist/adapters/ChatCompletionsAPIAdapter.d.ts.map +1 -1
  3. package/dist/adapters/ChatCompletionsAPIAdapter.js +5 -1
  4. package/dist/adapters/ChatCompletionsAPIAdapter.js.map +1 -1
  5. package/dist/commands/SlashCommandRegistry.d.ts.map +1 -1
  6. package/dist/commands/SlashCommandRegistry.js +7 -0
  7. package/dist/commands/SlashCommandRegistry.js.map +1 -1
  8. package/dist/config/AnthropicCredentialService.d.ts.map +1 -1
  9. package/dist/config/AnthropicCredentialService.js +2 -1
  10. package/dist/config/AnthropicCredentialService.js.map +1 -1
  11. package/dist/config/RuntimeConfigRegistry.d.ts.map +1 -1
  12. package/dist/config/RuntimeConfigRegistry.js +18 -0
  13. package/dist/config/RuntimeConfigRegistry.js.map +1 -1
  14. package/dist/config/SettingsLoader.d.ts +3 -0
  15. package/dist/config/SettingsLoader.d.ts.map +1 -1
  16. package/dist/config/SettingsLoader.js +42 -0
  17. package/dist/config/SettingsLoader.js.map +1 -1
  18. package/dist/config/SettingsSchema.d.ts +19 -0
  19. package/dist/config/SettingsSchema.d.ts.map +1 -1
  20. package/dist/config/SettingsSchema.js +172 -0
  21. package/dist/config/SettingsSchema.js.map +1 -1
  22. package/dist/config/effectiveConfig.d.ts.map +1 -1
  23. package/dist/config/effectiveConfig.js +20 -2
  24. package/dist/config/effectiveConfig.js.map +1 -1
  25. package/dist/config/index.d.ts +4 -0
  26. package/dist/config/index.d.ts.map +1 -1
  27. package/dist/config/index.js +4 -0
  28. package/dist/config/index.js.map +1 -1
  29. package/dist/config/localBrowser.d.ts +13 -0
  30. package/dist/config/localBrowser.d.ts.map +1 -0
  31. package/dist/config/localBrowser.js +53 -0
  32. package/dist/config/localBrowser.js.map +1 -0
  33. package/dist/config/logRedaction.d.ts +5 -0
  34. package/dist/config/logRedaction.d.ts.map +1 -0
  35. package/dist/config/logRedaction.js +68 -0
  36. package/dist/config/logRedaction.js.map +1 -0
  37. package/dist/config/secretProviders.d.ts +16 -0
  38. package/dist/config/secretProviders.d.ts.map +1 -0
  39. package/dist/config/secretProviders.js +26 -0
  40. package/dist/config/secretProviders.js.map +1 -0
  41. package/dist/config/secretsVault.d.ts +121 -0
  42. package/dist/config/secretsVault.d.ts.map +1 -0
  43. package/dist/config/secretsVault.js +320 -0
  44. package/dist/config/secretsVault.js.map +1 -0
  45. package/dist/config/spaSecretTypes.d.ts +329 -0
  46. package/dist/config/spaSecretTypes.d.ts.map +1 -0
  47. package/dist/config/spaSecretTypes.js +326 -0
  48. package/dist/config/spaSecretTypes.js.map +1 -0
  49. package/dist/index.d.ts +9 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +5 -0
  52. package/dist/index.js.map +1 -1
  53. package/dist/mcp/McpClient.d.ts +2 -0
  54. package/dist/mcp/McpClient.d.ts.map +1 -1
  55. package/dist/mcp/McpClient.js +9 -1
  56. package/dist/mcp/McpClient.js.map +1 -1
  57. package/dist/mcp/McpServerRegistry.d.ts +2 -13
  58. package/dist/mcp/McpServerRegistry.d.ts.map +1 -1
  59. package/dist/mcp/McpServerRegistry.js +17 -2
  60. package/dist/mcp/McpServerRegistry.js.map +1 -1
  61. package/dist/mcp/essentialMcpTools.d.ts +11 -0
  62. package/dist/mcp/essentialMcpTools.d.ts.map +1 -0
  63. package/dist/mcp/essentialMcpTools.js +22 -0
  64. package/dist/mcp/essentialMcpTools.js.map +1 -0
  65. package/dist/mcp/mcpSchemaCompat.d.ts +9 -0
  66. package/dist/mcp/mcpSchemaCompat.d.ts.map +1 -0
  67. package/dist/mcp/mcpSchemaCompat.js +32 -0
  68. package/dist/mcp/mcpSchemaCompat.js.map +1 -0
  69. package/dist/middleware/HelperModelMiddleware.d.ts +4 -0
  70. package/dist/middleware/HelperModelMiddleware.d.ts.map +1 -1
  71. package/dist/middleware/HelperModelMiddleware.js +2 -2
  72. package/dist/middleware/HelperModelMiddleware.js.map +1 -1
  73. package/dist/middleware/SystemMessageMiddleware.d.ts.map +1 -1
  74. package/dist/middleware/SystemMessageMiddleware.js +6 -0
  75. package/dist/middleware/SystemMessageMiddleware.js.map +1 -1
  76. package/dist/middleware/permissions/DefaultPolicies.d.ts.map +1 -1
  77. package/dist/middleware/permissions/DefaultPolicies.js +2 -0
  78. package/dist/middleware/permissions/DefaultPolicies.js.map +1 -1
  79. package/dist/orchestrator/APIClient.d.ts.map +1 -1
  80. package/dist/orchestrator/APIClient.js +46 -1
  81. package/dist/orchestrator/APIClient.js.map +1 -1
  82. package/dist/orchestrator/CortexOrchestrator.d.ts +43 -8
  83. package/dist/orchestrator/CortexOrchestrator.d.ts.map +1 -1
  84. package/dist/orchestrator/CortexOrchestrator.js +341 -40
  85. package/dist/orchestrator/CortexOrchestrator.js.map +1 -1
  86. package/dist/orchestrator/HerdrSubAgentRunner.d.ts.map +1 -1
  87. package/dist/orchestrator/HerdrSubAgentRunner.js +2 -1
  88. package/dist/orchestrator/HerdrSubAgentRunner.js.map +1 -1
  89. package/dist/orchestrator/SubAgentProcessManager.d.ts.map +1 -1
  90. package/dist/orchestrator/SubAgentProcessManager.js +2 -0
  91. package/dist/orchestrator/SubAgentProcessManager.js.map +1 -1
  92. package/dist/orchestrator/browserWallNudge.d.ts +93 -0
  93. package/dist/orchestrator/browserWallNudge.d.ts.map +1 -0
  94. package/dist/orchestrator/browserWallNudge.js +227 -0
  95. package/dist/orchestrator/browserWallNudge.js.map +1 -0
  96. package/dist/orchestrator/citationVerification.d.ts.map +1 -1
  97. package/dist/orchestrator/citationVerification.js +16 -0
  98. package/dist/orchestrator/citationVerification.js.map +1 -1
  99. package/dist/orchestrator/cortexProxyFetch.d.ts +8 -0
  100. package/dist/orchestrator/cortexProxyFetch.d.ts.map +1 -1
  101. package/dist/orchestrator/cortexProxyFetch.js +32 -0
  102. package/dist/orchestrator/cortexProxyFetch.js.map +1 -1
  103. package/dist/orchestrator/emptyResponseClassifier.d.ts +1 -1
  104. package/dist/orchestrator/emptyResponseClassifier.d.ts.map +1 -1
  105. package/dist/orchestrator/emptyResponseClassifier.js +8 -2
  106. package/dist/orchestrator/emptyResponseClassifier.js.map +1 -1
  107. package/dist/orchestrator/endTurnGates.d.ts +39 -0
  108. package/dist/orchestrator/endTurnGates.d.ts.map +1 -1
  109. package/dist/orchestrator/endTurnGates.js +159 -3
  110. package/dist/orchestrator/endTurnGates.js.map +1 -1
  111. package/dist/orchestrator/imageTtl.d.ts.map +1 -1
  112. package/dist/orchestrator/imageTtl.js +14 -5
  113. package/dist/orchestrator/imageTtl.js.map +1 -1
  114. package/dist/orchestrator/integrityVerification.d.ts +2 -0
  115. package/dist/orchestrator/integrityVerification.d.ts.map +1 -1
  116. package/dist/orchestrator/integrityVerification.js +2 -2
  117. package/dist/orchestrator/integrityVerification.js.map +1 -1
  118. package/dist/orchestrator/requestDebugLog.d.ts +4 -0
  119. package/dist/orchestrator/requestDebugLog.d.ts.map +1 -0
  120. package/dist/orchestrator/requestDebugLog.js +55 -0
  121. package/dist/orchestrator/requestDebugLog.js.map +1 -0
  122. package/dist/orchestrator/requirementsVerification.d.ts +4 -0
  123. package/dist/orchestrator/requirementsVerification.d.ts.map +1 -1
  124. package/dist/orchestrator/requirementsVerification.js +12 -6
  125. package/dist/orchestrator/requirementsVerification.js.map +1 -1
  126. package/dist/orchestrator/subAgentTimeout.d.ts +3 -0
  127. package/dist/orchestrator/subAgentTimeout.d.ts.map +1 -1
  128. package/dist/orchestrator/subAgentTimeout.js +6 -0
  129. package/dist/orchestrator/subAgentTimeout.js.map +1 -1
  130. package/dist/orchestrator/toolAllowlist.d.ts +29 -0
  131. package/dist/orchestrator/toolAllowlist.d.ts.map +1 -1
  132. package/dist/orchestrator/toolAllowlist.js +45 -0
  133. package/dist/orchestrator/toolAllowlist.js.map +1 -1
  134. package/dist/tools/ToolProfile.d.ts +5 -21
  135. package/dist/tools/ToolProfile.d.ts.map +1 -1
  136. package/dist/tools/ToolProfile.js +17 -2
  137. package/dist/tools/ToolProfile.js.map +1 -1
  138. package/dist/tools/registries/BaseToolRegistry.d.ts.map +1 -1
  139. package/dist/tools/registries/BaseToolRegistry.js +26 -6
  140. package/dist/tools/registries/BaseToolRegistry.js.map +1 -1
  141. package/dist/training/AutoResearchConfirm.d.ts +105 -0
  142. package/dist/training/AutoResearchConfirm.d.ts.map +1 -0
  143. package/dist/training/AutoResearchConfirm.js +111 -0
  144. package/dist/training/AutoResearchConfirm.js.map +1 -0
  145. package/dist/training/AutoResearchGate.d.ts +6 -0
  146. package/dist/training/AutoResearchGate.d.ts.map +1 -1
  147. package/dist/training/AutoResearchGate.js +8 -2
  148. package/dist/training/AutoResearchGate.js.map +1 -1
  149. package/dist/training/AutoResearchGuards.d.ts +86 -0
  150. package/dist/training/AutoResearchGuards.d.ts.map +1 -0
  151. package/dist/training/AutoResearchGuards.js +81 -0
  152. package/dist/training/AutoResearchGuards.js.map +1 -0
  153. package/dist/training/BenchRunner.d.ts +21 -5
  154. package/dist/training/BenchRunner.d.ts.map +1 -1
  155. package/dist/training/BenchRunner.js +126 -54
  156. package/dist/training/BenchRunner.js.map +1 -1
  157. package/dist/training/EvalGuard.d.ts +43 -0
  158. package/dist/training/EvalGuard.d.ts.map +1 -0
  159. package/dist/training/EvalGuard.js +131 -0
  160. package/dist/training/EvalGuard.js.map +1 -0
  161. package/dist/training/ExperimentRunner.d.ts +22 -0
  162. package/dist/training/ExperimentRunner.d.ts.map +1 -1
  163. package/dist/training/ExperimentRunner.js +45 -9
  164. package/dist/training/ExperimentRunner.js.map +1 -1
  165. package/dist/training/endTurnResolver.d.ts +23 -1
  166. package/dist/training/endTurnResolver.d.ts.map +1 -1
  167. package/dist/training/endTurnResolver.js +35 -3
  168. package/dist/training/endTurnResolver.js.map +1 -1
  169. package/dist/training/mentorRole.d.ts.map +1 -1
  170. package/dist/training/mentorRole.js +6 -1
  171. package/dist/training/mentorRole.js.map +1 -1
  172. package/dist/training/scopeCheck.d.ts +41 -0
  173. package/dist/training/scopeCheck.d.ts.map +1 -0
  174. package/dist/training/scopeCheck.js +119 -0
  175. package/dist/training/scopeCheck.js.map +1 -0
  176. package/dist/training/usageAccounting.d.ts +13 -0
  177. package/dist/training/usageAccounting.d.ts.map +1 -1
  178. package/dist/training/usageAccounting.js +11 -0
  179. package/dist/training/usageAccounting.js.map +1 -1
  180. package/dist/utils/repairToolJson.d.ts +19 -0
  181. package/dist/utils/repairToolJson.d.ts.map +1 -0
  182. package/dist/utils/repairToolJson.js +122 -0
  183. package/dist/utils/repairToolJson.js.map +1 -0
  184. package/package.json +5 -4
@@ -0,0 +1,13 @@
1
+ export interface BrowserBackend {
2
+ mode: 'hosted' | 'local';
3
+ using: 'hosted' | 'local';
4
+ reason: string;
5
+ serverJs?: string;
6
+ packageDir?: string;
7
+ }
8
+ export declare const browserToolsHome: (env?: NodeJS.ProcessEnv) => string;
9
+ /** The installed @nexus-cortex/browser package directory, or null. */
10
+ export declare function localBrowserPackageDir(): string | null;
11
+ export declare function resolveBrowserBackendCached(env?: NodeJS.ProcessEnv): BrowserBackend;
12
+ export declare function resolveBrowserBackend(env?: NodeJS.ProcessEnv): BrowserBackend;
13
+ //# sourceMappingURL=localBrowser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localBrowser.d.ts","sourceRoot":"","sources":["../../src/config/localBrowser.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,cAAc;IAAG,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE;AAE/I,eAAO,MAAM,gBAAgB,GAAI,MAAK,MAAM,CAAC,UAAwB,KAAG,MACO,CAAC;AAEhF,sEAAsE;AACtE,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAEtD;AAID,wBAAgB,2BAA2B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,cAAc,CAMhG;AAED,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,cAAc,CAW1F"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Which browser the harness drives (NEXUS_BROWSER_MODE; operator policy 2026-11-03):
3
+ * hosted (default) — the hosted nexus-browser MCP (McpServerRegistry's http entry); nothing to install.
4
+ * local — the @nexus-cortex/browser library on this machine, run as a stdio MCP server — ONLY when the package is installed
5
+ * AND its installer recorded the core as ready (<tools home>/install.json). Otherwise hosted, with the reason, so a
6
+ * broken or half-finished local install never leaves an agent without a browser.
7
+ * The library is an optional, separately licensed package (AGPL-3.0-only OR commercial); core never imports it — it only finds its
8
+ * server entry point.
9
+ */
10
+ import fs from 'fs';
11
+ import os from 'os';
12
+ import path from 'path';
13
+ import { createRequire } from 'module';
14
+ export const browserToolsHome = (env = process.env) => env.NEXUS_BROWSER_HOME ?? path.join(os.homedir(), '.nexus-cortex', 'browser');
15
+ /** The installed @nexus-cortex/browser package directory, or null. */
16
+ export function localBrowserPackageDir() {
17
+ try {
18
+ return path.dirname(createRequire(import.meta.url).resolve('@nexus-cortex/browser/package.json'));
19
+ }
20
+ catch {
21
+ return null;
22
+ }
23
+ }
24
+ /** resolveBrowserBackend for HOT paths (the per-tool web gate runs for every tool on every request): cached 5 s per mode/home. */
25
+ let cached = null;
26
+ export function resolveBrowserBackendCached(env = process.env) {
27
+ const key = `${env.NEXUS_BROWSER_MODE ?? ''}|${browserToolsHome(env)}`;
28
+ if (cached && cached.key === key && Date.now() - cached.at < 5000)
29
+ return cached.value;
30
+ const value = resolveBrowserBackend(env);
31
+ cached = { key, at: Date.now(), value };
32
+ return value;
33
+ }
34
+ export function resolveBrowserBackend(env = process.env) {
35
+ const mode = String(env.NEXUS_BROWSER_MODE ?? '').trim().toLowerCase() === 'local' ? 'local' : 'hosted';
36
+ if (mode === 'hosted')
37
+ return { mode, using: 'hosted', reason: 'NEXUS_BROWSER_MODE is hosted (default)' };
38
+ const dir = localBrowserPackageDir();
39
+ if (!dir)
40
+ return { mode, using: 'hosted', reason: 'the @nexus-cortex/browser package is not installed' };
41
+ const serverJs = path.join(dir, 'dist', 'server.js');
42
+ if (!fs.existsSync(serverJs))
43
+ return { mode, using: 'hosted', reason: `${serverJs} is missing (package not built)`, packageDir: dir };
44
+ let ready = false;
45
+ try {
46
+ ready = JSON.parse(fs.readFileSync(path.join(browserToolsHome(env), 'install.json'), 'utf8'))?.ready?.core === true;
47
+ }
48
+ catch { /* no install yet */ }
49
+ if (!ready)
50
+ return { mode, using: 'hosted', reason: 'the local browser is not installed yet — run `cortex browser install`', packageDir: dir };
51
+ return { mode, using: 'local', reason: 'local browser installed and ready', serverJs, packageDir: dir };
52
+ }
53
+ //# sourceMappingURL=localBrowser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localBrowser.js","sourceRoot":"","sources":["../../src/config/localBrowser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAIvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAyB,OAAO,CAAC,GAAG,EAAU,EAAE,CAC/E,GAAG,CAAC,kBAAkB,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;AAEhF,sEAAsE;AACtE,MAAM,UAAU,sBAAsB;IACpC,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AACnI,CAAC;AAED,kIAAkI;AAClI,IAAI,MAAM,GAA8D,IAAI,CAAC;AAC7E,MAAM,UAAU,2BAA2B,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC9E,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,kBAAkB,IAAI,EAAE,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;IACvE,IAAI,MAAM,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,IAAI;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC;IACvF,MAAM,KAAK,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC;IACxC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACxE,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxG,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,wCAAwC,EAAE,CAAC;IAC1G,MAAM,GAAG,GAAG,sBAAsB,EAAE,CAAC;IACrC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,oDAAoD,EAAE,CAAC;IACzG,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,QAAQ,iCAAiC,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IACtI,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,CAAC;QAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC3J,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,uEAAuE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IAC/I,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,mCAAmC,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;AAC1G,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** Mask secrets in one already-formatted log line. Exported for tests and for writers that bypass console. */
2
+ export declare function redactLogText(text: string, env?: NodeJS.ProcessEnv): string;
3
+ /** Wrap console.log/info/warn/error/debug/trace so every line is redacted before it is written. Idempotent. */
4
+ export declare function installConsoleRedaction(env?: NodeJS.ProcessEnv): boolean;
5
+ //# sourceMappingURL=logRedaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logRedaction.d.ts","sourceRoot":"","sources":["../../src/config/logRedaction.ts"],"names":[],"mappings":"AAsCA,8GAA8G;AAC9G,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAMxF;AAED,+GAA+G;AAC/G,wBAAgB,uBAAuB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAarF"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Console secret redaction (2026-11-03).
3
+ *
4
+ * The bundled @anthropic-ai/sdk (0.20.x) prints every request's raw headers — including `x-api-key` — through console.log
5
+ * whenever process.env.DEBUG === 'true', and DEBUG=true is also the harness's own debug switch. A cx-local run on 11-02 wrote
6
+ * the operator's Anthropic key into nine server logs that way. Any other dependency that logs a request can do the same, so
7
+ * the fix is at the sink: every console line is formatted once, secret values are replaced, and the masked line is printed.
8
+ *
9
+ * What is masked: values of secret-like environment variables (…_API_KEY, …_TOKEN, …_SECRET, …_KEY, PASSWORD, ≥ 12 chars),
10
+ * every vault value (maskSecretText), and the value of credential headers / bearer tokens by pattern.
11
+ * Installed once per process by bootstrapEnv. CORTEX_LOG_REDACTION=off disables it (debugging the redactor itself).
12
+ */
13
+ import { formatWithOptions } from 'node:util';
14
+ import { maskSecrets, maskSecretText } from './secretsVault.js';
15
+ const SECRET_NAME = /(?:^|_)(?:API_KEY|KEY|TOKEN|SECRET|PASSWORD|PASS|PAT|CREDENTIALS?)$|^(?:ANTHROPIC|OPENAI|XAI|DEEPSEEK|GEMINI|GOOGLE)_.*KEY/i;
16
+ const NOT_SECRET = /^(?:CORTEX_SECRETS_KEY_FILE|.*_KEY_NOTE|.*_KEY_PATH|.*_TOKEN_LIMIT|.*_MAX_TOKENS?|.*_TOKENS)$/i;
17
+ // Credential headers in util.inspect / JSON / HTTP text form, and bearer tokens.
18
+ const HEADER_PATTERNS = [
19
+ // The value never includes a backslash, and an escaped quote (\") may open it: on JSON-escaped text (a CLI --json answer) the old
20
+ // class ate the backslash of `\"` and left a bare quote — ms-after-r5 Best Buy: `site cookie: locStoreId=513\"` → invalid JSON, answer
21
+ // lost to the judge (2026-11-04).
22
+ /((?:\\?['"]?)(?:x-api-key|api-key|x-goog-api-key|authorization|proxy-authorization|cookie|set-cookie)(?:\\?['"]?)\s*[:=]\s*(?:\\?['"])?)(?:Bearer\s+|Basic\s+)?(?!«)[^'"\s,}«\\]{8,}/gi,
23
+ /(Bearer\s+)[A-Za-z0-9._~+/=-]{16,}/g,
24
+ ];
25
+ let installed = false;
26
+ let cache = { sig: '', values: [] };
27
+ function envSecretValues(env) {
28
+ const names = Object.keys(env).filter((n) => SECRET_NAME.test(n) && !NOT_SECRET.test(n));
29
+ const sig = names.map((n) => `${n}:${(env[n] ?? '').length}`).join('|');
30
+ if (sig === cache.sig)
31
+ return cache.values;
32
+ const values = names.map((name) => ({ name, value: env[name] ?? '' })).filter((v) => v.value.length >= 12 && !/^(true|false|\d+)$/i.test(v.value));
33
+ cache = { sig, values };
34
+ return values;
35
+ }
36
+ /** Mask secrets in one already-formatted log line. Exported for tests and for writers that bypass console. */
37
+ export function redactLogText(text, env = process.env) {
38
+ if (!text)
39
+ return text;
40
+ let out = maskSecretText(text);
41
+ out = maskSecrets(out, envSecretValues(env));
42
+ for (const re of HEADER_PATTERNS)
43
+ out = out.replace(re, (_m, p1) => `${p1}«redacted»`);
44
+ return out;
45
+ }
46
+ /** Wrap console.log/info/warn/error/debug/trace so every line is redacted before it is written. Idempotent. */
47
+ export function installConsoleRedaction(env = process.env) {
48
+ if (installed || /^(off|false|0)$/i.test(env.CORTEX_LOG_REDACTION ?? ''))
49
+ return false;
50
+ installed = true;
51
+ for (const method of ['log', 'info', 'warn', 'error', 'debug', 'trace']) {
52
+ const original = console[method].bind(console);
53
+ console[method] = (...args) => {
54
+ if (args.length === 0)
55
+ return original();
56
+ let line;
57
+ try {
58
+ line = redactLogText(formatWithOptions({ colors: false }, ...args), env);
59
+ }
60
+ catch {
61
+ return original(...args);
62
+ }
63
+ original(line);
64
+ };
65
+ }
66
+ return true;
67
+ }
68
+ //# sourceMappingURL=logRedaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logRedaction.js","sourceRoot":"","sources":["../../src/config/logRedaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The provider catalog for the secrets vault UI — the Nexus Terminal SPA's own catalog (spaSecretTypes.ts, synced from
3
+ * nexus-terminal/services/secrets/types.ts), plus the helpers the /secrets dialogs need: provider auto-detect from a pasted key (the
4
+ * SPA's keyPatterns), a suggested env-style name (the SPA's PROVIDER_TYPE convention), the icon.
5
+ */
6
+ import { type KnownProvider, type ProviderConfig, type SecretType } from './spaSecretTypes.js';
7
+ export type { KnownProvider, ProviderConfig, SecretType };
8
+ export declare const SECRET_PROVIDERS: ProviderConfig[];
9
+ /** The provider a pasted value most likely belongs to (first keyPattern match), or null. */
10
+ export declare function detectProvider(value: string): ProviderConfig | null;
11
+ /** DEEPSEEK_API_KEY-style name for a provider + secret type (the SPA stores keys as PROVIDER_TYPE). */
12
+ export declare function suggestSecretName(provider: string, type?: SecretType | string): string;
13
+ /** The provider a stored name belongs to, by its prefix (GITHUB_TOKEN → github). */
14
+ export declare function providerForName(name: string): ProviderConfig | null;
15
+ export declare const providerIcon: (id?: string | null) => string;
16
+ //# sourceMappingURL=secretProviders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secretProviders.d.ts","sourceRoot":"","sources":["../../src/config/secretProviders.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAoB,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjH,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;AAC1D,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAAoC,CAAC;AAElF,4FAA4F;AAC5F,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAInE;AAED,uGAAuG;AACvG,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,UAAU,GAAG,MAAkB,GAAG,MAAM,CAEjG;AAED,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAGnE;AAED,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,GAAG,IAAI,KAAG,MAAwF,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The provider catalog for the secrets vault UI — the Nexus Terminal SPA's own catalog (spaSecretTypes.ts, synced from
3
+ * nexus-terminal/services/secrets/types.ts), plus the helpers the /secrets dialogs need: provider auto-detect from a pasted key (the
4
+ * SPA's keyPatterns), a suggested env-style name (the SPA's PROVIDER_TYPE convention), the icon.
5
+ */
6
+ import { PROVIDER_CONFIGS } from './spaSecretTypes.js';
7
+ export const SECRET_PROVIDERS = Object.values(PROVIDER_CONFIGS);
8
+ /** The provider a pasted value most likely belongs to (first keyPattern match), or null. */
9
+ export function detectProvider(value) {
10
+ const v = value.trim();
11
+ for (const p of SECRET_PROVIDERS)
12
+ if (p.keyPatterns?.some((re) => re.test(v)))
13
+ return p;
14
+ return null;
15
+ }
16
+ /** DEEPSEEK_API_KEY-style name for a provider + secret type (the SPA stores keys as PROVIDER_TYPE). */
17
+ export function suggestSecretName(provider, type = 'api-key') {
18
+ return `${provider}_${type}`.toUpperCase().replace(/[^A-Z0-9]+/g, '_').replace(/^_+|_+$/g, '');
19
+ }
20
+ /** The provider a stored name belongs to, by its prefix (GITHUB_TOKEN → github). */
21
+ export function providerForName(name) {
22
+ const n = name.toLowerCase();
23
+ return SECRET_PROVIDERS.find((p) => p.id !== 'custom' && (n.startsWith(`${p.id.replace(/-/g, '_')}_`) || n === p.id)) ?? null;
24
+ }
25
+ export const providerIcon = (id) => (id && PROVIDER_CONFIGS[id]?.icon) || '🔑';
26
+ //# sourceMappingURL=secretProviders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secretProviders.js","sourceRoot":"","sources":["../../src/config/secretProviders.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,gBAAgB,EAA4D,MAAM,qBAAqB,CAAC;AAGjH,MAAM,CAAC,MAAM,gBAAgB,GAAqB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAElF,4FAA4F;AAC5F,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,IAAI,gBAAgB;QAAE,IAAI,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IACxF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,OAA4B,SAAS;IACvF,OAAO,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACjG,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7B,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;AAChI,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAkB,EAAU,EAAE,CAAC,CAAC,EAAE,IAAK,gBAAmD,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC"}
@@ -0,0 +1,121 @@
1
+ export declare const VAULT_FILE = "secrets.enc";
2
+ export declare const VAULT_ID = "cortex-local";
3
+ import { PBKDF2_ITERATIONS, ENCRYPTION_VERSION } from './spaSecretTypes.js';
4
+ export { PBKDF2_ITERATIONS, ENCRYPTION_VERSION };
5
+ export interface EncryptedSecret {
6
+ iv: string;
7
+ ciphertext: string;
8
+ tag: string;
9
+ version: number;
10
+ }
11
+ export interface VaultEntry {
12
+ enc: EncryptedSecret;
13
+ provider?: string;
14
+ type?: string;
15
+ category?: string;
16
+ note?: string;
17
+ updatedAt: number;
18
+ }
19
+ export interface VaultBinding {
20
+ secret: string;
21
+ envVar: string;
22
+ scope: 'global' | 'tool';
23
+ tool?: string;
24
+ }
25
+ export interface VaultFile {
26
+ version: 1;
27
+ id: string;
28
+ check: EncryptedSecret;
29
+ secrets: Record<string, VaultEntry>;
30
+ bindings: VaultBinding[];
31
+ }
32
+ export type UnlockSource = 'env' | 'env-file' | 'keychain' | 'key-file' | 'passphrase';
33
+ export interface VaultStatus {
34
+ exists: boolean;
35
+ unlocked: boolean;
36
+ source?: UnlockSource;
37
+ count?: number;
38
+ error?: string;
39
+ path: string;
40
+ }
41
+ export declare const vaultPath: () => string;
42
+ /** Where `cortex secrets init` keeps the key when the machine has no keychain (headless VM / container): owner-only, beside the vault. */
43
+ export declare const vaultKeyFilePath: () => string;
44
+ export declare function deriveKey(master: string, id?: string): Buffer;
45
+ export declare function encryptValue(key: Buffer, plaintext: string): EncryptedSecret;
46
+ export declare function decryptValue(key: Buffer, e: EncryptedSecret): string;
47
+ /** Store the master secret in the OS keychain. Returns false when no usable keychain exists (headless VM, container). */
48
+ export declare function keychainSet(master: string): boolean;
49
+ /** The master secret from the non-interactive sources, in order. Never prompts. */
50
+ export declare function resolveMasterSecret(env?: NodeJS.ProcessEnv): {
51
+ master: string;
52
+ source: UnlockSource;
53
+ } | null;
54
+ export declare const newMasterSecret: () => string;
55
+ export declare function readVaultFile(file?: string): VaultFile | null;
56
+ export declare function writeVaultFile(v: VaultFile, file?: string): void;
57
+ export declare function createVault(master: string, file?: string): VaultFile;
58
+ /** An open vault: values are decrypted only on request and never logged. */
59
+ export declare class Vault {
60
+ private readonly key;
61
+ private data;
62
+ readonly file: string;
63
+ readonly source: UnlockSource;
64
+ private constructor();
65
+ static open(master: string, source: UnlockSource, file?: string): Vault;
66
+ names(): string[];
67
+ meta(name: string): Omit<VaultEntry, 'enc'> | null;
68
+ get(name: string): string | null;
69
+ set(name: string, value: string, meta?: Omit<VaultEntry, 'enc' | 'updatedAt'>): void;
70
+ delete(name: string): boolean;
71
+ bindings(): VaultBinding[];
72
+ bind(b: VaultBinding): void;
73
+ unbind(envVar: string, tool?: string): void;
74
+ /** Every value, for output masking only (never for display). */
75
+ allValues(): Array<{
76
+ name: string;
77
+ value: string;
78
+ }>;
79
+ }
80
+ /** Open the vault from the non-interactive sources, or report why not. */
81
+ export declare function openVaultNonInteractive(env?: NodeJS.ProcessEnv, file?: string): {
82
+ vault: Vault | null;
83
+ status: VaultStatus;
84
+ };
85
+ /** STARTUP: put the vault's secrets into `env` without overriding what is already set (real env > vault > .env files). Never throws. */
86
+ export declare function loadVaultIntoEnv(env?: NodeJS.ProcessEnv): VaultStatus;
87
+ /** Replace any stored secret value appearing in `text` with «secret:NAME» — applied to tool output before the model sees it. */
88
+ export declare function maskSecrets(text: string, values: Array<{
89
+ name: string;
90
+ value: string;
91
+ }>): string;
92
+ /** Create the vault the zero-friction way (shared by `cortex secrets init` and the /secrets dialogs): the key already given
93
+ * (CORTEX_SECRETS_KEY / _FILE), else a new random key kept in the OS keychain, else in the owner-only key file beside the vault. */
94
+ export declare function initVaultDefault(env?: NodeJS.ProcessEnv): {
95
+ where: UnlockSource;
96
+ path: string;
97
+ hint: string;
98
+ };
99
+ /** Environment for a process that runs model-chosen code. `tool` selects tool-scoped bindings (e.g. 'Bash'). Always returns an object. */
100
+ export declare function toolChildEnv(base?: NodeJS.ProcessEnv, tool?: string): NodeJS.ProcessEnv;
101
+ /** Replace every vault value (and the vault key) in `text` with «secret:NAME». Identity when no vault is unlocked. */
102
+ export declare function maskSecretText(text: string): string;
103
+ /** maskSecretText over a batch of tool results (content strings only; everything else passes through). */
104
+ export declare function maskToolResults<T extends {
105
+ content: unknown;
106
+ }>(results: T[]): T[];
107
+ /** What the secrets-list tool reports: names, providers, bindings, and how the vault unlocked. Never values. */
108
+ export declare function describeVaultForAgent(): {
109
+ unlocked: boolean;
110
+ source?: string;
111
+ secrets: Array<{
112
+ name: string;
113
+ provider?: string;
114
+ type?: string;
115
+ boundAs: string[];
116
+ }>;
117
+ note: string;
118
+ };
119
+ /** Test hook: forget the recorded session. */
120
+ export declare function _resetVaultSessionForTests(): void;
121
+ //# sourceMappingURL=secretsVault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secretsVault.d.ts","sourceRoot":"","sources":["../../src/config/secretsVault.ts"],"names":[],"mappings":"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"}