nexus-agents 2.81.3 → 2.82.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 (109) hide show
  1. package/dist/{child-mcp-config-LLLRMOTQ.js → child-mcp-config-BMSYR7VV.js} +2 -2
  2. package/dist/{chunk-ERWTZSAR.js → chunk-2R5UUBGA.js} +2 -2
  3. package/dist/{chunk-BMNWUPJO.js → chunk-2SQXJQTA.js} +3 -3
  4. package/dist/{chunk-755EZIUF.js → chunk-4XNVJS5A.js} +924 -376
  5. package/dist/{chunk-755EZIUF.js.map → chunk-4XNVJS5A.js.map} +1 -1
  6. package/dist/{chunk-LJIB6TNE.js → chunk-7VNVDFD5.js} +3 -13
  7. package/dist/{chunk-LJIB6TNE.js.map → chunk-7VNVDFD5.js.map} +1 -1
  8. package/dist/{chunk-PUSFT342.js → chunk-BL5IBHEY.js} +3 -3
  9. package/dist/{chunk-Q27M6KHP.js → chunk-C7P2HLJX.js} +4 -4
  10. package/dist/{chunk-P4W7PV6L.js → chunk-FTT2IYYX.js} +123 -96
  11. package/dist/chunk-FTT2IYYX.js.map +1 -0
  12. package/dist/{chunk-UZCDHAY3.js → chunk-G2DZBEMU.js} +2 -2
  13. package/dist/{chunk-WZGCVCRQ.js → chunk-GNG7URCR.js} +2 -2
  14. package/dist/{chunk-RLQZOEMX.js → chunk-HJUHDPXJ.js} +3 -3
  15. package/dist/{chunk-SVKH6ASN.js → chunk-HMXQKDUV.js} +36 -24
  16. package/dist/chunk-HMXQKDUV.js.map +1 -0
  17. package/dist/{chunk-PV3OEDLO.js → chunk-HVZ52LOL.js} +2 -2
  18. package/dist/{chunk-EKLY4LBJ.js → chunk-JM3R267Z.js} +28 -15
  19. package/dist/chunk-JM3R267Z.js.map +1 -0
  20. package/dist/{chunk-M66MYHBT.js → chunk-NTLJ3INA.js} +2 -2
  21. package/dist/{chunk-T7RGD5JW.js → chunk-OYDJ3C4N.js} +3 -3
  22. package/dist/{chunk-UTL2SFIN.js → chunk-PZESEBD3.js} +2 -2
  23. package/dist/{chunk-LIEFKEAO.js → chunk-QHL4KGNB.js} +2 -2
  24. package/dist/{chunk-WLAQXITV.js → chunk-S36LIUV2.js} +12 -23
  25. package/dist/chunk-S36LIUV2.js.map +1 -0
  26. package/dist/{chunk-YLYT7GSG.js → chunk-SBZVRH4S.js} +2 -2
  27. package/dist/{chunk-V2KWEIV5.js → chunk-SHWGK7X6.js} +9 -60
  28. package/dist/chunk-SHWGK7X6.js.map +1 -0
  29. package/dist/{chunk-6YQCLEHL.js → chunk-SXL744NF.js} +2 -2
  30. package/dist/{chunk-4OPS2AUD.js → chunk-TXIUCEFT.js} +4 -4
  31. package/dist/chunk-TXIUCEFT.js.map +1 -0
  32. package/dist/{chunk-PZEE6T5Y.js → chunk-U7JXQSEM.js} +3 -3
  33. package/dist/{chunk-SZ7VPIRA.js → chunk-W2AIGD35.js} +2 -2
  34. package/dist/{chunk-73K7575Z.js → chunk-WUUEKFKG.js} +2 -2
  35. package/dist/{chunk-PKBKWWPK.js → chunk-X3JR3GMT.js} +3 -3
  36. package/dist/{chunk-S77SLJ2J.js → chunk-XGUDCUMB.js} +2 -2
  37. package/dist/{cli-circuit-breaker-O5RV47BO.js → cli-circuit-breaker-BIJUQRQI.js} +4 -4
  38. package/dist/cli.js +148 -70
  39. package/dist/cli.js.map +1 -1
  40. package/dist/{composite-router-SKHVZ4UF.js → composite-router-FB7P22L5.js} +2 -2
  41. package/dist/{consensus-vote-VBXLXVFF.js → consensus-vote-KKAIFULI.js} +11 -11
  42. package/dist/{context-retriever-KLJ5X4TL.js → context-retriever-4JCGMWH7.js} +5 -5
  43. package/dist/{doctor-deep-IH4FG5YZ.js → doctor-deep-7YK4BZIJ.js} +3 -3
  44. package/dist/expert-bridge-DJM5GAWZ.js +11 -0
  45. package/dist/{factory-FTE7TDCT.js → factory-DOWBGVAL.js} +5 -5
  46. package/dist/{factory-CQUDIMIG.js → factory-PK4EZL7K.js} +4 -4
  47. package/dist/index.d.ts +13 -1
  48. package/dist/index.js +24 -24
  49. package/dist/index.js.map +1 -1
  50. package/dist/{init-opencode-MXZJKG32.js → init-opencode-QP5CAMWN.js} +5 -5
  51. package/dist/{issue-triage-H5VLNGWU.js → issue-triage-T3SKNBH5.js} +4 -4
  52. package/dist/{registry-command-ALVYOGQY.js → registry-command-TH7U6UMC.js} +2 -2
  53. package/dist/{repo-security-plan-VJCWWPWO.js → repo-security-plan-V257RYTW.js} +3 -3
  54. package/dist/{research-helpers-synthesize-XUTBDVI7.js → research-helpers-synthesize-Y3O76PY4.js} +3 -3
  55. package/dist/{routing-memory-QKQ3OGWW.js → routing-memory-AAH7NIHD.js} +2 -2
  56. package/dist/{session-memory-N76TNRSK.js → session-memory-MY6YS2VX.js} +3 -3
  57. package/dist/{setup-command-3VQHU7BZ.js → setup-command-B6EC3OJA.js} +10 -10
  58. package/dist/{setup-config-Y7KZSFX3.js → setup-config-HVO6ZSLW.js} +3 -3
  59. package/dist/{setup-custom-api-QEKHNYQJ.js → setup-custom-api-UOIKUQL4.js} +4 -4
  60. package/dist/{tool-memory-MFDLIJOB.js → tool-memory-T7ZYIUJ2.js} +4 -4
  61. package/dist/{weather-report-IXPYIYE4.js → weather-report-O3Z3BBAX.js} +2 -2
  62. package/package.json +1 -1
  63. package/dist/chunk-4OPS2AUD.js.map +0 -1
  64. package/dist/chunk-EKLY4LBJ.js.map +0 -1
  65. package/dist/chunk-P4W7PV6L.js.map +0 -1
  66. package/dist/chunk-SVKH6ASN.js.map +0 -1
  67. package/dist/chunk-V2KWEIV5.js.map +0 -1
  68. package/dist/chunk-WLAQXITV.js.map +0 -1
  69. package/dist/expert-bridge-EKPDZKMD.js +0 -11
  70. /package/dist/{child-mcp-config-LLLRMOTQ.js.map → child-mcp-config-BMSYR7VV.js.map} +0 -0
  71. /package/dist/{chunk-ERWTZSAR.js.map → chunk-2R5UUBGA.js.map} +0 -0
  72. /package/dist/{chunk-BMNWUPJO.js.map → chunk-2SQXJQTA.js.map} +0 -0
  73. /package/dist/{chunk-PUSFT342.js.map → chunk-BL5IBHEY.js.map} +0 -0
  74. /package/dist/{chunk-Q27M6KHP.js.map → chunk-C7P2HLJX.js.map} +0 -0
  75. /package/dist/{chunk-UZCDHAY3.js.map → chunk-G2DZBEMU.js.map} +0 -0
  76. /package/dist/{chunk-WZGCVCRQ.js.map → chunk-GNG7URCR.js.map} +0 -0
  77. /package/dist/{chunk-RLQZOEMX.js.map → chunk-HJUHDPXJ.js.map} +0 -0
  78. /package/dist/{chunk-PV3OEDLO.js.map → chunk-HVZ52LOL.js.map} +0 -0
  79. /package/dist/{chunk-M66MYHBT.js.map → chunk-NTLJ3INA.js.map} +0 -0
  80. /package/dist/{chunk-T7RGD5JW.js.map → chunk-OYDJ3C4N.js.map} +0 -0
  81. /package/dist/{chunk-UTL2SFIN.js.map → chunk-PZESEBD3.js.map} +0 -0
  82. /package/dist/{chunk-LIEFKEAO.js.map → chunk-QHL4KGNB.js.map} +0 -0
  83. /package/dist/{chunk-YLYT7GSG.js.map → chunk-SBZVRH4S.js.map} +0 -0
  84. /package/dist/{chunk-6YQCLEHL.js.map → chunk-SXL744NF.js.map} +0 -0
  85. /package/dist/{chunk-PZEE6T5Y.js.map → chunk-U7JXQSEM.js.map} +0 -0
  86. /package/dist/{chunk-SZ7VPIRA.js.map → chunk-W2AIGD35.js.map} +0 -0
  87. /package/dist/{chunk-73K7575Z.js.map → chunk-WUUEKFKG.js.map} +0 -0
  88. /package/dist/{chunk-PKBKWWPK.js.map → chunk-X3JR3GMT.js.map} +0 -0
  89. /package/dist/{chunk-S77SLJ2J.js.map → chunk-XGUDCUMB.js.map} +0 -0
  90. /package/dist/{cli-circuit-breaker-O5RV47BO.js.map → cli-circuit-breaker-BIJUQRQI.js.map} +0 -0
  91. /package/dist/{composite-router-SKHVZ4UF.js.map → composite-router-FB7P22L5.js.map} +0 -0
  92. /package/dist/{consensus-vote-VBXLXVFF.js.map → consensus-vote-KKAIFULI.js.map} +0 -0
  93. /package/dist/{context-retriever-KLJ5X4TL.js.map → context-retriever-4JCGMWH7.js.map} +0 -0
  94. /package/dist/{doctor-deep-IH4FG5YZ.js.map → doctor-deep-7YK4BZIJ.js.map} +0 -0
  95. /package/dist/{expert-bridge-EKPDZKMD.js.map → expert-bridge-DJM5GAWZ.js.map} +0 -0
  96. /package/dist/{factory-CQUDIMIG.js.map → factory-DOWBGVAL.js.map} +0 -0
  97. /package/dist/{factory-FTE7TDCT.js.map → factory-PK4EZL7K.js.map} +0 -0
  98. /package/dist/{init-opencode-MXZJKG32.js.map → init-opencode-QP5CAMWN.js.map} +0 -0
  99. /package/dist/{issue-triage-H5VLNGWU.js.map → issue-triage-T3SKNBH5.js.map} +0 -0
  100. /package/dist/{registry-command-ALVYOGQY.js.map → registry-command-TH7U6UMC.js.map} +0 -0
  101. /package/dist/{repo-security-plan-VJCWWPWO.js.map → repo-security-plan-V257RYTW.js.map} +0 -0
  102. /package/dist/{research-helpers-synthesize-XUTBDVI7.js.map → research-helpers-synthesize-Y3O76PY4.js.map} +0 -0
  103. /package/dist/{routing-memory-QKQ3OGWW.js.map → routing-memory-AAH7NIHD.js.map} +0 -0
  104. /package/dist/{session-memory-N76TNRSK.js.map → session-memory-MY6YS2VX.js.map} +0 -0
  105. /package/dist/{setup-command-3VQHU7BZ.js.map → setup-command-B6EC3OJA.js.map} +0 -0
  106. /package/dist/{setup-config-Y7KZSFX3.js.map → setup-config-HVO6ZSLW.js.map} +0 -0
  107. /package/dist/{setup-custom-api-QEKHNYQJ.js.map → setup-custom-api-UOIKUQL4.js.map} +0 -0
  108. /package/dist/{tool-memory-MFDLIJOB.js.map → tool-memory-T7ZYIUJ2.js.map} +0 -0
  109. /package/dist/{weather-report-IXPYIYE4.js.map → weather-report-O3Z3BBAX.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/config/defaults-env.ts","../src/config/defaults.ts"],"sourcesContent":["/**\n * Environment Variable Override Helpers\n *\n * Provides utilities for reading configuration from environment variables\n * with type-safe fallbacks to defaults.\n *\n * @module config/defaults-env\n */\n\nimport type {\n CircuitBreakerDefaults,\n RateLimitDefaults,\n RetryDefaults,\n ToolRateLimitConfig,\n} from './defaults-types.js';\n\n// ============================================================================\n// Environment Variable Parsers\n// ============================================================================\n\n/**\n * Parses an integer from an environment variable with fallback.\n */\nexport function parseIntEnv(envKey: string, fallback: number): number {\n const envValue = process.env[envKey];\n if (envValue === undefined) {\n return fallback;\n }\n const parsed = parseInt(envValue, 10);\n return isNaN(parsed) || parsed <= 0 ? fallback : parsed;\n}\n\n/**\n * Parses a float from an environment variable with fallback.\n */\nexport function parseFloatEnv(envKey: string, fallback: number): number {\n const envValue = process.env[envKey];\n if (envValue === undefined) {\n return fallback;\n }\n const parsed = parseFloat(envValue);\n return isNaN(parsed) || !isFinite(parsed) ? fallback : parsed;\n}\n\n/**\n * Parses a boolean from an environment variable with fallback.\n * Only 'true'/'1' are truthy, 'false'/'0' are falsy.\n * Any other value returns the fallback.\n */\nexport function parseBoolEnv(envKey: string, fallback: boolean): boolean {\n const envValue = process.env[envKey]?.toLowerCase();\n if (envValue === undefined) {\n return fallback;\n }\n if (envValue === 'true' || envValue === '1') return true;\n if (envValue === 'false' || envValue === '0') return false;\n return fallback;\n}\n\n// ============================================================================\n// Config Getter Types (for lazy initialization)\n// ============================================================================\n\n/** Timeout defaults type from DEFAULTS object */\nexport interface TimeoutDefaultsConst {\n readonly cliMs: number;\n readonly cliSimpleMs: number;\n readonly cliComplexMs: number;\n readonly apiMs: number;\n readonly apiMaxMs: number;\n readonly workflowMs: number;\n readonly workflowMaxMs: number;\n readonly stepMs: number;\n readonly mcpMs: number;\n readonly mcpMaxMs: number;\n readonly healthCheckMs: number;\n readonly testGlobalMs: number;\n readonly testTaskMs: number;\n readonly circuitBreakerResetMs: number;\n}\n\n/** Tool rate limits type from DEFAULTS object */\nexport interface ToolRateLimitsConst {\n readonly orchestrate: ToolRateLimitConfig;\n readonly delegate: ToolRateLimitConfig;\n readonly workflow: ToolRateLimitConfig;\n readonly expert: ToolRateLimitConfig;\n}\n\n/** Rate limit defaults type from DEFAULTS object */\ninterface RateLimitDefaultsConst {\n readonly requestsPerMinute: number;\n readonly enabled: boolean;\n readonly maxConcurrent: number;\n readonly capacity: number;\n readonly refillRate: number;\n readonly refillIntervalMs: number;\n}\n\n/** Retry defaults type from DEFAULTS object */\ninterface RetryDefaultsConst {\n readonly maxRetries: number;\n readonly baseDelayMs: number;\n readonly maxDelayMs: number;\n readonly jitterFactor: number;\n}\n\n/** Circuit breaker defaults type from DEFAULTS object */\ninterface CircuitBreakerDefaultsConst {\n readonly failureThreshold: number;\n readonly resetTimeoutMs: number;\n readonly halfOpenSuccessThreshold: number;\n readonly countTimeoutsAsFailures: boolean;\n readonly countAuthFailuresAsFailures: boolean;\n readonly countRateLimitsAsFailures: boolean;\n readonly halfOpenMaxRequests: number;\n}\n\n// ============================================================================\n// Config Getter Factory Functions\n// ============================================================================\n\n/**\n * Creates a timeout getter function bound to the DEFAULTS object.\n */\nexport function createGetTimeout(\n timeoutDefaults: TimeoutDefaultsConst\n): (key: keyof TimeoutDefaultsConst) => number {\n return (key: keyof TimeoutDefaultsConst): number => {\n const envKey = `NEXUS_TIMEOUT_${key.replace(/Ms$/, '').toUpperCase()}`;\n return parseIntEnv(envKey, timeoutDefaults[key]);\n };\n}\n\n/**\n * Creates a retry config getter function bound to the DEFAULTS object.\n */\nexport function createGetRetryConfig(retryDefaults: RetryDefaultsConst): () => RetryDefaults {\n return (): RetryDefaults => {\n return {\n maxRetries: parseIntEnv('NEXUS_RETRY_MAX_RETRIES', retryDefaults.maxRetries),\n baseDelayMs: parseIntEnv('NEXUS_RETRY_BASE_DELAY', retryDefaults.baseDelayMs),\n maxDelayMs: parseIntEnv('NEXUS_RETRY_MAX_DELAY', retryDefaults.maxDelayMs),\n jitterFactor: parseFloatEnv('NEXUS_RETRY_JITTER', retryDefaults.jitterFactor),\n };\n };\n}\n\n/**\n * Creates a rate limit config getter function bound to the DEFAULTS object.\n */\nexport function createGetRateLimitConfig(\n rateLimitDefaults: RateLimitDefaultsConst\n): () => RateLimitDefaults {\n return (): RateLimitDefaults => {\n return {\n requestsPerMinute: parseIntEnv('NEXUS_RATE_LIMIT_RPM', rateLimitDefaults.requestsPerMinute),\n enabled: parseBoolEnv('NEXUS_RATE_LIMIT_ENABLED', rateLimitDefaults.enabled),\n maxConcurrent: parseIntEnv(\n 'NEXUS_RATE_LIMIT_MAX_CONCURRENT',\n rateLimitDefaults.maxConcurrent\n ),\n capacity: parseIntEnv('NEXUS_RATE_LIMIT_CAPACITY', rateLimitDefaults.capacity),\n refillRate: parseIntEnv('NEXUS_RATE_LIMIT_REFILL_RATE', rateLimitDefaults.refillRate),\n refillIntervalMs: parseIntEnv(\n 'NEXUS_RATE_LIMIT_REFILL_INTERVAL',\n rateLimitDefaults.refillIntervalMs\n ),\n };\n };\n}\n\n// createGetWorkerConfig removed in #2977 — see comment in config/defaults.ts.\n\n/**\n * Creates a circuit breaker config getter function bound to the DEFAULTS object.\n */\nexport function createGetCircuitBreakerConfig(\n cbDefaults: CircuitBreakerDefaultsConst\n): () => CircuitBreakerDefaults {\n return (): CircuitBreakerDefaults => {\n return {\n failureThreshold: parseIntEnv('NEXUS_CIRCUIT_BREAKER_THRESHOLD', cbDefaults.failureThreshold),\n resetTimeoutMs: parseIntEnv('NEXUS_CIRCUIT_BREAKER_RESET_TIMEOUT', cbDefaults.resetTimeoutMs),\n halfOpenSuccessThreshold: cbDefaults.halfOpenSuccessThreshold,\n countTimeoutsAsFailures: cbDefaults.countTimeoutsAsFailures,\n countAuthFailuresAsFailures: cbDefaults.countAuthFailuresAsFailures,\n countRateLimitsAsFailures: cbDefaults.countRateLimitsAsFailures,\n halfOpenMaxRequests: cbDefaults.halfOpenMaxRequests,\n };\n };\n}\n\n/**\n * Creates a tool rate limit getter function bound to the DEFAULTS object.\n */\nexport function createGetToolRateLimit(\n toolRateLimits: ToolRateLimitsConst\n): (tool: keyof ToolRateLimitsConst) => ToolRateLimitConfig {\n return (tool: keyof ToolRateLimitsConst): ToolRateLimitConfig => {\n return toolRateLimits[tool];\n };\n}\n\n// ============================================================================\n// Documentation Helper\n// ============================================================================\n\n/** DEFAULTS structure for documentation generation */\ninterface DefaultsForDocs {\n readonly TIMEOUT_DEFAULTS: TimeoutDefaultsConst;\n readonly RATE_LIMIT_DEFAULTS: RateLimitDefaultsConst;\n readonly RETRY_DEFAULTS: RetryDefaultsConst;\n readonly CIRCUIT_BREAKER_DEFAULTS: CircuitBreakerDefaultsConst;\n}\n\n/**\n * Creates a documentation generator function bound to the DEFAULTS object.\n *\n * @param defaults - The DEFAULTS object\n * @returns Function that generates environment variable documentation\n */\nexport function createGetEnvVarDocumentation(defaults: DefaultsForDocs): () => string {\n return (): string => {\n const t = defaults.TIMEOUT_DEFAULTS;\n const r = defaults.RATE_LIMIT_DEFAULTS;\n const rt = defaults.RETRY_DEFAULTS;\n const cb = defaults.CIRCUIT_BREAKER_DEFAULTS;\n\n return `# Environment Variable Overrides\n\nAll defaults can be overridden via environment variables using the NEXUS_ prefix.\n\n## Timeouts\n\n| Variable | Default | Description |\n| -------- | ------- | ----------- |\n| NEXUS_TIMEOUT_CLI | ${String(t.cliMs)} | CLI execution timeout (ms) |\n| NEXUS_TIMEOUT_API | ${String(t.apiMs)} | API request timeout (ms) |\n| NEXUS_TIMEOUT_WORKFLOW | ${String(t.workflowMs)} | Workflow timeout (ms) |\n| NEXUS_TIMEOUT_MCP | ${String(t.mcpMs)} | MCP operation timeout (ms) |\n\n## Rate Limits\n\n| Variable | Default | Description |\n| -------- | ------- | ----------- |\n| NEXUS_RATE_LIMIT_RPM | ${String(r.requestsPerMinute)} | Requests per minute |\n| NEXUS_RATE_LIMIT_ENABLED | ${String(r.enabled)} | Enable rate limiting |\n| NEXUS_RATE_LIMIT_CAPACITY | ${String(r.capacity)} | Token bucket capacity |\n\n## Retries\n\n| Variable | Default | Description |\n| -------- | ------- | ----------- |\n| NEXUS_RETRY_MAX_RETRIES | ${String(rt.maxRetries)} | Maximum retry attempts |\n| NEXUS_RETRY_BASE_DELAY | ${String(rt.baseDelayMs)} | Base delay (ms) |\n| NEXUS_RETRY_MAX_DELAY | ${String(rt.maxDelayMs)} | Maximum delay (ms) |\n| NEXUS_RETRY_JITTER | ${String(rt.jitterFactor)} | Jitter factor (0-1) |\n\n## Circuit Breaker\n\n| Variable | Default | Description |\n| -------- | ------- | ----------- |\n| NEXUS_CIRCUIT_BREAKER_THRESHOLD | ${String(cb.failureThreshold)} | Failure threshold |\n| NEXUS_CIRCUIT_BREAKER_RESET_TIMEOUT | ${String(cb.resetTimeoutMs)} | Reset timeout (ms) |\n`;\n };\n}\n","/**\n * Central Configuration Defaults\n *\n * Consolidates common default values used across the codebase.\n * This prevents scattered magic numbers and ensures consistency.\n *\n * Usage:\n * import { DEFAULTS, getTimeout, TIMEOUT_PROFILES } from '../config/defaults.js';\n * const timeout = options.timeout ?? DEFAULTS.TIMEOUT_DEFAULTS.cliMs;\n * const cliTimeout = getTimeoutForCli('claude', 'complex');\n *\n * Environment overrides can be added via NEXUS_* environment variables.\n *\n * @module config/defaults\n * (Source: Central config consolidation initiative)\n */\n\n// Re-export types from defaults-types\nexport type {\n TaskComplexity,\n TimeoutProfile,\n KnownCliName,\n TimeoutDefaults,\n RateLimitDefaults,\n ToolRateLimitConfig,\n RetryDefaults,\n CircuitBreakerDefaults,\n} from './defaults-types.js';\n\nexport { isTaskComplexity, isKnownCliName } from './defaults-types.js';\n\n// Re-export timeout profiles (delegates to config/timeouts.ts)\nexport {\n TIMEOUT_PROFILES,\n getTimeoutProfile,\n getTimeoutForCli,\n} from './defaults-timeout-profiles.js';\n\n// Re-export canonical timeout modules (Issue #984)\nexport {\n CLI_TIMEOUTS,\n VOTE_TIMEOUTS,\n MCP_TIMEOUTS,\n WORKFLOW_TIMEOUTS,\n GRAPH_TIMEOUTS,\n PER_CLI_TASK_TIMEOUTS,\n API_TIMEOUTS,\n INTERNAL_TIMEOUTS,\n TEST_TIMEOUTS,\n TIMEOUT_ENV_VARS,\n getCliTimeoutProfile,\n getCliTimeout,\n resolveVoteTimeout,\n resolveEnvTimeout,\n validateTimeout,\n BACKOFF_CONFIG,\n AGENT_ROUTER_TIMEOUTS,\n CODEX_MCP_TIMEOUTS,\n} from './timeouts.js';\n\n// Re-export env helpers (internal use)\nexport { parseIntEnv, parseFloatEnv, parseBoolEnv } from './defaults-env.js';\n\nimport {\n createGetTimeout,\n createGetRetryConfig,\n createGetRateLimitConfig,\n createGetCircuitBreakerConfig,\n createGetToolRateLimit,\n createGetEnvVarDocumentation,\n} from './defaults-env.js';\nimport {\n API_TIMEOUTS as _API,\n WORKFLOW_TIMEOUTS as _WF,\n MCP_TIMEOUTS as _MCP,\n INTERNAL_TIMEOUTS as _INT,\n TEST_TIMEOUTS as _TEST,\n CLI_TIMEOUTS as _CLI,\n} from './timeouts.js';\n\n// ============================================================================\n// Default Model IDs (#2200 Child 4)\n// ============================================================================\n\n/**\n * Default model identifier for the custom OpenAI-compatible API gateway.\n *\n * Used by both `cli/setup-custom-api.ts` (write to nexus-agents.yaml) and\n * `adapters/auto-adapter.ts` (NEXUS_CUSTOM_MODEL env-var fallback). Single\n * source of truth so changes flow through all consumers.\n *\n * `gpt-4o` is widely supported across OpenAI-compatible gateways (vLLM,\n * LiteLLM, Together AI, etc.) — a pragmatic baseline rather than the\n * cheapest or most capable. Operators are expected to override.\n */\nexport const CUSTOM_API_DEFAULT_MODEL = 'gpt-4o';\n\n// ============================================================================\n// Central Defaults Object\n// ============================================================================\n\n/**\n * Central defaults object containing all configuration categories.\n */\nexport const DEFAULTS = {\n /**\n * Default timeout settings in milliseconds.\n * Values sourced from config/timeouts.ts (Issue #984).\n */\n TIMEOUT_DEFAULTS: {\n /** CLI tool execution timeout in milliseconds. */\n cliMs: _CLI.default.standard,\n /** Simple CLI task timeout (single function, quick query). */\n cliSimpleMs: _CLI.default.simple,\n /** Complex CLI task timeout (codebase-wide, deep analysis). */\n cliComplexMs: _CLI.default.complex,\n /** API request timeout in milliseconds. */\n apiMs: _API.defaultMs,\n /** Maximum API timeout in milliseconds. */\n apiMaxMs: _API.maxMs,\n /** Workflow-level timeout in milliseconds (5 minutes). */\n workflowMs: _WF.workflowMs,\n /** Maximum workflow timeout in milliseconds (30 minutes). */\n workflowMaxMs: _WF.workflowMaxMs,\n /** Step-level timeout in milliseconds. */\n stepMs: _INT.selfEvalMs,\n /** MCP operation default timeout in milliseconds (generic, not per-tool). */\n mcpMs: _API.defaultMs,\n /** MCP operation maximum timeout in milliseconds. */\n mcpMaxMs: _MCP.maxMs,\n /** Health check timeout in milliseconds. */\n healthCheckMs: _INT.healthCheckMs,\n /** Global test run timeout in milliseconds (10 minutes). */\n testGlobalMs: _TEST.globalMs,\n /** Per-task test timeout in milliseconds. */\n testTaskMs: _TEST.taskMs,\n /** Circuit breaker reset timeout in milliseconds. */\n circuitBreakerResetMs: _INT.circuitBreakerResetMs,\n },\n\n /**\n * Default rate limit settings for outbound operations.\n */\n RATE_LIMIT_DEFAULTS: {\n /** Global requests per minute. */\n requestsPerMinute: 60,\n /** Whether rate limiting is enabled by default. */\n enabled: true,\n /** Maximum number of concurrent requests. */\n maxConcurrent: 4,\n /** Token bucket capacity. */\n capacity: 100,\n /** Token bucket refill rate per second. */\n refillRate: 10,\n /** Refill interval in milliseconds. */\n refillIntervalMs: 100,\n },\n\n /**\n * Per-tool rate limit defaults for MCP tools.\n * (Source: Issue #274 Phase 2 - per-tool rate limits)\n */\n TOOL_RATE_LIMITS: {\n orchestrate: { capacity: 10, refillRate: 10, refillIntervalMs: 60_000 },\n delegate: { capacity: 20, refillRate: 20, refillIntervalMs: 60_000 },\n workflow: { capacity: 5, refillRate: 5, refillIntervalMs: 60_000 },\n expert: { capacity: 30, refillRate: 30, refillIntervalMs: 60_000 },\n },\n\n /**\n * Default retry strategy settings for transient failures.\n */\n RETRY_DEFAULTS: {\n /** Maximum retry attempts before failing. */\n maxRetries: 3,\n /** Base delay between retries in milliseconds. */\n baseDelayMs: 1_000,\n /** Maximum delay between retries in milliseconds. */\n maxDelayMs: 30_000,\n /** Jitter factor (0-1) to randomize retry delays. */\n jitterFactor: 0.1,\n },\n\n /**\n * Workflow-specific retry defaults.\n */\n WORKFLOW_RETRY_DEFAULTS: {\n /** Maximum retry attempts for workflow steps. */\n maxRetries: 2,\n /** Base delay for workflow retries in milliseconds. */\n baseDelayMs: 2_000,\n /** Maximum delay for workflow retries in milliseconds. */\n maxDelayMs: 60_000,\n /** Jitter factor for workflow retries. */\n jitterFactor: 0.15,\n },\n\n /**\n * CLI-specific retry defaults.\n */\n CLI_RETRY_DEFAULTS: {\n /** Maximum retry attempts for CLI operations. */\n maxRetries: 2,\n /** Base delay for CLI retries in milliseconds. */\n baseDelayMs: 5_000,\n /** Maximum delay for CLI retries in milliseconds. */\n maxDelayMs: 60_000,\n /** Jitter factor for CLI retries. */\n jitterFactor: 0.2,\n },\n\n /**\n * Test framework retry defaults.\n */\n TEST_RETRY_DEFAULTS: {\n /** Maximum retries per test task. */\n maxRetries: 2,\n /** Whether to retry failed tasks by default. */\n retryFailedTasks: true,\n },\n\n /**\n * Default buffer sizing for batching and chunked processing.\n */\n BUFFER_DEFAULTS: {\n /** Preferred batch size for bulk operations. */\n batchSize: 100,\n /** Chunk size for streaming or segmented processing. */\n chunkSize: 256,\n /** Maximum items allowed in a buffer. */\n maxItems: 1_000,\n /** Maximum memory size in bytes (10 MB). */\n maxMemoryBytes: 10 * 1024 * 1024,\n /** Log buffer flush interval in milliseconds. */\n logFlushIntervalMs: 5_000,\n },\n\n // WORKER_DEFAULTS removed in #2977 — the eight settings under this category\n // (maxWorkers, poolSize, idleTimeoutMs, workflowMaxParallel, testParallelism,\n // evaluationMaxWorkers, eventBusMaxHistory, swarmObserverMaxEvents) had zero\n // production consumers. `getWorkerConfig()` was never called from anywhere\n // in src/, and the matching NEXUS_WORKERS_* env vars were silent no-ops.\n // Silent config rot is worse than missing knobs; re-add when a concrete\n // consumer exists.\n\n /**\n * Default circuit breaker settings.\n * (Source: Issue #81 - Circuit breaker for CLI failures)\n */\n CIRCUIT_BREAKER_DEFAULTS: {\n /** Failure threshold to open circuit. */\n failureThreshold: 5,\n /** Reset timeout in milliseconds. */\n resetTimeoutMs: 30_000,\n /** Success threshold to close circuit in half-open state. */\n halfOpenSuccessThreshold: 2,\n /** Whether to count timeouts as failures. */\n countTimeoutsAsFailures: true,\n /** Whether to count auth failures as failures. */\n countAuthFailuresAsFailures: false,\n /** Whether to count rate limit errors as failures (#1529). */\n countRateLimitsAsFailures: true,\n /** Maximum requests allowed in half-open state. */\n halfOpenMaxRequests: 3,\n },\n\n /**\n * Default context/memory settings.\n */\n CONTEXT_DEFAULTS: {\n /** Maximum context tokens. */\n maxTokens: 100_000,\n /** Token budget warning threshold (80%). */\n warningThreshold: 0.8,\n /** Token budget critical threshold (95%). */\n criticalThreshold: 0.95,\n /** Maximum history entries to retain. */\n maxHistoryEntries: 1_000,\n },\n\n /**\n * Default provider/model settings.\n */\n PROVIDER_DEFAULTS: {\n /** Default timeout for provider API calls in ms. */\n timeout: 30_000,\n /** Maximum retries for provider requests. */\n maxRetries: 3,\n /** Default model tier. */\n defaultTier: 'balanced' as const,\n /** Default temperature. */\n temperatureDefault: 0.3,\n /** Minimum temperature. */\n temperatureMin: 0,\n /** Maximum temperature. */\n temperatureMax: 1,\n /** Billing mode: 'plan' (monthly subscription) or 'api' (pay-per-token). Env: NEXUS_BILLING_MODE */\n billingMode: 'plan' as const,\n },\n\n /**\n * Security-related defaults.\n */\n SECURITY_DEFAULTS: {\n /** Maximum system prompt length in characters. */\n maxSystemPromptLength: 4_000,\n /** Default policy execution mode. */\n policyDefaultMode: 'read-only' as const,\n /** Default policy mode. */\n policyMode: 'enforce' as const,\n /** Default sandbox mode. */\n sandboxMode: 'policy' as const,\n /** Whether to fall back to policy mode if container unavailable. */\n sandboxFallbackToPolicy: true,\n /** Whether network is enabled in container mode. */\n sandboxNetworkEnabled: false,\n },\n} as const;\n\n// ============================================================================\n// Type Exports for DEFAULTS\n// ============================================================================\n\n/** Type for the DEFAULTS object (readonly/const). */\nexport type DefaultsConfig = typeof DEFAULTS;\n\n/** Type for timeout defaults (readonly/const). */\nexport type TimeoutDefaultsConst = typeof DEFAULTS.TIMEOUT_DEFAULTS;\n\n/** Type for rate limit defaults (readonly/const). */\nexport type RateLimitDefaultsConst = typeof DEFAULTS.RATE_LIMIT_DEFAULTS;\n\n/** Type for retry defaults (readonly/const). */\nexport type RetryDefaultsConst = typeof DEFAULTS.RETRY_DEFAULTS;\n\n/** Type for buffer defaults (readonly/const). */\nexport type BufferDefaults = typeof DEFAULTS.BUFFER_DEFAULTS;\n\n/** Type for circuit breaker defaults (readonly/const). */\nexport type CircuitBreakerDefaultsConst = typeof DEFAULTS.CIRCUIT_BREAKER_DEFAULTS;\n\n/** Type for context defaults (readonly/const). */\nexport type ContextDefaults = typeof DEFAULTS.CONTEXT_DEFAULTS;\n\n/** Type for provider defaults (readonly/const). */\nexport type ProviderDefaults = typeof DEFAULTS.PROVIDER_DEFAULTS;\n\n/** Type for security defaults (readonly/const). */\nexport type SecurityDefaults = typeof DEFAULTS.SECURITY_DEFAULTS;\n\n// ============================================================================\n// Environment Override Functions (bound to DEFAULTS)\n// ============================================================================\n\n/**\n * Get timeout with environment override support.\n *\n * @param key - Timeout key (e.g., 'cliMs', 'apiMs')\n * @returns Timeout value in milliseconds\n */\nexport const getTimeout = createGetTimeout(DEFAULTS.TIMEOUT_DEFAULTS);\n\n/**\n * Get retry config with environment override support.\n *\n * @returns Retry configuration\n */\nexport const getRetryConfig = createGetRetryConfig(DEFAULTS.RETRY_DEFAULTS);\n\n/**\n * Get rate limit config with environment override support.\n *\n * @returns Rate limit configuration\n */\nexport const getRateLimitConfig = createGetRateLimitConfig(DEFAULTS.RATE_LIMIT_DEFAULTS);\n\n/**\n * Gets the circuit breaker configuration.\n *\n * @returns Circuit breaker configuration\n */\nexport const getCircuitBreakerConfig = createGetCircuitBreakerConfig(\n DEFAULTS.CIRCUIT_BREAKER_DEFAULTS\n);\n\n/**\n * Gets the tool rate limit configuration for a specific tool category.\n *\n * @param tool - Tool category (orchestrate, delegate, workflow, expert)\n * @returns Rate limit configuration\n */\nexport const getToolRateLimit = createGetToolRateLimit(DEFAULTS.TOOL_RATE_LIMITS);\n\n// ============================================================================\n// Documentation Helper\n// ============================================================================\n\n/**\n * Returns documentation for all environment variable overrides.\n *\n * @returns Markdown documentation string\n */\nexport const getEnvVarDocumentation = createGetEnvVarDocumentation(DEFAULTS);\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getErrorMessage
3
- } from "./chunk-LJIB6TNE.js";
3
+ } from "./chunk-7VNVDFD5.js";
4
4
 
