nodebench-mcp 2.70.0 → 3.0.1

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 (361) hide show
  1. package/README.md +95 -41
  2. package/dist/agents/alertRouter.d.ts +38 -0
  3. package/dist/agents/alertRouter.js +151 -0
  4. package/dist/agents/alertRouter.js.map +1 -0
  5. package/dist/agents/entityMemory.d.ts +40 -0
  6. package/dist/agents/entityMemory.js +64 -0
  7. package/dist/agents/entityMemory.js.map +1 -0
  8. package/dist/agents/subAgents.d.ts +35 -0
  9. package/dist/agents/subAgents.js +62 -0
  10. package/dist/agents/subAgents.js.map +1 -0
  11. package/dist/benchmarks/benchmarkRunner.js +14 -0
  12. package/dist/benchmarks/benchmarkRunner.js.map +1 -1
  13. package/dist/benchmarks/chainEval.js +107 -0
  14. package/dist/benchmarks/chainEval.js.map +1 -1
  15. package/dist/benchmarks/llmJudgeEval.js +85 -0
  16. package/dist/benchmarks/llmJudgeEval.js.map +1 -1
  17. package/dist/benchmarks/searchQualityEval.js +118 -5
  18. package/dist/benchmarks/searchQualityEval.js.map +1 -1
  19. package/dist/cli/search.d.ts +13 -0
  20. package/dist/cli/search.js +130 -0
  21. package/dist/cli/search.js.map +1 -0
  22. package/dist/dashboard/operatingDashboardHtml.js +2 -1
  23. package/dist/dashboard/operatingDashboardHtml.js.map +1 -1
  24. package/dist/dashboard/operatingServer.js +3 -2
  25. package/dist/dashboard/operatingServer.js.map +1 -1
  26. package/dist/db.d.ts +6 -2
  27. package/dist/db.js +521 -6
  28. package/dist/db.js.map +1 -1
  29. package/dist/index.js +349 -67
  30. package/dist/index.js.map +1 -1
  31. package/dist/packageInfo.d.ts +3 -0
  32. package/dist/packageInfo.js +32 -0
  33. package/dist/packageInfo.js.map +1 -0
  34. package/dist/profiler/behaviorStore.d.ts +97 -0
  35. package/dist/profiler/behaviorStore.js +276 -0
  36. package/dist/profiler/behaviorStore.js.map +1 -0
  37. package/dist/profiler/eventCollector.d.ts +119 -0
  38. package/dist/profiler/eventCollector.js +267 -0
  39. package/dist/profiler/eventCollector.js.map +1 -0
  40. package/dist/profiler/index.d.ts +15 -0
  41. package/dist/profiler/index.js +16 -0
  42. package/dist/profiler/index.js.map +1 -0
  43. package/dist/profiler/mcpProxy.d.ts +49 -0
  44. package/dist/profiler/mcpProxy.js +123 -0
  45. package/dist/profiler/mcpProxy.js.map +1 -0
  46. package/dist/profiler/modelRouter.d.ts +30 -0
  47. package/dist/profiler/modelRouter.js +99 -0
  48. package/dist/profiler/modelRouter.js.map +1 -0
  49. package/dist/profiler/otelReceiver.d.ts +17 -0
  50. package/dist/profiler/otelReceiver.js +62 -0
  51. package/dist/profiler/otelReceiver.js.map +1 -0
  52. package/dist/profiler/proofEngine.d.ts +41 -0
  53. package/dist/profiler/proofEngine.js +93 -0
  54. package/dist/profiler/proofEngine.js.map +1 -0
  55. package/dist/profiler/workflowTemplates.d.ts +41 -0
  56. package/dist/profiler/workflowTemplates.js +95 -0
  57. package/dist/profiler/workflowTemplates.js.map +1 -0
  58. package/dist/providers/localMemoryProvider.js +3 -2
  59. package/dist/providers/localMemoryProvider.js.map +1 -1
  60. package/dist/runtimeConfig.d.ts +11 -0
  61. package/dist/runtimeConfig.js +27 -0
  62. package/dist/runtimeConfig.js.map +1 -0
  63. package/dist/sandboxApi.js +2 -1
  64. package/dist/sandboxApi.js.map +1 -1
  65. package/dist/security/auditLog.js +8 -3
  66. package/dist/security/auditLog.js.map +1 -1
  67. package/dist/subconscious/blocks.d.ts +43 -0
  68. package/dist/subconscious/blocks.js +158 -0
  69. package/dist/subconscious/blocks.js.map +1 -0
  70. package/dist/subconscious/classifier.d.ts +22 -0
  71. package/dist/subconscious/classifier.js +118 -0
  72. package/dist/subconscious/classifier.js.map +1 -0
  73. package/dist/subconscious/graphEngine.d.ts +65 -0
  74. package/dist/subconscious/graphEngine.js +234 -0
  75. package/dist/subconscious/graphEngine.js.map +1 -0
  76. package/dist/subconscious/index.d.ts +19 -0
  77. package/dist/subconscious/index.js +20 -0
  78. package/dist/subconscious/index.js.map +1 -0
  79. package/dist/subconscious/tools.d.ts +5 -0
  80. package/dist/subconscious/tools.js +255 -0
  81. package/dist/subconscious/tools.js.map +1 -0
  82. package/dist/subconscious/whisperPolicy.d.ts +20 -0
  83. package/dist/subconscious/whisperPolicy.js +171 -0
  84. package/dist/subconscious/whisperPolicy.js.map +1 -0
  85. package/dist/sweep/engine.d.ts +27 -0
  86. package/dist/sweep/engine.js +244 -0
  87. package/dist/sweep/engine.js.map +1 -0
  88. package/dist/sweep/index.d.ts +9 -0
  89. package/dist/sweep/index.js +8 -0
  90. package/dist/sweep/index.js.map +1 -0
  91. package/dist/sweep/sources/github_trending.d.ts +6 -0
  92. package/dist/sweep/sources/github_trending.js +37 -0
  93. package/dist/sweep/sources/github_trending.js.map +1 -0
  94. package/dist/sweep/sources/hackernews.d.ts +7 -0
  95. package/dist/sweep/sources/hackernews.js +57 -0
  96. package/dist/sweep/sources/hackernews.js.map +1 -0
  97. package/dist/sweep/sources/openbb_finance.d.ts +9 -0
  98. package/dist/sweep/sources/openbb_finance.js +46 -0
  99. package/dist/sweep/sources/openbb_finance.js.map +1 -0
  100. package/dist/sweep/sources/producthunt.d.ts +6 -0
  101. package/dist/sweep/sources/producthunt.js +41 -0
  102. package/dist/sweep/sources/producthunt.js.map +1 -0
  103. package/dist/sweep/sources/web_signals.d.ts +7 -0
  104. package/dist/sweep/sources/web_signals.js +63 -0
  105. package/dist/sweep/sources/web_signals.js.map +1 -0
  106. package/dist/sweep/sources/yahoo_finance.d.ts +6 -0
  107. package/dist/sweep/sources/yahoo_finance.js +47 -0
  108. package/dist/sweep/sources/yahoo_finance.js.map +1 -0
  109. package/dist/sweep/types.d.ts +50 -0
  110. package/dist/sweep/types.js +9 -0
  111. package/dist/sweep/types.js.map +1 -0
  112. package/dist/sync/founderEpisodeStore.d.ts +98 -0
  113. package/dist/sync/founderEpisodeStore.js +230 -0
  114. package/dist/sync/founderEpisodeStore.js.map +1 -0
  115. package/dist/sync/hyperloopArchive.d.ts +51 -0
  116. package/dist/sync/hyperloopArchive.js +153 -0
  117. package/dist/sync/hyperloopArchive.js.map +1 -0
  118. package/dist/sync/hyperloopEval.d.ts +123 -0
  119. package/dist/sync/hyperloopEval.js +389 -0
  120. package/dist/sync/hyperloopEval.js.map +1 -0
  121. package/dist/sync/protocol.d.ts +172 -0
  122. package/dist/sync/protocol.js +9 -0
  123. package/dist/sync/protocol.js.map +1 -0
  124. package/dist/sync/sessionMemory.d.ts +47 -0
  125. package/dist/sync/sessionMemory.js +138 -0
  126. package/dist/sync/sessionMemory.js.map +1 -0
  127. package/dist/sync/store.d.ts +384 -0
  128. package/dist/sync/store.js +1435 -0
  129. package/dist/sync/store.js.map +1 -0
  130. package/dist/sync/syncBridgeClient.d.ts +30 -0
  131. package/dist/sync/syncBridgeClient.js +172 -0
  132. package/dist/sync/syncBridgeClient.js.map +1 -0
  133. package/dist/tools/autonomousDeliveryTools.d.ts +2 -0
  134. package/dist/tools/autonomousDeliveryTools.js +1104 -0
  135. package/dist/tools/autonomousDeliveryTools.js.map +1 -0
  136. package/dist/tools/boilerplateTools.js +10 -9
  137. package/dist/tools/boilerplateTools.js.map +1 -1
  138. package/dist/tools/claudeCodeIngestTools.d.ts +10 -0
  139. package/dist/tools/claudeCodeIngestTools.js +347 -0
  140. package/dist/tools/claudeCodeIngestTools.js.map +1 -0
  141. package/dist/tools/coreWorkflowTools.d.ts +2 -0
  142. package/dist/tools/coreWorkflowTools.js +488 -0
  143. package/dist/tools/coreWorkflowTools.js.map +1 -0
  144. package/dist/tools/deltaTools.d.ts +15 -0
  145. package/dist/tools/deltaTools.js +1522 -0
  146. package/dist/tools/deltaTools.js.map +1 -0
  147. package/dist/tools/documentationTools.js +2 -1
  148. package/dist/tools/documentationTools.js.map +1 -1
  149. package/dist/tools/entityLookupTools.d.ts +14 -0
  150. package/dist/tools/entityLookupTools.js +159 -0
  151. package/dist/tools/entityLookupTools.js.map +1 -0
  152. package/dist/tools/entityTemporalTools.d.ts +12 -0
  153. package/dist/tools/entityTemporalTools.js +330 -0
  154. package/dist/tools/entityTemporalTools.js.map +1 -0
  155. package/dist/tools/founderLocalPipeline.d.ts +215 -0
  156. package/dist/tools/founderLocalPipeline.js +1516 -2
  157. package/dist/tools/founderLocalPipeline.js.map +1 -1
  158. package/dist/tools/founderOperatingModel.d.ts +120 -0
  159. package/dist/tools/founderOperatingModel.js +469 -0
  160. package/dist/tools/founderOperatingModel.js.map +1 -0
  161. package/dist/tools/founderOperatingModelTools.d.ts +2 -0
  162. package/dist/tools/founderOperatingModelTools.js +169 -0
  163. package/dist/tools/founderOperatingModelTools.js.map +1 -0
  164. package/dist/tools/founderStrategicOpsTools.d.ts +2 -0
  165. package/dist/tools/founderStrategicOpsTools.js +1310 -0
  166. package/dist/tools/founderStrategicOpsTools.js.map +1 -0
  167. package/dist/tools/graphifyTools.d.ts +19 -0
  168. package/dist/tools/graphifyTools.js +375 -0
  169. package/dist/tools/graphifyTools.js.map +1 -0
  170. package/dist/tools/index.d.ts +3 -0
  171. package/dist/tools/index.js +4 -0
  172. package/dist/tools/index.js.map +1 -1
  173. package/dist/tools/monteCarloTools.d.ts +16 -0
  174. package/dist/tools/monteCarloTools.js +225 -0
  175. package/dist/tools/monteCarloTools.js.map +1 -0
  176. package/dist/tools/packetCompilerTools.d.ts +12 -0
  177. package/dist/tools/packetCompilerTools.js +322 -0
  178. package/dist/tools/packetCompilerTools.js.map +1 -0
  179. package/dist/tools/planSynthesisTools.d.ts +15 -0
  180. package/dist/tools/planSynthesisTools.js +455 -0
  181. package/dist/tools/planSynthesisTools.js.map +1 -0
  182. package/dist/tools/profilerTools.d.ts +20 -0
  183. package/dist/tools/profilerTools.js +364 -0
  184. package/dist/tools/profilerTools.js.map +1 -0
  185. package/dist/tools/progressiveDiscoveryTools.js +2 -1
  186. package/dist/tools/progressiveDiscoveryTools.js.map +1 -1
  187. package/dist/tools/savingsTools.d.ts +11 -0
  188. package/dist/tools/savingsTools.js +155 -0
  189. package/dist/tools/savingsTools.js.map +1 -0
  190. package/dist/tools/scenarioCompilerTools.d.ts +14 -0
  191. package/dist/tools/scenarioCompilerTools.js +290 -0
  192. package/dist/tools/scenarioCompilerTools.js.map +1 -0
  193. package/dist/tools/sharedContextTools.d.ts +2 -0
  194. package/dist/tools/sharedContextTools.js +423 -0
  195. package/dist/tools/sharedContextTools.js.map +1 -0
  196. package/dist/tools/sitemapTools.d.ts +15 -0
  197. package/dist/tools/sitemapTools.js +560 -0
  198. package/dist/tools/sitemapTools.js.map +1 -0
  199. package/dist/tools/sweepTools.d.ts +9 -0
  200. package/dist/tools/sweepTools.js +112 -0
  201. package/dist/tools/sweepTools.js.map +1 -0
  202. package/dist/tools/syncBridgeTools.d.ts +2 -0
  203. package/dist/tools/syncBridgeTools.js +258 -0
  204. package/dist/tools/syncBridgeTools.js.map +1 -0
  205. package/dist/tools/toolRegistry.js +1223 -45
  206. package/dist/tools/toolRegistry.js.map +1 -1
  207. package/dist/tools/workspaceTools.d.ts +19 -0
  208. package/dist/tools/workspaceTools.js +762 -0
  209. package/dist/tools/workspaceTools.js.map +1 -0
  210. package/dist/toolsetRegistry.js +162 -3
  211. package/dist/toolsetRegistry.js.map +1 -1
  212. package/package.json +39 -38
  213. package/rules/nodebench-agentic-reliability.md +32 -0
  214. package/rules/nodebench-analyst-diagnostic.md +25 -0
  215. package/rules/nodebench-auto-qa.md +31 -0
  216. package/rules/nodebench-completion-traceability.md +22 -0
  217. package/rules/nodebench-flywheel-continuous.md +25 -0
  218. package/rules/nodebench-pre-release-review.md +24 -0
  219. package/rules/nodebench-qa-dogfood.md +26 -0
  220. package/rules/nodebench-scenario-testing.md +30 -0
  221. package/rules/nodebench-self-direction.md +23 -0
  222. package/rules/nodebench-self-judge-loop.md +24 -0
  223. package/scripts/install.sh +215 -0
  224. package/dist/__tests__/analytics.test.d.ts +0 -11
  225. package/dist/__tests__/analytics.test.js +0 -546
  226. package/dist/__tests__/analytics.test.js.map +0 -1
  227. package/dist/__tests__/architectComplex.test.d.ts +0 -1
  228. package/dist/__tests__/architectComplex.test.js +0 -373
  229. package/dist/__tests__/architectComplex.test.js.map +0 -1
  230. package/dist/__tests__/architectSmoke.test.d.ts +0 -1
  231. package/dist/__tests__/architectSmoke.test.js +0 -92
  232. package/dist/__tests__/architectSmoke.test.js.map +0 -1
  233. package/dist/__tests__/audit-registry.d.ts +0 -1
  234. package/dist/__tests__/audit-registry.js +0 -60
  235. package/dist/__tests__/audit-registry.js.map +0 -1
  236. package/dist/__tests__/batchAutopilot.test.d.ts +0 -8
  237. package/dist/__tests__/batchAutopilot.test.js +0 -218
  238. package/dist/__tests__/batchAutopilot.test.js.map +0 -1
  239. package/dist/__tests__/cliSubcommands.test.d.ts +0 -1
  240. package/dist/__tests__/cliSubcommands.test.js +0 -138
  241. package/dist/__tests__/cliSubcommands.test.js.map +0 -1
  242. package/dist/__tests__/comparativeBench.test.d.ts +0 -1
  243. package/dist/__tests__/comparativeBench.test.js +0 -722
  244. package/dist/__tests__/comparativeBench.test.js.map +0 -1
  245. package/dist/__tests__/critterCalibrationEval.d.ts +0 -8
  246. package/dist/__tests__/critterCalibrationEval.js +0 -370
  247. package/dist/__tests__/critterCalibrationEval.js.map +0 -1
  248. package/dist/__tests__/dynamicLoading.test.d.ts +0 -1
  249. package/dist/__tests__/dynamicLoading.test.js +0 -280
  250. package/dist/__tests__/dynamicLoading.test.js.map +0 -1
  251. package/dist/__tests__/embeddingProvider.test.d.ts +0 -1
  252. package/dist/__tests__/embeddingProvider.test.js +0 -86
  253. package/dist/__tests__/embeddingProvider.test.js.map +0 -1
  254. package/dist/__tests__/evalDatasetBench.test.d.ts +0 -1
  255. package/dist/__tests__/evalDatasetBench.test.js +0 -738
  256. package/dist/__tests__/evalDatasetBench.test.js.map +0 -1
  257. package/dist/__tests__/evalHarness.test.d.ts +0 -1
  258. package/dist/__tests__/evalHarness.test.js +0 -1107
  259. package/dist/__tests__/evalHarness.test.js.map +0 -1
  260. package/dist/__tests__/fixtures/bfcl_v3_long_context.sample.json +0 -264
  261. package/dist/__tests__/fixtures/generateBfclLongContextFixture.d.ts +0 -10
  262. package/dist/__tests__/fixtures/generateBfclLongContextFixture.js +0 -135
  263. package/dist/__tests__/fixtures/generateBfclLongContextFixture.js.map +0 -1
  264. package/dist/__tests__/fixtures/generateSwebenchVerifiedFixture.d.ts +0 -14
  265. package/dist/__tests__/fixtures/generateSwebenchVerifiedFixture.js +0 -189
  266. package/dist/__tests__/fixtures/generateSwebenchVerifiedFixture.js.map +0 -1
  267. package/dist/__tests__/fixtures/generateToolbenchInstructionFixture.d.ts +0 -16
  268. package/dist/__tests__/fixtures/generateToolbenchInstructionFixture.js +0 -154
  269. package/dist/__tests__/fixtures/generateToolbenchInstructionFixture.js.map +0 -1
  270. package/dist/__tests__/fixtures/swebench_verified.sample.json +0 -162
  271. package/dist/__tests__/fixtures/toolbench_instruction.sample.json +0 -109
  272. package/dist/__tests__/forecastingDogfood.test.d.ts +0 -9
  273. package/dist/__tests__/forecastingDogfood.test.js +0 -284
  274. package/dist/__tests__/forecastingDogfood.test.js.map +0 -1
  275. package/dist/__tests__/forecastingScoring.test.d.ts +0 -9
  276. package/dist/__tests__/forecastingScoring.test.js +0 -202
  277. package/dist/__tests__/forecastingScoring.test.js.map +0 -1
  278. package/dist/__tests__/gaiaCapabilityAudioEval.test.d.ts +0 -15
  279. package/dist/__tests__/gaiaCapabilityAudioEval.test.js +0 -265
  280. package/dist/__tests__/gaiaCapabilityAudioEval.test.js.map +0 -1
  281. package/dist/__tests__/gaiaCapabilityEval.test.d.ts +0 -14
  282. package/dist/__tests__/gaiaCapabilityEval.test.js +0 -1259
  283. package/dist/__tests__/gaiaCapabilityEval.test.js.map +0 -1
  284. package/dist/__tests__/gaiaCapabilityFilesEval.test.d.ts +0 -15
  285. package/dist/__tests__/gaiaCapabilityFilesEval.test.js +0 -914
  286. package/dist/__tests__/gaiaCapabilityFilesEval.test.js.map +0 -1
  287. package/dist/__tests__/gaiaCapabilityMediaEval.test.d.ts +0 -15
  288. package/dist/__tests__/gaiaCapabilityMediaEval.test.js +0 -1101
  289. package/dist/__tests__/gaiaCapabilityMediaEval.test.js.map +0 -1
  290. package/dist/__tests__/helpers/answerMatch.d.ts +0 -41
  291. package/dist/__tests__/helpers/answerMatch.js +0 -267
  292. package/dist/__tests__/helpers/answerMatch.js.map +0 -1
  293. package/dist/__tests__/helpers/textLlm.d.ts +0 -25
  294. package/dist/__tests__/helpers/textLlm.js +0 -214
  295. package/dist/__tests__/helpers/textLlm.js.map +0 -1
  296. package/dist/__tests__/localDashboard.test.d.ts +0 -1
  297. package/dist/__tests__/localDashboard.test.js +0 -226
  298. package/dist/__tests__/localDashboard.test.js.map +0 -1
  299. package/dist/__tests__/multiHopDogfood.test.d.ts +0 -12
  300. package/dist/__tests__/multiHopDogfood.test.js +0 -303
  301. package/dist/__tests__/multiHopDogfood.test.js.map +0 -1
  302. package/dist/__tests__/openDatasetParallelEval.test.d.ts +0 -7
  303. package/dist/__tests__/openDatasetParallelEval.test.js +0 -209
  304. package/dist/__tests__/openDatasetParallelEval.test.js.map +0 -1
  305. package/dist/__tests__/openDatasetParallelEvalGaia.test.d.ts +0 -7
  306. package/dist/__tests__/openDatasetParallelEvalGaia.test.js +0 -279
  307. package/dist/__tests__/openDatasetParallelEvalGaia.test.js.map +0 -1
  308. package/dist/__tests__/openDatasetParallelEvalSwebench.test.d.ts +0 -7
  309. package/dist/__tests__/openDatasetParallelEvalSwebench.test.js +0 -220
  310. package/dist/__tests__/openDatasetParallelEvalSwebench.test.js.map +0 -1
  311. package/dist/__tests__/openDatasetParallelEvalToolbench.test.d.ts +0 -7
  312. package/dist/__tests__/openDatasetParallelEvalToolbench.test.js +0 -218
  313. package/dist/__tests__/openDatasetParallelEvalToolbench.test.js.map +0 -1
  314. package/dist/__tests__/openDatasetPerfComparison.test.d.ts +0 -10
  315. package/dist/__tests__/openDatasetPerfComparison.test.js +0 -318
  316. package/dist/__tests__/openDatasetPerfComparison.test.js.map +0 -1
  317. package/dist/__tests__/openclawDogfood.test.d.ts +0 -23
  318. package/dist/__tests__/openclawDogfood.test.js +0 -535
  319. package/dist/__tests__/openclawDogfood.test.js.map +0 -1
  320. package/dist/__tests__/openclawMessaging.test.d.ts +0 -14
  321. package/dist/__tests__/openclawMessaging.test.js +0 -232
  322. package/dist/__tests__/openclawMessaging.test.js.map +0 -1
  323. package/dist/__tests__/presetRealWorldBench.test.d.ts +0 -1
  324. package/dist/__tests__/presetRealWorldBench.test.js +0 -859
  325. package/dist/__tests__/presetRealWorldBench.test.js.map +0 -1
  326. package/dist/__tests__/tools.test.d.ts +0 -1
  327. package/dist/__tests__/tools.test.js +0 -3201
  328. package/dist/__tests__/tools.test.js.map +0 -1
  329. package/dist/__tests__/toolsetGatingEval.test.d.ts +0 -1
  330. package/dist/__tests__/toolsetGatingEval.test.js +0 -1099
  331. package/dist/__tests__/toolsetGatingEval.test.js.map +0 -1
  332. package/dist/__tests__/traceabilityDogfood.test.d.ts +0 -12
  333. package/dist/__tests__/traceabilityDogfood.test.js +0 -241
  334. package/dist/__tests__/traceabilityDogfood.test.js.map +0 -1
  335. package/dist/__tests__/webmcpTools.test.d.ts +0 -7
  336. package/dist/__tests__/webmcpTools.test.js +0 -195
  337. package/dist/__tests__/webmcpTools.test.js.map +0 -1
  338. package/dist/benchmarks/testProviderBus.d.ts +0 -7
  339. package/dist/benchmarks/testProviderBus.js +0 -272
  340. package/dist/benchmarks/testProviderBus.js.map +0 -1
  341. package/dist/hooks/postCompaction.d.ts +0 -14
  342. package/dist/hooks/postCompaction.js +0 -51
  343. package/dist/hooks/postCompaction.js.map +0 -1
  344. package/dist/security/__tests__/security.test.d.ts +0 -8
  345. package/dist/security/__tests__/security.test.js +0 -295
  346. package/dist/security/__tests__/security.test.js.map +0 -1
  347. package/dist/tools/documentTools.d.ts +0 -5
  348. package/dist/tools/documentTools.js +0 -524
  349. package/dist/tools/documentTools.js.map +0 -1
  350. package/dist/tools/financialTools.d.ts +0 -10
  351. package/dist/tools/financialTools.js +0 -403
  352. package/dist/tools/financialTools.js.map +0 -1
  353. package/dist/tools/memoryTools.d.ts +0 -5
  354. package/dist/tools/memoryTools.js +0 -137
  355. package/dist/tools/memoryTools.js.map +0 -1
  356. package/dist/tools/planningTools.d.ts +0 -5
  357. package/dist/tools/planningTools.js +0 -147
  358. package/dist/tools/planningTools.js.map +0 -1
  359. package/dist/tools/searchTools.d.ts +0 -5
  360. package/dist/tools/searchTools.js +0 -145
  361. package/dist/tools/searchTools.js.map +0 -1
