           fn?()
 
 # Use Stitch to create a browser bundle.
-bundle = (info) ->
+bundle = (info, fn) ->
   paths = (fs.realpathSync path for path in info.browser.paths)
   stitch
     .createPackage

# Export commands and other API stuff for in-Node use.
module.exports =
  commands: commands
  run: run
  version: ver

      src = info.header + src + info.footer
      cleanFilename = fname + '.js'
      cleanSource = info.headerComment + src
      uglySource = info.headerComment + uglify(src)
      fs.writeFileSync cleanFilename, cleanSource
      fs.writeFileSync fname + '.min.js', uglySource
      try fs.unlinkSync 'build/edge'
      fs.symlinkSync dir + '/', 'build/edge'

      # Run the bundle hook.
      info.hookFns.bundle? cleanFilename, cleanSource
      fn? clean: cleanSource, ugly: uglySource

# Compile all CoffeeScript sources for the browser.
buildBrowser = (info, watch, fn) ->
  bundle info, fn
  if watch
    paths = (path.join(pth, '**/*.{coffee,js}') for pth in info.browser.paths)
    h.watchFiles glob.globSync("{#{paths.join()}}"), ->