5
5
  // src/cli/setup-config.ts
6
6
  import { copyFileSync, existsSync, mkdirSync, writeFileSync } from "fs";
@@ -77,4 +77,4 @@ function ensureBackup(outputPath) {
77
77
  export {
78
78
  runConfigInitSync
79
79
  };
80
- //# sourceMappingURL=chunk-6YQCLEHL.js.map
80
+ //# sourceMappingURL=chunk-SXL744NF.js.map
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  getToolMemory
3
- } from "./chunk-PZEE6T5Y.js";
3
+ } from "./chunk-U7JXQSEM.js";
4
4
  import {
5
5
  CLI_NAMES,
6
6
  StrategyDistiller,
7
7
  createLogger,
8
8
  getOutcomeStore,
9
9
  registerPersistentDistillerFactory
10
- } from "./chunk-LJIB6TNE.js";
10
+ } from "./chunk-7VNVDFD5.js";
11
11
  import {
12
12
  ensureLearningDir,
13
13
  getRulesFile
@@ -94,7 +94,7 @@ var PersistentStrategyDistiller = class extends StrategyDistiller {
94
94
  savedAt: (/* @__PURE__ */ new Date()).toISOString(),
95
95
  rules
96
96
  };
97
- const tmpPath = this.filePath + ".tmp";
97
+ const tmpPath = `${this.filePath}.tmp.${String(process.pid)}`;
98
98
  try {
99
99
  ensureLearningDir(dirname(this.filePath));
100
100
  writeFileSync(tmpPath, JSON.stringify(snapshot, null, 2), "utf-8");
@@ -273,4 +273,4 @@ export {
273
273
  inferTaskCategory,
274
274
  summarizeContextForPrompt
275
275
  };
276
- //# sourceMappingURL=chunk-4OPS2AUD.js.map
276
+ //# sourceMappingURL=chunk-TXIUCEFT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/learning/strategy-distiller-persistence.ts","../src/context/context-retriever.ts"],"sourcesContent":["/**\n * Persistent StrategyDistiller — JSON-backed cross-session persistence.\n *\n * Extends StrategyDistiller with atomic disk writes (write tmp + rename)\n * for distilled rules. Hydrates from a versioned JSON snapshot on\n * construction; saves after every distill() call.\n *\n * @module learning/strategy-distiller-persistence\n * (Source: Issue #1009 — Cross-session persistence)\n */\n\nimport { writeFileSync, readFileSync, renameSync, unlinkSync, existsSync } from 'node:fs';\nimport { dirname } from 'node:path';\nimport { z } from 'zod';\nimport { CLI_NAMES } from '../config/model-capabilities-types.js';\n\nimport type { ILogger } from '../core/index.js';\nimport { createLogger } from '../core/index.js';\nimport type { OutcomeStore } from '../orchestration/outcomes/outcome-store.js';\nimport type { DistilledRule, DistillerConfig } from './strategy-distiller-types.js';\nimport { StrategyDistiller, registerPersistentDistillerFactory } from './strategy-distiller.js';\nimport { ensureLearningDir, getRulesFile } from '../config/learning-persistence.js';\n\n// ============================================================================\n// Versioned Schema\n// ============================================================================\n\nconst DistilledRuleSchema = z.object({\n id: z.string(),\n patternType: z.enum(['failure-rate', 'success-rate', 'latency-spike']),\n cli: z.enum(CLI_NAMES),\n category: z.string(),\n action: z.enum(['penalize', 'boost', 'avoid']),\n confidence: z.number(),\n observationCount: z.number(),\n metric: z.number(),\n status: z.enum(['draft', 'active', 'promoted', 'expired']),\n createdAt: z.number(),\n updatedAt: z.number(),\n tainted: z.boolean(),\n});\n\n/** Versioned snapshot schema for atomic saves. */\nexport const RulesSnapshotSchema = z.object({\n version: z.literal(1),\n savedAt: z.string(),\n rules: z.array(DistilledRuleSchema),\n});\n\nexport type RulesSnapshot = z.infer<typeof RulesSnapshotSchema>;\n\n// ============================================================================\n// Configuration\n// ============================================================================\n\nexport interface PersistentDistillerConfig {\n /** Override the file path (useful for testing). */\n readonly filePath?: string;\n /** Override the data directory (useful for testing). */\n readonly dataDir?: string;\n}\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\n/**\n * StrategyDistiller that persists distilled rules to a JSON file.\n *\n * - Construction: hydrates from rules.json via Zod validation\n * - distill(): calls super.distill() then atomically saves snapshot\n * - Corruption: warn + start fresh (no partial loads)\n */\nexport class PersistentStrategyDistiller extends StrategyDistiller {\n private readonly filePath: string;\n private readonly persistLogger: ILogger;\n\n constructor(\n outcomeStore: OutcomeStore,\n persistConfig?: PersistentDistillerConfig,\n logger?: ILogger,\n distillerConfig?: Partial<DistillerConfig>\n ) {\n super(outcomeStore, logger, distillerConfig);\n this.filePath = persistConfig?.filePath ?? getRulesFile();\n this.persistLogger = logger ?? createLogger({ component: 'PersistentStrategyDistiller' });\n\n const dataDir = persistConfig?.dataDir;\n ensureLearningDir(dataDir);\n this.hydrate();\n }\n\n /** Override distill to persist rules after each run. */\n override distill(): void {\n super.distill();\n this.saveSnapshot();\n }\n\n // ==========================================================================\n // Private\n // ==========================================================================\n\n private hydrate(): void {\n if (!existsSync(this.filePath)) {\n this.persistLogger.debug('No rules file found, starting fresh', {\n path: this.filePath,\n });\n return;\n }\n\n try {\n const content = readFileSync(this.filePath, 'utf-8');\n const parsed: unknown = JSON.parse(content);\n const result = RulesSnapshotSchema.safeParse(parsed);\n\n if (!result.success) {\n this.persistLogger.warn('Rules file failed validation, starting fresh', {\n path: this.filePath,\n error: result.error.message,\n });\n return;\n }\n\n this.loadRules(result.data.rules);\n this.persistLogger.info('Hydrated distilled rules from disk', {\n ruleCount: result.data.rules.length,\n savedAt: result.data.savedAt,\n path: this.filePath,\n });\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n this.persistLogger.warn('Failed to hydrate rules from disk', {\n error: msg,\n path: this.filePath,\n });\n }\n }\n\n private saveSnapshot(): void {\n const rules = this.getRules();\n const snapshot: RulesSnapshot = {\n version: 1,\n savedAt: new Date().toISOString(),\n rules: rules as DistilledRule[],\n };\n\n // PID-suffixed temp path so two processes saving concurrently don't truncate each\n // other's temp file mid-renameSync. Matches the convention in correlation-persistence.ts\n // and research-auto-catalog.ts. Closes #2972.\n const tmpPath = `${this.filePath}.tmp.${String(process.pid)}`;\n try {\n // Ensure parent directory exists\n ensureLearningDir(dirname(this.filePath));\n // Atomic write: temp file + rename\n writeFileSync(tmpPath, JSON.stringify(snapshot, null, 2), 'utf-8');\n renameSync(tmpPath, this.filePath);\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n this.persistLogger.warn('Failed to persist rules to disk', {\n error: msg,\n path: this.filePath,\n });\n // Clean up temp file on failure\n try {\n if (existsSync(tmpPath)) unlinkSync(tmpPath);\n } catch (cleanupErr: unknown) {\n const msg = cleanupErr instanceof Error ? cleanupErr.message : String(cleanupErr);\n this.persistLogger.debug('Failed to clean up temp file during persist', {\n path: tmpPath,\n error: msg,\n });\n }\n }\n }\n}\n\n// Self-register factory so CompositeRouter can create PersistentStrategyDistiller\n// without a circular top-level import.\nregisterPersistentDistillerFactory(\n (outcomeStore, logger) => new PersistentStrategyDistiller(outcomeStore, undefined, logger)\n);\n\n/**\n * Phase 5 of #2792 — read the persisted distilled rules from disk\n * without needing a live `StrategyDistiller` instance.\n *\n * `ContextRetriever` uses this so `UnifiedContext.priorStrategies`\n * surfaces the routing learnings the CompositeRouter has already\n * derived, even when the consumer is in a different process / scope\n * (e.g. an `orchestrate` invocation that hasn't constructed its own\n * router yet).\n *\n * Returns `[]` when the file is missing, corrupt, or unreadable; never\n * throws. The caller is responsible for filtering to status / category /\n * tainted as appropriate — this loader returns the raw rule set so\n * future consumers can apply their own predicates.\n */\nexport function loadPersistedRules(filePath: string = getRulesFile()): readonly DistilledRule[] {\n if (!existsSync(filePath)) return [];\n try {\n const content = readFileSync(filePath, 'utf-8');\n const parsed: unknown = JSON.parse(content);\n const result = RulesSnapshotSchema.safeParse(parsed);\n if (!result.success) return [];\n return result.data.rules;\n } catch {\n // Disk read / parse failures contribute an empty list — the consumer\n // contract is \"absence means no signal,\" never an exception.\n return [];\n }\n}\n","/**\n * ContextRetriever — the unified read surface every entry point should call\n * to learn what we already know about a task.\n *\n * Phase 2 of #2792. Before this module, each entry point (routing, orchestration,\n * graph workflow, expert creation) reinvented memory access — or, more commonly,\n * skipped it entirely. That made every backend write-only in practice.\n *\n * `getContextForTask({ task, category })` is the one function every entry point\n * calls. It fans out across the shared backends in parallel, tolerates\n * individual failures (never throws), and returns a typed `UnifiedContext`\n * the consumer can either use directly or summarize into a prompt.\n *\n * **Implementation choice — typed singletons, not registry fan-out.**\n * Phase 1 (#2793) made `IMemoryBackend.query()` real on every attached\n * domain, so a registry-level `Promise.all(...domains.map(d => d.query()))`\n * would now work. But the result type is `unknown[]` per domain, which\n * loses the typed shapes consumers want. For typed reads, reaching into\n * `getToolMemory()` and `getOutcomeStore()` directly is cleaner. The\n * registry-level fan-out remains the right path for opaque/observability\n * consumers like `memory_stats`.\n *\n * @module context/context-retriever\n * (Source: #2792 / #2794)\n */\n\nimport type { Belief } from './belief-core-types.js';\nimport type { AgenticMemoryEntry } from './agentic-memory.js';\nimport type { ScoredMemoryEntry } from './adaptive-memory-types.js';\nimport type { ExperienceEntry } from './mobimem-types.js';\nimport type { PerformanceSummary } from '../orchestration/outcomes/outcome-types.js';\nimport type { TaskCategory } from '../config/task-specialization-types.js';\nimport type { DistilledRule } from '../learning/strategy-distiller-types.js';\nimport type { ILogger } from '../core/logger.js';\nimport { createLogger } from '../core/logger.js';\nimport { getToolMemory } from '../mcp/tools/tool-memory.js';\nimport { getOutcomeStore } from '../orchestration/outcomes/outcome-store.js';\nimport { loadPersistedRules } from '../learning/strategy-distiller-persistence.js';\n\n/**\n * What we know about a task, derived from every shared memory backend.\n *\n * Every field is `readonly` and may be empty — consumers should treat\n * absence as \"no signal,\" not failure. Errors fetching any single backend\n * are logged and produce empty results for that field; the function as a\n * whole never throws.\n */\nexport interface UnifiedContext {\n /** Beliefs whose subject matches the task text. */\n readonly beliefs: readonly Belief[];\n /** A-MEM Zettelkasten entries similar to the task. */\n readonly similarMemories: readonly AgenticMemoryEntry[];\n /** Adaptive priority-scored entries ranked by relevance + recency + importance. */\n readonly recentLearnings: readonly ScoredMemoryEntry[];\n /** MobiMem patterns observed for the task type. */\n readonly experiencePatterns: readonly ExperienceEntry[];\n /** Performance summary scoped to the requested category. */\n readonly outcomes: PerformanceSummary | null;\n /** Distilled routing rules — populated once #2797 lands; empty until then. */\n readonly priorStrategies: readonly DistilledRule[];\n}\n\n/** Options accepted by {@link getContextForTask}. */\nexport interface ContextRetrieverOptions {\n /** Free-text description of the task. Used as the search term. */\n readonly task: string;\n /** Canonical category for outcome scoping. */\n readonly category: TaskCategory;\n /** Per-backend cap on returned rows. Defaults to 5. */\n readonly limit?: number;\n /** Optional logger override. */\n readonly logger?: ILogger;\n}\n\n/** Sensible default — small enough to embed in a prompt, large enough to be useful. */\nconst DEFAULT_LIMIT = 5;\n\n/**\n * The canonical \"what do we already know about this task\" read.\n *\n * Wire this at the top of every entry point: `CompositeRouter.route`,\n * `orchestrate`, graph workflow start, `create_expert`. Even if the\n * consumer initially just logs the result, every backend's read path\n * gets exercised and the silos visibly converge.\n *\n * Latency: O(slowest individual backend). Each backend's call is wrapped\n * so a slow/failing one doesn't block the others. No caching in this\n * version — if a hot caller emerges, layer a TTL cache on top.\n */\nexport async function getContextForTask(options: ContextRetrieverOptions): Promise<UnifiedContext> {\n const limit = options.limit ?? DEFAULT_LIMIT;\n const logger = options.logger ?? createLogger({ component: 'ContextRetriever' });\n\n const [beliefs, similarMemories, recentLearnings, experiencePatterns, outcomes] =\n await Promise.all([\n fetchBeliefs(options.task, limit, logger),\n fetchSimilarMemories(options.task, limit, logger),\n fetchRecentLearnings(options.task, limit, logger),\n fetchExperiencePatterns(options.task, limit, logger),\n fetchOutcomes(options.category, logger),\n ]);\n\n const priorStrategies = fetchPriorStrategies(options.category, limit, logger);\n\n return {\n beliefs,\n similarMemories,\n recentLearnings,\n experiencePatterns,\n outcomes,\n priorStrategies,\n };\n}\n\n/**\n * Phase 5 of #2792 — surface distilled routing rules in the unified\n * context. Reads from the persisted rules file (written by\n * `PersistentStrategyDistiller`) so consumers see the same learnings the\n * CompositeRouter applies at decision time, without needing a live\n * router instance.\n *\n * Filters to (a) `status === 'active'` (rules that aren't deprecated or\n * shadowed), (b) `tainted === false` (security gate — tainted rules\n * never reach consumers per Phase 5 acceptance), and (c) category\n * matching the task's category or a global rule.\n */\nfunction fetchPriorStrategies(\n category: TaskCategory,\n limit: number,\n logger: ILogger\n): readonly DistilledRule[] {\n try {\n const all = loadPersistedRules();\n return all\n .filter((r) => r.status === 'active' && !r.tainted)\n .filter((r) => r.category === category || r.category === '*')\n .slice(0, limit);\n } catch (error: unknown) {\n logger.debug('ContextRetriever: prior-strategies fetch failed', {\n error: formatError(error),\n });\n return [];\n }\n}\n\nasync function fetchBeliefs(\n task: string,\n limit: number,\n logger: ILogger\n): Promise<readonly Belief[]> {\n try {\n const tm = getToolMemory(logger);\n const beliefs = tm.getBeliefMemory();\n const result = await beliefs.recallBySubject(task, limit);\n return result.ok ? result.value : [];\n } catch (error: unknown) {\n logger.debug('ContextRetriever: belief fetch failed', { error: formatError(error) });\n return [];\n }\n}\n\nasync function fetchSimilarMemories(\n task: string,\n limit: number,\n logger: ILogger\n): Promise<readonly AgenticMemoryEntry[]> {\n try {\n const tm = getToolMemory(logger);\n const agentic = tm.getAgenticMemoryBackend();\n if (agentic === null) return [];\n const result = await agentic.searchAgentic(task, limit);\n return result.ok ? result.value : [];\n } catch (error: unknown) {\n logger.debug('ContextRetriever: agentic search failed', { error: formatError(error) });\n return [];\n }\n}\n\nasync function fetchRecentLearnings(\n task: string,\n limit: number,\n logger: ILogger\n): Promise<readonly ScoredMemoryEntry[]> {\n try {\n const tm = getToolMemory(logger);\n const adaptive = tm.getAdaptiveMemoryBackend();\n if (adaptive === null) return [];\n const result = await adaptive.retrieveByPriority({ query: task, limit });\n return result.ok ? result.value : [];\n } catch (error: unknown) {\n logger.debug('ContextRetriever: adaptive fetch failed', { error: formatError(error) });\n return [];\n }\n}\n\nfunction fetchExperiencePatterns(\n task: string,\n limit: number,\n logger: ILogger\n): Promise<readonly ExperienceEntry[]> {\n try {\n const tm = getToolMemory(logger);\n const mobimem = tm.getMobiMem();\n if (mobimem === null) return Promise.resolve([]);\n return Promise.resolve(mobimem.experience.findPatterns(task, limit));\n } catch (error: unknown) {\n logger.debug('ContextRetriever: mobimem fetch failed', { error: formatError(error) });\n return Promise.resolve([]);\n }\n}\n\nfunction fetchOutcomes(\n category: TaskCategory,\n logger: ILogger\n): Promise<PerformanceSummary | null> {\n try {\n const store = getOutcomeStore();\n return Promise.resolve(store.summarize({ category }));\n } catch (error: unknown) {\n logger.debug('ContextRetriever: outcomes fetch failed', { error: formatError(error) });\n return Promise.resolve(null);\n }\n}\n\nfunction formatError(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\n/**\n * Best-effort {@link TaskCategory} inference from free-text task content.\n * Used by entry-point wiring (Phase 3 / #2795) when the caller doesn't\n * carry a structured category. Keyword-based; if nothing matches,\n * returns `'exploration'` (which scopes the outcomes summary to the\n * broadest historical baseline).\n *\n * Intentionally simple — this is a *fallback*, not a classifier. Real\n * classification happens at routing time via `cli-adapters/task-classifier`.\n */\nexport function inferTaskCategory(task: string): TaskCategory {\n const t = task.toLowerCase();\n if (/security|vulnerab|cve|threat|owasp|injection|xss/.test(t)) return 'security_review';\n if (/architect|design doc|rfc|adr|system design/.test(t)) return 'architecture';\n if (/test|spec|coverage|vitest|jest|pytest/.test(t)) return 'testing';\n if (/review|audit|critique|feedback/.test(t)) return 'code_review';\n if (/docs|documentation|readme|tutorial|guide/.test(t)) return 'documentation';\n if (/plan|roadmap|epic|sprint|breakdown/.test(t)) return 'planning';\n if (/research|investigate|explore|survey|analyze/.test(t)) return 'research';\n if (/deploy| ci |\\bcd\\b|pipeline|kubernetes|docker|infra|terraform/.test(t)) return 'devops';\n if (/implement|build|create|add|refactor|fix|bug|feature/.test(t)) return 'code_generation';\n return 'exploration';\n}\n\n/**\n * Project a {@link UnifiedContext} into a compact human-readable block\n * suitable for prepending to a system prompt. Skips empty sections so\n * the prefix never wastes tokens on \\\"no signal.\\\"\n *\n * Phase 3 of #2792 — used by `orchestrate` and graph workflow start to\n * surface accumulated memory at the entry point.\n */\nexport function summarizeContextForPrompt(ctx: UnifiedContext): string {\n const sections: string[] = [];\n\n if (ctx.beliefs.length > 0) {\n const lines = ctx.beliefs\n .slice(0, 5)\n .map((b) => `- ${b.subject} ${b.predicate} ${b.object} (confidence: ${b.confidence})`);\n sections.push(`### Beliefs\\n${lines.join('\\n')}`);\n }\n\n if (ctx.similarMemories.length > 0) {\n const lines = ctx.similarMemories\n .slice(0, 3)\n .map((m) => `- ${m.attributes.contextDescription}`);\n sections.push(`### Similar prior work\\n${lines.join('\\n')}`);\n }\n\n if (ctx.experiencePatterns.length > 0) {\n const lines = ctx.experiencePatterns\n .slice(0, 3)\n .map(\n (p) =>\n `- ${p.taskType}: ${(p.successRate * 100).toFixed(0)}% success over ${String(p.attemptCount)} attempts`\n );\n sections.push(`### Observed patterns\\n${lines.join('\\n')}`);\n }\n\n if (ctx.outcomes !== null && ctx.outcomes.totalTasks > 0) {\n sections.push(\n `### Outcomes for this category\\n- ${String(ctx.outcomes.totalTasks)} prior tasks, ${(ctx.outcomes.successRate * 100).toFixed(0)}% success`\n );\n }\n\n return sections.length === 0 ? '' : `## Prior Context (Nexus Memory)\\n${sections.join('\\n\\n')}`;\n}\n"],"mappings":"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","names":["msg"]}
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-PQHVC4BD.js";
9
9
  import {
10
10
  SessionMemory
11
- } from "./chunk-PV3OEDLO.js";
11
+ } from "./chunk-HVZ52LOL.js";
12
12
  import {
13
13
  ErrorCode,
14
14
  NexusError,
@@ -22,7 +22,7 @@ import {
22
22
  getTimeProvider,
23
23
  ok,
24
24
  setSharedMobiMemDbPathResolver
25
- } from "./chunk-LJIB6TNE.js";
25
+ } from "./chunk-7VNVDFD5.js";
26
26
  import {
27
27
  nexusDataPath
28
28
  } from "./chunk-I2HMWH4R.js";
@@ -5578,4 +5578,4 @@ export {
5578
5578
  reinitializeMemoryBackends,
5579
5579
  ToolMemoryManager
5580
5580
  };
5581
- //# sourceMappingURL=chunk-PZEE6T5Y.js.map
5581
+ //# sourceMappingURL=chunk-U7JXQSEM.js.map
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  createLogger,
6
6
  getTimeProvider
7
- } from "./chunk-LJIB6TNE.js";
7
+ } from "./chunk-7VNVDFD5.js";
8
8
 