package/dist/index.js CHANGED
@@ -33,6 +33,8 @@ import { initObservability, startWatchdog, stopWatchdog } from "./tools/observab
33
33
  import { createMetaTools } from "./tools/metaTools.js";
34
34
  import { createProgressiveDiscoveryTools } from "./tools/progressiveDiscoveryTools.js";
35
35
  import { getQuickRef, ALL_REGISTRY_ENTRIES, TOOL_REGISTRY, getToolComplexity, getToolAnnotations, toolNameToTitle, _setDbAccessor, hybridSearch, WORKFLOW_CHAINS } from "./tools/toolRegistry.js";
36
+ import { getRequestedPreset, resolveRuntimeFlags } from "./runtimeConfig.js";
37
+ import { NODEBENCH_PACKAGE_NAME, NODEBENCH_VERSION, comparePackageVersions } from "./packageInfo.js";
36
38
  // TOON format — ~40% token savings on tool responses
37
39
  import { encode as toonEncode } from "@toon-format/toon";
38
40
  // Embedding provider — neural semantic search
@@ -40,7 +42,6 @@ import { initEmbeddingIndex } from "./tools/embeddingProvider.js";
40
42
  // ── CLI argument parsing ──────────────────────────────────────────────
41
43
  const cliArgs = process.argv.slice(2);