9
9
  // src/mcp/tools/scanner-registry-fetcher.ts
10
10
  import { z } from "zod";
@@ -721,4 +721,4 @@ export {
721
721
  generateSecurityPlan,
722
722
  buildPlanFromAnalysis
723
723
  };
724
- //# sourceMappingURL=chunk-SZ7VPIRA.js.map
724
+ //# sourceMappingURL=chunk-W2AIGD35.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createLogger
3
- } from "./chunk-LJIB6TNE.js";
3
+ } from "./chunk-7VNVDFD5.js";
4
4
 
5
5
  // src/config/available-models-cache.ts
6
6
  var logger = createLogger({ component: "available-models-cache" });
@@ -150,4 +150,4 @@ export {
150
150
  getDefaultAvailableModelsCache,
151
151
  setDefaultAvailableModelsCache
152
152
  };
153
- //# sourceMappingURL=chunk-73K7575Z.js.map
153
+ //# sourceMappingURL=chunk-WUUEKFKG.js.map
@@ -3,14 +3,14 @@ import {
3
3
  createStream,
4
4
  requireApiKey,
5
5
  validateApiKeyPresence
6
- } from "./chunk-YLYT7GSG.js";
6
+ } from "./chunk-SBZVRH4S.js";
7
7
  import {
8
8
  ModelCapability,
9
9
  err,
10
10
  getCliModelName,
11
11
  getTokenEstimator,
12
12
  ok
13
- } from "./chunk-LJIB6TNE.js";
13
+ } from "./chunk-7VNVDFD5.js";
14
14
 