42
44
  const useToon = !cliArgs.includes("--no-toon");
43
- const useEmbedding = !cliArgs.includes("--no-embedding");
44
45
  const useSmartPreset = cliArgs.includes("--smart-preset");
45
46
  const showStats = cliArgs.includes("--stats");
46
47
  const exportStats = cliArgs.includes("--export-stats");
@@ -51,25 +52,34 @@ const statusFlag = cliArgs.includes("--status");
51
52
  const diagnoseFlag = cliArgs.includes("--diagnose");
52
53
  const autoPresetFlag = cliArgs.includes("--auto-preset");
53
54
  const syncConfigsFlag = cliArgs.includes("--sync-configs");
54
- const useEngine = cliArgs.includes("--engine");
55
+ const requestedPreset = getRequestedPreset(cliArgs);
56
+ const runtimeFlags = resolveRuntimeFlags(cliArgs, requestedPreset);
57
+ const useEmbedding = runtimeFlags.enableEmbedding;
58
+ const useEngine = runtimeFlags.enableEngine;
59
+ const useProfile = runtimeFlags.enableProfiling;
55
60
  const engineSecret = (() => {
56
61
  const idx = cliArgs.indexOf("--engine-secret");
57
62
  return idx >= 0 && idx + 1 < cliArgs.length ? cliArgs[idx + 1] : process.env.ENGINE_SECRET;
58
63
  })();
59
64
  export { TOOLSET_MAP };
60
- // Starter: ~19 tools. Just decision intelligence + discovery/meta overhead.
61
- // Users call discover_tools → load_toolset to expand. Under Google's 50-tool IDE limit.
62
- const STARTER_TOOLSETS = ["deep_sim"];
65
+ // Starter/default: v3 core workflow facade only. Discovery/meta/dynamic tools are added separately.
66
+ const STARTER_TOOLSETS = ["core_workflow"];
63
67
  // Core: the original default. ~81 tools across 15 domains.
64
- const CORE_TOOLSETS = ["verification", "eval", "quality_gate", "learning", "flywheel", "recon", "security", "boilerplate", "skill_update", "context_sandbox", "observability", "execution_trace", "mission_harness", "deep_sim", "founder"];
68
+ const CORE_TOOLSETS = ["verification", "eval", "quality_gate", "learning", "flywheel", "autonomous_delivery", "sync_bridge", "shared_context", "recon", "security", "boilerplate", "skill_update", "context_sandbox", "observability", "execution_trace", "mission_harness", "deep_sim", "founder", "scenario_compiler", "packet_compiler", "entity_temporal"];
69
+ // Power: extended research + founder intelligence without admin/debug-only runtime surfaces.
70
+ const POWER_TOOLSETS = ["core_workflow", "deep_sim", "founder", "recon", "web", "shared_context", "sync_bridge", "session_memory", "entity_lookup", "delta", "site_map"];
71
+ // Admin: profiling, debugging, observability, dashboards, and eval harness domains.
72
+ const ADMIN_TOOLSETS = ["core_workflow", "observability", "profiler", "local_dashboard", "benchmark", "longitudinal_benchmark", "dogfood_judge", "execution_trace", "qa_orchestration", "mission_harness", "quality_gate", "eval", "verification"];
65
73
  const PRESETS = {
66
- // DEFAULT: starter (~19 tools). Progressive discovery is the gateway to 338.
74
+ // DEFAULT: v3 core workflow facade. Progressive discovery expands into power/admin domains only when needed.
67
75
  default: STARTER_TOOLSETS,
68
76
  starter: STARTER_TOOLSETS,
77
+ power: POWER_TOOLSETS,
78
+ admin: ADMIN_TOOLSETS,
69
79
  // Core AI Flywheel — everything from the old default
70
80
  core: CORE_TOOLSETS,
71
- // Themed presets — bridge between starter (19 tools) and full (338 tools)
72
- web_dev: [...CORE_TOOLSETS, "ui_capture", "vision", "web", "seo", "git_workflow", "architect", "ui_ux_dive", "ui_ux_dive_v2", "mcp_bridge", "qa_orchestration", "visual_qa", "design_governance", "web_scraping"],
81
+ // Themed presets — bridge between the core workflow surface and full-domain coverage
82
+ web_dev: [...CORE_TOOLSETS, "ui_capture", "vision", "web", "seo", "git_workflow", "architect", "ui_ux_dive", "ui_ux_dive_v2", "mcp_bridge", "qa_orchestration", "visual_qa", "design_governance", "web_scraping", "site_map", "savings"],
73
83
  research: [...CORE_TOOLSETS, "web", "llm", "rss", "email", "docs", "research_optimizer", "web_scraping", "temporal_intelligence", "deep_sim"],
74
84
  data: [...CORE_TOOLSETS, "local_file", "llm", "web", "research_optimizer", "web_scraping", "temporal_intelligence"],
75
85
  devops: [...CORE_TOOLSETS, "git_workflow", "session_memory", "benchmark", "pattern"],
@@ -77,22 +87,29 @@ const PRESETS = {
77
87
  academic: [...CORE_TOOLSETS, "research_writing", "llm", "web", "local_file"],
78
88
  multi_agent: [...CORE_TOOLSETS, "parallel", "self_eval", "session_memory", "pattern", "toon", "qa_orchestration", "agent_traverse", "engine_context", "research_optimizer", "web_scraping", "deep_sim"],
79
89
  content: [...CORE_TOOLSETS, "llm", "critter", "email", "rss", "platform", "architect", "local_dashboard", "engine_context", "thompson_protocol"],
80
- // ── Persona presets (all under 50 tools for IDE compatibility) ──
81
- // Founder: decision intelligence + company tracking + session memory + local dashboard (~40 tools)
82
- founder: ["deep_sim", "founder", "learning", "local_dashboard"],
90
+ // ── Persona presets (kept for compatibility, but no longer the default entry point) ──
91
+ // Founder: decision intelligence + company tracking + session memory + local dashboard
92
+ founder: ["deep_sim", "founder", "learning", "local_dashboard", "autonomous_delivery", "sync_bridge", "shared_context", "site_map", "savings", "profiler", "sweep", "monte_carlo"],
83
93
  // Banker/analyst: decision intelligence + company profiling + web research + recon (~39 tools)
84
- banker: ["deep_sim", "founder", "web", "recon"],
85
- // Operator: decision intelligence + company tracking + causal memory + action tracing (~40 tools)
86
- operator: ["deep_sim", "founder", "causal_memory"],
94
+ banker: ["deep_sim", "founder", "web", "recon", "autonomous_delivery", "sync_bridge", "shared_context", "profiler"],
95
+ // Operator: decision intelligence + company tracking + causal memory + action tracing
96
+ operator: ["deep_sim", "founder", "causal_memory", "autonomous_delivery", "sync_bridge", "shared_context", "profiler"],
87
97
  // Researcher: decision intelligence + web + recon + session memory (~32 tools)
88
- researcher: ["deep_sim", "web", "recon", "learning"],
98
+ researcher: ["deep_sim", "web", "recon", "learning", "autonomous_delivery", "sync_bridge", "shared_context", "profiler"],
89
99
  // Cursor IDE has a hard 40-tool limit across ALL MCP servers.
90
100
  cursor: ["deep_sim", "quality_gate", "learning", "session_memory", "web", "toon"],
101
+ // Hackathon: founder + web intelligence + entity enrichment + shared context
102
+ // Pairs with retention.sh for QA. Install: claude mcp add nodebench -- npx -y nodebench-mcp --preset=hackathon
103
+ hackathon: ["deep_sim", "founder", "learning", "web", "entity_enrichment", "autonomous_delivery", "sync_bridge", "shared_context", "recon", "local_dashboard", "delta", "profiler", "sweep", "monte_carlo"],
104
+ // Delta: full operating-intelligence preset — all delta.* packet tools + watchlist + entity intel
105
+ delta: ["deep_sim", "founder", "learning", "web", "entity_enrichment", "autonomous_delivery", "sync_bridge", "shared_context", "recon", "local_dashboard", "quality_gate", "execution_trace", "delta"],
91
106
  full: ALL_DOMAIN_KEYS,
92
107
  };
93
108
  const PRESET_DESCRIPTIONS = {
94
- default: "Starter (~19 tools)decision intelligence + progressive discovery. Use discover_tools load_toolset to expand.",
95
- starter: "Starter (~19 tools)decision intelligence + progressive discovery. Use discover_tools load_toolset to expand.",
109
+ default: "Default v3 surface7 workflow tools plus discovery/meta helpers. Fast boot, one artifact-shaped workflow.",
110
+ starter: "Default v3 surface7 workflow tools plus discovery/meta helpers. Fast boot, one artifact-shaped workflow.",
111
+ power: "Extended workflow preset — founder + recon + web + packets without admin-only runtime surfaces.",
112
+ admin: "Admin/runtime preset — profiling, observability, dashboards, eval, and debug lanes.",
96
113
  core: "Core AI Flywheel (~81 tools) — verification, eval, quality gates, learning, recon, mission harness",
97
114
  web_dev: "Web projects — adds visual QA, SEO audit, git workflow, code architecture",
98
115
  research: "Research workflows — adds web search, LLM calls, RSS feeds, email, docs",
@@ -102,24 +119,26 @@ const PRESET_DESCRIPTIONS = {
102
119
  academic: "Academic papers — adds polish, review, translate, logic check, data analysis",
103
120
  multi_agent: "Multi-agent teams — adds task locking, messaging, roles, oracle testing, frontend traversal",
104
121
  content: "Content & publishing — adds LLM, accountability, email, RSS, platform queue",
105
- founder: "Founder (~40 tools)decision intelligence, company tracking, session memory, local dashboard",
122
+ founder: "Founder decision presetcompany tracking, decision intelligence, shared context, local dashboard",
106
123
  banker: "Banker/Analyst (~39 tools) — decision intelligence, company profiling, web research, recon",
107
- operator: "Operator (~40 tools) — decision intelligence, company tracking, causal memory, action tracing",
124
+ operator: "Operator — decision intelligence, company tracking, causal memory, action tracing",
108
125
  researcher: "Researcher (~32 tools) — decision intelligence, web search, recon, session memory",
109
126
  cursor: "Cursor IDE (28 tools) — decision intelligence, quality gates, session memory, web, TOON encoding. Leaves 12 slots for other MCP servers.",
110
- full: "Everythingall 338 tools for maximum coverage",
127
+ hackathon: "Hackathondecision intelligence + entity intel + web research + team coordination. Pairs with retention.sh for QA.",
128
+ delta: "Delta (~65 tools) — full operating-intelligence preset. Entity intel, decision memos, watchlists, agent handoff, execution traces.",
129
+ full: "Everything — all domains for maximum coverage",
111
130
  };
112
131
  async function parseToolsets() {
113
132
  if (cliArgs.includes("--help")) {
114
133
  const lines = [
115
- "nodebench-mcp v2.30.0 — Development Methodology MCP Server",
134
+ `nodebench-mcp v${NODEBENCH_VERSION} — Development Methodology MCP Server`,
116
135
  "",
117
136
  "Usage: nodebench-mcp [options]",
118
137
  "",
119
138
  "Options:",
120
139
  " --toolsets <list> Comma-separated toolsets to enable (default: default)",
121
140
  " --exclude <list> Comma-separated toolsets to exclude",
122
- " --preset <name> Use a preset: default or full",
141
+ " --preset <name> Use a preset: default, power, admin, or full",
123
142
  " --smart-preset Generate smart preset recommendation based on project type and usage history",
124
143
  " --auto-preset Detect project type from package.json/pyproject.toml and recommend a preset",
125
144
  " --stats Show usage statistics for current project",
@@ -127,8 +146,13 @@ async function parseToolsets() {
127
146
  " --reset-stats Clear all usage analytics data",
128
147
  " --list-presets List all available presets with descriptions",
129
148
  " --dynamic Enable dynamic toolset loading (Search+Load pattern from arxiv 2509.20386)",
149
+ " --embedding Enable semantic embedding index on the default preset",
130
150
  " --no-toon Disable TOON encoding (TOON is on by default for ~40% token savings)",
131
- " --no-embedding Disable neural embedding search (uses local HuggingFace model or API keys)",
151
+ " --no-embedding Disable neural embedding search",
152
+ " --profile Enable profiling proxy — logs every tool call with cost/latency",
153
+ " --admin Enable admin runtime surfaces (dashboards + watchdog)",
154
+ " --dashboards Start local dashboards explicitly",
155
+ " --watchdog Start observability watchdog explicitly",
132
156
  " --engine Start headless API engine server on port 6276",
133
157
  " --engine-secret <s> Require Bearer token for engine API (or set ENGINE_SECRET env var)",
134
158
  " --explain <tool> Show plain-English explanation of a tool and exit",
@@ -147,12 +171,14 @@ async function parseToolsets() {
147
171
  }),
148
172
  "",
149
173
  "Examples:",
150
- " npx nodebench-mcp # Default (81 tools) - core AI Flywheel",
174
+ " npx nodebench-mcp # Default v3 core workflow surface",
175
+ " npx nodebench-mcp --preset power # Extended founder/research surface",
176
+ " npx nodebench-mcp --preset admin # Profiling, observability, dashboards",
151
177
  " npx nodebench-mcp --preset web_dev # Web development (+ vision, SEO, git)",
152
178
  " npx nodebench-mcp --preset research # Research workflows (+ web, LLM, RSS, email)",
153
179
  " npx nodebench-mcp --preset data # Data analysis (+ local file parsing, LLM)",
154
180
  " npx nodebench-mcp --preset academic # Academic writing (+ paper tools, LLM)",
155
- " npx nodebench-mcp --preset full # All 295 tools",
181
+ " npx nodebench-mcp --preset full # All available domains",
156
182
  " npx nodebench-mcp --smart-preset # Get AI-powered preset recommendation",
157
183
  " npx nodebench-mcp --stats # Show usage statistics",
158
184
  " npx nodebench-mcp --toolsets verification,eval,recon",
@@ -195,7 +221,7 @@ async function parseToolsets() {
195
221
  const domainsToLoad = ALL_DOMAIN_KEYS.filter((k) => !excluded.has(k));
196
222
  return loadToolsets(domainsToLoad);
197
223
  }
198
- // Default to starter preset (~19 tools — decision intelligence + discovery)
224
+ // Default to the v3 core workflow facade
199
225
  return loadToolsets(PRESETS.default);
200
226
  }
201
227
  // ── Analytics CLI flag handling ─────────────────────────────────────────
@@ -454,9 +480,11 @@ if (autoPresetFlag) {
454
480
  signals.push("academic: LaTeX files found");
455
481
  recommended = "academic";
456
482
  }
457
- // Output — load all toolsets to get accurate counts
458
- await loadToolsets(ALL_DOMAIN_KEYS);
483
+ // Output — only load the recommended preset to keep auto-preset fast
459
484
  const presetToolsets = PRESETS[recommended];
485
+ if (presetToolsets) {
486
+ await loadToolsets(presetToolsets);
487
+ }
460
488
  const toolCount = presetToolsets
461
489
  ? presetToolsets.reduce((s, k) => s + (TOOLSET_MAP[k]?.length ?? 0), 0) + 12
462
490
  : 0;
@@ -491,22 +519,24 @@ if (healthFlag) {
491
519
  const warn = `${Y}WARN${X}`;
492
520
  const fail = `${R}FAIL${X}`;
493
521
  const lines = [];
494
- lines.push(`${B}NodeBench MCP v2.30.0 — Health Check${X}`);
522
+ lines.push(`${B}NodeBench MCP v${NODEBENCH_VERSION} — Health Check${X}`);
495
523
  lines.push("");
496
- // 1. Tool count + preset — load all toolsets to get accurate counts
497
- await loadToolsets(ALL_DOMAIN_KEYS);
498
- const presetIdx2 = cliArgs.indexOf("--preset");
499
- const activePreset = presetIdx2 !== -1 && cliArgs[presetIdx2 + 1] ? cliArgs[presetIdx2 + 1] : "default";
500
- const domainCount = Object.keys(TOOLSET_MAP).length;
501
- const totalTools = Object.values(TOOLSET_MAP).reduce((s, v) => s + v.length, 0);
524
+ // 1. Tool count + preset — load only the active preset for a fast health path
525
+ const activePreset = requestedPreset;
502
526
  const presetToolsets = PRESETS[activePreset];
527
+ if (presetToolsets) {
528
+ await loadToolsets(presetToolsets);
529
+ }
503
530
  const presetToolCount = presetToolsets
504
531
  ? presetToolsets.reduce((s, k) => s + (TOOLSET_MAP[k]?.length ?? 0), 0) + 12
505
- : totalTools;
506
- lines.push(`${C}Tools${X} ${presetToolCount} loaded (preset: ${activePreset}) | ${totalTools} total across ${domainCount} domains`);
532
+ : 12;
533
+ lines.push(`${C}Tools${X} ${presetToolCount} visible (preset: ${activePreset}) | ${ALL_DOMAIN_KEYS.length} domains available`);
507
534
  // 2. TOON + Embedding
508
535
  lines.push(`${C}TOON${X} ${useToon ? ok : `${warn} disabled (--no-toon)`}`);
509
- lines.push(`${C}Embedding${X} ${useEmbedding ? ok : `${warn} disabled (--no-embedding)`}`);
536
+ lines.push(`${C}Embedding${X} ${useEmbedding ? ok : `${warn} disabled on default hot path`}`);
537
+ lines.push(`${C}Runtime${X} ${runtimeFlags.enableDashboards || runtimeFlags.enableWatchdog
538
+ ? `${ok} admin surfaces enabled`
539
+ : `${warn} core-only (pass --admin, --dashboards, or --watchdog to enable admin runtime)`}`);
510
540
  // 3. Database
511
541
  const os = await import("node:os");
512
542
  const path = await import("node:path");
@@ -592,6 +622,39 @@ if (healthFlag) {
592
622
  catch { /* not running */ }
593
623
  lines.push(` ${reachable ? ok : `${Y}--${X}`} ${name.padEnd(22)} :${port}${reachable ? "" : " (not running)"}`);
594
624
  }
625
+ // 9. Version check (npm registry)
626
+ lines.push("");
627
+ lines.push(`${B}Version${X}`);
628
+ const currentVersion = NODEBENCH_VERSION;
629
+ let latestVersion = "";
630
+ try {
631
+ const controller = new AbortController();
632
+ const timeout = setTimeout(() => controller.abort(), 3000);
633
+ const res = await fetch("https://registry.npmjs.org/nodebench-mcp/latest", {
634
+ signal: controller.signal,
635
+ headers: { Accept: "application/json" },
636
+ });
637
+ clearTimeout(timeout);
638
+ if (res.ok) {
639
+ const data = await res.json();
640
+ latestVersion = data.version || "";
641
+ }
642
+ }
643
+ catch { /* offline or timeout */ }
644
+ const versionDelta = latestVersion ? comparePackageVersions(latestVersion, currentVersion) : 0;
645
+ if (latestVersion && versionDelta > 0) {
646
+ lines.push(` ${Y}UPDATE${X} ${currentVersion} → ${G}${latestVersion}${X}`);
647
+ lines.push(` Run: ${C}npm install -g ${NODEBENCH_PACKAGE_NAME}@latest${X}`);
648
+ }
649
+ else if (latestVersion && versionDelta === 0) {
650
+ lines.push(` ${ok} v${currentVersion} (up to date)`);
651
+ }
652
+ else if (latestVersion) {
653
+ lines.push(` ${ok} v${currentVersion} (ahead of npm latest v${latestVersion})`);
654
+ }
655
+ else {
656
+ lines.push(` ${ok} v${currentVersion} (registry check skipped — offline?)`);
657
+ }
595
658
  // Summary
596
659
  lines.push("");
597
660
  const allEnvSet = envChecks.filter(([k]) => !!process.env[k]).length;
@@ -930,9 +993,52 @@ if (syncConfigsFlag) {
930
993
  else {
931
994
  lines.push(` env: ${Y}(none set)${X}`);
932
995
  }
996
+ // ── Copy rules to ~/.claude/rules/ ──────────────────────────────────
997
+ lines.push("");
998
+ lines.push(`${B}Rules${X}`);
999
+ const claudeRulesDir = path.join(os.homedir(), ".claude", "rules");
1000
+ if (!fs.existsSync(claudeRulesDir)) {
1001
+ fs.mkdirSync(claudeRulesDir, { recursive: true });
1002
+ }
1003
+ // Find rules directory relative to this file
1004
+ const thisDir = path.dirname(new URL(import.meta.url).pathname.replace(/^\/([A-Z]:)/, "$1"));
1005
+ const rulesSearchPaths = [
1006
+ path.resolve(thisDir, "..", "rules"), // dist/../rules (installed package)
1007
+ path.resolve(thisDir, "..", "..", "rules"), // src/../../rules (dev mode)
1008
+ ];
1009
+ let rulesDir = "";
1010
+ for (const p of rulesSearchPaths) {
1011
+ if (fs.existsSync(p)) {
1012
+ rulesDir = p;
1013
+ break;
1014
+ }
1015
+ }
1016
+ let rulesInstalled = 0;
1017
+ if (rulesDir) {
1018
+ const ruleFiles = fs.readdirSync(rulesDir).filter((f) => f.startsWith("nodebench-") && f.endsWith(".md"));
1019
+ for (const file of ruleFiles) {
1020
+ const src = path.join(rulesDir, file);
1021
+ const dest = path.join(claudeRulesDir, file);
1022
+ // Don't overwrite if user's version is newer
1023
+ if (fs.existsSync(dest)) {
1024
+ const srcStat = fs.statSync(src);
1025
+ const destStat = fs.statSync(dest);
1026
+ if (destStat.mtimeMs > srcStat.mtimeMs) {
1027
+ lines.push(` ${Y}SKIP${X} ${file} (user version is newer)`);
1028
+ continue;
1029
+ }
1030
+ }
1031
+ fs.copyFileSync(src, dest);
1032
+ rulesInstalled++;
1033
+ }
1034
+ lines.push(` ${G}OK${X} Installed ${rulesInstalled} rules to ${claudeRulesDir}`);
1035
+ }
1036
+ else {
1037
+ lines.push(` ${Y}WARN${X} Rules directory not found — rules not copied`);
1038
+ }
933
1039
  lines.push("");
934
1040
  const successCount = results.filter(r => r.action !== "failed").length;
935
- lines.push(`${B}Written to ${successCount}/${results.length} locations${X}`);
1041
+ lines.push(`${B}Written to ${successCount}/${results.length} IDE configs | ${rulesInstalled} rules installed${X}`);
936
1042
  console.log(lines.join("\n"));
937
1043
  process.exit(0);
938
1044
  }
@@ -981,6 +1087,109 @@ if (cliArgs.length === 0 || (subCmd === undefined && !cliArgs.includes("--stdio"
981
1087
  console.log(welcome.join("\n"));
982
1088
  process.exit(0);
983
1089
  }
1090
+ // ── Delta subcommands (run-and-exit, banking-convention verbs) ────────
1091
+ const DELTA_VERBS = ["brief", "diligence", "handoff", "watch", "memo", "scan", "compare", "review", "retain", "packets", "dogfood"];
1092
+ if (subCmd && DELTA_VERBS.includes(subCmd)) {
1093
+ const { createDeltaTools } = await import("./tools/deltaTools.js");
1094
+ const deltaTools = createDeltaTools();
1095
+ const toolName = subCmd === "packets" ? "delta_packets"
1096
+ : subCmd === "watch" ? "delta_watch"
1097
+ : subCmd === "dogfood" ? "delta_self_dogfood"
1098
+ : `delta_${subCmd}`;
1099
+ const tool = deltaTools.find((t) => t.name === toolName);
1100
+ if (!tool) {
1101
+ console.error(`Unknown delta command: ${subCmd}`);
1102
+ process.exit(1);
1103
+ }
1104
+ // Parse remaining args as JSON or key=value pairs
1105
+ const rawToolArgs = cliArgs.filter((a) => a !== subCmd && !a.startsWith("--"));
1106
+ const argStr = rawToolArgs.join(" ");
1107
+ const parseCliScalar = (value) => {
1108
+ if (value === "true")
1109
+ return true;
1110
+ if (value === "false")
1111
+ return false;
1112
+ if (/^-?\d+(\.\d+)?$/.test(value))
1113
+ return Number(value);
1114
+ if ((value.startsWith("{") && value.endsWith("}")) || (value.startsWith("[") && value.endsWith("]"))) {
1115
+ try {
1116
+ return JSON.parse(value);
1117
+ }
1118
+ catch {
1119
+ return value;
1120
+ }
1121
+ }
1122
+ return value;
1123
+ };
1124
+ let toolArgs = {};
1125
+ if (argStr) {
1126
+ try {
1127
+ toolArgs = JSON.parse(argStr);
1128
+ }
1129
+ catch {
1130
+ if (rawToolArgs.length === 1) {
1131
+ try {
1132
+ toolArgs = JSON.parse(rawToolArgs[0]);
1133
+ }
1134
+ catch {
1135
+ toolArgs = {};
1136
+ }
1137
+ }
1138
+ // Check for key=value pairs first, collect remaining as positional
1139
+ const kvParts = [];
1140
+ const positionalParts = [];
1141
+ for (const part of rawToolArgs) {
1142
+ const eqIdx = part.indexOf("=");
1143
+ if (eqIdx > 0) {
1144
+ toolArgs[part.slice(0, eqIdx)] = parseCliScalar(part.slice(eqIdx + 1));
1145
+ kvParts.push(part);
1146
+ }
1147
+ else {
1148
+ positionalParts.push(part);
1149
+ }
1150
+ }
1151
+ // Join ALL positional words as the primary arg (handles multi-word strings)
1152
+ if (positionalParts.length > 0) {
1153
+ const fullPositional = positionalParts.join(" ");
1154
+ if (subCmd === "diligence" || subCmd === "compare")
1155
+ toolArgs.entity = toolArgs.entity || fullPositional;
1156
+ else if (subCmd === "watch")
1157
+ toolArgs.entity = toolArgs.entity || fullPositional;
1158
+ else if (subCmd === "memo")
1159
+ toolArgs.decision = toolArgs.decision || fullPositional;
1160
+ else if (subCmd === "handoff")
1161
+ toolArgs.task = toolArgs.task || fullPositional;
1162
+ else if (subCmd === "retain")
1163
+ toolArgs.content = toolArgs.content || fullPositional;
1164
+ else if (subCmd === "review")
1165
+ toolArgs.forecast = toolArgs.forecast || fullPositional;
1166
+ }
1167
+ // Default action for watch
1168
+ if (subCmd === "watch" && !toolArgs.action)
1169
+ toolArgs.action = toolArgs.entity ? "add" : "list";
1170
+ }
1171
+ }
1172
+ else if (subCmd === "watch") {
1173
+ toolArgs.action = "list";
1174
+ }
1175
+ try {
1176
+ const result = await tool.handler(toolArgs);
1177
+ const structuredResult = result;
1178
+ const text = structuredResult.content?.[0]?.text || JSON.stringify(result);
1179
+ try {
1180
+ const parsed = JSON.parse(text);
1181
+ console.log(JSON.stringify(parsed, null, 2));
1182
+ }
1183
+ catch {
1184
+ console.log(text);
1185
+ }
1186
+ }
1187
+ catch (err) {
1188
+ console.error(`Error running delta_${subCmd}:`, err);
1189
+ process.exit(1);
1190
+ }
1191
+ process.exit(0);
1192
+ }
984
1193
  // ── Demo subcommand (run-and-exit) ───────────────────────────────────
985
1194
  if (subCmd === "demo") {
986
1195
  const USE_COLOR = process.stdout.isTTY;
@@ -1231,7 +1440,7 @@ if (subCmd === "setup") {
1231
1440
  lines.push(` ${C}Dashboard:${X} https://www.nodebenchai.com/founder`);
1232
1441
  lines.push(` ${C}Agent setup:${X} https://www.nodebenchai.com/agent-setup.txt`);
1233
1442
  lines.push("");
1234
- lines.push(` ${Y}Presets:${X} --preset default (99 tools) | --preset full (313 tools)`);
1443
+ lines.push(` ${Y}Presets:${X} --preset default (core workflow) | --preset power | --preset admin`);
1235
1444
  lines.push(` ${Y}Founder tools:${X} founder_deep_context_gather, founder_packet_validate, founder_packet_diff`);
1236
1445
  lines.push("");
1237
1446
  console.log(lines.join("\n"));
@@ -1243,13 +1452,9 @@ getDb();
1243
1452
  _setDbAccessor(getDb);
1244
1453
  // Assemble tools (filtered by --toolsets / --exclude / --preset if provided)
1245
1454
  let domainTools = await parseToolsets();
1246
- // Determine current preset name for analytics
1247
- let currentPreset = 'default';
1248
- const presetIdx = cliArgs.indexOf("--preset");
1249
- if (presetIdx !== -1 && cliArgs[presetIdx + 1]) {
1250
- currentPreset = cliArgs[presetIdx + 1];
1251
- }
1252
- else if (cliArgs.includes("--toolsets") || cliArgs.includes("--exclude")) {
1455
+ // Determine current preset name for analytics/runtime gating
1456
+ let currentPreset = requestedPreset;
1457
+ if (cliArgs.includes("--toolsets") || cliArgs.includes("--exclude")) {
1253
1458
  currentPreset = 'custom';
1254
1459
  }
1255
1460
  // Dynamic loading: --dynamic flag enables Search+Load architecture
@@ -1727,8 +1932,44 @@ const dynamicLoadingTools = [
1727
1932
  },
1728
1933
  },
1729
1934
  ];
1935
+ // v3 preset gate: expose only facade tools + discover_tools + load_toolset
1936
+ const isV3Surface = currentPreset === "default" || currentPreset === "starter" || currentPreset === "v3";
1730
1937
  // Combine all tools (mutable for dynamic loading)
1731
- let allTools = [...allToolsWithoutDiscovery, ...discoveryTools, ...dynamicLoadingTools];
1938
+ let allTools;
1939
+ if (isV3Surface) {
1940
+ allTools = [
1941
+ ...domainTools,
1942
+ ...discoveryTools.filter(t => t.name === "discover_tools"),
1943
+ ...dynamicLoadingTools.filter(t => t.name === "load_toolset"),
1944
+ ];
1945
+ }
1946
+ else {
1947
+ allTools = [...allToolsWithoutDiscovery, ...discoveryTools, ...dynamicLoadingTools];
1948
+ }
1949
+ // Always initialize profiler tables (lightweight, non-blocking)
1950
+ try {
1951
+ const { initEventCollectorTables } = require("./profiler/eventCollector.js");
1952
+ const { initWorkflowTemplateTables } = require("./profiler/workflowTemplates.js");
1953
+ const { initProofEngineTables } = require("./profiler/proofEngine.js");
1954
+ const { initModelRoutingTables } = require("./profiler/modelRouter.js");
1955
+ initEventCollectorTables();
1956
+ initWorkflowTemplateTables();
1957
+ initProofEngineTables();
1958
+ initModelRoutingTables();
1959
+ }
1960
+ catch { /* profiler tables optional */ }
1961
+ // Wrap all tools with profiling proxy when --profile is set
1962
+ // This adds ~1ms per tool call but logs everything to SQLite
1963
+ if (useProfile) {
1964
+ try {
1965
+ const { wrapToolsWithProxy } = require("./profiler/mcpProxy.js");
1966
+ allTools = wrapToolsWithProxy(allTools, { sessionId: `mcp_${Date.now().toString(36)}` });
1967
+ console.error("[profiler] All tools wrapped with profiling proxy (--profile)");
1968
+ }
1969
+ catch (e) {
1970
+ console.error("[profiler] Failed to enable profiling:", e?.message);
1971
+ }
1972
+ }
1732
1973
  // Background: initialize embedding index for semantic search (non-blocking)
1733
1974
  // Uses Agent-as-a-Graph bipartite corpus: tool nodes + domain nodes for graph-aware retrieval
1734
1975
  if (useEmbedding) {
@@ -1777,7 +2018,16 @@ for (const tool of allTools) {
1777
2018
  }
1778
2019
  // Rebuild function for dynamic loading — reconstructs allTools + toolMap
1779
2020
  function rebuildAllTools() {
1780
- allTools = [...allToolsWithoutDiscovery, ...discoveryTools, ...dynamicLoadingTools];
2021
+ if (isV3Surface) {
2022
+ allTools = [
2023
+ ...domainTools,
2024
+ ...discoveryTools.filter(t => t.name === "discover_tools"),
2025
+ ...dynamicLoadingTools.filter(t => t.name === "load_toolset"),
2026
+ ];
2027
+ }
2028
+ else {
2029
+ allTools = [...allToolsWithoutDiscovery, ...discoveryTools, ...dynamicLoadingTools];
2030
+ }
1781
2031
  toolMap = new Map();
1782
2032
  for (const tool of allTools) {
1783
2033
  toolMap.set(tool.name, tool);
@@ -2508,7 +2758,7 @@ You are connected to NodeBench MCP. Follow these rules EXACTLY.
2508
2758
 
2509
2759
  ### SELF-SETUP — If a capability is missing
2510
2760
  When discover_tools returns nothing useful, or a tool says "not configured":
2511
- 1. Escalate toolset: If started with --preset lite, switch to --preset core or targeted --toolsets
2761
+ 1. Escalate toolset: If started on the default lane, switch to --preset power, --preset core, or targeted --toolsets
2512
2762
  2. Resolve providers: Configure missing API keys (GEMINI_API_KEY, OPENAI_API_KEY, etc.)
2513
2763
  3. Bootstrap infra: Run scaffold_nodebench_project or bootstrap_parallel_agents if repo lacks infra
2514
2764
  4. Smoke-test: Re-run the first workflow chain step to confirm the capability is available
@@ -2870,7 +3120,7 @@ Use NodeBench tools when you need to:
2870
3120
  - Audit SEO, analyze Figma flows, detect Android flicker
2871
3121
  - Call LLMs (GPT, Claude, Gemini) for analysis and extraction
2872
3122
  Start with discover_tools("<your task>") to find the right tool.`;
2873
- const server = new Server({ name: "nodebench-mcp-methodology", version: "2.32.0" }, {
3123
+ const server = new Server({ name: "nodebench-mcp-methodology", version: NODEBENCH_VERSION }, {
2874
3124
  capabilities: { tools: { listChanged: true }, prompts: {} },
2875
3125
  instructions: SERVER_INSTRUCTIONS,
2876
3126
  });
@@ -3076,19 +3326,22 @@ process.on('exit', () => {
3076
3326
  // Connect via stdio
3077
3327
  const transport = new StdioServerTransport();
3078
3328
  await server.connect(transport);
3079
- // Start local dashboard servers (non-blocking, best-effort)
3080
- // Operating Dashboard is PRIMARY — shows business intelligence + system data
3329
+ // Start local dashboard servers only when explicitly requested.
3081
3330
  let operatingDashboardPort = 0;
3082
- try {
3083
- operatingDashboardPort = await startOperatingDashboardServer(getDb(), 6274);
3331
+ if (runtimeFlags.enableDashboards) {
3332
+ try {
3333
+ operatingDashboardPort = await startOperatingDashboardServer(getDb(), 6274);
3334
+ }
3335
+ catch { /* operating dashboard is optional — don't block MCP */ }
3084
3336
  }
3085
- catch { /* operating dashboard is optionaldon't block MCP */ }
3086
- // UI Dive dashboard is secondary — shows UI review sessions
3337
+ // UI Dive dashboard is secondaryalso admin-only
3087
3338
  let dashboardPort = 0;
3088
- try {
3089
- dashboardPort = await startDashboardServer(getDb(), 6278);
3339
+ if (runtimeFlags.enableDashboards) {
3340
+ try {
3341
+ dashboardPort = await startDashboardServer(getDb(), 6278);
3342
+ }
3343
+ catch { /* dashboard is optional — don't block MCP */ }
3090
3344
  }
3091
- catch { /* dashboard is optional — don't block MCP */ }
3092
3345
  // Start engine API server (non-blocking, best-effort)
3093
3346
  let enginePort = 0;
3094
3347
  if (useEngine) {
@@ -3105,12 +3358,14 @@ if (useEngine) {
3105
3358
  }
3106
3359
  catch { /* engine is optional — don't block MCP */ }
3107
3360
  }
3108
- // Start observability watchdog (non-blocking, best-effort)
3109
- try {
3110
- initObservability(getDb);
3111
- startWatchdog(getDb());
3361
+ // Start observability watchdog only when explicitly requested.
3362
+ if (runtimeFlags.enableWatchdog) {
3363
+ try {
3364
+ initObservability(getDb);
3365
+ startWatchdog(getDb());
3366
+ }
3367
+ catch { /* observability is optional — don't block MCP */ }
3112
3368
  }
3113
- catch { /* observability is optional — don't block MCP */ }
3114
3369
  // Graceful shutdown
3115
3370
  process.on("SIGINT", () => { stopWatchdog(); process.exit(0); });
3116
3371
  process.on("SIGTERM", () => { stopWatchdog(); process.exit(0); });
@@ -3120,5 +3375,32 @@ const toolsetInfo = cliArgs.includes("--toolsets") || cliArgs.includes("--exclud
3120
3375
  const dashInfo = operatingDashboardPort ? ` dashboard at http://127.0.0.1:${operatingDashboardPort}` : "";
3121
3376
  const uiDiveInfo = dashboardPort ? ` ui-dive at http://127.0.0.1:${dashboardPort}` : "";
3122
3377
  const engineInfo = enginePort ? ` engine at http://127.0.0.1:${enginePort}` : "";
3123
- console.error(`nodebench-mcp ready (${allTools.length} tools, ${PROMPTS.length} prompts${toolsetInfo}, SQLite at ~/.nodebench/${dashInfo}${uiDiveInfo}${engineInfo})`);
3378
+ const runtimeInfo = runtimeFlags.enableDashboards || runtimeFlags.enableWatchdog
3379
+ ? " admin-runtime"
3380
+ : " core-runtime";
3381
+ console.error(`nodebench-mcp ready (${allTools.length} tools, ${PROMPTS.length} prompts${toolsetInfo}, SQLite at ~/.nodebench/${dashInfo}${uiDiveInfo}${engineInfo}${runtimeInfo})`);
3382
+ // ── Auto-brief on first start (delta/hackathon presets) ──────────────
3383
+ // When using delta or hackathon preset, auto-run delta_brief on first session
3384
+ // to give users immediate value before they even ask.
3385
+ const presetIdx2 = cliArgs.indexOf("--preset");
3386
+ const activePreset = presetIdx2 >= 0 ? cliArgs[presetIdx2 + 1] : "";
3387
+ if (activePreset === "hackathon" || activePreset === "delta" || cliArgs.includes("--auto-brief")) {
3388
+ (async () => {
3389
+ try {
3390
+ const { createDeltaTools } = await import("./tools/deltaTools.js");
3391
+ const dTools = createDeltaTools();
3392
+ const briefTool = dTools.find((t) => t.name === "delta_brief");
3393
+ if (briefTool) {
3394
+ const result = await briefTool.handler({ persona: "founder" });
3395
+ const text = result.content?.[0]?.text;
3396
+ if (text) {
3397
+ const parsed = JSON.parse(text);
3398
+ const comp = parsed.compounding;
3399
+ console.error(`[delta] Auto-brief: ${comp?.totalPackets ?? 0} packets, ${comp?.watchedCount ?? 0} watched, ${comp?.daysSinceFirst ?? 0} days active`);
3400
+ }
3401
+ }
3402
+ }
3403
+ catch { /* auto-brief is best-effort */ }
3404
+ })();
3405
+ }
3124
3406
  //# sourceMappingURL=index.js.map