15
15
  // src/adapters/openai-types.ts
16
16
  var OPENAI_MODELS = {
@@ -553,4 +553,4 @@ export {
553
553
  OpenAIAdapter,
554
554
  createOpenAIAdapter
555
555
  };
556
- //# sourceMappingURL=chunk-PKBKWWPK.js.map
556
+ //# sourceMappingURL=chunk-X3JR3GMT.js.map
@@ -2,7 +2,7 @@ import {
2
2
  TASK_CATEGORIES,
3
3
  getAdaptiveBonus,
4
4
  getOutcomeStore
5
- } from "./chunk-LJIB6TNE.js";
5
+ } from "./chunk-7VNVDFD5.js";
6
6
 
7
7
  // src/cli/doctor-deep.ts
8
8
  var CLI_NAMES = ["claude", "gemini", "codex", "opencode"];
@@ -106,4 +106,4 @@ export {
106
106
  runDeepDiagnostics,
107
107
  formatDeepDiagnostics
108
108
  };
109
- //# sourceMappingURL=chunk-S77SLJ2J.js.map
109
+ //# sourceMappingURL=chunk-XGUDCUMB.js.map
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  CliCircuitBreakerIntegration,
3
3
  createCliCircuitBreakerIntegration
4
- } from "./chunk-T7RGD5JW.js";
5
- import "./chunk-LIEFKEAO.js";
6
- import "./chunk-LJIB6TNE.js";
4
+ } from "./chunk-OYDJ3C4N.js";
5
+ import "./chunk-QHL4KGNB.js";
6
+ import "./chunk-7VNVDFD5.js";
7
7
  import "./chunk-I2HMWH4R.js";
8
8
  import "./chunk-PR4QN5HX.js";
9
9
  export {
10
10
  CliCircuitBreakerIntegration,
11
11
  createCliCircuitBreakerIntegration
12
12
  };
13
- //# sourceMappingURL=cli-circuit-breaker-O5RV47BO.js.map
13
+ //# sourceMappingURL=cli-circuit-breaker-BIJUQRQI.js.map