@brainst0rm/cli 0.14.1 → 0.14.3

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 (103) hide show
  1. package/dist/{App-DSD2B5RV.js → App-4GFCMEPX.js} +10 -10
  2. package/dist/{App-6WBAUX35.js → App-KTUPXXQM.js} +10 -10
  3. package/dist/{agent-D5GTWGPD.js → agent-EYT6BPVT.js} +2 -2
  4. package/dist/{agent-DOR4KPUH.js → agent-KTWFCMY5.js} +2 -2
  5. package/dist/brainstorm.js +56 -56
  6. package/dist/{chunk-RV3CJQGC.js → chunk-2AXI2OPK.js} +43 -7
  7. package/dist/chunk-2AXI2OPK.js.map +1 -0
  8. package/dist/{chunk-6G2HA63H.js → chunk-3AYD5ONW.js} +43 -7
  9. package/dist/chunk-3AYD5ONW.js.map +1 -0
  10. package/dist/{chunk-UPP3TOCP.js → chunk-3RH5MKZF.js} +5 -5
  11. package/dist/{chunk-GLWCTGWG.js → chunk-4NNXZFPX.js} +2 -2
  12. package/dist/{chunk-Z5QQ5OGV.js → chunk-52Q6CE4Y.js} +19 -2
  13. package/dist/chunk-52Q6CE4Y.js.map +1 -0
  14. package/dist/{chunk-FGYEICUI.js → chunk-6UFDBLUX.js} +36 -4
  15. package/dist/chunk-6UFDBLUX.js.map +1 -0
  16. package/dist/{chunk-NVA62I52.js → chunk-6WGHIUWX.js} +2 -2
  17. package/dist/{chunk-4LR7LQPG.js → chunk-CZILJ33T.js} +2 -2
  18. package/dist/{chunk-TLQVDPEQ.js → chunk-DJ7WG6GZ.js} +19 -2
  19. package/dist/chunk-DJ7WG6GZ.js.map +1 -0
  20. package/dist/{chunk-N7JKT44Y.js → chunk-GUHXB5DX.js} +2 -2
  21. package/dist/{chunk-SCGV333Z.js → chunk-HKRUCBMI.js} +4 -4
  22. package/dist/{chunk-PIT7VD46.js → chunk-N5V2PGPN.js} +4 -4
  23. package/dist/{chunk-GF5TKYDA.js → chunk-RVQOLZR6.js} +14 -14
  24. package/dist/{chunk-AH5SFL5J.js → chunk-RVXUVX5W.js} +14 -14
  25. package/dist/{chunk-4PCWPRRN.js → chunk-WRO5TVID.js} +5 -5
  26. package/dist/{chunk-ZYGUHAHM.js → chunk-Z5RDHTWQ.js} +36 -4
  27. package/dist/chunk-Z5RDHTWQ.js.map +1 -0
  28. package/dist/{dist-QUYR4VH7.js → dist-5NJP3JHL.js} +23 -3
  29. package/dist/{dist-QUYR4VH7.js.map → dist-5NJP3JHL.js.map} +1 -1
  30. package/dist/{dist-P6IZYZBM.js → dist-7AIEUUFF.js} +2 -2
  31. package/dist/{dist-RVTIEEXC.js → dist-DCJYPRUZ.js} +3 -3
  32. package/dist/{dist-PGQ4UIM4.js → dist-DXQQF55Y.js} +3 -3
  33. package/dist/{dist-JQXY4E6A.js → dist-KSUHKNET.js} +88 -15
  34. package/dist/dist-KSUHKNET.js.map +1 -0
  35. package/dist/{dist-TS5U3BDK.js → dist-LCPM5BXN.js} +5 -5
  36. package/dist/{dist-VB7CXEYB.js → dist-MKAADC4H.js} +5 -5
  37. package/dist/{dist-MKWOTCNR.js → dist-NQQPQGZU.js} +6 -6
  38. package/dist/{dist-VECPW2NV.js → dist-NTQ7LFRW.js} +5 -5
  39. package/dist/{dist-ESUVKHL4.js → dist-QFVAD45U.js} +6 -6
  40. package/dist/{dist-7IRVYQYG.js → dist-RUBJT7FI.js} +2 -2
  41. package/dist/{dist-P2J4GXPC.js → dist-S7FLVLXS.js} +2 -2
  42. package/dist/{dist-4JONNOLT.js → dist-U3G5HT5D.js} +6 -6
  43. package/dist/{dist-IUVHFJV2.js → dist-UETKBS6A.js} +6 -6
  44. package/dist/{dist-ODBEXWTS.js → dist-WLMQD6I5.js} +5 -5
  45. package/dist/{dist-GNYSGXLR.js → dist-XFJ337R7.js} +23 -3
  46. package/dist/{dist-GNYSGXLR.js.map → dist-XFJ337R7.js.map} +1 -1
  47. package/dist/{dist-T6BIJZSD.js → dist-Y5FZXOVL.js} +2 -2
  48. package/dist/{dist-2DSARR2V.js → dist-ZPASHTYZ.js} +88 -15
  49. package/dist/dist-ZPASHTYZ.js.map +1 -0
  50. package/dist/{handler-VOVQRV5B.js → handler-CPXQZBSW.js} +6 -6
  51. package/dist/{handler-MHEFUP32.js → handler-FIBSROM4.js} +6 -6
  52. package/dist/index.js +56 -56
  53. package/dist/{mcp-server-C732TVIQ.js → mcp-server-56FVMXTC.js} +2 -2
  54. package/dist/{mcp-server-JUYR37EX.js → mcp-server-XXUZDYW6.js} +2 -2
  55. package/dist/{roles-QTZ54BOF.js → roles-CJTZSFFW.js} +6 -6
  56. package/dist/{roles-LDNPU3NI.js → roles-MVBHE5QW.js} +6 -6
  57. package/dist/{slash-VYIMEVPU.js → slash-WFDKT67A.js} +8 -8
  58. package/dist/{slash-VAUFJQBQ.js → slash-Y3E5KBOJ.js} +8 -8
  59. package/package.json +28 -28
  60. package/dist/chunk-6G2HA63H.js.map +0 -1
  61. package/dist/chunk-FGYEICUI.js.map +0 -1
  62. package/dist/chunk-RV3CJQGC.js.map +0 -1
  63. package/dist/chunk-TLQVDPEQ.js.map +0 -1
  64. package/dist/chunk-Z5QQ5OGV.js.map +0 -1
  65. package/dist/chunk-ZYGUHAHM.js.map +0 -1
  66. package/dist/dist-2DSARR2V.js.map +0 -1
  67. package/dist/dist-JQXY4E6A.js.map +0 -1
  68. /package/dist/{App-DSD2B5RV.js.map → App-4GFCMEPX.js.map} +0 -0
  69. /package/dist/{App-6WBAUX35.js.map → App-KTUPXXQM.js.map} +0 -0
  70. /package/dist/{agent-D5GTWGPD.js.map → agent-EYT6BPVT.js.map} +0 -0
  71. /package/dist/{agent-DOR4KPUH.js.map → agent-KTWFCMY5.js.map} +0 -0
  72. /package/dist/{chunk-UPP3TOCP.js.map → chunk-3RH5MKZF.js.map} +0 -0
  73. /package/dist/{chunk-GLWCTGWG.js.map → chunk-4NNXZFPX.js.map} +0 -0
  74. /package/dist/{chunk-NVA62I52.js.map → chunk-6WGHIUWX.js.map} +0 -0
  75. /package/dist/{chunk-4LR7LQPG.js.map → chunk-CZILJ33T.js.map} +0 -0
  76. /package/dist/{chunk-N7JKT44Y.js.map → chunk-GUHXB5DX.js.map} +0 -0
  77. /package/dist/{chunk-SCGV333Z.js.map → chunk-HKRUCBMI.js.map} +0 -0
  78. /package/dist/{chunk-PIT7VD46.js.map → chunk-N5V2PGPN.js.map} +0 -0
  79. /package/dist/{chunk-GF5TKYDA.js.map → chunk-RVQOLZR6.js.map} +0 -0
  80. /package/dist/{chunk-AH5SFL5J.js.map → chunk-RVXUVX5W.js.map} +0 -0
  81. /package/dist/{chunk-4PCWPRRN.js.map → chunk-WRO5TVID.js.map} +0 -0
  82. /package/dist/{dist-4JONNOLT.js.map → dist-7AIEUUFF.js.map} +0 -0
  83. /package/dist/{dist-7IRVYQYG.js.map → dist-DCJYPRUZ.js.map} +0 -0
  84. /package/dist/{dist-ESUVKHL4.js.map → dist-DXQQF55Y.js.map} +0 -0
  85. /package/dist/{dist-IUVHFJV2.js.map → dist-LCPM5BXN.js.map} +0 -0
  86. /package/dist/{dist-VB7CXEYB.js.map → dist-MKAADC4H.js.map} +0 -0
  87. /package/dist/{dist-MKWOTCNR.js.map → dist-NQQPQGZU.js.map} +0 -0
  88. /package/dist/{dist-P2J4GXPC.js.map → dist-NTQ7LFRW.js.map} +0 -0
  89. /package/dist/{dist-P6IZYZBM.js.map → dist-QFVAD45U.js.map} +0 -0
  90. /package/dist/{dist-PGQ4UIM4.js.map → dist-RUBJT7FI.js.map} +0 -0
  91. /package/dist/{dist-RVTIEEXC.js.map → dist-S7FLVLXS.js.map} +0 -0
  92. /package/dist/{dist-T6BIJZSD.js.map → dist-U3G5HT5D.js.map} +0 -0
  93. /package/dist/{dist-TS5U3BDK.js.map → dist-UETKBS6A.js.map} +0 -0
  94. /package/dist/{dist-ODBEXWTS.js.map → dist-WLMQD6I5.js.map} +0 -0
  95. /package/dist/{dist-VECPW2NV.js.map → dist-Y5FZXOVL.js.map} +0 -0
  96. /package/dist/{handler-VOVQRV5B.js.map → handler-CPXQZBSW.js.map} +0 -0
  97. /package/dist/{handler-MHEFUP32.js.map → handler-FIBSROM4.js.map} +0 -0
  98. /package/dist/{mcp-server-C732TVIQ.js.map → mcp-server-56FVMXTC.js.map} +0 -0
  99. /package/dist/{mcp-server-JUYR37EX.js.map → mcp-server-XXUZDYW6.js.map} +0 -0
  100. /package/dist/{roles-LDNPU3NI.js.map → roles-CJTZSFFW.js.map} +0 -0
  101. /package/dist/{roles-QTZ54BOF.js.map → roles-MVBHE5QW.js.map} +0 -0
  102. /package/dist/{slash-VAUFJQBQ.js.map → slash-WFDKT67A.js.map} +0 -0
  103. /package/dist/{slash-VYIMEVPU.js.map → slash-Y3E5KBOJ.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../node_modules/fast-glob/out/utils/array.js","../../../node_modules/fast-glob/out/utils/errno.js","../../../node_modules/fast-glob/out/utils/fs.js","../../../node_modules/fast-glob/out/utils/path.js","../../../node_modules/is-extglob/index.js","../../../node_modules/is-glob/index.js","../../../node_modules/glob-parent/index.js","../../../node_modules/braces/lib/utils.js","../../../node_modules/braces/lib/stringify.js","../../../node_modules/is-number/index.js","../../../node_modules/to-regex-range/index.js","../../../node_modules/fill-range/index.js","../../../node_modules/braces/lib/compile.js","../../../node_modules/braces/lib/expand.js","../../../node_modules/braces/lib/constants.js","../../../node_modules/braces/lib/parse.js","../../../node_modules/braces/index.js","../../../node_modules/micromatch/node_modules/picomatch/lib/constants.js","../../../node_modules/micromatch/node_modules/picomatch/lib/utils.js","../../../node_modules/micromatch/node_modules/picomatch/lib/scan.js","../../../node_modules/micromatch/node_modules/picomatch/lib/parse.js","../../../node_modules/micromatch/node_modules/picomatch/lib/picomatch.js","../../../node_modules/micromatch/node_modules/picomatch/index.js","../../../node_modules/micromatch/index.js","../../../node_modules/fast-glob/out/utils/pattern.js","../../../node_modules/merge2/index.js","../../../node_modules/fast-glob/out/utils/stream.js","../../../node_modules/fast-glob/out/utils/string.js","../../../node_modules/fast-glob/out/utils/index.js","../../../node_modules/fast-glob/out/managers/tasks.js","../../../node_modules/@nodelib/fs.stat/out/providers/async.js","../../../node_modules/@nodelib/fs.stat/out/providers/sync.js","../../../node_modules/@nodelib/fs.stat/out/adapters/fs.js","../../../node_modules/@nodelib/fs.stat/out/settings.js","../../../node_modules/@nodelib/fs.stat/out/index.js","../../../node_modules/queue-microtask/index.js","../../../node_modules/run-parallel/index.js","../../../node_modules/@nodelib/fs.scandir/out/constants.js","../../../node_modules/@nodelib/fs.scandir/out/utils/fs.js","../../../node_modules/@nodelib/fs.scandir/out/utils/index.js","../../../node_modules/@nodelib/fs.scandir/out/providers/common.js","../../../node_modules/@nodelib/fs.scandir/out/providers/async.js","../../../node_modules/@nodelib/fs.scandir/out/providers/sync.js","../../../node_modules/@nodelib/fs.scandir/out/adapters/fs.js","../../../node_modules/@nodelib/fs.scandir/out/settings.js","../../../node_modules/@nodelib/fs.scandir/out/index.js","../../../node_modules/reusify/reusify.js","../../../node_modules/fastq/queue.js","../../../node_modules/@nodelib/fs.walk/out/readers/common.js","../../../node_modules/@nodelib/fs.walk/out/readers/reader.js","../../../node_modules/@nodelib/fs.walk/out/readers/async.js","../../../node_modules/@nodelib/fs.walk/out/providers/async.js","../../../node_modules/@nodelib/fs.walk/out/providers/stream.js","../../../node_modules/@nodelib/fs.walk/out/readers/sync.js","../../../node_modules/@nodelib/fs.walk/out/providers/sync.js","../../../node_modules/@nodelib/fs.walk/out/settings.js","../../../node_modules/@nodelib/fs.walk/out/index.js","../../../node_modules/fast-glob/out/readers/reader.js","../../../node_modules/fast-glob/out/readers/stream.js","../../../node_modules/fast-glob/out/readers/async.js","../../../node_modules/fast-glob/out/providers/matchers/matcher.js","../../../node_modules/fast-glob/out/providers/matchers/partial.js","../../../node_modules/fast-glob/out/providers/filters/deep.js","../../../node_modules/fast-glob/out/providers/filters/entry.js","../../../node_modules/fast-glob/out/providers/filters/error.js","../../../node_modules/fast-glob/out/providers/transformers/entry.js","../../../node_modules/fast-glob/out/providers/provider.js","../../../node_modules/fast-glob/out/providers/async.js","../../../node_modules/fast-glob/out/providers/stream.js","../../../node_modules/fast-glob/out/readers/sync.js","../../../node_modules/fast-glob/out/providers/sync.js","../../../node_modules/fast-glob/out/settings.js","../../../node_modules/fast-glob/out/index.js","../../tools/src/timeout.ts","../../tools/src/workspace-context.ts","../../tools/src/tool-health.ts","../../tools/src/builtin/undo.ts","../../tools/src/builtin/scratchpad.ts","../../tools/src/builtin/ask-user.ts","../../tools/src/builtin/routing-hint.ts","../../tools/src/builtin/cost-estimate.ts","../../tools/src/builtin/tool-search.ts","../../tools/src/parallel.ts","../../tools/src/progressive.ts","../../tools/src/sandbox/docker-sandbox.ts","../../tools/src/builtin/plan-preview.ts","../../tools/src/registry.ts","../../tools/src/builtin/file-read.ts","../../tools/src/builtin/sensitive-paths.ts","../../tools/src/builtin/file-write.ts","../../tools/src/builtin/file-edit.ts","../../tools/src/builtin/shell.ts","../../tools/src/builtin/git-safety.ts","../../tools/src/builtin/sandbox.ts","../../tools/src/builtin/glob.ts","../../tools/src/builtin/grep.ts","../../tools/src/builtin/git-status.ts","../../tools/src/builtin/git-common.ts","../../tools/src/builtin/git-diff.ts","../../tools/src/builtin/git-log.ts","../../tools/src/builtin/git-commit.ts","../../tools/src/builtin/gh-pr.ts","../../tools/src/builtin/gh-issue.ts","../../tools/src/builtin/gh-review.ts","../../tools/src/builtin/gh-actions.ts","../../tools/src/builtin/gh-release.ts","../../tools/src/builtin/gh-search.ts","../../tools/src/builtin/gh-security.ts","../../tools/src/builtin/gh-repo.ts","../../tools/src/builtin/git-branch.ts","../../tools/src/builtin/git-stash.ts","../../tools/src/builtin/list-dir.ts","../../tools/src/builtin/multi-edit.ts","../../tools/src/builtin/edit-common.ts","../../tools/src/builtin/batch-edit.ts","../../tools/src/builtin/web-fetch.ts","../../tools/src/builtin/web-search.ts","../../tools/src/builtin/process-manage.ts","../../tools/src/builtin/task-manage.ts","../../tools/src/builtin/br-intelligence.ts","../../tools/src/builtin/memory-tools.ts","../../tools/src/builtin/sleep.ts","../../tools/src/builtin/build-verify.ts","../../tools/src/builtin/memory-tool.ts","../../tools/src/builtin/pipeline-tool.ts","../../tools/src/builtin/code-graph-tools.ts","../../tools/src/index.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splitWhen = exports.flatten = void 0;\nfunction flatten(items) {\n return items.reduce((collection, item) => [].concat(collection, item), []);\n}\nexports.flatten = flatten;\nfunction splitWhen(items, predicate) {\n const result = [[]];\n let groupIndex = 0;\n for (const item of items) {\n if (predicate(item)) {\n groupIndex++;\n result[groupIndex] = [];\n }\n else {\n result[groupIndex].push(item);\n }\n }\n return result;\n}\nexports.splitWhen = splitWhen;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEnoentCodeError = void 0;\nfunction isEnoentCodeError(error) {\n return error.code === 'ENOENT';\n}\nexports.isEnoentCodeError = isEnoentCodeError;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n constructor(name, stats) {\n this.name = name;\n this.isBlockDevice = stats.isBlockDevice.bind(stats);\n this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n this.isDirectory = stats.isDirectory.bind(stats);\n this.isFIFO = stats.isFIFO.bind(stats);\n this.isFile = stats.isFile.bind(stats);\n this.isSocket = stats.isSocket.bind(stats);\n this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n }\n}\nfunction createDirentFromStats(name, stats) {\n return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPosixPathToPattern = exports.convertWindowsPathToPattern = exports.convertPathToPattern = exports.escapePosixPath = exports.escapeWindowsPath = exports.escape = exports.removeLeadingDotSegment = exports.makeAbsolute = exports.unixify = void 0;\nconst os = require(\"os\");\nconst path = require(\"path\");\nconst IS_WINDOWS_PLATFORM = os.platform() === 'win32';\nconst LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\\\\n/**\n * All non-escaped special characters.\n * Posix: ()*?[]{|}, !+@ before (, ! at the beginning, \\\\ before non-special characters.\n * Windows: (){}[], !+@ before (, ! at the beginning.\n */\nconst POSIX_UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\()|\\\\(?![!()*+?@[\\]{|}]))/g;\nconst WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()[\\]{}]|^!|[!+@](?=\\())/g;\n/**\n * The device path (\\\\.\\ or \\\\?\\).\n * https://learn.microsoft.com/en-us/dotnet/standard/io/file-path-formats#dos-device-paths\n */\nconst DOS_DEVICE_PATH_RE = /^\\\\\\\\([.?])/;\n/**\n * All backslashes except those escaping special characters.\n * Windows: !()+@{}\n * https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file#naming-conventions\n */\nconst WINDOWS_BACKSLASHES_RE = /\\\\(?![!()+@[\\]{}])/g;\n/**\n * Designed to work only with simple paths: `dir\\\\file`.\n */\nfunction unixify(filepath) {\n return filepath.replace(/\\\\/g, '/');\n}\nexports.unixify = unixify;\nfunction makeAbsolute(cwd, filepath) {\n return path.resolve(cwd, filepath);\n}\nexports.makeAbsolute = makeAbsolute;\nfunction removeLeadingDotSegment(entry) {\n // We do not use `startsWith` because this is 10x slower than current implementation for some cases.\n // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\n if (entry.charAt(0) === '.') {\n const secondCharactery = entry.charAt(1);\n if (secondCharactery === '/' || secondCharactery === '\\\\') {\n return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT);\n }\n }\n return entry;\n}\nexports.removeLeadingDotSegment = removeLeadingDotSegment;\nexports.escape = IS_WINDOWS_PLATFORM ? escapeWindowsPath : escapePosixPath;\nfunction escapeWindowsPath(pattern) {\n return pattern.replace(WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escapeWindowsPath = escapeWindowsPath;\nfunction escapePosixPath(pattern) {\n return pattern.replace(POSIX_UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escapePosixPath = escapePosixPath;\nexports.convertPathToPattern = IS_WINDOWS_PLATFORM ? convertWindowsPathToPattern : convertPosixPathToPattern;\nfunction convertWindowsPathToPattern(filepath) {\n return escapeWindowsPath(filepath)\n .replace(DOS_DEVICE_PATH_RE, '//$1')\n .replace(WINDOWS_BACKSLASHES_RE, '/');\n}\nexports.convertWindowsPathToPattern = convertWindowsPathToPattern;\nfunction convertPosixPathToPattern(filepath) {\n return escapePosixPath(filepath);\n}\nexports.convertPosixPathToPattern = convertPosixPathToPattern;\n","/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nmodule.exports = function isExtglob(str) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n var match;\n while ((match = /(\\\\).|([@?!+*]\\(.*\\))/g.exec(str))) {\n if (match[2]) return true;\n str = str.slice(match.index + match[0].length);\n }\n\n return false;\n};\n","/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nvar isExtglob = require('is-extglob');\nvar chars = { '{': '}', '(': ')', '[': ']'};\nvar strictCheck = function(str) {\n if (str[0] === '!') {\n return true;\n }\n var index = 0;\n var pipeIndex = -2;\n var closeSquareIndex = -2;\n var closeCurlyIndex = -2;\n var closeParenIndex = -2;\n var backSlashIndex = -2;\n while (index < str.length) {\n if (str[index] === '*') {\n return true;\n }\n\n if (str[index + 1] === '?' && /[\\].+)]/.test(str[index])) {\n return true;\n }\n\n if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') {\n if (closeSquareIndex < index) {\n closeSquareIndex = str.indexOf(']', index);\n }\n if (closeSquareIndex > index) {\n if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n return true;\n }\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n return true;\n }\n }\n }\n\n if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') {\n closeCurlyIndex = str.indexOf('}', index);\n if (closeCurlyIndex > index) {\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) {\n return true;\n }\n }\n }\n\n if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') {\n closeParenIndex = str.indexOf(')', index);\n if (closeParenIndex > index) {\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n return true;\n }\n }\n }\n\n if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') {\n if (pipeIndex < index) {\n pipeIndex = str.indexOf('|', index);\n }\n if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') {\n closeParenIndex = str.indexOf(')', pipeIndex);\n if (closeParenIndex > pipeIndex) {\n backSlashIndex = str.indexOf('\\\\', pipeIndex);\n if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n return true;\n }\n }\n }\n }\n\n if (str[index] === '\\\\') {\n var open = str[index + 1];\n index += 2;\n var close = chars[open];\n\n if (close) {\n var n = str.indexOf(close, index);\n if (n !== -1) {\n index = n + 1;\n }\n }\n\n if (str[index] === '!') {\n return true;\n }\n } else {\n index++;\n }\n }\n return false;\n};\n\nvar relaxedCheck = function(str) {\n if (str[0] === '!') {\n return true;\n }\n var index = 0;\n while (index < str.length) {\n if (/[*?{}()[\\]]/.test(str[index])) {\n return true;\n }\n\n if (str[index] === '\\\\') {\n var open = str[index + 1];\n index += 2;\n var close = chars[open];\n\n if (close) {\n var n = str.indexOf(close, index);\n if (n !== -1) {\n index = n + 1;\n }\n }\n\n if (str[index] === '!') {\n return true;\n }\n } else {\n index++;\n }\n }\n return false;\n};\n\nmodule.exports = function isGlob(str, options) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n if (isExtglob(str)) {\n return true;\n }\n\n var check = strictCheck;\n\n // optionally relax check\n if (options && options.strict === false) {\n check = relaxedCheck;\n }\n\n return check(str);\n};\n","'use strict';\n\nvar isGlob = require('is-glob');\nvar pathPosixDirname = require('path').posix.dirname;\nvar isWin32 = require('os').platform() === 'win32';\n\nvar slash = '/';\nvar backslash = /\\\\/g;\nvar enclosure = /[\\{\\[].*[\\}\\]]$/;\nvar globby = /(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/;\nvar escaped = /\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;\n\n/**\n * @param {string} str\n * @param {Object} opts\n * @param {boolean} [opts.flipBackslashes=true]\n * @returns {string}\n */\nmodule.exports = function globParent(str, opts) {\n var options = Object.assign({ flipBackslashes: true }, opts);\n\n // flip windows path separators\n if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {\n str = str.replace(backslash, slash);\n }\n\n // special case for strings ending in enclosure containing path separator\n if (enclosure.test(str)) {\n str += slash;\n }\n\n // preserves full path in case of trailing path separator\n str += 'a';\n\n // remove path parts that are globby\n do {\n str = pathPosixDirname(str);\n } while (isGlob(str) || globby.test(str));\n\n // remove escape chars and return result\n return str.replace(escaped, '$1');\n};\n","'use strict';\n\nexports.isInteger = num => {\n if (typeof num === 'number') {\n return Number.isInteger(num);\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isInteger(Number(num));\n }\n return false;\n};\n\n/**\n * Find a node of the given type\n */\n\nexports.find = (node, type) => node.nodes.find(node => node.type === type);\n\n/**\n * Find a node of the given type\n */\n\nexports.exceedsLimit = (min, max, step = 1, limit) => {\n if (limit === false) return false;\n if (!exports.isInteger(min) || !exports.isInteger(max)) return false;\n return ((Number(max) - Number(min)) / Number(step)) >= limit;\n};\n\n/**\n * Escape the given node with '\\\\' before node.value\n */\n\nexports.escapeNode = (block, n = 0, type) => {\n const node = block.nodes[n];\n if (!node) return;\n\n if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {\n if (node.escaped !== true) {\n node.value = '\\\\' + node.value;\n node.escaped = true;\n }\n }\n};\n\n/**\n * Returns true if the given brace node should be enclosed in literal braces\n */\n\nexports.encloseBrace = node => {\n if (node.type !== 'brace') return false;\n if ((node.commas >> 0 + node.ranges >> 0) === 0) {\n node.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a brace node is invalid.\n */\n\nexports.isInvalidBrace = block => {\n if (block.type !== 'brace') return false;\n if (block.invalid === true || block.dollar) return true;\n if ((block.commas >> 0 + block.ranges >> 0) === 0) {\n block.invalid = true;\n return true;\n }\n if (block.open !== true || block.close !== true) {\n block.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a node is an open or close node\n */\n\nexports.isOpenOrClose = node => {\n if (node.type === 'open' || node.type === 'close') {\n return true;\n }\n return node.open === true || node.close === true;\n};\n\n/**\n * Reduce an array of text nodes.\n */\n\nexports.reduce = nodes => nodes.reduce((acc, node) => {\n if (node.type === 'text') acc.push(node.value);\n if (node.type === 'range') node.type = 'text';\n return acc;\n}, []);\n\n/**\n * Flatten an array\n */\n\nexports.flatten = (...args) => {\n const result = [];\n\n const flat = arr => {\n for (let i = 0; i < arr.length; i++) {\n const ele = arr[i];\n\n if (Array.isArray(ele)) {\n flat(ele);\n continue;\n }\n\n if (ele !== undefined) {\n result.push(ele);\n }\n }\n return result;\n };\n\n flat(args);\n return result;\n};\n","'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n const stringify = (node, parent = {}) => {\n const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n const invalidNode = node.invalid === true && options.escapeInvalid === true;\n let output = '';\n\n if (node.value) {\n if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {\n return '\\\\' + node.value;\n }\n return node.value;\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes) {\n for (const child of node.nodes) {\n output += stringify(child);\n }\n }\n return output;\n };\n\n return stringify(ast);\n};\n\n","/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(num) {\n if (typeof num === 'number') {\n return num - num === 0;\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n }\n return false;\n};\n","/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst isNumber = require('is-number');\n\nconst toRegexRange = (min, max, options) => {\n if (isNumber(min) === false) {\n throw new TypeError('toRegexRange: expected the first argument to be a number');\n }\n\n if (max === void 0 || min === max) {\n return String(min);\n }\n\n if (isNumber(max) === false) {\n throw new TypeError('toRegexRange: expected the second argument to be a number.');\n }\n\n let opts = { relaxZeros: true, ...options };\n if (typeof opts.strictZeros === 'boolean') {\n opts.relaxZeros = opts.strictZeros === false;\n }\n\n let relax = String(opts.relaxZeros);\n let shorthand = String(opts.shorthand);\n let capture = String(opts.capture);\n let wrap = String(opts.wrap);\n let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;\n\n if (toRegexRange.cache.hasOwnProperty(cacheKey)) {\n return toRegexRange.cache[cacheKey].result;\n }\n\n let a = Math.min(min, max);\n let b = Math.max(min, max);\n\n if (Math.abs(a - b) === 1) {\n let result = min + '|' + max;\n if (opts.capture) {\n return `(${result})`;\n }\n if (opts.wrap === false) {\n return result;\n }\n return `(?:${result})`;\n }\n\n let isPadded = hasPadding(min) || hasPadding(max);\n let state = { min, max, a, b };\n let positives = [];\n let negatives = [];\n\n if (isPadded) {\n state.isPadded = isPadded;\n state.maxLen = String(state.max).length;\n }\n\n if (a < 0) {\n let newMin = b < 0 ? Math.abs(b) : 1;\n negatives = splitToPatterns(newMin, Math.abs(a), state, opts);\n a = state.a = 0;\n }\n\n if (b >= 0) {\n positives = splitToPatterns(a, b, state, opts);\n }\n\n state.negatives = negatives;\n state.positives = positives;\n state.result = collatePatterns(negatives, positives, opts);\n\n if (opts.capture === true) {\n state.result = `(${state.result})`;\n } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {\n state.result = `(?:${state.result})`;\n }\n\n toRegexRange.cache[cacheKey] = state;\n return state.result;\n};\n\nfunction collatePatterns(neg, pos, options) {\n let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];\n let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];\n let intersected = filterPatterns(neg, pos, '-?', true, options) || [];\n let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);\n return subpatterns.join('|');\n}\n\nfunction splitToRanges(min, max) {\n let nines = 1;\n let zeros = 1;\n\n let stop = countNines(min, nines);\n let stops = new Set([max]);\n\n while (min <= stop && stop <= max) {\n stops.add(stop);\n nines += 1;\n stop = countNines(min, nines);\n }\n\n stop = countZeros(max + 1, zeros) - 1;\n\n while (min < stop && stop <= max) {\n stops.add(stop);\n zeros += 1;\n stop = countZeros(max + 1, zeros) - 1;\n }\n\n stops = [...stops];\n stops.sort(compare);\n return stops;\n}\n\n/**\n * Convert a range to a regex pattern\n * @param {Number} `start`\n * @param {Number} `stop`\n * @return {String}\n */\n\nfunction rangeToPattern(start, stop, options) {\n if (start === stop) {\n return { pattern: start, count: [], digits: 0 };\n }\n\n let zipped = zip(start, stop);\n let digits = zipped.length;\n let pattern = '';\n let count = 0;\n\n for (let i = 0; i < digits; i++) {\n let [startDigit, stopDigit] = zipped[i];\n\n if (startDigit === stopDigit) {\n pattern += startDigit;\n\n } else if (startDigit !== '0' || stopDigit !== '9') {\n pattern += toCharacterClass(startDigit, stopDigit, options);\n\n } else {\n count++;\n }\n }\n\n if (count) {\n pattern += options.shorthand === true ? '\\\\d' : '[0-9]';\n }\n\n return { pattern, count: [count], digits };\n}\n\nfunction splitToPatterns(min, max, tok, options) {\n let ranges = splitToRanges(min, max);\n let tokens = [];\n let start = min;\n let prev;\n\n for (let i = 0; i < ranges.length; i++) {\n let max = ranges[i];\n let obj = rangeToPattern(String(start), String(max), options);\n let zeros = '';\n\n if (!tok.isPadded && prev && prev.pattern === obj.pattern) {\n if (prev.count.length > 1) {\n prev.count.pop();\n }\n\n prev.count.push(obj.count[0]);\n prev.string = prev.pattern + toQuantifier(prev.count);\n start = max + 1;\n continue;\n }\n\n if (tok.isPadded) {\n zeros = padZeros(max, tok, options);\n }\n\n obj.string = zeros + obj.pattern + toQuantifier(obj.count);\n tokens.push(obj);\n start = max + 1;\n prev = obj;\n }\n\n return tokens;\n}\n\nfunction filterPatterns(arr, comparison, prefix, intersection, options) {\n let result = [];\n\n for (let ele of arr) {\n let { string } = ele;\n\n // only push if _both_ are negative...\n if (!intersection && !contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n\n // or _both_ are positive\n if (intersection && contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n }\n return result;\n}\n\n/**\n * Zip strings\n */\n\nfunction zip(a, b) {\n let arr = [];\n for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);\n return arr;\n}\n\nfunction compare(a, b) {\n return a > b ? 1 : b > a ? -1 : 0;\n}\n\nfunction contains(arr, key, val) {\n return arr.some(ele => ele[key] === val);\n}\n\nfunction countNines(min, len) {\n return Number(String(min).slice(0, -len) + '9'.repeat(len));\n}\n\nfunction countZeros(integer, zeros) {\n return integer - (integer % Math.pow(10, zeros));\n}\n\nfunction toQuantifier(digits) {\n let [start = 0, stop = ''] = digits;\n if (stop || start > 1) {\n return `{${start + (stop ? ',' + stop : '')}}`;\n }\n return '';\n}\n\nfunction toCharacterClass(a, b, options) {\n return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;\n}\n\nfunction hasPadding(str) {\n return /^-?(0+)\\d/.test(str);\n}\n\nfunction padZeros(value, tok, options) {\n if (!tok.isPadded) {\n return value;\n }\n\n let diff = Math.abs(tok.maxLen - String(value).length);\n let relax = options.relaxZeros !== false;\n\n switch (diff) {\n case 0:\n return '';\n case 1:\n return relax ? '0?' : '0';\n case 2:\n return relax ? '0{0,2}' : '00';\n default: {\n return relax ? `0{0,${diff}}` : `0{${diff}}`;\n }\n }\n}\n\n/**\n * Cache\n */\n\ntoRegexRange.cache = {};\ntoRegexRange.clearCache = () => (toRegexRange.cache = {});\n\n/**\n * Expose `toRegexRange`\n */\n\nmodule.exports = toRegexRange;\n","/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst util = require('util');\nconst toRegexRange = require('to-regex-range');\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\n\nconst transform = toNumber => {\n return value => toNumber === true ? Number(value) : String(value);\n};\n\nconst isValidValue = value => {\n return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = num => Number.isInteger(+num);\n\nconst zeros = input => {\n let value = `${input}`;\n let index = -1;\n if (value[0] === '-') value = value.slice(1);\n if (value === '0') return false;\n while (value[++index] === '0');\n return index > 0;\n};\n\nconst stringify = (start, end, options) => {\n if (typeof start === 'string' || typeof end === 'string') {\n return true;\n }\n return options.stringify === true;\n};\n\nconst pad = (input, maxLength, toNumber) => {\n if (maxLength > 0) {\n let dash = input[0] === '-' ? '-' : '';\n if (dash) input = input.slice(1);\n input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));\n }\n if (toNumber === false) {\n return String(input);\n }\n return input;\n};\n\nconst toMaxLen = (input, maxLength) => {\n let negative = input[0] === '-' ? '-' : '';\n if (negative) {\n input = input.slice(1);\n maxLength--;\n }\n while (input.length < maxLength) input = '0' + input;\n return negative ? ('-' + input) : input;\n};\n\nconst toSequence = (parts, options, maxLen) => {\n parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n\n let prefix = options.capture ? '' : '?:';\n let positives = '';\n let negatives = '';\n let result;\n\n if (parts.positives.length) {\n positives = parts.positives.map(v => toMaxLen(String(v), maxLen)).join('|');\n }\n\n if (parts.negatives.length) {\n negatives = `-(${prefix}${parts.negatives.map(v => toMaxLen(String(v), maxLen)).join('|')})`;\n }\n\n if (positives && negatives) {\n result = `${positives}|${negatives}`;\n } else {\n result = positives || negatives;\n }\n\n if (options.wrap) {\n return `(${prefix}${result})`;\n }\n\n return result;\n};\n\nconst toRange = (a, b, isNumbers, options) => {\n if (isNumbers) {\n return toRegexRange(a, b, { wrap: false, ...options });\n }\n\n let start = String.fromCharCode(a);\n if (a === b) return start;\n\n let stop = String.fromCharCode(b);\n return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options) => {\n if (Array.isArray(start)) {\n let wrap = options.wrap === true;\n let prefix = options.capture ? '' : '?:';\n return wrap ? `(${prefix}${start.join('|')})` : start.join('|');\n }\n return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n return new RangeError('Invalid range arguments: ' + util.inspect(...args));\n};\n\nconst invalidRange = (start, end, options) => {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n};\n\nconst invalidStep = (step, options) => {\n if (options.strictRanges === true) {\n throw new TypeError(`Expected step \"${step}\" to be a number`);\n }\n return [];\n};\n\nconst fillNumbers = (start, end, step = 1, options = {}) => {\n let a = Number(start);\n let b = Number(end);\n\n if (!Number.isInteger(a) || !Number.isInteger(b)) {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n }\n\n // fix negative zero\n if (a === 0) a = 0;\n if (b === 0) b = 0;\n\n let descending = a > b;\n let startString = String(start);\n let endString = String(end);\n let stepString = String(step);\n step = Math.max(Math.abs(step), 1);\n\n let padded = zeros(startString) || zeros(endString) || zeros(stepString);\n let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n let toNumber = padded === false && stringify(start, end, options) === false;\n let format = options.transform || transform(toNumber);\n\n if (options.toRegex && step === 1) {\n return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);\n }\n\n let parts = { negatives: [], positives: [] };\n let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n if (options.toRegex === true && step > 1) {\n push(a);\n } else {\n range.push(pad(format(a, index), maxLen, toNumber));\n }\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return step > 1\n ? toSequence(parts, options, maxLen)\n : toRegex(range, null, { wrap: false, ...options });\n }\n\n return range;\n};\n\nconst fillLetters = (start, end, step = 1, options = {}) => {\n if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {\n return invalidRange(start, end, options);\n }\n\n let format = options.transform || (val => String.fromCharCode(val));\n let a = `${start}`.charCodeAt(0);\n let b = `${end}`.charCodeAt(0);\n\n let descending = a > b;\n let min = Math.min(a, b);\n let max = Math.max(a, b);\n\n if (options.toRegex && step === 1) {\n return toRange(min, max, false, options);\n }\n\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n range.push(format(a, index));\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return toRegex(range, null, { wrap: false, options });\n }\n\n return range;\n};\n\nconst fill = (start, end, step, options = {}) => {\n if (end == null && isValidValue(start)) {\n return [start];\n }\n\n if (!isValidValue(start) || !isValidValue(end)) {\n return invalidRange(start, end, options);\n }\n\n if (typeof step === 'function') {\n return fill(start, end, 1, { transform: step });\n }\n\n if (isObject(step)) {\n return fill(start, end, 0, step);\n }\n\n let opts = { ...options };\n if (opts.capture === true) opts.wrap = true;\n step = step || opts.step || 1;\n\n if (!isNumber(step)) {\n if (step != null && !isObject(step)) return invalidStep(step, opts);\n return fill(start, end, 1, step);\n }\n\n if (isNumber(start) && isNumber(end)) {\n return fillNumbers(start, end, step, opts);\n }\n\n return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);\n};\n\nmodule.exports = fill;\n","'use strict';\n\nconst fill = require('fill-range');\nconst utils = require('./utils');\n\nconst compile = (ast, options = {}) => {\n const walk = (node, parent = {}) => {\n const invalidBlock = utils.isInvalidBrace(parent);\n const invalidNode = node.invalid === true && options.escapeInvalid === true;\n const invalid = invalidBlock === true || invalidNode === true;\n const prefix = options.escapeInvalid === true ? '\\\\' : '';\n let output = '';\n\n if (node.isOpen === true) {\n return prefix + node.value;\n }\n\n if (node.isClose === true) {\n console.log('node.isClose', prefix, node.value);\n return prefix + node.value;\n }\n\n if (node.type === 'open') {\n return invalid ? prefix + node.value : '(';\n }\n\n if (node.type === 'close') {\n return invalid ? prefix + node.value : ')';\n }\n\n if (node.type === 'comma') {\n return node.prev.type === 'comma' ? '' : invalid ? node.value : '|';\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes && node.ranges > 0) {\n const args = utils.reduce(node.nodes);\n const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true });\n\n if (range.length !== 0) {\n return args.length > 1 && range.length > 1 ? `(${range})` : range;\n }\n }\n\n if (node.nodes) {\n for (const child of node.nodes) {\n output += walk(child, node);\n }\n }\n\n return output;\n };\n\n return walk(ast);\n};\n\nmodule.exports = compile;\n","'use strict';\n\nconst fill = require('fill-range');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\nconst append = (queue = '', stash = '', enclose = false) => {\n const result = [];\n\n queue = [].concat(queue);\n stash = [].concat(stash);\n\n if (!stash.length) return queue;\n if (!queue.length) {\n return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;\n }\n\n for (const item of queue) {\n if (Array.isArray(item)) {\n for (const value of item) {\n result.push(append(value, stash, enclose));\n }\n } else {\n for (let ele of stash) {\n if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;\n result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele);\n }\n }\n }\n return utils.flatten(result);\n};\n\nconst expand = (ast, options = {}) => {\n const rangeLimit = options.rangeLimit === undefined ? 1000 : options.rangeLimit;\n\n const walk = (node, parent = {}) => {\n node.queue = [];\n\n let p = parent;\n let q = parent.queue;\n\n while (p.type !== 'brace' && p.type !== 'root' && p.parent) {\n p = p.parent;\n q = p.queue;\n }\n\n if (node.invalid || node.dollar) {\n q.push(append(q.pop(), stringify(node, options)));\n return;\n }\n\n if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {\n q.push(append(q.pop(), ['{}']));\n return;\n }\n\n if (node.nodes && node.ranges > 0) {\n const args = utils.reduce(node.nodes);\n\n if (utils.exceedsLimit(...args, options.step, rangeLimit)) {\n throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');\n }\n\n let range = fill(...args, options);\n if (range.length === 0) {\n range = stringify(node, options);\n }\n\n q.push(append(q.pop(), range));\n node.nodes = [];\n return;\n }\n\n const enclose = utils.encloseBrace(node);\n let queue = node.queue;\n let block = node;\n\n while (block.type !== 'brace' && block.type !== 'root' && block.parent) {\n block = block.parent;\n queue = block.queue;\n }\n\n for (let i = 0; i < node.nodes.length; i++) {\n const child = node.nodes[i];\n\n if (child.type === 'comma' && node.type === 'brace') {\n if (i === 1) queue.push('');\n queue.push('');\n continue;\n }\n\n if (child.type === 'close') {\n q.push(append(q.pop(), queue, enclose));\n continue;\n }\n\n if (child.value && child.type !== 'open') {\n queue.push(append(queue.pop(), child.value));\n continue;\n }\n\n if (child.nodes) {\n walk(child, node);\n }\n }\n\n return queue;\n };\n\n return utils.flatten(walk(ast));\n};\n\nmodule.exports = expand;\n","'use strict';\n\nmodule.exports = {\n MAX_LENGTH: 10000,\n\n // Digits\n CHAR_0: '0', /* 0 */\n CHAR_9: '9', /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 'A', /* A */\n CHAR_LOWERCASE_A: 'a', /* a */\n CHAR_UPPERCASE_Z: 'Z', /* Z */\n CHAR_LOWERCASE_Z: 'z', /* z */\n\n CHAR_LEFT_PARENTHESES: '(', /* ( */\n CHAR_RIGHT_PARENTHESES: ')', /* ) */\n\n CHAR_ASTERISK: '*', /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: '&', /* & */\n CHAR_AT: '@', /* @ */\n CHAR_BACKSLASH: '\\\\', /* \\ */\n CHAR_BACKTICK: '`', /* ` */\n CHAR_CARRIAGE_RETURN: '\\r', /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */\n CHAR_COLON: ':', /* : */\n CHAR_COMMA: ',', /* , */\n CHAR_DOLLAR: '$', /* . */\n CHAR_DOT: '.', /* . */\n CHAR_DOUBLE_QUOTE: '\"', /* \" */\n CHAR_EQUAL: '=', /* = */\n CHAR_EXCLAMATION_MARK: '!', /* ! */\n CHAR_FORM_FEED: '\\f', /* \\f */\n CHAR_FORWARD_SLASH: '/', /* / */\n CHAR_HASH: '#', /* # */\n CHAR_HYPHEN_MINUS: '-', /* - */\n CHAR_LEFT_ANGLE_BRACKET: '<', /* < */\n CHAR_LEFT_CURLY_BRACE: '{', /* { */\n CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */\n CHAR_LINE_FEED: '\\n', /* \\n */\n CHAR_NO_BREAK_SPACE: '\\u00A0', /* \\u00A0 */\n CHAR_PERCENT: '%', /* % */\n CHAR_PLUS: '+', /* + */\n CHAR_QUESTION_MARK: '?', /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */\n CHAR_RIGHT_CURLY_BRACE: '}', /* } */\n CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */\n CHAR_SEMICOLON: ';', /* ; */\n CHAR_SINGLE_QUOTE: '\\'', /* ' */\n CHAR_SPACE: ' ', /* */\n CHAR_TAB: '\\t', /* \\t */\n CHAR_UNDERSCORE: '_', /* _ */\n CHAR_VERTICAL_LINE: '|', /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\\uFEFF' /* \\uFEFF */\n};\n","'use strict';\n\nconst stringify = require('./stringify');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n CHAR_BACKSLASH, /* \\ */\n CHAR_BACKTICK, /* ` */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_RIGHT_SQUARE_BRACKET, /* ] */\n CHAR_DOUBLE_QUOTE, /* \" */\n CHAR_SINGLE_QUOTE, /* ' */\n CHAR_NO_BREAK_SPACE,\n CHAR_ZERO_WIDTH_NOBREAK_SPACE\n} = require('./constants');\n\n/**\n * parse\n */\n\nconst parse = (input, options = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n const opts = options || {};\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n if (input.length > max) {\n throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);\n }\n\n const ast = { type: 'root', input, nodes: [] };\n const stack = [ast];\n let block = ast;\n let prev = ast;\n let brackets = 0;\n const length = input.length;\n let index = 0;\n let depth = 0;\n let value;\n\n /**\n * Helpers\n */\n\n const advance = () => input[index++];\n const push = node => {\n if (node.type === 'text' && prev.type === 'dot') {\n prev.type = 'text';\n }\n\n if (prev && prev.type === 'text' && node.type === 'text') {\n prev.value += node.value;\n return;\n }\n\n block.nodes.push(node);\n node.parent = block;\n node.prev = prev;\n prev = node;\n return node;\n };\n\n push({ type: 'bos' });\n\n while (index < length) {\n block = stack[stack.length - 1];\n value = advance();\n\n /**\n * Invalid chars\n */\n\n if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {\n continue;\n }\n\n /**\n * Escaped chars\n */\n\n if (value === CHAR_BACKSLASH) {\n push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });\n continue;\n }\n\n /**\n * Right square bracket (literal): ']'\n */\n\n if (value === CHAR_RIGHT_SQUARE_BRACKET) {\n push({ type: 'text', value: '\\\\' + value });\n continue;\n }\n\n /**\n * Left square bracket: '['\n */\n\n if (value === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n\n let next;\n\n while (index < length && (next = advance())) {\n value += next;\n\n if (next === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n continue;\n }\n\n if (next === CHAR_BACKSLASH) {\n value += advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n brackets--;\n\n if (brackets === 0) {\n break;\n }\n }\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === CHAR_LEFT_PARENTHESES) {\n block = push({ type: 'paren', nodes: [] });\n stack.push(block);\n push({ type: 'text', value });\n continue;\n }\n\n if (value === CHAR_RIGHT_PARENTHESES) {\n if (block.type !== 'paren') {\n push({ type: 'text', value });\n continue;\n }\n block = stack.pop();\n push({ type: 'text', value });\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Quotes: '|\"|`\n */\n\n if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {\n const open = value;\n let next;\n\n if (options.keepQuotes !== true) {\n value = '';\n }\n\n while (index < length && (next = advance())) {\n if (next === CHAR_BACKSLASH) {\n value += next + advance();\n continue;\n }\n\n if (next === open) {\n if (options.keepQuotes === true) value += next;\n break;\n }\n\n value += next;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Left curly brace: '{'\n */\n\n if (value === CHAR_LEFT_CURLY_BRACE) {\n depth++;\n\n const dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n const brace = {\n type: 'brace',\n open: true,\n close: false,\n dollar,\n depth,\n commas: 0,\n ranges: 0,\n nodes: []\n };\n\n block = push(brace);\n stack.push(block);\n push({ type: 'open', value });\n continue;\n }\n\n /**\n * Right curly brace: '}'\n */\n\n if (value === CHAR_RIGHT_CURLY_BRACE) {\n if (block.type !== 'brace') {\n push({ type: 'text', value });\n continue;\n }\n\n const type = 'close';\n block = stack.pop();\n block.close = true;\n\n push({ type, value });\n depth--;\n\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Comma: ','\n */\n\n if (value === CHAR_COMMA && depth > 0) {\n if (block.ranges > 0) {\n block.ranges = 0;\n const open = block.nodes.shift();\n block.nodes = [open, { type: 'text', value: stringify(block) }];\n }\n\n push({ type: 'comma', value });\n block.commas++;\n continue;\n }\n\n /**\n * Dot: '.'\n */\n\n if (value === CHAR_DOT && depth > 0 && block.commas === 0) {\n const siblings = block.nodes;\n\n if (depth === 0 || siblings.length === 0) {\n push({ type: 'text', value });\n continue;\n }\n\n if (prev.type === 'dot') {\n block.range = [];\n prev.value += value;\n prev.type = 'range';\n\n if (block.nodes.length !== 3 && block.nodes.length !== 5) {\n block.invalid = true;\n block.ranges = 0;\n prev.type = 'text';\n continue;\n }\n\n block.ranges++;\n block.args = [];\n continue;\n }\n\n if (prev.type === 'range') {\n siblings.pop();\n\n const before = siblings[siblings.length - 1];\n before.value += prev.value + value;\n prev = before;\n block.ranges--;\n continue;\n }\n\n push({ type: 'dot', value });\n continue;\n }\n\n /**\n * Text\n */\n\n push({ type: 'text', value });\n }\n\n // Mark imbalanced braces and brackets as invalid\n do {\n block = stack.pop();\n\n if (block.type !== 'root') {\n block.nodes.forEach(node => {\n if (!node.nodes) {\n if (node.type === 'open') node.isOpen = true;\n if (node.type === 'close') node.isClose = true;\n if (!node.nodes) node.type = 'text';\n node.invalid = true;\n }\n });\n\n // get the location of the block on parent.nodes (block's siblings)\n const parent = stack[stack.length - 1];\n const index = parent.nodes.indexOf(block);\n // replace the (invalid) block with it's nodes\n parent.nodes.splice(index, 1, ...block.nodes);\n }\n } while (stack.length > 0);\n\n push({ type: 'eos' });\n return ast;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst stringify = require('./lib/stringify');\nconst compile = require('./lib/compile');\nconst expand = require('./lib/expand');\nconst parse = require('./lib/parse');\n\n/**\n * Expand the given pattern or create a regex-compatible string.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']\n * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {String}\n * @api public\n */\n\nconst braces = (input, options = {}) => {\n let output = [];\n\n if (Array.isArray(input)) {\n for (const pattern of input) {\n const result = braces.create(pattern, options);\n if (Array.isArray(result)) {\n output.push(...result);\n } else {\n output.push(result);\n }\n }\n } else {\n output = [].concat(braces.create(input, options));\n }\n\n if (options && options.expand === true && options.nodupes === true) {\n output = [...new Set(output)];\n }\n return output;\n};\n\n/**\n * Parse the given `str` with the given `options`.\n *\n * ```js\n * // braces.parse(pattern, [, options]);\n * const ast = braces.parse('a/{b,c}/d');\n * console.log(ast);\n * ```\n * @param {String} pattern Brace pattern to parse\n * @param {Object} options\n * @return {Object} Returns an AST\n * @api public\n */\n\nbraces.parse = (input, options = {}) => parse(input, options);\n\n/**\n * Creates a braces string from an AST, or an AST node.\n *\n * ```js\n * const braces = require('braces');\n * let ast = braces.parse('foo/{a,b}/bar');\n * console.log(stringify(ast.nodes[2])); //=> '{a,b}'\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.stringify = (input, options = {}) => {\n if (typeof input === 'string') {\n return stringify(braces.parse(input, options), options);\n }\n return stringify(input, options);\n};\n\n/**\n * Compiles a brace pattern into a regex-compatible, optimized string.\n * This method is called by the main [braces](#braces) function by default.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.compile('a/{b,c}/d'));\n * //=> ['a/(b|c)/d']\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.compile = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n return compile(input, options);\n};\n\n/**\n * Expands a brace pattern into an array. This method is called by the\n * main [braces](#braces) function when `options.expand` is true. Before\n * using this method it's recommended that you read the [performance notes](#performance))\n * and advantages of using [.compile](#compile) instead.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.expand('a/{b,c}/d'));\n * //=> ['a/b/d', 'a/c/d'];\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.expand = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n\n let result = expand(input, options);\n\n // filter out empty strings if specified\n if (options.noempty === true) {\n result = result.filter(Boolean);\n }\n\n // filter out duplicates if specified\n if (options.nodupes === true) {\n result = [...new Set(result)];\n }\n\n return result;\n};\n\n/**\n * Processes a brace pattern and returns either an expanded array\n * (if `options.expand` is true), a highly optimized regex-compatible string.\n * This method is called by the main [braces](#braces) function.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))\n * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.create = (input, options = {}) => {\n if (input === '' || input.length < 3) {\n return [input];\n }\n\n return options.expand !== true\n ? braces.compile(input, options)\n : braces.expand(input, options);\n};\n\n/**\n * Expose \"braces\"\n */\n\nmodule.exports = braces;\n","'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\nconst DEFAULT_MAX_EXTGLOB_RECURSION = 0;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n DOT_LITERAL,\n PLUS_LITERAL,\n QMARK_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n QMARK,\n END_ANCHOR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n ...POSIX_CHARS,\n\n SLASH_LITERAL: `[${WIN_SLASH}]`,\n QMARK: WIN_NO_SLASH,\n STAR: `${WIN_NO_SLASH}*?`,\n DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n NO_DOT: `(?!${DOT_LITERAL})`,\n NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n __proto__: null,\n alnum: 'a-zA-Z0-9',\n alpha: 'a-zA-Z',\n ascii: '\\\\x00-\\\\x7F',\n blank: ' \\\\t',\n cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n digit: '0-9',\n graph: '\\\\x21-\\\\x7E',\n lower: 'a-z',\n print: '\\\\x20-\\\\x7E ',\n punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n upper: 'A-Z',\n word: 'A-Za-z0-9_',\n xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n DEFAULT_MAX_EXTGLOB_RECURSION,\n MAX_LENGTH: 1024 * 64,\n POSIX_REGEX_SOURCE,\n\n // regular expressions\n REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n // Replace globs with equivalent patterns to reduce parsing time.\n REPLACEMENTS: {\n __proto__: null,\n '***': '*',\n '**/**': '**',\n '**/**/**': '**'\n },\n\n // Digits\n CHAR_0: 48, /* 0 */\n CHAR_9: 57, /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 65, /* A */\n CHAR_LOWERCASE_A: 97, /* a */\n CHAR_UPPERCASE_Z: 90, /* Z */\n CHAR_LOWERCASE_Z: 122, /* z */\n\n CHAR_LEFT_PARENTHESES: 40, /* ( */\n CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n CHAR_ASTERISK: 42, /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: 38, /* & */\n CHAR_AT: 64, /* @ */\n CHAR_BACKWARD_SLASH: 92, /* \\ */\n CHAR_CARRIAGE_RETURN: 13, /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n CHAR_COLON: 58, /* : */\n CHAR_COMMA: 44, /* , */\n CHAR_DOT: 46, /* . */\n CHAR_DOUBLE_QUOTE: 34, /* \" */\n CHAR_EQUAL: 61, /* = */\n CHAR_EXCLAMATION_MARK: 33, /* ! */\n CHAR_FORM_FEED: 12, /* \\f */\n CHAR_FORWARD_SLASH: 47, /* / */\n CHAR_GRAVE_ACCENT: 96, /* ` */\n CHAR_HASH: 35, /* # */\n CHAR_HYPHEN_MINUS: 45, /* - */\n CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n CHAR_LEFT_CURLY_BRACE: 123, /* { */\n CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n CHAR_LINE_FEED: 10, /* \\n */\n CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n CHAR_PERCENT: 37, /* % */\n CHAR_PLUS: 43, /* + */\n CHAR_QUESTION_MARK: 63, /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n CHAR_SEMICOLON: 59, /* ; */\n CHAR_SINGLE_QUOTE: 39, /* ' */\n CHAR_SPACE: 32, /* */\n CHAR_TAB: 9, /* \\t */\n CHAR_UNDERSCORE: 95, /* _ */\n CHAR_VERTICAL_LINE: 124, /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n SEP: path.sep,\n\n /**\n * Create EXTGLOB_CHARS\n */\n\n extglobChars(chars) {\n return {\n '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n '?': { type: 'qmark', open: '(?:', close: ')?' },\n '+': { type: 'plus', open: '(?:', close: ')+' },\n '*': { type: 'star', open: '(?:', close: ')*' },\n '@': { type: 'at', open: '(?:', close: ')' }\n };\n },\n\n /**\n * Create GLOB_CHARS\n */\n\n globChars(win32) {\n return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n }\n};\n","'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n REGEX_BACKSLASH,\n REGEX_REMOVE_BACKSLASH,\n REGEX_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n return match === '\\\\' ? '' : match;\n });\n};\n\nexports.supportsLookbehinds = () => {\n const segs = process.version.slice(1).split('.').map(Number);\n if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n return true;\n }\n return false;\n};\n\nexports.isWindows = options => {\n if (options && typeof options.windows === 'boolean') {\n return options.windows;\n }\n return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n const idx = input.lastIndexOf(char, lastIdx);\n if (idx === -1) return input;\n if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n let output = input;\n if (output.startsWith('./')) {\n output = output.slice(2);\n state.prefix = './';\n }\n return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n const prepend = options.contains ? '' : '^';\n const append = options.contains ? '' : '$';\n\n let output = `${prepend}(?:${input})${append}`;\n if (state.negated === true) {\n output = `(?:^(?!${output}).*$)`;\n }\n return output;\n};\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n CHAR_ASTERISK, /* * */\n CHAR_AT, /* @ */\n CHAR_BACKWARD_SLASH, /* \\ */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_EXCLAMATION_MARK, /* ! */\n CHAR_FORWARD_SLASH, /* / */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_PLUS, /* + */\n CHAR_QUESTION_MARK, /* ? */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_RIGHT_SQUARE_BRACKET /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n if (token.isPrefix !== true) {\n token.depth = token.isGlobstar ? Infinity : 1;\n }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n const opts = options || {};\n\n const length = input.length - 1;\n const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n const slashes = [];\n const tokens = [];\n const parts = [];\n\n let str = input;\n let index = -1;\n let start = 0;\n let lastIndex = 0;\n let isBrace = false;\n let isBracket = false;\n let isGlob = false;\n let isExtglob = false;\n let isGlobstar = false;\n let braceEscaped = false;\n let backslashes = false;\n let negated = false;\n let negatedExtglob = false;\n let finished = false;\n let braces = 0;\n let prev;\n let code;\n let token = { value: '', depth: 0, isGlob: false };\n\n const eos = () => index >= length;\n const peek = () => str.charCodeAt(index + 1);\n const advance = () => {\n prev = code;\n return str.charCodeAt(++index);\n };\n\n while (index < length) {\n code = advance();\n let next;\n\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braceEscaped = true;\n }\n continue;\n }\n\n if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n continue;\n }\n\n if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (braceEscaped !== true && code === CHAR_COMMA) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_RIGHT_CURLY_BRACE) {\n braces--;\n\n if (braces === 0) {\n braceEscaped = false;\n isBrace = token.isBrace = true;\n finished = true;\n break;\n }\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_FORWARD_SLASH) {\n slashes.push(index);\n tokens.push(token);\n token = { value: '', depth: 0, isGlob: false };\n\n if (finished === true) continue;\n if (prev === CHAR_DOT && index === (start + 1)) {\n start += 2;\n continue;\n }\n\n lastIndex = index + 1;\n continue;\n }\n\n if (opts.noext !== true) {\n const isExtglobChar = code === CHAR_PLUS\n || code === CHAR_AT\n || code === CHAR_ASTERISK\n || code === CHAR_QUESTION_MARK\n || code === CHAR_EXCLAMATION_MARK;\n\n if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n isExtglob = token.isExtglob = true;\n finished = true;\n if (code === CHAR_EXCLAMATION_MARK && index === start) {\n negatedExtglob = true;\n }\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n }\n\n if (code === CHAR_ASTERISK) {\n if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_QUESTION_MARK) {\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_LEFT_SQUARE_BRACKET) {\n while (eos() !== true && (next = advance())) {\n if (next === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n isBracket = token.isBracket = true;\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n negated = token.negated = true;\n start++;\n continue;\n }\n\n if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_LEFT_PARENTHESES) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n\n if (isGlob === true) {\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n }\n\n if (opts.noext === true) {\n isExtglob = false;\n isGlob = false;\n }\n\n let base = str;\n let prefix = '';\n let glob = '';\n\n if (start > 0) {\n prefix = str.slice(0, start);\n str = str.slice(start);\n lastIndex -= start;\n }\n\n if (base && isGlob === true && lastIndex > 0) {\n base = str.slice(0, lastIndex);\n glob = str.slice(lastIndex);\n } else if (isGlob === true) {\n base = '';\n glob = str;\n } else {\n base = str;\n }\n\n if (base && base !== '' && base !== '/' && base !== str) {\n if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n base = base.slice(0, -1);\n }\n }\n\n if (opts.unescape === true) {\n if (glob) glob = utils.removeBackslashes(glob);\n\n if (base && backslashes === true) {\n base = utils.removeBackslashes(base);\n }\n }\n\n const state = {\n prefix,\n input,\n start,\n base,\n glob,\n isBrace,\n isBracket,\n isGlob,\n isExtglob,\n isGlobstar,\n negated,\n negatedExtglob\n };\n\n if (opts.tokens === true) {\n state.maxDepth = 0;\n if (!isPathSeparator(code)) {\n tokens.push(token);\n }\n state.tokens = tokens;\n }\n\n if (opts.parts === true || opts.tokens === true) {\n let prevIndex;\n\n for (let idx = 0; idx < slashes.length; idx++) {\n const n = prevIndex ? prevIndex + 1 : start;\n const i = slashes[idx];\n const value = input.slice(n, i);\n if (opts.tokens) {\n if (idx === 0 && start !== 0) {\n tokens[idx].isPrefix = true;\n tokens[idx].value = prefix;\n } else {\n tokens[idx].value = value;\n }\n depth(tokens[idx]);\n state.maxDepth += tokens[idx].depth;\n }\n if (idx !== 0 || value !== '') {\n parts.push(value);\n }\n prevIndex = i;\n }\n\n if (prevIndex && prevIndex + 1 < input.length) {\n const value = input.slice(prevIndex + 1);\n parts.push(value);\n\n if (opts.tokens) {\n tokens[tokens.length - 1].value = value;\n depth(tokens[tokens.length - 1]);\n state.maxDepth += tokens[tokens.length - 1].depth;\n }\n }\n\n state.slashes = slashes;\n state.parts = parts;\n }\n\n return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n POSIX_REGEX_SOURCE,\n REGEX_NON_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_BACKREF,\n REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n if (typeof options.expandRange === 'function') {\n return options.expandRange(...args, options);\n }\n\n args.sort();\n const value = `[${args.join('-')}]`;\n\n try {\n /* eslint-disable-next-line no-new */\n new RegExp(value);\n } catch (ex) {\n return args.map(v => utils.escapeRegex(v)).join('..');\n }\n\n return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\nconst splitTopLevel = input => {\n const parts = [];\n let bracket = 0;\n let paren = 0;\n let quote = 0;\n let value = '';\n let escaped = false;\n\n for (const ch of input) {\n if (escaped === true) {\n value += ch;\n escaped = false;\n continue;\n }\n\n if (ch === '\\\\') {\n value += ch;\n escaped = true;\n continue;\n }\n\n if (ch === '\"') {\n quote = quote === 1 ? 0 : 1;\n value += ch;\n continue;\n }\n\n if (quote === 0) {\n if (ch === '[') {\n bracket++;\n } else if (ch === ']' && bracket > 0) {\n bracket--;\n } else if (bracket === 0) {\n if (ch === '(') {\n paren++;\n } else if (ch === ')' && paren > 0) {\n paren--;\n } else if (ch === '|' && paren === 0) {\n parts.push(value);\n value = '';\n continue;\n }\n }\n }\n\n value += ch;\n }\n\n parts.push(value);\n return parts;\n};\n\nconst isPlainBranch = branch => {\n let escaped = false;\n\n for (const ch of branch) {\n if (escaped === true) {\n escaped = false;\n continue;\n }\n\n if (ch === '\\\\') {\n escaped = true;\n continue;\n }\n\n if (/[?*+@!()[\\]{}]/.test(ch)) {\n return false;\n }\n }\n\n return true;\n};\n\nconst normalizeSimpleBranch = branch => {\n let value = branch.trim();\n let changed = true;\n\n while (changed === true) {\n changed = false;\n\n if (/^@\\([^\\\\()[\\]{}|]+\\)$/.test(value)) {\n value = value.slice(2, -1);\n changed = true;\n }\n }\n\n if (!isPlainBranch(value)) {\n return;\n }\n\n return value.replace(/\\\\(.)/g, '$1');\n};\n\nconst hasRepeatedCharPrefixOverlap = branches => {\n const values = branches.map(normalizeSimpleBranch).filter(Boolean);\n\n for (let i = 0; i < values.length; i++) {\n for (let j = i + 1; j < values.length; j++) {\n const a = values[i];\n const b = values[j];\n const char = a[0];\n\n if (!char || a !== char.repeat(a.length) || b !== char.repeat(b.length)) {\n continue;\n }\n\n if (a === b || a.startsWith(b) || b.startsWith(a)) {\n return true;\n }\n }\n }\n\n return false;\n};\n\nconst parseRepeatedExtglob = (pattern, requireEnd = true) => {\n if ((pattern[0] !== '+' && pattern[0] !== '*') || pattern[1] !== '(') {\n return;\n }\n\n let bracket = 0;\n let paren = 0;\n let quote = 0;\n let escaped = false;\n\n for (let i = 1; i < pattern.length; i++) {\n const ch = pattern[i];\n\n if (escaped === true) {\n escaped = false;\n continue;\n }\n\n if (ch === '\\\\') {\n escaped = true;\n continue;\n }\n\n if (ch === '\"') {\n quote = quote === 1 ? 0 : 1;\n continue;\n }\n\n if (quote === 1) {\n continue;\n }\n\n if (ch === '[') {\n bracket++;\n continue;\n }\n\n if (ch === ']' && bracket > 0) {\n bracket--;\n continue;\n }\n\n if (bracket > 0) {\n continue;\n }\n\n if (ch === '(') {\n paren++;\n continue;\n }\n\n if (ch === ')') {\n paren--;\n\n if (paren === 0) {\n if (requireEnd === true && i !== pattern.length - 1) {\n return;\n }\n\n return {\n type: pattern[0],\n body: pattern.slice(2, i),\n end: i\n };\n }\n }\n }\n};\n\nconst getStarExtglobSequenceOutput = pattern => {\n let index = 0;\n const chars = [];\n\n while (index < pattern.length) {\n const match = parseRepeatedExtglob(pattern.slice(index), false);\n\n if (!match || match.type !== '*') {\n return;\n }\n\n const branches = splitTopLevel(match.body).map(branch => branch.trim());\n if (branches.length !== 1) {\n return;\n }\n\n const branch = normalizeSimpleBranch(branches[0]);\n if (!branch || branch.length !== 1) {\n return;\n }\n\n chars.push(branch);\n index += match.end + 1;\n }\n\n if (chars.length < 1) {\n return;\n }\n\n const source = chars.length === 1\n ? utils.escapeRegex(chars[0])\n : `[${chars.map(ch => utils.escapeRegex(ch)).join('')}]`;\n\n return `${source}*`;\n};\n\nconst repeatedExtglobRecursion = pattern => {\n let depth = 0;\n let value = pattern.trim();\n let match = parseRepeatedExtglob(value);\n\n while (match) {\n depth++;\n value = match.body.trim();\n match = parseRepeatedExtglob(value);\n }\n\n return depth;\n};\n\nconst analyzeRepeatedExtglob = (body, options) => {\n if (options.maxExtglobRecursion === false) {\n return { risky: false };\n }\n\n const max =\n typeof options.maxExtglobRecursion === 'number'\n ? options.maxExtglobRecursion\n : constants.DEFAULT_MAX_EXTGLOB_RECURSION;\n\n const branches = splitTopLevel(body).map(branch => branch.trim());\n\n if (branches.length > 1) {\n if (\n branches.some(branch => branch === '') ||\n branches.some(branch => /^[*?]+$/.test(branch)) ||\n hasRepeatedCharPrefixOverlap(branches)\n ) {\n return { risky: true };\n }\n }\n\n for (const branch of branches) {\n const safeOutput = getStarExtglobSequenceOutput(branch);\n if (safeOutput) {\n return { risky: true, safeOutput };\n }\n\n if (repeatedExtglobRecursion(branch) > max) {\n return { risky: true };\n }\n }\n\n return { risky: false };\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n input = REPLACEMENTS[input] || input;\n\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n let len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n const tokens = [bos];\n\n const capture = opts.capture ? '' : '?:';\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const PLATFORM_CHARS = constants.globChars(win32);\n const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n const {\n DOT_LITERAL,\n PLUS_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n } = PLATFORM_CHARS;\n\n const globstar = opts => {\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const nodot = opts.dot ? '' : NO_DOT;\n const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n let star = opts.bash === true ? globstar(opts) : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n // minimatch options support\n if (typeof opts.noext === 'boolean') {\n opts.noextglob = opts.noext;\n }\n\n const state = {\n input,\n index: -1,\n start: 0,\n dot: opts.dot === true,\n consumed: '',\n output: '',\n prefix: '',\n backtrack: false,\n negated: false,\n brackets: 0,\n braces: 0,\n parens: 0,\n quotes: 0,\n globstar: false,\n tokens\n };\n\n input = utils.removePrefix(input, state);\n len = input.length;\n\n const extglobs = [];\n const braces = [];\n const stack = [];\n let prev = bos;\n let value;\n\n /**\n * Tokenizing helpers\n */\n\n const eos = () => state.index === len - 1;\n const peek = state.peek = (n = 1) => input[state.index + n];\n const advance = state.advance = () => input[++state.index] || '';\n const remaining = () => input.slice(state.index + 1);\n const consume = (value = '', num = 0) => {\n state.consumed += value;\n state.index += num;\n };\n\n const append = token => {\n state.output += token.output != null ? token.output : token.value;\n consume(token.value);\n };\n\n const negate = () => {\n let count = 1;\n\n while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n advance();\n state.start++;\n count++;\n }\n\n if (count % 2 === 0) {\n return false;\n }\n\n state.negated = true;\n state.start++;\n return true;\n };\n\n const increment = type => {\n state[type]++;\n stack.push(type);\n };\n\n const decrement = type => {\n state[type]--;\n stack.pop();\n };\n\n /**\n * Push tokens onto the tokens array. This helper speeds up\n * tokenizing by 1) helping us avoid backtracking as much as possible,\n * and 2) helping us avoid creating extra tokens when consecutive\n * characters are plain text. This improves performance and simplifies\n * lookbehinds.\n */\n\n const push = tok => {\n if (prev.type === 'globstar') {\n const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n state.output = state.output.slice(0, -prev.output.length);\n prev.type = 'star';\n prev.value = '*';\n prev.output = star;\n state.output += prev.output;\n }\n }\n\n if (extglobs.length && tok.type !== 'paren') {\n extglobs[extglobs.length - 1].inner += tok.value;\n }\n\n if (tok.value || tok.output) append(tok);\n if (prev && prev.type === 'text' && tok.type === 'text') {\n prev.value += tok.value;\n prev.output = (prev.output || '') + tok.value;\n return;\n }\n\n tok.prev = prev;\n tokens.push(tok);\n prev = tok;\n };\n\n const extglobOpen = (type, value) => {\n const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n token.prev = prev;\n token.parens = state.parens;\n token.output = state.output;\n token.startIndex = state.index;\n token.tokensIndex = tokens.length;\n const output = (opts.capture ? '(' : '') + token.open;\n\n increment('parens');\n push({ type, value, output: state.output ? '' : ONE_CHAR });\n push({ type: 'paren', extglob: true, value: advance(), output });\n extglobs.push(token);\n };\n\n const extglobClose = token => {\n const literal = input.slice(token.startIndex, state.index + 1);\n const body = input.slice(token.startIndex + 2, state.index);\n const analysis = analyzeRepeatedExtglob(body, opts);\n\n if ((token.type === 'plus' || token.type === 'star') && analysis.risky) {\n const safeOutput = analysis.safeOutput\n ? (token.output ? '' : ONE_CHAR) + (opts.capture ? `(${analysis.safeOutput})` : analysis.safeOutput)\n : undefined;\n const open = tokens[token.tokensIndex];\n\n open.type = 'text';\n open.value = literal;\n open.output = safeOutput || utils.escapeRegex(literal);\n\n for (let i = token.tokensIndex + 1; i < tokens.length; i++) {\n tokens[i].value = '';\n tokens[i].output = '';\n delete tokens[i].suffix;\n }\n\n state.output = token.output + open.output;\n state.backtrack = true;\n\n push({ type: 'paren', extglob: true, value, output: '' });\n decrement('parens');\n return;\n }\n\n let output = token.close + (opts.capture ? ')' : '');\n let rest;\n\n if (token.type === 'negate') {\n let extglobStar = star;\n\n if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n extglobStar = globstar(opts);\n }\n\n if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n output = token.close = `)$))${extglobStar}`;\n }\n\n if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n // In this case, we need to parse the string and use it in the output of the original pattern.\n // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n //\n // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n output = token.close = `)${expression})${extglobStar})`;\n }\n\n if (token.prev.type === 'bos') {\n state.negatedExtglob = true;\n }\n }\n\n push({ type: 'paren', extglob: true, value, output });\n decrement('parens');\n };\n\n /**\n * Fast paths\n */\n\n if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n let backslashes = false;\n\n let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n if (first === '\\\\') {\n backslashes = true;\n return m;\n }\n\n if (first === '?') {\n if (esc) {\n return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n }\n if (index === 0) {\n return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n }\n return QMARK.repeat(chars.length);\n }\n\n if (first === '.') {\n return DOT_LITERAL.repeat(chars.length);\n }\n\n if (first === '*') {\n if (esc) {\n return esc + first + (rest ? star : '');\n }\n return star;\n }\n return esc ? m : `\\\\${m}`;\n });\n\n if (backslashes === true) {\n if (opts.unescape === true) {\n output = output.replace(/\\\\/g, '');\n } else {\n output = output.replace(/\\\\+/g, m => {\n return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n });\n }\n }\n\n if (output === input && opts.contains === true) {\n state.output = input;\n return state;\n }\n\n state.output = utils.wrapOutput(output, state, options);\n return state;\n }\n\n /**\n * Tokenize input until we reach end-of-string\n */\n\n while (!eos()) {\n value = advance();\n\n if (value === '\\u0000') {\n continue;\n }\n\n /**\n * Escaped characters\n */\n\n if (value === '\\\\') {\n const next = peek();\n\n if (next === '/' && opts.bash !== true) {\n continue;\n }\n\n if (next === '.' || next === ';') {\n continue;\n }\n\n if (!next) {\n value += '\\\\';\n push({ type: 'text', value });\n continue;\n }\n\n // collapse slashes to reduce potential for exploits\n const match = /^\\\\+/.exec(remaining());\n let slashes = 0;\n\n if (match && match[0].length > 2) {\n slashes = match[0].length;\n state.index += slashes;\n if (slashes % 2 !== 0) {\n value += '\\\\';\n }\n }\n\n if (opts.unescape === true) {\n value = advance();\n } else {\n value += advance();\n }\n\n if (state.brackets === 0) {\n push({ type: 'text', value });\n continue;\n }\n }\n\n /**\n * If we're inside a regex character class, continue\n * until we reach the closing bracket.\n */\n\n if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n if (opts.posix !== false && value === ':') {\n const inner = prev.value.slice(1);\n if (inner.includes('[')) {\n prev.posix = true;\n\n if (inner.includes(':')) {\n const idx = prev.value.lastIndexOf('[');\n const pre = prev.value.slice(0, idx);\n const rest = prev.value.slice(idx + 2);\n const posix = POSIX_REGEX_SOURCE[rest];\n if (posix) {\n prev.value = pre + posix;\n state.backtrack = true;\n advance();\n\n if (!bos.output && tokens.indexOf(prev) === 1) {\n bos.output = ONE_CHAR;\n }\n continue;\n }\n }\n }\n }\n\n if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n value = `\\\\${value}`;\n }\n\n if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n value = `\\\\${value}`;\n }\n\n if (opts.posix === true && value === '!' && prev.value === '[') {\n value = '^';\n }\n\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * If we're inside a quoted string, continue\n * until we reach the closing double quote.\n */\n\n if (state.quotes === 1 && value !== '\"') {\n value = utils.escapeRegex(value);\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * Double quotes\n */\n\n if (value === '\"') {\n state.quotes = state.quotes === 1 ? 0 : 1;\n if (opts.keepQuotes === true) {\n push({ type: 'text', value });\n }\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === '(') {\n increment('parens');\n push({ type: 'paren', value });\n continue;\n }\n\n if (value === ')') {\n if (state.parens === 0 && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '('));\n }\n\n const extglob = extglobs[extglobs.length - 1];\n if (extglob && state.parens === extglob.parens + 1) {\n extglobClose(extglobs.pop());\n continue;\n }\n\n push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n decrement('parens');\n continue;\n }\n\n /**\n * Square brackets\n */\n\n if (value === '[') {\n if (opts.nobracket === true || !remaining().includes(']')) {\n if (opts.nobracket !== true && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('closing', ']'));\n }\n\n value = `\\\\${value}`;\n } else {\n increment('brackets');\n }\n\n push({ type: 'bracket', value });\n continue;\n }\n\n if (value === ']') {\n if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n if (state.brackets === 0) {\n if (opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '['));\n }\n\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n decrement('brackets');\n\n const prevValue = prev.value.slice(1);\n if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n value = `/${value}`;\n }\n\n prev.value += value;\n append({ value });\n\n // when literal brackets are explicitly disabled\n // assume we should match with a regex character class\n if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n continue;\n }\n\n const escaped = utils.escapeRegex(prev.value);\n state.output = state.output.slice(0, -prev.value.length);\n\n // when literal brackets are explicitly enabled\n // assume we should escape the brackets to match literal characters\n if (opts.literalBrackets === true) {\n state.output += escaped;\n prev.value = escaped;\n continue;\n }\n\n // when the user specifies nothing, try to match both\n prev.value = `(${capture}${escaped}|${prev.value})`;\n state.output += prev.value;\n continue;\n }\n\n /**\n * Braces\n */\n\n if (value === '{' && opts.nobrace !== true) {\n increment('braces');\n\n const open = {\n type: 'brace',\n value,\n output: '(',\n outputIndex: state.output.length,\n tokensIndex: state.tokens.length\n };\n\n braces.push(open);\n push(open);\n continue;\n }\n\n if (value === '}') {\n const brace = braces[braces.length - 1];\n\n if (opts.nobrace === true || !brace) {\n push({ type: 'text', value, output: value });\n continue;\n }\n\n let output = ')';\n\n if (brace.dots === true) {\n const arr = tokens.slice();\n const range = [];\n\n for (let i = arr.length - 1; i >= 0; i--) {\n tokens.pop();\n if (arr[i].type === 'brace') {\n break;\n }\n if (arr[i].type !== 'dots') {\n range.unshift(arr[i].value);\n }\n }\n\n output = expandRange(range, opts);\n state.backtrack = true;\n }\n\n if (brace.comma !== true && brace.dots !== true) {\n const out = state.output.slice(0, brace.outputIndex);\n const toks = state.tokens.slice(brace.tokensIndex);\n brace.value = brace.output = '\\\\{';\n value = output = '\\\\}';\n state.output = out;\n for (const t of toks) {\n state.output += (t.output || t.value);\n }\n }\n\n push({ type: 'brace', value, output });\n decrement('braces');\n braces.pop();\n continue;\n }\n\n /**\n * Pipes\n */\n\n if (value === '|') {\n if (extglobs.length > 0) {\n extglobs[extglobs.length - 1].conditions++;\n }\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Commas\n */\n\n if (value === ',') {\n let output = value;\n\n const brace = braces[braces.length - 1];\n if (brace && stack[stack.length - 1] === 'braces') {\n brace.comma = true;\n output = '|';\n }\n\n push({ type: 'comma', value, output });\n continue;\n }\n\n /**\n * Slashes\n */\n\n if (value === '/') {\n // if the beginning of the glob is \"./\", advance the start\n // to the current index, and don't add the \"./\" characters\n // to the state. This greatly simplifies lookbehinds when\n // checking for BOS characters like \"!\" and \".\" (not \"./\")\n if (prev.type === 'dot' && state.index === state.start + 1) {\n state.start = state.index + 1;\n state.consumed = '';\n state.output = '';\n tokens.pop();\n prev = bos; // reset \"prev\" to the first token\n continue;\n }\n\n push({ type: 'slash', value, output: SLASH_LITERAL });\n continue;\n }\n\n /**\n * Dots\n */\n\n if (value === '.') {\n if (state.braces > 0 && prev.type === 'dot') {\n if (prev.value === '.') prev.output = DOT_LITERAL;\n const brace = braces[braces.length - 1];\n prev.type = 'dots';\n prev.output += value;\n prev.value += value;\n brace.dots = true;\n continue;\n }\n\n if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n push({ type: 'text', value, output: DOT_LITERAL });\n continue;\n }\n\n push({ type: 'dot', value, output: DOT_LITERAL });\n continue;\n }\n\n /**\n * Question marks\n */\n\n if (value === '?') {\n const isGroup = prev && prev.value === '(';\n if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('qmark', value);\n continue;\n }\n\n if (prev && prev.type === 'paren') {\n const next = peek();\n let output = value;\n\n if (next === '<' && !utils.supportsLookbehinds()) {\n throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n }\n\n if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n output = `\\\\${value}`;\n }\n\n push({ type: 'text', value, output });\n continue;\n }\n\n if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n push({ type: 'qmark', value, output: QMARK_NO_DOT });\n continue;\n }\n\n push({ type: 'qmark', value, output: QMARK });\n continue;\n }\n\n /**\n * Exclamation\n */\n\n if (value === '!') {\n if (opts.noextglob !== true && peek() === '(') {\n if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n extglobOpen('negate', value);\n continue;\n }\n }\n\n if (opts.nonegate !== true && state.index === 0) {\n negate();\n continue;\n }\n }\n\n /**\n * Plus\n */\n\n if (value === '+') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('plus', value);\n continue;\n }\n\n if ((prev && prev.value === '(') || opts.regex === false) {\n push({ type: 'plus', value, output: PLUS_LITERAL });\n continue;\n }\n\n if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n push({ type: 'plus', value });\n continue;\n }\n\n push({ type: 'plus', value: PLUS_LITERAL });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value === '@') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n push({ type: 'at', extglob: true, value, output: '' });\n continue;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value !== '*') {\n if (value === '$' || value === '^') {\n value = `\\\\${value}`;\n }\n\n const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n if (match) {\n value += match[0];\n state.index += match[0].length;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Stars\n */\n\n if (prev && (prev.type === 'globstar' || prev.star === true)) {\n prev.type = 'star';\n prev.star = true;\n prev.value += value;\n prev.output = star;\n state.backtrack = true;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n let rest = remaining();\n if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n extglobOpen('star', value);\n continue;\n }\n\n if (prev.type === 'star') {\n if (opts.noglobstar === true) {\n consume(value);\n continue;\n }\n\n const prior = prev.prev;\n const before = prior.prev;\n const isStart = prior.type === 'slash' || prior.type === 'bos';\n const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n // strip consecutive `/**/`\n while (rest.slice(0, 3) === '/**') {\n const after = input[state.index + 4];\n if (after && after !== '/') {\n break;\n }\n rest = rest.slice(3);\n consume('/**', 3);\n }\n\n if (prior.type === 'bos' && eos()) {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = globstar(opts);\n state.output = prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n prev.value += value;\n state.globstar = true;\n state.output += prior.output + prev.output;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n const end = rest[1] !== void 0 ? '|$' : '';\n\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n prev.value += value;\n\n state.output += prior.output + prev.output;\n state.globstar = true;\n\n consume(value + advance());\n\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n if (prior.type === 'bos' && rest[0] === '/') {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n state.output = prev.output;\n state.globstar = true;\n consume(value + advance());\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n // remove single star from output\n state.output = state.output.slice(0, -prev.output.length);\n\n // reset previous token to globstar\n prev.type = 'globstar';\n prev.output = globstar(opts);\n prev.value += value;\n\n // reset output with globstar\n state.output += prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n const token = { type: 'star', value, output: star };\n\n if (opts.bash === true) {\n token.output = '.*?';\n if (prev.type === 'bos' || prev.type === 'slash') {\n token.output = nodot + token.output;\n }\n push(token);\n continue;\n }\n\n if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n token.output = value;\n push(token);\n continue;\n }\n\n if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n if (prev.type === 'dot') {\n state.output += NO_DOT_SLASH;\n prev.output += NO_DOT_SLASH;\n\n } else if (opts.dot === true) {\n state.output += NO_DOTS_SLASH;\n prev.output += NO_DOTS_SLASH;\n\n } else {\n state.output += nodot;\n prev.output += nodot;\n }\n\n if (peek() !== '*') {\n state.output += ONE_CHAR;\n prev.output += ONE_CHAR;\n }\n }\n\n push(token);\n }\n\n while (state.brackets > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n state.output = utils.escapeLast(state.output, '[');\n decrement('brackets');\n }\n\n while (state.parens > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n state.output = utils.escapeLast(state.output, '(');\n decrement('parens');\n }\n\n while (state.braces > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n state.output = utils.escapeLast(state.output, '{');\n decrement('braces');\n }\n\n if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n }\n\n // rebuild the output if we had to backtrack at any point\n if (state.backtrack === true) {\n state.output = '';\n\n for (const token of state.tokens) {\n state.output += token.output != null ? token.output : token.value;\n\n if (token.suffix) {\n state.output += token.suffix;\n }\n }\n }\n\n return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n const len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n input = REPLACEMENTS[input] || input;\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const {\n DOT_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOTS_SLASH,\n STAR,\n START_ANCHOR\n } = constants.globChars(win32);\n\n const nodot = opts.dot ? NO_DOTS : NO_DOT;\n const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n const capture = opts.capture ? '' : '?:';\n const state = { negated: false, prefix: '' };\n let star = opts.bash === true ? '.*?' : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n const globstar = opts => {\n if (opts.noglobstar === true) return star;\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const create = str => {\n switch (str) {\n case '*':\n return `${nodot}${ONE_CHAR}${star}`;\n\n case '.*':\n return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*.*':\n return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*/*':\n return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n case '**':\n return nodot + globstar(opts);\n\n case '**/*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n case '**/*.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '**/.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n default: {\n const match = /^(.*?)\\.(\\w+)$/.exec(str);\n if (!match) return;\n\n const source = create(match[1]);\n if (!source) return;\n\n return source + DOT_LITERAL + match[2];\n }\n }\n };\n\n const output = utils.removePrefix(input, state);\n let source = create(output);\n\n if (source && opts.strictSlashes !== true) {\n source += `${SLASH_LITERAL}?`;\n }\n\n return source;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n if (Array.isArray(glob)) {\n const fns = glob.map(input => picomatch(input, options, returnState));\n const arrayMatcher = str => {\n for (const isMatch of fns) {\n const state = isMatch(str);\n if (state) return state;\n }\n return false;\n };\n return arrayMatcher;\n }\n\n const isState = isObject(glob) && glob.tokens && glob.input;\n\n if (glob === '' || (typeof glob !== 'string' && !isState)) {\n throw new TypeError('Expected pattern to be a non-empty string');\n }\n\n const opts = options || {};\n const posix = utils.isWindows(options);\n const regex = isState\n ? picomatch.compileRe(glob, options)\n : picomatch.makeRe(glob, options, false, true);\n\n const state = regex.state;\n delete regex.state;\n\n let isIgnored = () => false;\n if (opts.ignore) {\n const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n }\n\n const matcher = (input, returnObject = false) => {\n const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n if (typeof opts.onResult === 'function') {\n opts.onResult(result);\n }\n\n if (isMatch === false) {\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (isIgnored(input)) {\n if (typeof opts.onIgnore === 'function') {\n opts.onIgnore(result);\n }\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (typeof opts.onMatch === 'function') {\n opts.onMatch(result);\n }\n return returnObject ? result : true;\n };\n\n if (returnState) {\n matcher.state = state;\n }\n\n return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected input to be a string');\n }\n\n if (input === '') {\n return { isMatch: false, output: '' };\n }\n\n const opts = options || {};\n const format = opts.format || (posix ? utils.toPosixSlashes : null);\n let match = input === glob;\n let output = (match && format) ? format(input) : input;\n\n if (match === false) {\n output = format ? format(input) : input;\n match = output === glob;\n }\n\n if (match === false || opts.capture === true) {\n if (opts.matchBase === true || opts.basename === true) {\n match = picomatch.matchBase(input, regex, options, posix);\n } else {\n match = regex.exec(output);\n }\n }\n\n return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n * input: '!./foo/*.js',\n * start: 3,\n * base: 'foo',\n * glob: '*.js',\n * isBrace: false,\n * isBracket: false,\n * isGlob: true,\n * isExtglob: false,\n * isGlobstar: false,\n * negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n if (returnOutput === true) {\n return state.output;\n }\n\n const opts = options || {};\n const prepend = opts.contains ? '' : '^';\n const append = opts.contains ? '' : '$';\n\n let source = `${prepend}(?:${state.output})${append}`;\n if (state && state.negated === true) {\n source = `^(?!${source}).*$`;\n }\n\n const regex = picomatch.toRegex(source, options);\n if (returnState === true) {\n regex.state = state;\n }\n\n return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n if (!input || typeof input !== 'string') {\n throw new TypeError('Expected a non-empty string');\n }\n\n let parsed = { negated: false, fastpaths: true };\n\n if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n parsed.output = parse.fastpaths(input, options);\n }\n\n if (!parsed.output) {\n parsed = parse(input, options);\n }\n\n return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n try {\n const opts = options || {};\n return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n } catch (err) {\n if (options && options.debug === true) throw err;\n return /$^/;\n }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nmodule.exports = require('./lib/picomatch');\n","'use strict';\n\nconst util = require('util');\nconst braces = require('braces');\nconst picomatch = require('picomatch');\nconst utils = require('picomatch/lib/utils');\n\nconst isEmptyString = v => v === '' || v === './';\nconst hasBraces = v => {\n const index = v.indexOf('{');\n return index > -1 && v.indexOf('}', index) > -1;\n};\n\n/**\n * Returns an array of strings that match one or more glob patterns.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm(list, patterns[, options]);\n *\n * console.log(mm(['a.js', 'a.txt'], ['*.js']));\n * //=> [ 'a.js' ]\n * ```\n * @param {String|Array<string>} `list` List of strings to match.\n * @param {String|Array<string>} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options)\n * @return {Array} Returns an array of matches\n * @summary false\n * @api public\n */\n\nconst micromatch = (list, patterns, options) => {\n patterns = [].concat(patterns);\n list = [].concat(list);\n\n let omit = new Set();\n let keep = new Set();\n let items = new Set();\n let negatives = 0;\n\n let onResult = state => {\n items.add(state.output);\n if (options && options.onResult) {\n options.onResult(state);\n }\n };\n\n for (let i = 0; i < patterns.length; i++) {\n let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);\n let negated = isMatch.state.negated || isMatch.state.negatedExtglob;\n if (negated) negatives++;\n\n for (let item of list) {\n let matched = isMatch(item, true);\n\n let match = negated ? !matched.isMatch : matched.isMatch;\n if (!match) continue;\n\n if (negated) {\n omit.add(matched.output);\n } else {\n omit.delete(matched.output);\n keep.add(matched.output);\n }\n }\n }\n\n let result = negatives === patterns.length ? [...items] : [...keep];\n let matches = result.filter(item => !omit.has(item));\n\n if (options && matches.length === 0) {\n if (options.failglob === true) {\n throw new Error(`No matches found for \"${patterns.join(', ')}\"`);\n }\n\n if (options.nonull === true || options.nullglob === true) {\n return options.unescape ? patterns.map(p => p.replace(/\\\\/g, '')) : patterns;\n }\n }\n\n return matches;\n};\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.match = micromatch;\n\n/**\n * Returns a matcher function from the given glob `pattern` and `options`.\n * The returned function takes a string to match as its only argument and returns\n * true if the string is a match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matcher(pattern[, options]);\n *\n * const isMatch = mm.matcher('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @param {String} `pattern` Glob pattern\n * @param {Object} `options`\n * @return {Function} Returns a matcher function.\n * @api public\n */\n\nmicromatch.matcher = (pattern, options) => picomatch(pattern, options);\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.isMatch(string, patterns[, options]);\n *\n * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(mm.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `[options]` See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.any = micromatch.isMatch;\n\n/**\n * Returns a list of strings that _**do not match any**_ of the given `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.not(list, patterns[, options]);\n *\n * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));\n * //=> ['b.b', 'c.c']\n * ```\n * @param {Array} `list` Array of strings to match.\n * @param {String|Array} `patterns` One or more glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array} Returns an array of strings that **do not match** the given patterns.\n * @api public\n */\n\nmicromatch.not = (list, patterns, options = {}) => {\n patterns = [].concat(patterns).map(String);\n let result = new Set();\n let items = [];\n\n let onResult = state => {\n if (options.onResult) options.onResult(state);\n items.push(state.output);\n };\n\n let matches = new Set(micromatch(list, patterns, { ...options, onResult }));\n\n for (let item of items) {\n if (!matches.has(item)) {\n result.add(item);\n }\n }\n return [...result];\n};\n\n/**\n * Returns true if the given `string` contains the given pattern. Similar\n * to [.isMatch](#isMatch) but the pattern can match any part of the string.\n *\n * ```js\n * var mm = require('micromatch');\n * // mm.contains(string, pattern[, options]);\n *\n * console.log(mm.contains('aa/bb/cc', '*b'));\n * //=> true\n * console.log(mm.contains('aa/bb/cc', '*d'));\n * //=> false\n * ```\n * @param {String} `str` The string to match.\n * @param {String|Array} `patterns` Glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any of the patterns matches any part of `str`.\n * @api public\n */\n\nmicromatch.contains = (str, pattern, options) => {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n }\n\n if (Array.isArray(pattern)) {\n return pattern.some(p => micromatch.contains(str, p, options));\n }\n\n if (typeof pattern === 'string') {\n if (isEmptyString(str) || isEmptyString(pattern)) {\n return false;\n }\n\n if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {\n return true;\n }\n }\n\n return micromatch.isMatch(str, pattern, { ...options, contains: true });\n};\n\n/**\n * Filter the keys of the given object with the given `glob` pattern\n * and `options`. Does not attempt to match nested keys. If you need this feature,\n * use [glob-object][] instead.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matchKeys(object, patterns[, options]);\n *\n * const obj = { aa: 'a', ab: 'b', ac: 'c' };\n * console.log(mm.matchKeys(obj, '*b'));\n * //=> { ab: 'b' }\n * ```\n * @param {Object} `object` The object with keys to filter.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Object} Returns an object with only keys that match the given patterns.\n * @api public\n */\n\nmicromatch.matchKeys = (obj, patterns, options) => {\n if (!utils.isObject(obj)) {\n throw new TypeError('Expected the first argument to be an object');\n }\n let keys = micromatch(Object.keys(obj), patterns, options);\n let res = {};\n for (let key of keys) res[key] = obj[key];\n return res;\n};\n\n/**\n * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.some(list, patterns[, options]);\n *\n * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // true\n * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list`\n * @api public\n */\n\nmicromatch.some = (list, patterns, options) => {\n let items = [].concat(list);\n\n for (let pattern of [].concat(patterns)) {\n let isMatch = picomatch(String(pattern), options);\n if (items.some(item => isMatch(item))) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * Returns true if every string in the given `list` matches\n * any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.every(list, patterns[, options]);\n *\n * console.log(mm.every('foo.js', ['foo.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // false\n * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list`\n * @api public\n */\n\nmicromatch.every = (list, patterns, options) => {\n let items = [].concat(list);\n\n for (let pattern of [].concat(patterns)) {\n let isMatch = picomatch(String(pattern), options);\n if (!items.every(item => isMatch(item))) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * Returns true if **all** of the given `patterns` match\n * the specified string.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.all(string, patterns[, options]);\n *\n * console.log(mm.all('foo.js', ['foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', '!foo.js']));\n * // false\n *\n * console.log(mm.all('foo.js', ['*.js', 'foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));\n * // true\n * ```\n * @param {String|Array} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.all = (str, patterns, options) => {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n }\n\n return [].concat(patterns).every(p => picomatch(p, options)(str));\n};\n\n/**\n * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.capture(pattern, string[, options]);\n *\n * console.log(mm.capture('test/*.js', 'test/foo.js'));\n * //=> ['foo']\n * console.log(mm.capture('test/*.js', 'foo/bar.css'));\n * //=> null\n * ```\n * @param {String} `glob` Glob pattern to use for matching.\n * @param {String} `input` String to match\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`.\n * @api public\n */\n\nmicromatch.capture = (glob, input, options) => {\n let posix = utils.isWindows(options);\n let regex = picomatch.makeRe(String(glob), { ...options, capture: true });\n let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);\n\n if (match) {\n return match.slice(1).map(v => v === void 0 ? '' : v);\n }\n};\n\n/**\n * Create a regular expression from the given glob `pattern`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.makeRe(pattern[, options]);\n *\n * console.log(mm.makeRe('*.js'));\n * //=> /^(?:(\\.[\\\\\\/])?(?!\\.)(?=.)[^\\/]*?\\.js)$/\n * ```\n * @param {String} `pattern` A glob pattern to convert to regex.\n * @param {Object} `options`\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\nmicromatch.makeRe = (...args) => picomatch.makeRe(...args);\n\n/**\n * Scan a glob pattern to separate the pattern into segments. Used\n * by the [split](#split) method.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.scan(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\nmicromatch.scan = (...args) => picomatch.scan(...args);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.parse(pattern[, options]);\n * ```\n * @param {String} `glob`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as regex source string.\n * @api public\n */\n\nmicromatch.parse = (patterns, options) => {\n let res = [];\n for (let pattern of [].concat(patterns || [])) {\n for (let str of braces(String(pattern), options)) {\n res.push(picomatch.parse(str, options));\n }\n }\n return res;\n};\n\n/**\n * Process the given brace `pattern`.\n *\n * ```js\n * const { braces } = require('micromatch');\n * console.log(braces('foo/{a,b,c}/bar'));\n * //=> [ 'foo/(a|b|c)/bar' ]\n *\n * console.log(braces('foo/{a,b,c}/bar', { expand: true }));\n * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]\n * ```\n * @param {String} `pattern` String with brace pattern to process.\n * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.\n * @return {Array}\n * @api public\n */\n\nmicromatch.braces = (pattern, options) => {\n if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n if ((options && options.nobrace === true) || !hasBraces(pattern)) {\n return [pattern];\n }\n return braces(pattern, options);\n};\n\n/**\n * Expand braces\n */\n\nmicromatch.braceExpand = (pattern, options) => {\n if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n return micromatch.braces(pattern, { ...options, expand: true });\n};\n\n/**\n * Expose micromatch\n */\n\n// exposed for tests\nmicromatch.hasBraces = hasBraces;\nmodule.exports = micromatch;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isAbsolute = exports.partitionAbsoluteAndRelative = exports.removeDuplicateSlashes = exports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.isPatternRelatedToParentDirectory = exports.getPatternsOutsideCurrentDirectory = exports.getPatternsInsideCurrentDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = void 0;\nconst path = require(\"path\");\nconst globParent = require(\"glob-parent\");\nconst micromatch = require(\"micromatch\");\nconst GLOBSTAR = '**';\nconst ESCAPE_SYMBOL = '\\\\';\nconst COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/;\nconst REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\\[[^[]*]/;\nconst REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\\([^(]*\\|[^|]*\\)/;\nconst GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\\([^(]*\\)/;\nconst BRACE_EXPANSION_SEPARATORS_RE = /,|\\.\\./;\n/**\n * Matches a sequence of two or more consecutive slashes, excluding the first two slashes at the beginning of the string.\n * The latter is due to the presence of the device path at the beginning of the UNC path.\n */\nconst DOUBLE_SLASH_RE = /(?!^)\\/{2,}/g;\nfunction isStaticPattern(pattern, options = {}) {\n return !isDynamicPattern(pattern, options);\n}\nexports.isStaticPattern = isStaticPattern;\nfunction isDynamicPattern(pattern, options = {}) {\n /**\n * A special case with an empty string is necessary for matching patterns that start with a forward slash.\n * An empty string cannot be a dynamic pattern.\n * For example, the pattern `/lib/*` will be spread into parts: '', 'lib', '*'.\n */\n if (pattern === '') {\n return false;\n }\n /**\n * When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check\n * filepath directly (without read directory).\n */\n if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) {\n return true;\n }\n if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) {\n return true;\n }\n if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) {\n return true;\n }\n if (options.braceExpansion !== false && hasBraceExpansion(pattern)) {\n return true;\n }\n return false;\n}\nexports.isDynamicPattern = isDynamicPattern;\nfunction hasBraceExpansion(pattern) {\n const openingBraceIndex = pattern.indexOf('{');\n if (openingBraceIndex === -1) {\n return false;\n }\n const closingBraceIndex = pattern.indexOf('}', openingBraceIndex + 1);\n if (closingBraceIndex === -1) {\n return false;\n }\n const braceContent = pattern.slice(openingBraceIndex, closingBraceIndex);\n return BRACE_EXPANSION_SEPARATORS_RE.test(braceContent);\n}\nfunction convertToPositivePattern(pattern) {\n return isNegativePattern(pattern) ? pattern.slice(1) : pattern;\n}\nexports.convertToPositivePattern = convertToPositivePattern;\nfunction convertToNegativePattern(pattern) {\n return '!' + pattern;\n}\nexports.convertToNegativePattern = convertToNegativePattern;\nfunction isNegativePattern(pattern) {\n return pattern.startsWith('!') && pattern[1] !== '(';\n}\nexports.isNegativePattern = isNegativePattern;\nfunction isPositivePattern(pattern) {\n return !isNegativePattern(pattern);\n}\nexports.isPositivePattern = isPositivePattern;\nfunction getNegativePatterns(patterns) {\n return patterns.filter(isNegativePattern);\n}\nexports.getNegativePatterns = getNegativePatterns;\nfunction getPositivePatterns(patterns) {\n return patterns.filter(isPositivePattern);\n}\nexports.getPositivePatterns = getPositivePatterns;\n/**\n * Returns patterns that can be applied inside the current directory.\n *\n * @example\n * // ['./*', '*', 'a/*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsInsideCurrentDirectory(patterns) {\n return patterns.filter((pattern) => !isPatternRelatedToParentDirectory(pattern));\n}\nexports.getPatternsInsideCurrentDirectory = getPatternsInsideCurrentDirectory;\n/**\n * Returns patterns to be expanded relative to (outside) the current directory.\n *\n * @example\n * // ['../*', './../*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsOutsideCurrentDirectory(patterns) {\n return patterns.filter(isPatternRelatedToParentDirectory);\n}\nexports.getPatternsOutsideCurrentDirectory = getPatternsOutsideCurrentDirectory;\nfunction isPatternRelatedToParentDirectory(pattern) {\n return pattern.startsWith('..') || pattern.startsWith('./..');\n}\nexports.isPatternRelatedToParentDirectory = isPatternRelatedToParentDirectory;\nfunction getBaseDirectory(pattern) {\n return globParent(pattern, { flipBackslashes: false });\n}\nexports.getBaseDirectory = getBaseDirectory;\nfunction hasGlobStar(pattern) {\n return pattern.includes(GLOBSTAR);\n}\nexports.hasGlobStar = hasGlobStar;\nfunction endsWithSlashGlobStar(pattern) {\n return pattern.endsWith('/' + GLOBSTAR);\n}\nexports.endsWithSlashGlobStar = endsWithSlashGlobStar;\nfunction isAffectDepthOfReadingPattern(pattern) {\n const basename = path.basename(pattern);\n return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);\n}\nexports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;\nfunction expandPatternsWithBraceExpansion(patterns) {\n return patterns.reduce((collection, pattern) => {\n return collection.concat(expandBraceExpansion(pattern));\n }, []);\n}\nexports.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion;\nfunction expandBraceExpansion(pattern) {\n const patterns = micromatch.braces(pattern, { expand: true, nodupes: true, keepEscaping: true });\n /**\n * Sort the patterns by length so that the same depth patterns are processed side by side.\n * `a/{b,}/{c,}/*` – `['a///*', 'a/b//*', 'a//c/*', 'a/b/c/*']`\n */\n patterns.sort((a, b) => a.length - b.length);\n /**\n * Micromatch can return an empty string in the case of patterns like `{a,}`.\n */\n return patterns.filter((pattern) => pattern !== '');\n}\nexports.expandBraceExpansion = expandBraceExpansion;\nfunction getPatternParts(pattern, options) {\n let { parts } = micromatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true }));\n /**\n * The scan method returns an empty array in some cases.\n * See micromatch/picomatch#58 for more details.\n */\n if (parts.length === 0) {\n parts = [pattern];\n }\n /**\n * The scan method does not return an empty part for the pattern with a forward slash.\n * This is another part of micromatch/picomatch#58.\n */\n if (parts[0].startsWith('/')) {\n parts[0] = parts[0].slice(1);\n parts.unshift('');\n }\n return parts;\n}\nexports.getPatternParts = getPatternParts;\nfunction makeRe(pattern, options) {\n return micromatch.makeRe(pattern, options);\n}\nexports.makeRe = makeRe;\nfunction convertPatternsToRe(patterns, options) {\n return patterns.map((pattern) => makeRe(pattern, options));\n}\nexports.convertPatternsToRe = convertPatternsToRe;\nfunction matchAny(entry, patternsRe) {\n return patternsRe.some((patternRe) => patternRe.test(entry));\n}\nexports.matchAny = matchAny;\n/**\n * This package only works with forward slashes as a path separator.\n * Because of this, we cannot use the standard `path.normalize` method, because on Windows platform it will use of backslashes.\n */\nfunction removeDuplicateSlashes(pattern) {\n return pattern.replace(DOUBLE_SLASH_RE, '/');\n}\nexports.removeDuplicateSlashes = removeDuplicateSlashes;\nfunction partitionAbsoluteAndRelative(patterns) {\n const absolute = [];\n const relative = [];\n for (const pattern of patterns) {\n if (isAbsolute(pattern)) {\n absolute.push(pattern);\n }\n else {\n relative.push(pattern);\n }\n }\n return [absolute, relative];\n}\nexports.partitionAbsoluteAndRelative = partitionAbsoluteAndRelative;\nfunction isAbsolute(pattern) {\n return path.isAbsolute(pattern);\n}\nexports.isAbsolute = isAbsolute;\n","'use strict'\n/*\n * merge2\n * https://github.com/teambition/merge2\n *\n * Copyright (c) 2014-2020 Teambition\n * Licensed under the MIT license.\n */\nconst Stream = require('stream')\nconst PassThrough = Stream.PassThrough\nconst slice = Array.prototype.slice\n\nmodule.exports = merge2\n\nfunction merge2 () {\n const streamsQueue = []\n const args = slice.call(arguments)\n let merging = false\n let options = args[args.length - 1]\n\n if (options && !Array.isArray(options) && options.pipe == null) {\n args.pop()\n } else {\n options = {}\n }\n\n const doEnd = options.end !== false\n const doPipeError = options.pipeError === true\n if (options.objectMode == null) {\n options.objectMode = true\n }\n if (options.highWaterMark == null) {\n options.highWaterMark = 64 * 1024\n }\n const mergedStream = PassThrough(options)\n\n function addStream () {\n for (let i = 0, len = arguments.length; i < len; i++) {\n streamsQueue.push(pauseStreams(arguments[i], options))\n }\n mergeStream()\n return this\n }\n\n function mergeStream () {\n if (merging) {\n return\n }\n merging = true\n\n let streams = streamsQueue.shift()\n if (!streams) {\n process.nextTick(endStream)\n return\n }\n if (!Array.isArray(streams)) {\n streams = [streams]\n }\n\n let pipesCount = streams.length + 1\n\n function next () {\n if (--pipesCount > 0) {\n return\n }\n merging = false\n mergeStream()\n }\n\n function pipe (stream) {\n function onend () {\n stream.removeListener('merge2UnpipeEnd', onend)\n stream.removeListener('end', onend)\n if (doPipeError) {\n stream.removeListener('error', onerror)\n }\n next()\n }\n function onerror (err) {\n mergedStream.emit('error', err)\n }\n // skip ended stream\n if (stream._readableState.endEmitted) {\n return next()\n }\n\n stream.on('merge2UnpipeEnd', onend)\n stream.on('end', onend)\n\n if (doPipeError) {\n stream.on('error', onerror)\n }\n\n stream.pipe(mergedStream, { end: false })\n // compatible for old stream\n stream.resume()\n }\n\n for (let i = 0; i < streams.length; i++) {\n pipe(streams[i])\n }\n\n next()\n }\n\n function endStream () {\n merging = false\n // emit 'queueDrain' when all streams merged.\n mergedStream.emit('queueDrain')\n if (doEnd) {\n mergedStream.end()\n }\n }\n\n mergedStream.setMaxListeners(0)\n mergedStream.add = addStream\n mergedStream.on('unpipe', function (stream) {\n stream.emit('merge2UnpipeEnd')\n })\n\n if (args.length) {\n addStream.apply(null, args)\n }\n return mergedStream\n}\n\n// check and pause streams for pipe.\nfunction pauseStreams (streams, options) {\n if (!Array.isArray(streams)) {\n // Backwards-compat with old-style streams\n if (!streams._readableState && streams.pipe) {\n streams = streams.pipe(PassThrough(options))\n }\n if (!streams._readableState || !streams.pause || !streams.pipe) {\n throw new Error('Only readable stream can be merged.')\n }\n streams.pause()\n } else {\n for (let i = 0, len = streams.length; i < len; i++) {\n streams[i] = pauseStreams(streams[i], options)\n }\n }\n return streams\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.merge = void 0;\nconst merge2 = require(\"merge2\");\nfunction merge(streams) {\n const mergedStream = merge2(streams);\n streams.forEach((stream) => {\n stream.once('error', (error) => mergedStream.emit('error', error));\n });\n mergedStream.once('close', () => propagateCloseEventToSources(streams));\n mergedStream.once('end', () => propagateCloseEventToSources(streams));\n return mergedStream;\n}\nexports.merge = merge;\nfunction propagateCloseEventToSources(streams) {\n streams.forEach((stream) => stream.emit('close'));\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEmpty = exports.isString = void 0;\nfunction isString(input) {\n return typeof input === 'string';\n}\nexports.isString = isString;\nfunction isEmpty(input) {\n return input === '';\n}\nexports.isEmpty = isEmpty;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = void 0;\nconst array = require(\"./array\");\nexports.array = array;\nconst errno = require(\"./errno\");\nexports.errno = errno;\nconst fs = require(\"./fs\");\nexports.fs = fs;\nconst path = require(\"./path\");\nexports.path = path;\nconst pattern = require(\"./pattern\");\nexports.pattern = pattern;\nconst stream = require(\"./stream\");\nexports.stream = stream;\nconst string = require(\"./string\");\nexports.string = string;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = void 0;\nconst utils = require(\"../utils\");\nfunction generate(input, settings) {\n const patterns = processPatterns(input, settings);\n const ignore = processPatterns(settings.ignore, settings);\n const positivePatterns = getPositivePatterns(patterns);\n const negativePatterns = getNegativePatternsAsPositive(patterns, ignore);\n const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings));\n const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings));\n const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);\n const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);\n return staticTasks.concat(dynamicTasks);\n}\nexports.generate = generate;\nfunction processPatterns(input, settings) {\n let patterns = input;\n /**\n * The original pattern like `{,*,**,a/*}` can lead to problems checking the depth when matching entry\n * and some problems with the micromatch package (see fast-glob issues: #365, #394).\n *\n * To solve this problem, we expand all patterns containing brace expansion. This can lead to a slight slowdown\n * in matching in the case of a large set of patterns after expansion.\n */\n if (settings.braceExpansion) {\n patterns = utils.pattern.expandPatternsWithBraceExpansion(patterns);\n }\n /**\n * If the `baseNameMatch` option is enabled, we must add globstar to patterns, so that they can be used\n * at any nesting level.\n *\n * We do this here, because otherwise we have to complicate the filtering logic. For example, we need to change\n * the pattern in the filter before creating a regular expression. There is no need to change the patterns\n * in the application. Only on the input.\n */\n if (settings.baseNameMatch) {\n patterns = patterns.map((pattern) => pattern.includes('/') ? pattern : `**/${pattern}`);\n }\n /**\n * This method also removes duplicate slashes that may have been in the pattern or formed as a result of expansion.\n */\n return patterns.map((pattern) => utils.pattern.removeDuplicateSlashes(pattern));\n}\n/**\n * Returns tasks grouped by basic pattern directories.\n *\n * Patterns that can be found inside (`./`) and outside (`../`) the current directory are handled separately.\n * This is necessary because directory traversal starts at the base directory and goes deeper.\n */\nfunction convertPatternsToTasks(positive, negative, dynamic) {\n const tasks = [];\n const patternsOutsideCurrentDirectory = utils.pattern.getPatternsOutsideCurrentDirectory(positive);\n const patternsInsideCurrentDirectory = utils.pattern.getPatternsInsideCurrentDirectory(positive);\n const outsideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsOutsideCurrentDirectory);\n const insideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsInsideCurrentDirectory);\n tasks.push(...convertPatternGroupsToTasks(outsideCurrentDirectoryGroup, negative, dynamic));\n /*\n * For the sake of reducing future accesses to the file system, we merge all tasks within the current directory\n * into a global task, if at least one pattern refers to the root (`.`). In this case, the global task covers the rest.\n */\n if ('.' in insideCurrentDirectoryGroup) {\n tasks.push(convertPatternGroupToTask('.', patternsInsideCurrentDirectory, negative, dynamic));\n }\n else {\n tasks.push(...convertPatternGroupsToTasks(insideCurrentDirectoryGroup, negative, dynamic));\n }\n return tasks;\n}\nexports.convertPatternsToTasks = convertPatternsToTasks;\nfunction getPositivePatterns(patterns) {\n return utils.pattern.getPositivePatterns(patterns);\n}\nexports.getPositivePatterns = getPositivePatterns;\nfunction getNegativePatternsAsPositive(patterns, ignore) {\n const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);\n const positive = negative.map(utils.pattern.convertToPositivePattern);\n return positive;\n}\nexports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;\nfunction groupPatternsByBaseDirectory(patterns) {\n const group = {};\n return patterns.reduce((collection, pattern) => {\n const base = utils.pattern.getBaseDirectory(pattern);\n if (base in collection) {\n collection[base].push(pattern);\n }\n else {\n collection[base] = [pattern];\n }\n return collection;\n }, group);\n}\nexports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;\nfunction convertPatternGroupsToTasks(positive, negative, dynamic) {\n return Object.keys(positive).map((base) => {\n return convertPatternGroupToTask(base, positive[base], negative, dynamic);\n });\n}\nexports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;\nfunction convertPatternGroupToTask(base, positive, negative, dynamic) {\n return {\n dynamic,\n positive,\n negative,\n base,\n patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))\n };\n}\nexports.convertPatternGroupToTask = convertPatternGroupToTask;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings, callback) {\n settings.fs.lstat(path, (lstatError, lstat) => {\n if (lstatError !== null) {\n callFailureCallback(callback, lstatError);\n return;\n }\n if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n callSuccessCallback(callback, lstat);\n return;\n }\n settings.fs.stat(path, (statError, stat) => {\n if (statError !== null) {\n if (settings.throwErrorOnBrokenSymbolicLink) {\n callFailureCallback(callback, statError);\n return;\n }\n callSuccessCallback(callback, lstat);\n return;\n }\n if (settings.markSymbolicLink) {\n stat.isSymbolicLink = () => true;\n }\n callSuccessCallback(callback, stat);\n });\n });\n}\nexports.read = read;\nfunction callFailureCallback(callback, error) {\n callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n callback(null, result);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings) {\n const lstat = settings.fs.lstatSync(path);\n if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n return lstat;\n }\n try {\n const stat = settings.fs.statSync(path);\n if (settings.markSymbolicLink) {\n stat.isSymbolicLink = () => true;\n }\n return stat;\n }\n catch (error) {\n if (!settings.throwErrorOnBrokenSymbolicLink) {\n return lstat;\n }\n throw error;\n }\n}\nexports.read = read;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n lstat: fs.lstat,\n stat: fs.stat,\n lstatSync: fs.lstatSync,\n statSync: fs.statSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n if (fsMethods === undefined) {\n return exports.FILE_SYSTEM_ADAPTER;\n }\n return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);\n this.fs = fs.createFileSystemAdapter(this._options.fs);\n this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n }\n _getValue(option, value) {\n return option !== null && option !== void 0 ? option : value;\n }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.statSync = exports.stat = exports.Settings = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction stat(path, optionsOrSettingsOrCallback, callback) {\n if (typeof optionsOrSettingsOrCallback === 'function') {\n async.read(path, getSettings(), optionsOrSettingsOrCallback);\n return;\n }\n async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.stat = stat;\nfunction statSync(path, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n return sync.read(path, settings);\n}\nexports.statSync = statSync;\nfunction getSettings(settingsOrOptions = {}) {\n if (settingsOrOptions instanceof settings_1.default) {\n return settingsOrOptions;\n }\n return new settings_1.default(settingsOrOptions);\n}\n","/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nlet promise\n\nmodule.exports = typeof queueMicrotask === 'function'\n ? queueMicrotask.bind(typeof window !== 'undefined' ? window : global)\n // reuse resolved promise, and allocate it lazily\n : cb => (promise || (promise = Promise.resolve()))\n .then(cb)\n .catch(err => setTimeout(() => { throw err }, 0))\n","/*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nmodule.exports = runParallel\n\nconst queueMicrotask = require('queue-microtask')\n\nfunction runParallel (tasks, cb) {\n let results, pending, keys\n let isSync = true\n\n if (Array.isArray(tasks)) {\n results = []\n pending = tasks.length\n } else {\n keys = Object.keys(tasks)\n results = {}\n pending = keys.length\n }\n\n function done (err) {\n function end () {\n if (cb) cb(err, results)\n cb = null\n }\n if (isSync) queueMicrotask(end)\n else end()\n }\n\n function each (i, err, result) {\n results[i] = result\n if (--pending === 0 || err) {\n done(err)\n }\n }\n\n if (!pending) {\n // empty\n done(null)\n } else if (keys) {\n // object\n keys.forEach(function (key) {\n tasks[key](function (err, result) { each(key, err, result) })\n })\n } else {\n // array\n tasks.forEach(function (task, i) {\n task(function (err, result) { each(i, err, result) })\n })\n }\n\n isSync = false\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = void 0;\nconst NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.');\nif (NODE_PROCESS_VERSION_PARTS[0] === undefined || NODE_PROCESS_VERSION_PARTS[1] === undefined) {\n throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);\n}\nconst MAJOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);\nconst MINOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);\nconst SUPPORTED_MAJOR_VERSION = 10;\nconst SUPPORTED_MINOR_VERSION = 10;\nconst IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION;\nconst IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION;\n/**\n * IS `true` for Node.js 10.10 and greater.\n */\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n constructor(name, stats) {\n this.name = name;\n this.isBlockDevice = stats.isBlockDevice.bind(stats);\n this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n this.isDirectory = stats.isDirectory.bind(stats);\n this.isFIFO = stats.isFIFO.bind(stats);\n this.isFile = stats.isFile.bind(stats);\n this.isSocket = stats.isSocket.bind(stats);\n this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n }\n}\nfunction createDirentFromStats(name, stats) {\n return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fs = void 0;\nconst fs = require(\"./fs\");\nexports.fs = fs;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = void 0;\nfunction joinPathSegments(a, b, separator) {\n /**\n * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n */\n if (a.endsWith(separator)) {\n return a + b;\n }\n return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst rpl = require(\"run-parallel\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings, callback) {\n if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n readdirWithFileTypes(directory, settings, callback);\n return;\n }\n readdir(directory, settings, callback);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings, callback) {\n settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => {\n if (readdirError !== null) {\n callFailureCallback(callback, readdirError);\n return;\n }\n const entries = dirents.map((dirent) => ({\n dirent,\n name: dirent.name,\n path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n }));\n if (!settings.followSymbolicLinks) {\n callSuccessCallback(callback, entries);\n return;\n }\n const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));\n rpl(tasks, (rplError, rplEntries) => {\n if (rplError !== null) {\n callFailureCallback(callback, rplError);\n return;\n }\n callSuccessCallback(callback, rplEntries);\n });\n });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction makeRplTaskEntry(entry, settings) {\n return (done) => {\n if (!entry.dirent.isSymbolicLink()) {\n done(null, entry);\n return;\n }\n settings.fs.stat(entry.path, (statError, stats) => {\n if (statError !== null) {\n if (settings.throwErrorOnBrokenSymbolicLink) {\n done(statError);\n return;\n }\n done(null, entry);\n return;\n }\n entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n done(null, entry);\n });\n };\n}\nfunction readdir(directory, settings, callback) {\n settings.fs.readdir(directory, (readdirError, names) => {\n if (readdirError !== null) {\n callFailureCallback(callback, readdirError);\n return;\n }\n const tasks = names.map((name) => {\n const path = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n return (done) => {\n fsStat.stat(path, settings.fsStatSettings, (error, stats) => {\n if (error !== null) {\n done(error);\n return;\n }\n const entry = {\n name,\n path,\n dirent: utils.fs.createDirentFromStats(name, stats)\n };\n if (settings.stats) {\n entry.stats = stats;\n }\n done(null, entry);\n });\n };\n });\n rpl(tasks, (rplError, entries) => {\n if (rplError !== null) {\n callFailureCallback(callback, rplError);\n return;\n }\n callSuccessCallback(callback, entries);\n });\n });\n}\nexports.readdir = readdir;\nfunction callFailureCallback(callback, error) {\n callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n callback(null, result);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings) {\n if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n return readdirWithFileTypes(directory, settings);\n }\n return readdir(directory, settings);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings) {\n const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });\n return dirents.map((dirent) => {\n const entry = {\n dirent,\n name: dirent.name,\n path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n };\n if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {\n try {\n const stats = settings.fs.statSync(entry.path);\n entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n }\n catch (error) {\n if (settings.throwErrorOnBrokenSymbolicLink) {\n throw error;\n }\n }\n }\n return entry;\n });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction readdir(directory, settings) {\n const names = settings.fs.readdirSync(directory);\n return names.map((name) => {\n const entryPath = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n const stats = fsStat.statSync(entryPath, settings.fsStatSettings);\n const entry = {\n name,\n path: entryPath,\n dirent: utils.fs.createDirentFromStats(name, stats)\n };\n if (settings.stats) {\n entry.stats = stats;\n }\n return entry;\n });\n}\nexports.readdir = readdir;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n lstat: fs.lstat,\n stat: fs.stat,\n lstatSync: fs.lstatSync,\n statSync: fs.statSync,\n readdir: fs.readdir,\n readdirSync: fs.readdirSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n if (fsMethods === undefined) {\n return exports.FILE_SYSTEM_ADAPTER;\n }\n return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);\n this.fs = fs.createFileSystemAdapter(this._options.fs);\n this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n this.stats = this._getValue(this._options.stats, false);\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n this.fsStatSettings = new fsStat.Settings({\n followSymbolicLink: this.followSymbolicLinks,\n fs: this.fs,\n throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink\n });\n }\n _getValue(option, value) {\n return option !== null && option !== void 0 ? option : value;\n }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.scandirSync = exports.scandir = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction scandir(path, optionsOrSettingsOrCallback, callback) {\n if (typeof optionsOrSettingsOrCallback === 'function') {\n async.read(path, getSettings(), optionsOrSettingsOrCallback);\n return;\n }\n async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.scandir = scandir;\nfunction scandirSync(path, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n return sync.read(path, settings);\n}\nexports.scandirSync = scandirSync;\nfunction getSettings(settingsOrOptions = {}) {\n if (settingsOrOptions instanceof settings_1.default) {\n return settingsOrOptions;\n }\n return new settings_1.default(settingsOrOptions);\n}\n","'use strict'\n\nfunction reusify (Constructor) {\n var head = new Constructor()\n var tail = head\n\n function get () {\n var current = head\n\n if (current.next) {\n head = current.next\n } else {\n head = new Constructor()\n tail = head\n }\n\n current.next = null\n\n return current\n }\n\n function release (obj) {\n tail.next = obj\n tail = obj\n }\n\n return {\n get: get,\n release: release\n }\n}\n\nmodule.exports = reusify\n","'use strict'\n\n/* eslint-disable no-var */\n\nvar reusify = require('reusify')\n\nfunction fastqueue (context, worker, _concurrency) {\n if (typeof context === 'function') {\n _concurrency = worker\n worker = context\n context = null\n }\n\n if (!(_concurrency >= 1)) {\n throw new Error('fastqueue concurrency must be equal to or greater than 1')\n }\n\n var cache = reusify(Task)\n var queueHead = null\n var queueTail = null\n var _running = 0\n var errorHandler = null\n\n var self = {\n push: push,\n drain: noop,\n saturated: noop,\n pause: pause,\n paused: false,\n\n get concurrency () {\n return _concurrency\n },\n set concurrency (value) {\n if (!(value >= 1)) {\n throw new Error('fastqueue concurrency must be equal to or greater than 1')\n }\n _concurrency = value\n\n if (self.paused) return\n for (; queueHead && _running < _concurrency;) {\n _running++\n release()\n }\n },\n\n running: running,\n resume: resume,\n idle: idle,\n length: length,\n getQueue: getQueue,\n unshift: unshift,\n empty: noop,\n kill: kill,\n killAndDrain: killAndDrain,\n error: error,\n abort: abort\n }\n\n return self\n\n function running () {\n return _running\n }\n\n function pause () {\n self.paused = true\n }\n\n function length () {\n var current = queueHead\n var counter = 0\n\n while (current) {\n current = current.next\n counter++\n }\n\n return counter\n }\n\n function getQueue () {\n var current = queueHead\n var tasks = []\n\n while (current) {\n tasks.push(current.value)\n current = current.next\n }\n\n return tasks\n }\n\n function resume () {\n if (!self.paused) return\n self.paused = false\n if (queueHead === null) {\n _running++\n release()\n return\n }\n for (; queueHead && _running < _concurrency;) {\n _running++\n release()\n }\n }\n\n function idle () {\n return _running === 0 && self.length() === 0\n }\n\n function push (value, done) {\n var current = cache.get()\n\n current.context = context\n current.release = release\n current.value = value\n current.callback = done || noop\n current.errorHandler = errorHandler\n\n if (_running >= _concurrency || self.paused) {\n if (queueTail) {\n queueTail.next = current\n queueTail = current\n } else {\n queueHead = current\n queueTail = current\n self.saturated()\n }\n } else {\n _running++\n worker.call(context, current.value, current.worked)\n }\n }\n\n function unshift (value, done) {\n var current = cache.get()\n\n current.context = context\n current.release = release\n current.value = value\n current.callback = done || noop\n current.errorHandler = errorHandler\n\n if (_running >= _concurrency || self.paused) {\n if (queueHead) {\n current.next = queueHead\n queueHead = current\n } else {\n queueHead = current\n queueTail = current\n self.saturated()\n }\n } else {\n _running++\n worker.call(context, current.value, current.worked)\n }\n }\n\n function release (holder) {\n if (holder) {\n cache.release(holder)\n }\n var next = queueHead\n if (next && _running <= _concurrency) {\n if (!self.paused) {\n if (queueTail === queueHead) {\n queueTail = null\n }\n queueHead = next.next\n next.next = null\n worker.call(context, next.value, next.worked)\n if (queueTail === null) {\n self.empty()\n }\n } else {\n _running--\n }\n } else if (--_running === 0) {\n self.drain()\n }\n }\n\n function kill () {\n queueHead = null\n queueTail = null\n self.drain = noop\n }\n\n function killAndDrain () {\n queueHead = null\n queueTail = null\n self.drain()\n self.drain = noop\n }\n\n function abort () {\n var current = queueHead\n queueHead = null\n queueTail = null\n\n while (current) {\n var next = current.next\n var callback = current.callback\n var errorHandler = current.errorHandler\n var val = current.value\n var context = current.context\n\n // Reset the task state\n current.value = null\n current.callback = noop\n current.errorHandler = null\n\n // Call error handler if present\n if (errorHandler) {\n errorHandler(new Error('abort'), val)\n }\n\n // Call callback with error\n callback.call(context, new Error('abort'))\n\n // Release the task back to the pool\n current.release(current)\n\n current = next\n }\n\n self.drain = noop\n }\n\n function error (handler) {\n errorHandler = handler\n }\n}\n\nfunction noop () {}\n\nfunction Task () {\n this.value = null\n this.callback = noop\n this.next = null\n this.release = noop\n this.context = null\n this.errorHandler = null\n\n var self = this\n\n this.worked = function worked (err, result) {\n var callback = self.callback\n var errorHandler = self.errorHandler\n var val = self.value\n self.value = null\n self.callback = noop\n if (self.errorHandler) {\n errorHandler(err, val)\n }\n callback.call(self.context, err, result)\n self.release(self)\n }\n}\n\nfunction queueAsPromised (context, worker, _concurrency) {\n if (typeof context === 'function') {\n _concurrency = worker\n worker = context\n context = null\n }\n\n function asyncWrapper (arg, cb) {\n worker.call(this, arg)\n .then(function (res) {\n cb(null, res)\n }, cb)\n }\n\n var queue = fastqueue(context, asyncWrapper, _concurrency)\n\n var pushCb = queue.push\n var unshiftCb = queue.unshift\n\n queue.push = push\n queue.unshift = unshift\n queue.drained = drained\n\n return queue\n\n function push (value) {\n var p = new Promise(function (resolve, reject) {\n pushCb(value, function (err, result) {\n if (err) {\n reject(err)\n return\n }\n resolve(result)\n })\n })\n\n // Let's fork the promise chain to\n // make the error bubble up to the user but\n // not lead to a unhandledRejection\n p.catch(noop)\n\n return p\n }\n\n function unshift (value) {\n var p = new Promise(function (resolve, reject) {\n unshiftCb(value, function (err, result) {\n if (err) {\n reject(err)\n return\n }\n resolve(result)\n })\n })\n\n // Let's fork the promise chain to\n // make the error bubble up to the user but\n // not lead to a unhandledRejection\n p.catch(noop)\n\n return p\n }\n\n function drained () {\n var p = new Promise(function (resolve) {\n process.nextTick(function () {\n if (queue.idle()) {\n resolve()\n } else {\n var previousDrain = queue.drain\n queue.drain = function () {\n if (typeof previousDrain === 'function') previousDrain()\n resolve()\n queue.drain = previousDrain\n }\n }\n })\n })\n\n return p\n }\n}\n\nmodule.exports = fastqueue\nmodule.exports.promise = queueAsPromised\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = exports.replacePathSegmentSeparator = exports.isAppliedFilter = exports.isFatalError = void 0;\nfunction isFatalError(settings, error) {\n if (settings.errorFilter === null) {\n return true;\n }\n return !settings.errorFilter(error);\n}\nexports.isFatalError = isFatalError;\nfunction isAppliedFilter(filter, value) {\n return filter === null || filter(value);\n}\nexports.isAppliedFilter = isAppliedFilter;\nfunction replacePathSegmentSeparator(filepath, separator) {\n return filepath.split(/[/\\\\]/).join(separator);\n}\nexports.replacePathSegmentSeparator = replacePathSegmentSeparator;\nfunction joinPathSegments(a, b, separator) {\n if (a === '') {\n return b;\n }\n /**\n * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n */\n if (a.endsWith(separator)) {\n return a + b;\n }\n return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst common = require(\"./common\");\nclass Reader {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);\n }\n}\nexports.default = Reader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst events_1 = require(\"events\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst fastq = require(\"fastq\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass AsyncReader extends reader_1.default {\n constructor(_root, _settings) {\n super(_root, _settings);\n this._settings = _settings;\n this._scandir = fsScandir.scandir;\n this._emitter = new events_1.EventEmitter();\n this._queue = fastq(this._worker.bind(this), this._settings.concurrency);\n this._isFatalError = false;\n this._isDestroyed = false;\n this._queue.drain = () => {\n if (!this._isFatalError) {\n this._emitter.emit('end');\n }\n };\n }\n read() {\n this._isFatalError = false;\n this._isDestroyed = false;\n setImmediate(() => {\n this._pushToQueue(this._root, this._settings.basePath);\n });\n return this._emitter;\n }\n get isDestroyed() {\n return this._isDestroyed;\n }\n destroy() {\n if (this._isDestroyed) {\n throw new Error('The reader is already destroyed');\n }\n this._isDestroyed = true;\n this._queue.killAndDrain();\n }\n onEntry(callback) {\n this._emitter.on('entry', callback);\n }\n onError(callback) {\n this._emitter.once('error', callback);\n }\n onEnd(callback) {\n this._emitter.once('end', callback);\n }\n _pushToQueue(directory, base) {\n const queueItem = { directory, base };\n this._queue.push(queueItem, (error) => {\n if (error !== null) {\n this._handleError(error);\n }\n });\n }\n _worker(item, done) {\n this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => {\n if (error !== null) {\n done(error, undefined);\n return;\n }\n for (const entry of entries) {\n this._handleEntry(entry, item.base);\n }\n done(null, undefined);\n });\n }\n _handleError(error) {\n if (this._isDestroyed || !common.isFatalError(this._settings, error)) {\n return;\n }\n this._isFatalError = true;\n this._isDestroyed = true;\n this._emitter.emit('error', error);\n }\n _handleEntry(entry, base) {\n if (this._isDestroyed || this._isFatalError) {\n return;\n }\n const fullpath = entry.path;\n if (base !== undefined) {\n entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n }\n if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n this._emitEntry(entry);\n }\n if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n }\n }\n _emitEntry(entry) {\n this._emitter.emit('entry', entry);\n }\n}\nexports.default = AsyncReader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nclass AsyncProvider {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._reader = new async_1.default(this._root, this._settings);\n this._storage = [];\n }\n read(callback) {\n this._reader.onError((error) => {\n callFailureCallback(callback, error);\n });\n this._reader.onEntry((entry) => {\n this._storage.push(entry);\n });\n this._reader.onEnd(() => {\n callSuccessCallback(callback, this._storage);\n });\n this._reader.read();\n }\n}\nexports.default = AsyncProvider;\nfunction callFailureCallback(callback, error) {\n callback(error);\n}\nfunction callSuccessCallback(callback, entries) {\n callback(null, entries);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst async_1 = require(\"../readers/async\");\nclass StreamProvider {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._reader = new async_1.default(this._root, this._settings);\n this._stream = new stream_1.Readable({\n objectMode: true,\n read: () => { },\n destroy: () => {\n if (!this._reader.isDestroyed) {\n this._reader.destroy();\n }\n }\n });\n }\n read() {\n this._reader.onError((error) => {\n this._stream.emit('error', error);\n });\n this._reader.onEntry((entry) => {\n this._stream.push(entry);\n });\n this._reader.onEnd(() => {\n this._stream.push(null);\n });\n this._reader.read();\n return this._stream;\n }\n}\nexports.default = StreamProvider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass SyncReader extends reader_1.default {\n constructor() {\n super(...arguments);\n this._scandir = fsScandir.scandirSync;\n this._storage = [];\n this._queue = new Set();\n }\n read() {\n this._pushToQueue(this._root, this._settings.basePath);\n this._handleQueue();\n return this._storage;\n }\n _pushToQueue(directory, base) {\n this._queue.add({ directory, base });\n }\n _handleQueue() {\n for (const item of this._queue.values()) {\n this._handleDirectory(item.directory, item.base);\n }\n }\n _handleDirectory(directory, base) {\n try {\n const entries = this._scandir(directory, this._settings.fsScandirSettings);\n for (const entry of entries) {\n this._handleEntry(entry, base);\n }\n }\n catch (error) {\n this._handleError(error);\n }\n }\n _handleError(error) {\n if (!common.isFatalError(this._settings, error)) {\n return;\n }\n throw error;\n }\n _handleEntry(entry, base) {\n const fullpath = entry.path;\n if (base !== undefined) {\n entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n }\n if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n this._pushToStorage(entry);\n }\n if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n }\n }\n _pushToStorage(entry) {\n this._storage.push(entry);\n }\n}\nexports.default = SyncReader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nclass SyncProvider {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._reader = new sync_1.default(this._root, this._settings);\n }\n read() {\n return this._reader.read();\n }\n}\nexports.default = SyncProvider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.basePath = this._getValue(this._options.basePath, undefined);\n this.concurrency = this._getValue(this._options.concurrency, Number.POSITIVE_INFINITY);\n this.deepFilter = this._getValue(this._options.deepFilter, null);\n this.entryFilter = this._getValue(this._options.entryFilter, null);\n this.errorFilter = this._getValue(this._options.errorFilter, null);\n this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n this.fsScandirSettings = new fsScandir.Settings({\n followSymbolicLinks: this._options.followSymbolicLinks,\n fs: this._options.fs,\n pathSegmentSeparator: this._options.pathSegmentSeparator,\n stats: this._options.stats,\n throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink\n });\n }\n _getValue(option, value) {\n return option !== null && option !== void 0 ? option : value;\n }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.walkStream = exports.walkSync = exports.walk = void 0;\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction walk(directory, optionsOrSettingsOrCallback, callback) {\n if (typeof optionsOrSettingsOrCallback === 'function') {\n new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback);\n return;\n }\n new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback);\n}\nexports.walk = walk;\nfunction walkSync(directory, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n const provider = new sync_1.default(directory, settings);\n return provider.read();\n}\nexports.walkSync = walkSync;\nfunction walkStream(directory, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n const provider = new stream_1.default(directory, settings);\n return provider.read();\n}\nexports.walkStream = walkStream;\nfunction getSettings(settingsOrOptions = {}) {\n if (settingsOrOptions instanceof settings_1.default) {\n return settingsOrOptions;\n }\n return new settings_1.default(settingsOrOptions);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst utils = require(\"../utils\");\nclass Reader {\n constructor(_settings) {\n this._settings = _settings;\n this._fsStatSettings = new fsStat.Settings({\n followSymbolicLink: this._settings.followSymbolicLinks,\n fs: this._settings.fs,\n throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks\n });\n }\n _getFullEntryPath(filepath) {\n return path.resolve(this._settings.cwd, filepath);\n }\n _makeEntry(stats, pattern) {\n const entry = {\n name: pattern,\n path: pattern,\n dirent: utils.fs.createDirentFromStats(pattern, stats)\n };\n if (this._settings.stats) {\n entry.stats = stats;\n }\n return entry;\n }\n _isFatalError(error) {\n return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;\n }\n}\nexports.default = Reader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderStream extends reader_1.default {\n constructor() {\n super(...arguments);\n this._walkStream = fsWalk.walkStream;\n this._stat = fsStat.stat;\n }\n dynamic(root, options) {\n return this._walkStream(root, options);\n }\n static(patterns, options) {\n const filepaths = patterns.map(this._getFullEntryPath, this);\n const stream = new stream_1.PassThrough({ objectMode: true });\n stream._write = (index, _enc, done) => {\n return this._getEntry(filepaths[index], patterns[index], options)\n .then((entry) => {\n if (entry !== null && options.entryFilter(entry)) {\n stream.push(entry);\n }\n if (index === filepaths.length - 1) {\n stream.end();\n }\n done();\n })\n .catch(done);\n };\n for (let i = 0; i < filepaths.length; i++) {\n stream.write(i);\n }\n return stream;\n }\n _getEntry(filepath, pattern, options) {\n return this._getStat(filepath)\n .then((stats) => this._makeEntry(stats, pattern))\n .catch((error) => {\n if (options.errorFilter(error)) {\n return null;\n }\n throw error;\n });\n }\n _getStat(filepath) {\n return new Promise((resolve, reject) => {\n this._stat(filepath, this._fsStatSettings, (error, stats) => {\n return error === null ? resolve(stats) : reject(error);\n });\n });\n }\n}\nexports.default = ReaderStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nconst stream_1 = require(\"./stream\");\nclass ReaderAsync extends reader_1.default {\n constructor() {\n super(...arguments);\n this._walkAsync = fsWalk.walk;\n this._readerStream = new stream_1.default(this._settings);\n }\n dynamic(root, options) {\n return new Promise((resolve, reject) => {\n this._walkAsync(root, options, (error, entries) => {\n if (error === null) {\n resolve(entries);\n }\n else {\n reject(error);\n }\n });\n });\n }\n async static(patterns, options) {\n const entries = [];\n const stream = this._readerStream.static(patterns, options);\n // After #235, replace it with an asynchronous iterator.\n return new Promise((resolve, reject) => {\n stream.once('error', reject);\n stream.on('data', (entry) => entries.push(entry));\n stream.once('end', () => resolve(entries));\n });\n }\n}\nexports.default = ReaderAsync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass Matcher {\n constructor(_patterns, _settings, _micromatchOptions) {\n this._patterns = _patterns;\n this._settings = _settings;\n this._micromatchOptions = _micromatchOptions;\n this._storage = [];\n this._fillStorage();\n }\n _fillStorage() {\n for (const pattern of this._patterns) {\n const segments = this._getPatternSegments(pattern);\n const sections = this._splitSegmentsIntoSections(segments);\n this._storage.push({\n complete: sections.length <= 1,\n pattern,\n segments,\n sections\n });\n }\n }\n _getPatternSegments(pattern) {\n const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions);\n return parts.map((part) => {\n const dynamic = utils.pattern.isDynamicPattern(part, this._settings);\n if (!dynamic) {\n return {\n dynamic: false,\n pattern: part\n };\n }\n return {\n dynamic: true,\n pattern: part,\n patternRe: utils.pattern.makeRe(part, this._micromatchOptions)\n };\n });\n }\n _splitSegmentsIntoSections(segments) {\n return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern));\n }\n}\nexports.default = Matcher;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst matcher_1 = require(\"./matcher\");\nclass PartialMatcher extends matcher_1.default {\n match(filepath) {\n const parts = filepath.split('/');\n const levels = parts.length;\n const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);\n for (const pattern of patterns) {\n const section = pattern.sections[0];\n /**\n * In this case, the pattern has a globstar and we must read all directories unconditionally,\n * but only if the level has reached the end of the first group.\n *\n * fixtures/{a,b}/**\n * ^ true/false ^ always true\n */\n if (!pattern.complete && levels > section.length) {\n return true;\n }\n const match = parts.every((part, index) => {\n const segment = pattern.segments[index];\n if (segment.dynamic && segment.patternRe.test(part)) {\n return true;\n }\n if (!segment.dynamic && segment.pattern === part) {\n return true;\n }\n return false;\n });\n if (match) {\n return true;\n }\n }\n return false;\n }\n}\nexports.default = PartialMatcher;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nconst partial_1 = require(\"../matchers/partial\");\nclass DeepFilter {\n constructor(_settings, _micromatchOptions) {\n this._settings = _settings;\n this._micromatchOptions = _micromatchOptions;\n }\n getFilter(basePath, positive, negative) {\n const matcher = this._getMatcher(positive);\n const negativeRe = this._getNegativePatternsRe(negative);\n return (entry) => this._filter(basePath, entry, matcher, negativeRe);\n }\n _getMatcher(patterns) {\n return new partial_1.default(patterns, this._settings, this._micromatchOptions);\n }\n _getNegativePatternsRe(patterns) {\n const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern);\n return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);\n }\n _filter(basePath, entry, matcher, negativeRe) {\n if (this._isSkippedByDeep(basePath, entry.path)) {\n return false;\n }\n if (this._isSkippedSymbolicLink(entry)) {\n return false;\n }\n const filepath = utils.path.removeLeadingDotSegment(entry.path);\n if (this._isSkippedByPositivePatterns(filepath, matcher)) {\n return false;\n }\n return this._isSkippedByNegativePatterns(filepath, negativeRe);\n }\n _isSkippedByDeep(basePath, entryPath) {\n /**\n * Avoid unnecessary depth calculations when it doesn't matter.\n */\n if (this._settings.deep === Infinity) {\n return false;\n }\n return this._getEntryLevel(basePath, entryPath) >= this._settings.deep;\n }\n _getEntryLevel(basePath, entryPath) {\n const entryPathDepth = entryPath.split('/').length;\n if (basePath === '') {\n return entryPathDepth;\n }\n const basePathDepth = basePath.split('/').length;\n return entryPathDepth - basePathDepth;\n }\n _isSkippedSymbolicLink(entry) {\n return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();\n }\n _isSkippedByPositivePatterns(entryPath, matcher) {\n return !this._settings.baseNameMatch && !matcher.match(entryPath);\n }\n _isSkippedByNegativePatterns(entryPath, patternsRe) {\n return !utils.pattern.matchAny(entryPath, patternsRe);\n }\n}\nexports.default = DeepFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryFilter {\n constructor(_settings, _micromatchOptions) {\n this._settings = _settings;\n this._micromatchOptions = _micromatchOptions;\n this.index = new Map();\n }\n getFilter(positive, negative) {\n const [absoluteNegative, relativeNegative] = utils.pattern.partitionAbsoluteAndRelative(negative);\n const patterns = {\n positive: {\n all: utils.pattern.convertPatternsToRe(positive, this._micromatchOptions)\n },\n negative: {\n absolute: utils.pattern.convertPatternsToRe(absoluteNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true })),\n relative: utils.pattern.convertPatternsToRe(relativeNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true }))\n }\n };\n return (entry) => this._filter(entry, patterns);\n }\n _filter(entry, patterns) {\n const filepath = utils.path.removeLeadingDotSegment(entry.path);\n if (this._settings.unique && this._isDuplicateEntry(filepath)) {\n return false;\n }\n if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {\n return false;\n }\n const isMatched = this._isMatchToPatternsSet(filepath, patterns, entry.dirent.isDirectory());\n if (this._settings.unique && isMatched) {\n this._createIndexRecord(filepath);\n }\n return isMatched;\n }\n _isDuplicateEntry(filepath) {\n return this.index.has(filepath);\n }\n _createIndexRecord(filepath) {\n this.index.set(filepath, undefined);\n }\n _onlyFileFilter(entry) {\n return this._settings.onlyFiles && !entry.dirent.isFile();\n }\n _onlyDirectoryFilter(entry) {\n return this._settings.onlyDirectories && !entry.dirent.isDirectory();\n }\n _isMatchToPatternsSet(filepath, patterns, isDirectory) {\n const isMatched = this._isMatchToPatterns(filepath, patterns.positive.all, isDirectory);\n if (!isMatched) {\n return false;\n }\n const isMatchedByRelativeNegative = this._isMatchToPatterns(filepath, patterns.negative.relative, isDirectory);\n if (isMatchedByRelativeNegative) {\n return false;\n }\n const isMatchedByAbsoluteNegative = this._isMatchToAbsoluteNegative(filepath, patterns.negative.absolute, isDirectory);\n if (isMatchedByAbsoluteNegative) {\n return false;\n }\n return true;\n }\n _isMatchToAbsoluteNegative(filepath, patternsRe, isDirectory) {\n if (patternsRe.length === 0) {\n return false;\n }\n const fullpath = utils.path.makeAbsolute(this._settings.cwd, filepath);\n return this._isMatchToPatterns(fullpath, patternsRe, isDirectory);\n }\n _isMatchToPatterns(filepath, patternsRe, isDirectory) {\n if (patternsRe.length === 0) {\n return false;\n }\n // Trying to match files and directories by patterns.\n const isMatched = utils.pattern.matchAny(filepath, patternsRe);\n // A pattern with a trailling slash can be used for directory matching.\n // To apply such pattern, we need to add a tralling slash to the path.\n if (!isMatched && isDirectory) {\n return utils.pattern.matchAny(filepath + '/', patternsRe);\n }\n return isMatched;\n }\n}\nexports.default = EntryFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass ErrorFilter {\n constructor(_settings) {\n this._settings = _settings;\n }\n getFilter() {\n return (error) => this._isNonFatalError(error);\n }\n _isNonFatalError(error) {\n return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors;\n }\n}\nexports.default = ErrorFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryTransformer {\n constructor(_settings) {\n this._settings = _settings;\n }\n getTransformer() {\n return (entry) => this._transform(entry);\n }\n _transform(entry) {\n let filepath = entry.path;\n if (this._settings.absolute) {\n filepath = utils.path.makeAbsolute(this._settings.cwd, filepath);\n filepath = utils.path.unixify(filepath);\n }\n if (this._settings.markDirectories && entry.dirent.isDirectory()) {\n filepath += '/';\n }\n if (!this._settings.objectMode) {\n return filepath;\n }\n return Object.assign(Object.assign({}, entry), { path: filepath });\n }\n}\nexports.default = EntryTransformer;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst deep_1 = require(\"./filters/deep\");\nconst entry_1 = require(\"./filters/entry\");\nconst error_1 = require(\"./filters/error\");\nconst entry_2 = require(\"./transformers/entry\");\nclass Provider {\n constructor(_settings) {\n this._settings = _settings;\n this.errorFilter = new error_1.default(this._settings);\n this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());\n this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());\n this.entryTransformer = new entry_2.default(this._settings);\n }\n _getRootDirectory(task) {\n return path.resolve(this._settings.cwd, task.base);\n }\n _getReaderOptions(task) {\n const basePath = task.base === '.' ? '' : task.base;\n return {\n basePath,\n pathSegmentSeparator: '/',\n concurrency: this._settings.concurrency,\n deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),\n entryFilter: this.entryFilter.getFilter(task.positive, task.negative),\n errorFilter: this.errorFilter.getFilter(),\n followSymbolicLinks: this._settings.followSymbolicLinks,\n fs: this._settings.fs,\n stats: this._settings.stats,\n throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,\n transform: this.entryTransformer.getTransformer()\n };\n }\n _getMicromatchOptions() {\n return {\n dot: this._settings.dot,\n matchBase: this._settings.baseNameMatch,\n nobrace: !this._settings.braceExpansion,\n nocase: !this._settings.caseSensitiveMatch,\n noext: !this._settings.extglob,\n noglobstar: !this._settings.globstar,\n posix: true,\n strictSlashes: false\n };\n }\n}\nexports.default = Provider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nconst provider_1 = require(\"./provider\");\nclass ProviderAsync extends provider_1.default {\n constructor() {\n super(...arguments);\n this._reader = new async_1.default(this._settings);\n }\n async read(task) {\n const root = this._getRootDirectory(task);\n const options = this._getReaderOptions(task);\n const entries = await this.api(root, task, options);\n return entries.map((entry) => options.transform(entry));\n }\n api(root, task, options) {\n if (task.dynamic) {\n return this._reader.dynamic(root, options);\n }\n return this._reader.static(task.patterns, options);\n }\n}\nexports.default = ProviderAsync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst stream_2 = require(\"../readers/stream\");\nconst provider_1 = require(\"./provider\");\nclass ProviderStream extends provider_1.default {\n constructor() {\n super(...arguments);\n this._reader = new stream_2.default(this._settings);\n }\n read(task) {\n const root = this._getRootDirectory(task);\n const options = this._getReaderOptions(task);\n const source = this.api(root, task, options);\n const destination = new stream_1.Readable({ objectMode: true, read: () => { } });\n source\n .once('error', (error) => destination.emit('error', error))\n .on('data', (entry) => destination.emit('data', options.transform(entry)))\n .once('end', () => destination.emit('end'));\n destination\n .once('close', () => source.destroy());\n return destination;\n }\n api(root, task, options) {\n if (task.dynamic) {\n return this._reader.dynamic(root, options);\n }\n return this._reader.static(task.patterns, options);\n }\n}\nexports.default = ProviderStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderSync extends reader_1.default {\n constructor() {\n super(...arguments);\n this._walkSync = fsWalk.walkSync;\n this._statSync = fsStat.statSync;\n }\n dynamic(root, options) {\n return this._walkSync(root, options);\n }\n static(patterns, options) {\n const entries = [];\n for (const pattern of patterns) {\n const filepath = this._getFullEntryPath(pattern);\n const entry = this._getEntry(filepath, pattern, options);\n if (entry === null || !options.entryFilter(entry)) {\n continue;\n }\n entries.push(entry);\n }\n return entries;\n }\n _getEntry(filepath, pattern, options) {\n try {\n const stats = this._getStat(filepath);\n return this._makeEntry(stats, pattern);\n }\n catch (error) {\n if (options.errorFilter(error)) {\n return null;\n }\n throw error;\n }\n }\n _getStat(filepath) {\n return this._statSync(filepath, this._fsStatSettings);\n }\n}\nexports.default = ReaderSync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nconst provider_1 = require(\"./provider\");\nclass ProviderSync extends provider_1.default {\n constructor() {\n super(...arguments);\n this._reader = new sync_1.default(this._settings);\n }\n read(task) {\n const root = this._getRootDirectory(task);\n const options = this._getReaderOptions(task);\n const entries = this.api(root, task, options);\n return entries.map(options.transform);\n }\n api(root, task, options) {\n if (task.dynamic) {\n return this._reader.dynamic(root, options);\n }\n return this._reader.static(task.patterns, options);\n }\n}\nexports.default = ProviderSync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nconst os = require(\"os\");\n/**\n * The `os.cpus` method can return zero. We expect the number of cores to be greater than zero.\n * https://github.com/nodejs/node/blob/7faeddf23a98c53896f8b574a6e66589e8fb1eb8/lib/os.js#L106-L107\n */\nconst CPU_COUNT = Math.max(os.cpus().length, 1);\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = {\n lstat: fs.lstat,\n lstatSync: fs.lstatSync,\n stat: fs.stat,\n statSync: fs.statSync,\n readdir: fs.readdir,\n readdirSync: fs.readdirSync\n};\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.absolute = this._getValue(this._options.absolute, false);\n this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);\n this.braceExpansion = this._getValue(this._options.braceExpansion, true);\n this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);\n this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);\n this.cwd = this._getValue(this._options.cwd, process.cwd());\n this.deep = this._getValue(this._options.deep, Infinity);\n this.dot = this._getValue(this._options.dot, false);\n this.extglob = this._getValue(this._options.extglob, true);\n this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);\n this.fs = this._getFileSystemMethods(this._options.fs);\n this.globstar = this._getValue(this._options.globstar, true);\n this.ignore = this._getValue(this._options.ignore, []);\n this.markDirectories = this._getValue(this._options.markDirectories, false);\n this.objectMode = this._getValue(this._options.objectMode, false);\n this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);\n this.onlyFiles = this._getValue(this._options.onlyFiles, true);\n this.stats = this._getValue(this._options.stats, false);\n this.suppressErrors = this._getValue(this._options.suppressErrors, false);\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);\n this.unique = this._getValue(this._options.unique, true);\n if (this.onlyDirectories) {\n this.onlyFiles = false;\n }\n if (this.stats) {\n this.objectMode = true;\n }\n // Remove the cast to the array in the next major (#404).\n this.ignore = [].concat(this.ignore);\n }\n _getValue(option, value) {\n return option === undefined ? value : option;\n }\n _getFileSystemMethods(methods = {}) {\n return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);\n }\n}\nexports.default = Settings;\n","\"use strict\";\nconst taskManager = require(\"./managers/tasks\");\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nconst utils = require(\"./utils\");\nasync function FastGlob(source, options) {\n assertPatternsInput(source);\n const works = getWorks(source, async_1.default, options);\n const result = await Promise.all(works);\n return utils.array.flatten(result);\n}\n// https://github.com/typescript-eslint/typescript-eslint/issues/60\n// eslint-disable-next-line no-redeclare\n(function (FastGlob) {\n FastGlob.glob = FastGlob;\n FastGlob.globSync = sync;\n FastGlob.globStream = stream;\n FastGlob.async = FastGlob;\n function sync(source, options) {\n assertPatternsInput(source);\n const works = getWorks(source, sync_1.default, options);\n return utils.array.flatten(works);\n }\n FastGlob.sync = sync;\n function stream(source, options) {\n assertPatternsInput(source);\n const works = getWorks(source, stream_1.default, options);\n /**\n * The stream returned by the provider cannot work with an asynchronous iterator.\n * To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams.\n * This affects performance (+25%). I don't see best solution right now.\n */\n return utils.stream.merge(works);\n }\n FastGlob.stream = stream;\n function generateTasks(source, options) {\n assertPatternsInput(source);\n const patterns = [].concat(source);\n const settings = new settings_1.default(options);\n return taskManager.generate(patterns, settings);\n }\n FastGlob.generateTasks = generateTasks;\n function isDynamicPattern(source, options) {\n assertPatternsInput(source);\n const settings = new settings_1.default(options);\n return utils.pattern.isDynamicPattern(source, settings);\n }\n FastGlob.isDynamicPattern = isDynamicPattern;\n function escapePath(source) {\n assertPatternsInput(source);\n return utils.path.escape(source);\n }\n FastGlob.escapePath = escapePath;\n function convertPathToPattern(source) {\n assertPatternsInput(source);\n return utils.path.convertPathToPattern(source);\n }\n FastGlob.convertPathToPattern = convertPathToPattern;\n let posix;\n (function (posix) {\n function escapePath(source) {\n assertPatternsInput(source);\n return utils.path.escapePosixPath(source);\n }\n posix.escapePath = escapePath;\n function convertPathToPattern(source) {\n assertPatternsInput(source);\n return utils.path.convertPosixPathToPattern(source);\n }\n posix.convertPathToPattern = convertPathToPattern;\n })(posix = FastGlob.posix || (FastGlob.posix = {}));\n let win32;\n (function (win32) {\n function escapePath(source) {\n assertPatternsInput(source);\n return utils.path.escapeWindowsPath(source);\n }\n win32.escapePath = escapePath;\n function convertPathToPattern(source) {\n assertPatternsInput(source);\n return utils.path.convertWindowsPathToPattern(source);\n }\n win32.convertPathToPattern = convertPathToPattern;\n })(win32 = FastGlob.win32 || (FastGlob.win32 = {}));\n})(FastGlob || (FastGlob = {}));\nfunction getWorks(source, _Provider, options) {\n const patterns = [].concat(source);\n const settings = new settings_1.default(options);\n const tasks = taskManager.generate(patterns, settings);\n const provider = new _Provider(settings);\n return tasks.map(provider.read, provider);\n}\nfunction assertPatternsInput(input) {\n const source = [].concat(input);\n const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item));\n if (!isValidSource) {\n throw new TypeError('Patterns must be a string (non empty) or an array of strings');\n }\n}\nmodule.exports = FastGlob;\n","/**\n * Shared timeout controller utility.\n * Creates an AbortSignal that fires after the given milliseconds,\n * plus a cleanup function to cancel the timer if the operation completes early.\n */\nexport function createTimeoutController(ms: number): {\n signal: AbortSignal;\n cleanup: () => void;\n} {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), ms);\n timer.unref(); // Don't keep event loop alive\n\n return {\n signal: controller.signal,\n cleanup: () => clearTimeout(timer),\n };\n}\n","/**\n * Workspace context — AsyncLocalStorage-backed \"current project root\" for tool\n * path resolution.\n *\n * Why this exists: file_write, file_edit, and similar path-based tools used to\n * resolve relative paths via `process.cwd()`. That meant when a subagent was\n * spawned with a different `projectPath` (e.g., a cloned repo at /tmp/xxx),\n * tool calls would write to the parent CLI's cwd instead of the subagent's\n * project. SWE-bench runs surfaced this: the agent thought it was editing\n * `astropy/modeling/separable.py` in the cloned repo, but the write landed in\n * the brainstorm repo's root.\n *\n * Fix: subagent.ts wraps its streamText execution in withWorkspace(projectPath,\n * async () => { ... }). Path-based tools call getWorkspace() to get the\n * effective root and fall back to process.cwd() when no context is set.\n */\n\nimport { AsyncLocalStorage } from \"node:async_hooks\";\n\nconst workspaceStorage = new AsyncLocalStorage<string>();\n\n/**\n * Run a function with a specific workspace root. Tools called inside the\n * callback (including nested async work) can retrieve this via getWorkspace().\n */\nexport function withWorkspace<T>(\n workspace: string,\n fn: () => Promise<T> | T,\n): Promise<T> | T {\n return workspaceStorage.run(workspace, fn);\n}\n\n/**\n * Enter a workspace context WITHOUT a callback wrapper. Sets the store for\n * the current async execution and all nested async work — no unset until\n * the async context exits. Use this inside generators where you can't wrap\n * yield statements in a callback.\n *\n * Calls to enterWorkspace in nested async contexts will override for that\n * scope only, restoring the outer workspace when the inner scope exits.\n */\nexport function enterWorkspace(workspace: string): void {\n workspaceStorage.enterWith(workspace);\n}\n\n/**\n * Get the current workspace root. Returns process.cwd() when no context is\n * active — preserving the old behavior for direct CLI usage.\n */\nexport function getWorkspace(): string {\n return workspaceStorage.getStore() ?? process.cwd();\n}\n","/**\n * Session-level tool health tracker.\n * Records success/failure per tool so the agent knows which tools are working\n * and can avoid calling broken ones.\n */\n\nexport interface ToolHealthEntry {\n successes: number;\n failures: number;\n lastError?: string;\n lastFailure?: number;\n}\n\nexport class ToolHealthTracker {\n private entries = new Map<string, ToolHealthEntry>();\n\n recordSuccess(toolName: string): void {\n const entry = this.getOrCreate(toolName);\n entry.successes++;\n }\n\n recordFailure(toolName: string, error: string): void {\n const entry = this.getOrCreate(toolName);\n entry.failures++;\n entry.lastError = error;\n entry.lastFailure = Date.now();\n }\n\n /** Tools with 2+ consecutive failures and no recent successes. */\n getUnhealthy(): Array<{ name: string; error: string }> {\n const result: Array<{ name: string; error: string }> = [];\n for (const [name, entry] of this.entries) {\n // Unhealthy: 2+ failures AND failure rate > 50%\n if (entry.failures >= 2 && entry.failures > entry.successes && entry.lastError) {\n result.push({ name, error: entry.lastError });\n }\n }\n return result;\n }\n\n /** Get health summary for all tracked tools. */\n getHealthMap(): Record<string, ToolHealthEntry> {\n return Object.fromEntries(this.entries);\n }\n\n /** Format unhealthy tools as a context string for system prompt injection. */\n formatUnhealthyContext(): string {\n const unhealthy = this.getUnhealthy();\n if (unhealthy.length === 0) return '';\n const items = unhealthy.map((t) => `${t.name}: ${t.error}`).join('; ');\n return `[Unhealthy tools — avoid calling these: ${items}]`;\n }\n\n clear(): void {\n this.entries.clear();\n }\n\n private getOrCreate(toolName: string): ToolHealthEntry {\n let entry = this.entries.get(toolName);\n if (!entry) {\n entry = { successes: 0, failures: 0 };\n this.entries.set(toolName, entry);\n }\n return entry;\n }\n}\n\n/** Global singleton for the current session. */\nlet tracker: ToolHealthTracker | null = null;\n\nexport function getToolHealthTracker(): ToolHealthTracker {\n if (!tracker) tracker = new ToolHealthTracker();\n return tracker;\n}\n\nexport function resetToolHealthTracker(): void {\n tracker = new ToolHealthTracker();\n}\n","import { z } from 'zod';\nimport { defineTool } from '../base.js';\nimport { getCheckpointManager } from '../checkpoint.js';\n\nexport const undoTool = defineTool({\n name: 'undo_last_write',\n description: 'Revert the most recent file write or edit. Optionally specify a file path to revert only that file. Returns { success, revertedFile } or { error }.',\n permission: 'confirm',\n inputSchema: z.object({\n path: z.string().optional().describe('Specific file to revert (optional — defaults to most recent write)'),\n }),\n async execute({ path }) {\n const cp = getCheckpointManager();\n if (!cp) {\n return { error: 'Checkpoint system not initialized. No undo history available.' };\n }\n\n const reverted = cp.revertLast(path);\n if (!reverted) {\n return { error: path ? `No checkpoint found for ${path}` : 'No checkpoints to revert.' };\n }\n\n return { success: true, revertedFile: reverted };\n },\n});\n","import { z } from 'zod';\nimport { defineTool } from '../base.js';\n\n/**\n * Session scratchpad — compaction-resistant notes.\n * Singleton lives here in tools to avoid circular deps with core.\n * Core reads via getScratchpad() export.\n */\nconst entries = new Map<string, string>();\n\nexport function getScratchpadEntries(): Map<string, string> {\n return entries;\n}\n\nexport function clearScratchpad(): void {\n entries.clear();\n}\n\nexport function formatScratchpadContext(): string {\n if (entries.size === 0) return '';\n const items = [...entries].map(([k, v]) => `- ${k}: ${v}`).join('\\n');\n return `[Scratchpad — preserved through compaction]\\n${items}`;\n}\n\nexport const scratchpadWriteTool = defineTool({\n name: 'scratchpad_write',\n description: 'Save a note that survives context compaction. Use for: key decisions, current task state, important constraints. Not for code — for context you must remember.',\n permission: 'auto',\n inputSchema: z.object({\n key: z.string().describe('Note identifier (e.g., \"current_task\", \"decision_drizzle_over_prisma\")'),\n value: z.string().describe('The note content'),\n }),\n async execute({ key, value }) {\n entries.set(key, value);\n return { success: true, key, totalNotes: entries.size };\n },\n});\n\nexport const scratchpadReadTool = defineTool({\n name: 'scratchpad_read',\n description: 'Read scratchpad notes. Omit key to read all notes.',\n permission: 'auto',\n inputSchema: z.object({\n key: z.string().optional().describe('Specific note to read (optional — omit to read all)'),\n }),\n async execute({ key }) {\n if (key) {\n const val = entries.get(key);\n if (!val) return { error: `Note \"${key}\" not found.` };\n return { key, value: val };\n }\n return { notes: Object.fromEntries(entries) };\n },\n});\n","import { z } from \"zod\";\nimport { defineTool } from \"../base.js\";\n\n/**\n * ask_user tool — present interactive choices to the user.\n *\n * When called, emits an event for the TUI to render a SelectPrompt.\n * The user's selection is returned as the tool result. Supports both\n * simple string options and rich options with descriptions.\n */\n\nlet pendingResolver: ((answer: string) => void) | null = null;\n\n/** Called by the CLI when the user answers a question. */\nexport function resolveAskUser(answer: string): void {\n if (pendingResolver) {\n const resolve = pendingResolver;\n pendingResolver = null;\n resolve(answer);\n }\n}\n\n/** Check if there's a pending question waiting for an answer. */\nexport function hasPendingQuestion(): boolean {\n return pendingResolver !== null;\n}\n\nexport const askUserTool = defineTool({\n name: \"ask_user\",\n description:\n \"Ask the user a question with selectable options. Use when you need to clarify requirements, \" +\n \"confirm a direction, or let the user choose between approaches. Present 2-5 clear options. \" +\n \"Mark one as recommended if you have a preference. The user sees an interactive selector.\",\n permission: \"auto\",\n inputSchema: z.object({\n question: z.string().describe(\"The question to ask the user\"),\n options: z\n .array(\n z.object({\n label: z\n .string()\n .describe(\"Short label for the option (shown in selector)\"),\n description: z\n .string()\n .optional()\n .describe(\"Longer description (shown when option is highlighted)\"),\n recommended: z\n .boolean()\n .optional()\n .describe(\"Whether this is the recommended option\"),\n }),\n )\n .min(2)\n .max(6)\n .describe(\"Options for the user to choose from\"),\n }),\n async execute({ question, options }) {\n if (pendingResolver) {\n return {\n error: \"Another question is already pending. Resolve it first.\",\n };\n }\n return new Promise<{ selected: string }>((resolve) => {\n pendingResolver = (answer) => {\n resolve({ selected: answer });\n };\n // Emit event for CLI to display SelectPrompt\n process.emit(\"brainstorm:ask-user\" as any, { question, options } as any);\n });\n },\n});\n","import { z } from 'zod';\nimport { defineTool } from '../base.js';\n\n/**\n * Routing Hint — agent self-selects routing preference for the next turn.\n * The hint is consumed once by the agent loop, then reset.\n */\n\nexport type RoutingPreference = 'cheap' | 'quality' | 'fast' | 'auto';\n\nlet currentHint: RoutingPreference = 'auto';\n\nexport function getRoutingHint(): RoutingPreference {\n return currentHint;\n}\n\n/** Consume the hint (read once, then reset to auto). */\nexport function consumeRoutingHint(): RoutingPreference {\n const hint = currentHint;\n currentHint = 'auto';\n return hint;\n}\n\nexport function resetRoutingHint(): void {\n currentHint = 'auto';\n}\n\nexport const routingHintTool = defineTool({\n name: 'set_routing_hint',\n description: 'Set your preference for the NEXT model selection. Use \"cheap\" for simple reads, \"quality\" for complex refactors, \"fast\" for latency-sensitive work, \"auto\" to let the router decide. Hint is consumed once.',\n permission: 'auto',\n inputSchema: z.object({\n preference: z.enum(['cheap', 'quality', 'fast', 'auto']).describe('Routing preference for the next turn'),\n reason: z.string().optional().describe('Brief reason for the choice'),\n }),\n async execute({ preference, reason }) {\n currentHint = preference;\n return { success: true, preference, message: `Next turn will prefer \"${preference}\" routing.${reason ? ` Reason: ${reason}` : ''}` };\n },\n});\n","import { z } from 'zod';\nimport { defineTool } from '../base.js';\n\n/**\n * Cost Estimate Tool — show estimated costs for different model tiers.\n * Used by the agent before expensive operations to negotiate with the user.\n */\n\nexport const costEstimateTool = defineTool({\n name: 'cost_estimate',\n description: 'Show estimated cost for a task across model tiers (quality, balanced, cheap). Use before expensive operations (>$0.10 estimated) to let the user choose. Returns estimates per tier. Then use ask_user to present choices and set_routing_hint based on their answer.',\n permission: 'auto',\n inputSchema: z.object({\n estimatedInputTokens: z.number().describe('Estimated input tokens for the task'),\n estimatedOutputTokens: z.number().describe('Estimated output tokens for the task'),\n taskDescription: z.string().describe('Brief description of what the task involves'),\n }),\n async execute({ estimatedInputTokens, estimatedOutputTokens, taskDescription }) {\n // Tier pricing estimates (approximate, based on common model pricing)\n const tiers = [\n {\n tier: 'quality',\n models: 'Claude Sonnet 4, GPT-4.1',\n inputPer1M: 3.0,\n outputPer1M: 15.0,\n },\n {\n tier: 'balanced',\n models: 'Claude Haiku, GPT-4.1-mini',\n inputPer1M: 0.80,\n outputPer1M: 4.0,\n },\n {\n tier: 'cheap',\n models: 'GPT-4.1-nano, Gemini Flash',\n inputPer1M: 0.10,\n outputPer1M: 0.40,\n },\n ];\n\n const estimates = tiers.map((t) => {\n const cost = (estimatedInputTokens / 1_000_000) * t.inputPer1M +\n (estimatedOutputTokens / 1_000_000) * t.outputPer1M;\n return {\n tier: t.tier,\n models: t.models,\n estimatedCost: `$${cost.toFixed(4)}`,\n costRaw: cost,\n };\n });\n\n return {\n task: taskDescription,\n estimates,\n recommendation: 'Use ask_user to present these options, then set_routing_hint based on their choice.',\n };\n },\n});\n","import { z } from \"zod\";\nimport { defineTool } from \"../base.js\";\nimport type { ToolRegistry } from \"../registry.js\";\n\n/**\n * Create the tool_search tool — discovers and resolves deferred tools.\n *\n * Deferred tools (MCP servers, GodMode connectors when Code Mode is on,\n * and any plugin that opts in) ship only their names + descriptions until\n * the model resolves them. This keeps the per-prompt tool catalog small.\n *\n * When the model needs a deferred tool, it calls tool_search with\n * keywords. Matched tools have their `deferred` flag cleared, making\n * their full schemas available in subsequent turns.\n */\nexport function createToolSearchTool(registry: ToolRegistry) {\n return defineTool({\n name: \"tool_search\",\n description:\n \"Search for deferred tools by keyword and resolve them for use. Covers MCP server tools, \" +\n \"God Mode connector tools (when Code Mode is enabled), and any plugin tool that ships deferred. \" +\n \"Returns matching tool names and descriptions; resolved tools become available in the next turn. \" +\n 'Use \"select:name1,name2\" to resolve specific tools by exact name when you already know what you need.',\n permission: \"auto\",\n concurrent: true,\n readonly: true,\n inputSchema: z.object({\n query: z\n .string()\n .describe(\n \"Keywords to search for in tool names and descriptions. \" +\n 'Use \"select:name1,name2\" to resolve specific tools by exact name.',\n ),\n max_results: z\n .number()\n .optional()\n .default(5)\n .describe(\"Maximum number of results to return (default: 5).\"),\n }),\n execute: async (input: { query: string; max_results?: number }) => {\n const deferred = registry.listDeferred();\n if (deferred.length === 0) {\n return {\n ok: true,\n message: \"No deferred tools available. All tools are already loaded.\",\n tools: [],\n };\n }\n\n const maxResults = input.max_results ?? 5;\n let matched: Array<{ name: string; description: string }>;\n\n // Direct selection: \"select:tool1,tool2\"\n if (input.query.startsWith(\"select:\")) {\n const names = input.query\n .slice(7)\n .split(\",\")\n .map((n) => n.trim());\n // Exact name match only — substring matching would over-enable privileged tools\n matched = deferred.filter((t) => names.some((n) => t.name === n));\n } else {\n // Keyword search across name + description\n const terms = input.query.toLowerCase().split(/\\s+/);\n const scored = deferred.map((t) => {\n const text = `${t.name} ${t.description}`.toLowerCase();\n let score = 0;\n for (const term of terms) {\n if (text.includes(term)) score++;\n }\n return { ...t, score };\n });\n matched = scored\n .filter((t) => t.score > 0)\n .sort((a, b) => b.score - a.score)\n .slice(0, maxResults);\n }\n\n // Resolve matched tools — clears deferred flag so they appear in next turn\n const resolved: string[] = [];\n for (const tool of matched) {\n if (registry.resolveDeferred(tool.name)) {\n resolved.push(tool.name);\n }\n }\n\n return {\n ok: true,\n message:\n resolved.length > 0\n ? `Resolved ${resolved.length} tool(s). They are now available for use.`\n : \"No matching tools found.\",\n tools: matched.map((t) => ({\n name: t.name,\n description: t.description,\n })),\n resolved,\n totalDeferred: deferred.length,\n };\n },\n });\n}\n","/**\n * Parallel Tool Execution — determines which tools are safe to run concurrently.\n *\n * Tools declare concurrency safety via `concurrent` metadata on BrainstormToolDef.\n * Legacy fallback: hardcoded PARALLEL_SAFE / SEQUENTIAL_REQUIRED sets for tools\n * that haven't declared metadata yet. New tools should always set `concurrent`.\n *\n * The AI SDK v6 handles parallel tool calls natively — this module provides\n * the classification for when the agent loop needs to manage execution order.\n */\n\nimport type { BrainstormToolDef } from \"./base.js\";\n\n/** Legacy fallback: tools known to be safe for parallel execution. */\nconst PARALLEL_SAFE_LEGACY = new Set([\n \"file_read\",\n \"grep\",\n \"glob\",\n \"list_dir\",\n \"git_status\",\n \"git_diff\",\n \"git_log\",\n \"br_status\",\n \"br_budget\",\n \"br_leaderboard\",\n \"br_insights\",\n \"br_models\",\n \"br_memory_search\",\n \"br_health\",\n \"scratchpad_read\",\n \"cost_estimate\",\n \"plan_preview\",\n]);\n\n/** Legacy fallback: tools that must execute sequentially. */\nconst SEQUENTIAL_REQUIRED_LEGACY = new Set([\n \"file_write\",\n \"file_edit\",\n \"multi_edit\",\n \"batch_edit\",\n \"shell\",\n \"git_commit\",\n \"git_branch\",\n \"git_stash\",\n \"gh_pr\",\n \"gh_issue\",\n \"process_spawn\",\n \"process_kill\",\n \"scratchpad_write\",\n \"br_memory_store\",\n \"undo_last_write\",\n \"set_routing_hint\",\n \"ask_user\",\n]);\n\n/** Optional tool registry for metadata-based classification. */\nlet _toolRegistry: Map<string, BrainstormToolDef> | null = null;\n\n/** Set the tool registry for metadata-based parallel classification. */\nexport function setToolRegistryForParallel(\n registry: Map<string, BrainstormToolDef>,\n): void {\n _toolRegistry = registry;\n}\n\n/**\n * Check if a tool is safe to execute in parallel.\n * Priority: tool metadata `concurrent` field > legacy hardcoded sets > default sequential.\n */\nexport function isParallelSafe(toolName: string): boolean {\n // Check tool metadata first (if registry is set)\n if (_toolRegistry) {\n const toolDef = _toolRegistry.get(toolName);\n if (toolDef?.concurrent !== undefined) return toolDef.concurrent;\n }\n // Fall back to legacy hardcoded sets\n return PARALLEL_SAFE_LEGACY.has(toolName);\n}\n\n/** Classify a batch of tool calls into parallel and sequential groups. */\nexport function classifyToolBatch(toolNames: string[]): {\n parallel: string[];\n sequential: string[];\n} {\n const parallel: string[] = [];\n const sequential: string[] = [];\n\n for (const name of toolNames) {\n if (isParallelSafe(name)) {\n parallel.push(name);\n } else {\n sequential.push(name);\n }\n }\n\n return { parallel, sequential };\n}\n\n/**\n * Execute tool calls with parallel optimization.\n * Parallel-safe tools run via Promise.allSettled(), sequential tools run in order.\n */\nexport async function executeWithParallelism<T>(\n calls: Array<{ name: string; execute: () => Promise<T> }>,\n): Promise<Array<{ name: string; result: T; error?: string }>> {\n const { parallel, sequential } = classifyToolBatch(calls.map((c) => c.name));\n const results: Array<{ name: string; result: T; error?: string }> = [];\n\n // Run parallel-safe tools concurrently\n const parallelCalls = calls.filter((c) => parallel.includes(c.name));\n if (parallelCalls.length > 1) {\n const settled = await Promise.allSettled(\n parallelCalls.map(async (c) => ({\n name: c.name,\n result: await c.execute(),\n })),\n );\n for (let i = 0; i < settled.length; i++) {\n const s = settled[i];\n if (s.status === \"fulfilled\") {\n results.push(s.value);\n } else {\n results.push({\n name: parallelCalls[i].name,\n result: null as T,\n error: s.reason?.message ?? \"Failed\",\n });\n }\n }\n } else {\n // Single parallel call — just execute normally\n for (const c of parallelCalls) {\n results.push({ name: c.name, result: await c.execute() });\n }\n }\n\n // Run sequential tools in order\n const sequentialCalls = calls.filter((c) => sequential.includes(c.name));\n for (const c of sequentialCalls) {\n try {\n results.push({ name: c.name, result: await c.execute() });\n } catch (err: any) {\n results.push({ name: c.name, result: null as T, error: err.message });\n }\n }\n\n return results;\n}\n","/**\n * Progressive Tool Loading — load tools by tier based on task complexity.\n *\n * Instead of injecting all 58+ tool descriptions into every system prompt (~4500 tokens),\n * load tools progressively:\n * - minimal (5 tools): simple Q&A, file reads, basic edits\n * - standard (20 tools): code editing, git, search, tasks\n * - full (58+ tools): transactions, undo, BR intelligence, web, batch ops, code graph, memory\n *\n * Inspired by DeerFlow's progressive skill loading, but task-aware:\n * the router's task classifier determines which tier to start with.\n * If the model requests a tool not in the current tier, escalate automatically.\n */\n\nimport type { Complexity } from \"@brainst0rm/shared\";\n\nexport type ToolTier = \"minimal\" | \"standard\" | \"full\";\n\n/** Tools included in each tier. */\nconst TIER_TOOLS: Record<ToolTier, string[]> = {\n minimal: [\"file_read\", \"file_write\", \"file_edit\", \"shell\", \"glob\"],\n standard: [\n // All minimal tools\n \"file_read\",\n \"file_write\",\n \"file_edit\",\n \"shell\",\n \"glob\",\n // Git\n \"git_status\",\n \"git_diff\",\n \"git_log\",\n \"git_commit\",\n \"git_branch\",\n \"git_stash\",\n // Search\n \"grep\",\n \"list_dir\",\n // Multi-file\n \"multi_edit\",\n // Tasks\n \"task_create\",\n \"task_update\",\n \"task_list\",\n // Agent\n \"scratchpad_write\",\n \"scratchpad_read\",\n \"ask_user\",\n ],\n full: [\n // All standard tools\n \"file_read\",\n \"file_write\",\n \"file_edit\",\n \"shell\",\n \"glob\",\n \"git_status\",\n \"git_diff\",\n \"git_log\",\n \"git_commit\",\n \"git_branch\",\n \"git_stash\",\n \"grep\",\n \"list_dir\",\n \"multi_edit\",\n \"task_create\",\n \"task_update\",\n \"task_list\",\n \"scratchpad_write\",\n \"scratchpad_read\",\n \"ask_user\",\n // Batch ops\n \"batch_edit\",\n // GitHub\n \"gh_pr\",\n \"gh_issue\",\n // Web\n \"web_fetch\",\n \"web_search\",\n // Process management\n \"process_spawn\",\n \"process_kill\",\n // Undo + Transactions\n \"undo_last_write\",\n \"begin_transaction\",\n \"commit_transaction\",\n \"rollback_transaction\",\n // Routing + Cost\n \"set_routing_hint\",\n \"cost_estimate\",\n \"plan_preview\",\n // BrainstormRouter intelligence\n \"br_status\",\n \"br_budget\",\n \"br_leaderboard\",\n \"br_insights\",\n \"br_models\",\n \"br_memory_search\",\n \"br_memory_store\",\n \"br_health\",\n ],\n};\n\n/** Map task complexity to initial tool tier. */\nconst COMPLEXITY_TO_TIER: Record<Complexity, ToolTier> = {\n trivial: \"minimal\",\n simple: \"minimal\",\n moderate: \"standard\",\n complex: \"full\",\n expert: \"full\",\n};\n\n/** Get the tool tier for a given task complexity. */\nexport function getTierForComplexity(complexity: Complexity): ToolTier {\n return COMPLEXITY_TO_TIER[complexity];\n}\n\n/** All tool names known to the tier system (built-in tools). */\nconst ALL_TIERED_TOOLS = new Set(TIER_TOOLS.full);\n\n/**\n * Get tool names for a given tier.\n * Always includes dynamically registered tools (God Mode, MCP, plugins)\n * that aren't in any tier — these are the reason the user may be talking\n * to the system and must never be filtered out.\n */\nexport function getToolsForTier(\n tier: ToolTier,\n allRegisteredTools?: string[],\n): string[] {\n const tierTools = TIER_TOOLS[tier];\n if (!allRegisteredTools) return tierTools;\n\n // Include any tool not in the tier system (external/dynamic tools)\n const dynamicTools = allRegisteredTools.filter(\n (name) => !ALL_TIERED_TOOLS.has(name),\n );\n return [...tierTools, ...dynamicTools];\n}\n\n/** Check if a tool is available in the current tier. */\nexport function isToolInTier(toolName: string, tier: ToolTier): boolean {\n return TIER_TOOLS[tier].includes(toolName);\n}\n\n/** Get the next tier up (for escalation). Returns null if already at full. */\nexport function escalateTier(current: ToolTier): ToolTier | null {\n if (current === \"minimal\") return \"standard\";\n if (current === \"standard\") return \"full\";\n return null;\n}\n\n/** Get tier that contains a specific tool (for escalation targeting). */\nexport function getTierForTool(toolName: string): ToolTier | null {\n if (TIER_TOOLS.minimal.includes(toolName)) return \"minimal\";\n if (TIER_TOOLS.standard.includes(toolName)) return \"standard\";\n if (TIER_TOOLS.full.includes(toolName)) return \"full\";\n return null; // Unknown tool (plugin or MCP)\n}\n\n/** Get token estimate saved by using a lower tier. */\nexport function estimateTokenSavings(currentTier: ToolTier): {\n toolsOmitted: number;\n estimatedTokensSaved: number;\n} {\n const fullCount = TIER_TOOLS.full.length;\n const currentCount = TIER_TOOLS[currentTier].length;\n const omitted = fullCount - currentCount;\n // Average tool description ~70 tokens (name + description + schema)\n return { toolsOmitted: omitted, estimatedTokensSaved: omitted * 70 };\n}\n","/**\n * Docker Sandbox — isolated execution environment for shell commands.\n *\n * Routes shell commands to a Docker container instead of the host.\n * Path translation maps between host workspace and container /workspace/.\n *\n * Uses execFileSync exclusively (no shell injection risk).\n */\n\nimport { execFileSync } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\n\nexport interface SandboxConfig {\n image: string;\n hostWorkspace: string;\n containerWorkspace: string;\n timeout: number;\n}\n\nexport interface SandboxExecResult {\n output: string;\n exitCode: number;\n durationMs: number;\n}\n\nconst DEFAULT_CONFIG: Partial<SandboxConfig> = {\n image: \"node:22-slim\",\n containerWorkspace: \"/workspace\",\n timeout: 120000,\n};\n\n/** Generate per-invocation sentinel to prevent output spoofing. */\nfunction makeSentinel(): string {\n return `,,BRAINSTORM_EXIT_${randomUUID().replace(/-/g, \"\")},,`;\n}\n\nexport class DockerSandbox {\n private config: SandboxConfig;\n private containerId: string | null = null;\n\n constructor(config: Partial<SandboxConfig> & { hostWorkspace: string }) {\n this.config = { ...DEFAULT_CONFIG, ...config } as SandboxConfig;\n }\n\n static isAvailable(): boolean {\n try {\n execFileSync(\"docker\", [\"info\"], {\n encoding: \"utf-8\",\n timeout: 5000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n return true;\n } catch {\n return false;\n }\n }\n\n start(): void {\n if (this.containerId) return;\n\n // Hardening flags — see v9 assessment's Attacker finding. Pre-fix,\n // `container` mode spawned a privileged root container with bridge\n // networking and no resource limits, so a compromised agent inside\n // could (a) exfiltrate via any outbound protocol, (b) fork-bomb\n // the host, (c) trash files via root uid 0, (d) gain new\n // privileges through setuid binaries. Each flag below closes\n // exactly one of those paths; the bind mount is deliberately\n // kept read-write because workspace-editing IS the product and\n // the container is already trust-scoped to the user's own code.\n try {\n const output = execFileSync(\n \"docker\",\n [\n \"run\",\n \"-d\",\n \"--name\",\n // randomUUID over Date.now() kills the predictable-name\n // enumeration the v9 Attacker flagged.\n `brainstorm-sandbox-${randomUUID()}`,\n // No network by default. Agent-generated `curl`/`nc`/DNS\n // exfiltration can't leave the container. If a specific\n // workflow needs network (e.g. `npm install`), the caller\n // should explicitly construct a network-enabled sandbox\n // — not paper over a silent default.\n \"--network=none\",\n // Drop to unprivileged UID. Typical image has uid 1000\n // available; if not, the container fails fast (better than\n // silent root).\n \"--user=1000:1000\",\n // Drop every Linux capability. A shell doesn't need\n // CAP_NET_ADMIN, CAP_SYS_PTRACE, etc.\n \"--cap-drop=ALL\",\n // Block setuid/setgid privilege escalation via the kernel\n // no_new_privs bit.\n \"--security-opt=no-new-privileges\",\n // Hard ceilings for resource exhaustion. Values picked to\n // match a typical CI box — a real workload may need\n // tuning via DockerSandbox config.\n \"--memory=2g\",\n \"--cpus=2\",\n \"--pids-limit=256\",\n // Workspace mount stays read-write because file edits are\n // the core use case. A compromised agent still can't\n // escape the mount — everything outside /workspace is\n // inaccessible (thanks --cap-drop + --user + --read-only\n // elsewhere would close it entirely if writes ever move to\n // tmpfs).\n \"-v\",\n `${this.config.hostWorkspace}:${this.config.containerWorkspace}`,\n \"-w\",\n this.config.containerWorkspace,\n this.config.image,\n \"tail\",\n \"-f\",\n \"/dev/null\",\n ],\n {\n encoding: \"utf-8\",\n timeout: 30000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n },\n );\n\n this.containerId = output.trim();\n } catch (err: any) {\n throw new Error(`Failed to start Docker sandbox: ${err.message}`);\n }\n }\n\n exec(command: string): SandboxExecResult {\n if (!this.containerId) {\n throw new Error(\"Sandbox not started. Call start() first.\");\n }\n\n const start = Date.now();\n\n try {\n const sentinel = makeSentinel();\n const wrappedCommand = `${command}; echo \"${sentinel}$?\"`;\n\n const output = execFileSync(\n \"docker\",\n [\"exec\", this.containerId, \"/bin/sh\", \"-c\", wrappedCommand],\n {\n encoding: \"utf-8\",\n timeout: this.config.timeout,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n },\n );\n\n const durationMs = Date.now() - start;\n\n const sentinelIdx = output.lastIndexOf(sentinel);\n let exitCode = 0;\n let cleanOutput = output;\n\n if (sentinelIdx >= 0) {\n const codeStr = output.slice(sentinelIdx + sentinel.length).trim();\n const parsed = parseInt(codeStr, 10);\n exitCode = Number.isNaN(parsed) ? 1 : parsed;\n cleanOutput = output.slice(0, sentinelIdx).trimEnd();\n }\n\n cleanOutput = maskHostPaths(\n cleanOutput,\n this.config.hostWorkspace,\n this.config.containerWorkspace,\n );\n\n return { output: cleanOutput, exitCode, durationMs };\n } catch (err: any) {\n return {\n output: err.stderr ?? err.message,\n exitCode: err.status ?? 1,\n durationMs: Date.now() - start,\n };\n }\n }\n\n stop(): void {\n if (!this.containerId) return;\n\n try {\n execFileSync(\"docker\", [\"rm\", \"-f\", this.containerId], {\n encoding: \"utf-8\",\n timeout: 10000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n } catch {\n /* best effort */\n }\n\n this.containerId = null;\n }\n\n isRunning(): boolean {\n return this.containerId !== null;\n }\n\n getContainerId(): string | null {\n return this.containerId;\n }\n}\n\nconst SAFE_COMMANDS = [\n /^cat\\b/,\n /^head\\b/,\n /^tail\\b/,\n /^wc\\b/,\n /^echo\\b/,\n /^ls\\b/,\n /^pwd\\b/,\n /^which\\b/,\n /^whoami\\b/,\n /^grep\\b/,\n /^rg\\b/,\n /^find\\b/,\n /^fd\\b/,\n /^git\\s+(status|diff|log|show|blame|branch)\\b/,\n /^node\\s+--version/,\n /^npm\\s+--version/,\n];\n\nexport function isSafeCommand(command: string): boolean {\n const trimmed = command.trim();\n return SAFE_COMMANDS.some((pattern) => pattern.test(trimmed));\n}\n\nexport function translatePath(\n path: string,\n hostWorkspace: string,\n containerWorkspace: string,\n): string {\n if (path.startsWith(hostWorkspace + \"/\") || path === hostWorkspace) {\n // Function-form replacement — containerWorkspace could\n // contain `$` and String.replace's string form would interpret\n // $1/$&/etc. as backreferences, corrupting the translated path.\n // Default container workspace is \"/workspace\" (no $), but the\n // constructor accepts overrides.\n return path.replace(hostWorkspace, () => containerWorkspace);\n }\n return path;\n}\n\nfunction maskHostPaths(\n output: string,\n hostWorkspace: string,\n containerWorkspace: string,\n): string {\n // Function form — containerWorkspace might contain `$` in custom\n // configs, and String.replaceAll's string form would interpret\n // $1/$&/etc. Defaults are $-free but don't rely on that.\n return output.replaceAll(hostWorkspace, () => containerWorkspace);\n}\n","import { z } from 'zod';\nimport { defineTool } from '../base.js';\n\n/**\n * Plan Preview Tool — format a multi-step plan for display.\n * The agent calls this to structure its plan, then uses ask_user\n * to present it and get approval.\n */\n\nexport const planPreviewTool = defineTool({\n name: 'plan_preview',\n description: 'Format a multi-step plan for presentation to the user. Returns a formatted plan string. After calling this, use ask_user to present the plan and get approval before executing.',\n permission: 'auto',\n inputSchema: z.object({\n summary: z.string().describe('One-line summary of the overall task'),\n steps: z.array(z.object({\n description: z.string().describe('What this step does'),\n tools: z.array(z.string()).describe('Tools that will be used'),\n })).describe('Ordered list of planned steps'),\n estimatedCost: z.string().optional().describe('Estimated total cost (e.g., \"$0.08\")'),\n }),\n async execute({ summary, steps, estimatedCost }) {\n const lines = [`Plan: ${summary}`, ''];\n steps.forEach((s, i) => {\n lines.push(` ${i + 1}. ${s.description}`);\n lines.push(` Tools: ${s.tools.join(', ')}`);\n });\n if (estimatedCost) {\n lines.push('');\n lines.push(`Estimated cost: ${estimatedCost}`);\n }\n lines.push('');\n lines.push(`Total steps: ${steps.length}`);\n\n return {\n formattedPlan: lines.join('\\n'),\n stepCount: steps.length,\n instruction: 'Present this plan to the user via ask_user with options [\"Proceed\", \"Adjust\", \"Skip\"]. If approved, execute the steps.',\n };\n },\n});\n","import { tool } from \"ai\";\nimport type { ToolPermission } from \"@brainst0rm/shared\";\nimport type { BrainstormToolDef } from \"./base.js\";\nimport { getToolHealthTracker } from \"./tool-health.js\";\n\nexport type PermissionCheckFn = (\n toolName: string,\n toolPermission: ToolPermission,\n) => \"allow\" | \"confirm\" | \"deny\";\n\n/**\n * Sliding-window rate limiter per tool.\n * Prevents runaway loops from exhausting resources by capping calls/minute.\n */\nexport class ToolRateLimiter {\n private windows = new Map<string, number[]>();\n private maxPerMinute: number;\n\n constructor(maxPerMinute = 20) {\n this.maxPerMinute = maxPerMinute;\n }\n\n /** Returns true if the call is allowed, false if rate-limited. */\n check(toolName: string): boolean {\n const now = Date.now();\n const cutoff = now - 60_000;\n let timestamps = this.windows.get(toolName);\n if (!timestamps) {\n timestamps = [];\n this.windows.set(toolName, timestamps);\n }\n // Evict old entries\n while (timestamps.length > 0 && timestamps[0] < cutoff) {\n timestamps.shift();\n }\n if (timestamps.length >= this.maxPerMinute) {\n return false;\n }\n timestamps.push(now);\n return true;\n }\n\n /** Reset all windows (e.g., on session start). */\n reset(): void {\n this.windows.clear();\n }\n}\n\nlet _rateLimiter: ToolRateLimiter | null = null;\n\nexport function getToolRateLimiter(): ToolRateLimiter {\n if (!_rateLimiter) _rateLimiter = new ToolRateLimiter();\n return _rateLimiter;\n}\n\n/**\n * Normalize tool results into a consistent format the model can parse.\n * Wraps the raw result to always include an `ok` field for reliable success/failure detection.\n */\nfunction normalizeResult(raw: any): any {\n if (raw == null) return { ok: true };\n\n // Already has 'error' or 'message' key → it's a failure\n if (raw.error) {\n return { ok: false, error: raw.error, ...raw };\n }\n if (raw.message && !raw.ok && !(\"exitCode\" in raw)) {\n return { ok: false, error: raw.message, ...raw };\n }\n\n // Shell tool: check exitCode\n if (\"exitCode\" in raw && raw.exitCode !== 0) {\n return {\n ok: false,\n error: raw.stderr || `Exit code ${raw.exitCode}`,\n ...raw,\n };\n }\n\n // Blocked tool\n if (raw.blocked) {\n return {\n ok: false,\n error: raw.error ?? raw.stderr ?? \"Tool blocked\",\n ...raw,\n };\n }\n\n // Everything else is success\n return { ok: true, ...raw };\n}\n\nexport class ToolRegistry {\n private tools = new Map<string, BrainstormToolDef>();\n\n register(tool: BrainstormToolDef): void {\n this.tools.set(tool.name, tool);\n }\n\n unregister(name: string): void {\n this.tools.delete(name);\n }\n\n get(name: string): BrainstormToolDef | undefined {\n return this.tools.get(name);\n }\n\n getAll(): BrainstormToolDef[] {\n return Array.from(this.tools.values());\n }\n\n toAISDKTools(): Record<string, ReturnType<BrainstormToolDef[\"toAISDKTool\"]>> {\n const result: Record<string, any> = {};\n for (const [name, tool] of this.tools) {\n // Skip deferred tools — they're not available until resolved via tool_search\n if (tool.deferred) continue;\n result[name] = tool.toAISDKTool();\n }\n return result;\n }\n\n /** Resolve a deferred tool, making it available in toAISDKTools() output. */\n resolveDeferred(name: string): boolean {\n const tool = this.tools.get(name);\n if (!tool || !tool.deferred) return false;\n tool.deferred = false;\n return true;\n }\n\n /** List deferred (not yet resolved) tools — for tool_search results. */\n listDeferred(): Array<{ name: string; description: string }> {\n return Array.from(this.tools.values())\n .filter((t) => t.deferred)\n .map((t) => ({ name: t.name, description: t.description }));\n }\n\n /**\n * Return AI SDK tools filtered to only the named tools.\n * Used by subagent types to restrict tool access.\n */\n toAISDKToolsFiltered(\n allowedNames: string[],\n ): Record<string, ReturnType<BrainstormToolDef[\"toAISDKTool\"]>> {\n const allowed = new Set(allowedNames);\n const result: Record<string, any> = {};\n for (const [name, tool] of this.tools) {\n if (tool.deferred) continue; // skip deferred even if named\n if (allowed.has(name)) {\n result[name] = tool.toAISDKTool();\n }\n }\n return result;\n }\n\n getPermitted(\n overrides?: Record<string, ToolPermission>,\n ): Record<string, any> {\n const result: Record<string, any> = {};\n for (const [name, tool] of this.tools) {\n const permission = overrides?.[name] ?? tool.permission;\n if (permission !== \"deny\") {\n result[name] = tool.toAISDKTool();\n }\n }\n return result;\n }\n\n /**\n * Return AI SDK tools with permission checks wrapping each execute.\n * Tools denied by the check return an error message instead of executing.\n */\n toAISDKToolsWithPermissions(\n check: PermissionCheckFn,\n allowedNames?: string[],\n ): Record<string, any> {\n const allowed = allowedNames ? new Set(allowedNames) : null;\n const result: Record<string, any> = {};\n for (const [name, toolDef] of this.tools) {\n if (toolDef.deferred) continue; // skip deferred tools\n if (allowed && !allowed.has(name)) continue;\n // MCP tools lack inputSchema — wrap with permission gate before delegating\n if (!toolDef.inputSchema) {\n const rawTool = toolDef.toAISDKTool();\n if (rawTool.execute) {\n const originalExecute = rawTool.execute;\n (rawTool as any).execute = async (input: any, opts: any) => {\n const decision = check(name, toolDef.permission);\n if (decision === \"deny\") {\n return {\n error: `Tool '${name}' is blocked in the current permission mode.`,\n blocked: true,\n };\n }\n return originalExecute(input, opts);\n };\n }\n result[name] = rawTool;\n continue;\n }\n result[name] = tool({\n description: toolDef.description,\n inputSchema: toolDef.inputSchema,\n execute: async (input: any) => {\n const decision = check(name, toolDef.permission);\n if (decision === \"deny\") {\n const result = normalizeResult({\n error: `Tool '${name}' is blocked in the current permission mode.`,\n blocked: true,\n });\n getToolHealthTracker().recordFailure(name, result.error);\n return result;\n }\n if (!getToolRateLimiter().check(name)) {\n const msg = `Tool '${name}' rate-limited (max ${getToolRateLimiter()[\"maxPerMinute\"]}/min). Wait before retrying.`;\n getToolHealthTracker().recordFailure(name, msg);\n return normalizeResult({ error: msg, blocked: true });\n }\n try {\n const raw = await toolDef.execute(input);\n const result = normalizeResult(raw);\n if (result.ok) {\n getToolHealthTracker().recordSuccess(name);\n } else {\n getToolHealthTracker().recordFailure(\n name,\n result.error ?? \"unknown error\",\n );\n }\n return result;\n } catch (err: any) {\n const result = normalizeResult({\n error: err.message ?? String(err),\n });\n getToolHealthTracker().recordFailure(name, result.error);\n return result;\n }\n },\n });\n }\n return result;\n }\n\n listTools(): Array<{\n name: string;\n description: string;\n permission: ToolPermission;\n }> {\n return this.getAll().map((t) => ({\n name: t.name,\n description: t.description,\n permission: t.permission,\n }));\n }\n}\n","import { z } from \"zod\";\nimport { readFileSync, existsSync } from \"node:fs\";\nimport { resolve, relative } from \"node:path\";\nimport { defineTool } from \"../base.js\";\nimport { getWorkspace } from \"../workspace-context.js\";\nimport { assertNotSensitivePath } from \"./sensitive-paths.js\";\n\nimport { homedir } from \"node:os\";\n\nfunction ensureSafePath(filePath: string): string {\n const cwd = getWorkspace();\n const resolved = resolve(cwd, filePath);\n const home = homedir();\n\n // Block credential files BEFORE the home-dir allowance below. The\n // prior version allowed anything under $HOME including ~/.ssh/,\n // ~/.aws/, etc. — making file_read a prompt-injection exfiltration\n // vector that the shell sandbox already closed at the command level.\n assertNotSensitivePath(resolved);\n\n // Allow: paths within cwd OR within home directory OR safe tmp workspaces.\n // macOS tmpdir lives at /var/folders/... so /var is not blanket-blocked.\n const isSafeTmpVar =\n resolved.startsWith(\"/var/folders/\") ||\n resolved.startsWith(\"/private/var/folders/\") ||\n resolved.startsWith(\"/var/tmp/\") ||\n resolved.startsWith(\"/private/var/tmp/\") ||\n // Linux tmpdir. os.tmpdir() returns `/tmp` on Linux, not `/var/tmp`;\n // without this, file_read/edit/write on any Linux host (including\n // GitHub Actions Ubuntu runners) could never read tmp files — a\n // silent break that CI caught via the sensitive-paths false-\n // positive guard.\n resolved === \"/tmp\" ||\n resolved.startsWith(\"/tmp/\");\n if (!isSafeTmpVar && resolved.startsWith(\"/var\")) {\n throw new Error(`Path blocked: \"${filePath}\" is a protected system path`);\n }\n const BLOCKED_PREFIXES = [\n \"/etc\",\n \"/usr\",\n \"/proc\",\n \"/sys\",\n \"/dev\",\n \"/sbin\",\n \"/boot\",\n ];\n if (BLOCKED_PREFIXES.some((p) => resolved.startsWith(p))) {\n throw new Error(`Path blocked: \"${filePath}\" is a protected system path`);\n }\n\n const isInHome = resolved.startsWith(home);\n const isInCwd = !relative(cwd, resolved).startsWith(\"..\");\n if (!isInHome && !isInCwd && !isSafeTmpVar) {\n throw new Error(\n `Path blocked: \"${filePath}\" is outside home directory and workspace`,\n );\n }\n\n return resolved;\n}\n\nexport const fileReadTool = defineTool({\n name: \"file_read\",\n description:\n \"Read the contents of a file. Supports absolute paths within the home directory (~/Projects, ~/Desktop, etc.) and relative paths within the project. Use `limit` and `offset` for large files — default reads the full file. Returns { content, totalLines } on success, { error } on failure.\",\n permission: \"auto\",\n inputSchema: z.object({\n path: z.string().describe(\"Absolute or relative path to the file to read\"),\n limit: z.number().optional().describe(\"Maximum number of lines to read\"),\n offset: z\n .number()\n .optional()\n .describe(\"Line number to start reading from (1-based)\"),\n }),\n async execute({ path, limit, offset }) {\n let safePath: string;\n try {\n safePath = ensureSafePath(path);\n } catch (e: any) {\n return { error: e.message };\n }\n\n if (!existsSync(safePath)) {\n return { error: `File not found: ${path}` };\n }\n // Track file access\n const { getFileTracker } = await import(\"../file-tracker.js\");\n getFileTracker().recordRead(safePath);\n\n // Check cache first to avoid redundant disk reads\n const { getFileReadCache } = await import(\"../file-cache.js\");\n const cache = getFileReadCache();\n let content = cache.get(safePath);\n if (content === null) {\n content = readFileSync(safePath, \"utf-8\");\n cache.set(safePath, content);\n }\n const lines = content.split(\"\\n\");\n\n const start = (offset ?? 1) - 1;\n const end = limit ? start + limit : lines.length;\n const selected = lines.slice(start, end);\n\n return {\n content: selected\n .map((line, i) => `${start + i + 1}\\t${line}`)\n .join(\"\\n\"),\n totalLines: lines.length,\n };\n },\n});\n","/**\n * Sensitive-file path enforcement for file tools.\n *\n * Shared with sandbox.ts's shell-sandbox checks, but applied at a\n * different layer: the shell sandbox checks the RAW command string,\n * this module checks the RESOLVED absolute path of a direct file\n * tool call.\n *\n * Why both exist: a prompt injection can reach a credential file\n * via either `shell(\"cat ~/.ssh/id_rsa\")` (caught by sandbox.ts) OR\n * `file_read(\"/Users/alice/.ssh/id_rsa\")` (caught here). Before this\n * module existed, `ensureSafePath()` in file-read.ts / file-edit.ts /\n * file-write.ts allowed anything under `$HOME` — including\n * credential directories. F5 closed the shell path; this closes the\n * file-tool path.\n *\n * The patterns run against the RESOLVED absolute path (after symlink\n * resolution would be ideal but `resolve()` doesn't follow symlinks\n * synchronously; realpath is a post-exec check the caller can layer).\n */\n\nimport { homedir } from \"node:os\";\n\n/**\n * Compile a list of absolute path prefixes that should never be\n * readable/writable through the file tools, regardless of whether\n * they fall under the user's home dir.\n *\n * Computed once at module load — the patterns are based on homedir()\n * which doesn't change mid-process, and re-generating them per call\n * would show up on hot paths (every file_read).\n */\nfunction buildBlockedPaths(): Array<{ prefix: string; reason: string }> {\n const home = homedir();\n const blocked: Array<{ prefix: string; reason: string }> = [\n {\n prefix: `${home}/.ssh/`,\n reason:\n \"Reading ~/.ssh/* is blocked (SSH private keys). If this file tool genuinely needs SSH access, route through the shell with sandbox='container'.\",\n },\n {\n prefix: `${home}/.aws/credentials`,\n reason: \"Reading ~/.aws/credentials is blocked (cloud creds).\",\n },\n {\n prefix: `${home}/.aws/config`,\n reason:\n \"Reading ~/.aws/config is blocked (may contain MFA / profile info).\",\n },\n {\n prefix: `${home}/.netrc`,\n reason: \"Reading ~/.netrc is blocked (remote auth tokens).\",\n },\n {\n prefix: `${home}/.config/op/`,\n reason: \"Reading ~/.config/op/* is blocked (1Password CLI config).\",\n },\n {\n prefix: `${home}/.gnupg/`,\n reason: \"Reading ~/.gnupg/* is blocked (GPG keyring).\",\n },\n {\n prefix: `${home}/.docker/config.json`,\n reason:\n \"Reading ~/.docker/config.json is blocked (registry auth tokens).\",\n },\n {\n prefix: `${home}/.npmrc`,\n reason: \"Reading ~/.npmrc is blocked (may contain auth tokens).\",\n },\n // macOS root-user home\n {\n prefix: \"/var/root/.ssh/\",\n reason: \"Reading /var/root/.ssh/* is blocked (root user SSH keys).\",\n },\n // Traditional Linux/BSD credential locations outside $HOME\n {\n prefix: \"/etc/shadow\",\n reason: \"Reading /etc/shadow is blocked (password hashes).\",\n },\n {\n prefix: \"/etc/sudoers\",\n reason: \"Reading /etc/sudoers is blocked (sudoers policy).\",\n },\n ];\n return blocked;\n}\n\nconst BLOCKED_PATHS = buildBlockedPaths();\n\n/**\n * Throw if the resolved absolute path matches a known credential\n * location. Intended to be called from `ensureSafePath()` in the\n * file tools after resolution but before any fs access.\n */\nexport function assertNotSensitivePath(resolvedPath: string): void {\n for (const { prefix, reason } of BLOCKED_PATHS) {\n // Direct prefix match catches both the directory form (ssh/)\n // and the exact-file form (.npmrc, .netrc).\n if (\n resolvedPath === prefix ||\n resolvedPath.startsWith(prefix) ||\n // For exact-file prefixes (e.g. `.npmrc`), a file named\n // exactly at that path should match without a trailing slash.\n resolvedPath === prefix.replace(/\\/$/, \"\")\n ) {\n throw new Error(`Path blocked: ${reason}`);\n }\n }\n}\n","import { z } from \"zod\";\nimport { writeFileSync, mkdirSync, renameSync, unlinkSync } from \"node:fs\";\nimport { dirname, resolve, relative } from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nimport { defineTool } from \"../base.js\";\nimport { getWorkspace } from \"../workspace-context.js\";\nimport { assertNotSensitivePath } from \"./sensitive-paths.js\";\n\nimport { homedir } from \"node:os\";\n\nfunction ensureSafePath(filePath: string): string {\n // Use the subagent's workspace context if set, else fall back to cwd.\n // This fixes SWE-bench / orchestration runs where the agent should write\n // into a cloned repo, not the parent CLI's working directory.\n const cwd = getWorkspace();\n const resolved = resolve(cwd, filePath);\n const home = homedir();\n\n // Block credential files (e.g. overwriting ~/.ssh/id_rsa via file_write\n // would be just as bad as reading it). See sensitive-paths.ts.\n assertNotSensitivePath(resolved);\n\n // Block system paths.\n // Note: /var is NOT blocked because macOS tmpdir lives at /var/folders/...\n // (symlinked from /private/var/folders). We explicitly allow /var/folders\n // and /private/var/folders as temp workspaces; other /var/* stays blocked.\n const BLOCKED_PREFIXES = [\n \"/etc\",\n \"/usr\",\n \"/proc\",\n \"/sys\",\n \"/dev\",\n \"/sbin\",\n \"/boot\",\n ];\n // Extra /var handling: block unless inside /var/folders (macOS tmp)\n // or /var/tmp (Linux-ish tmp).\n const isSafeTmpVar =\n resolved.startsWith(\"/var/folders/\") ||\n resolved.startsWith(\"/private/var/folders/\") ||\n resolved.startsWith(\"/var/tmp/\") ||\n resolved.startsWith(\"/private/var/tmp/\") ||\n // Linux tmpdir — see file-read.ts.\n resolved === \"/tmp\" ||\n resolved.startsWith(\"/tmp/\");\n if (!isSafeTmpVar && resolved.startsWith(\"/var\")) {\n throw new Error(`Path blocked: \"${filePath}\" is a protected system path`);\n }\n if (BLOCKED_PREFIXES.some((p) => resolved.startsWith(p))) {\n throw new Error(`Path blocked: \"${filePath}\" is a protected system path`);\n }\n\n // Allow within home dir, within cwd, or within a tmp workspace.\n // macOS symlinks /var/folders → /private/var/folders, so resolve() may\n // return either form depending on the OS resolver. Check both.\n const isInHome = resolved.startsWith(home);\n const isInCwd = !relative(cwd, resolved).startsWith(\"..\");\n const isInTmp = isSafeTmpVar; // tmp workspaces are allowed too\n if (!isInHome && !isInCwd && !isInTmp) {\n throw new Error(\n `Path blocked: \"${filePath}\" is outside home directory and workspace`,\n );\n }\n\n return resolved;\n}\n\nexport const fileWriteTool = defineTool({\n name: \"file_write\",\n description:\n \"Write content to a file, creating it if it does not exist. Creates parent directories as needed. Supports absolute paths within home directory. Returns { success, path, bytesWritten } on success, { error } on failure.\",\n permission: \"confirm\",\n inputSchema: z.object({\n path: z.string().describe(\"Path to the file to write\"),\n content: z.string().describe(\"The content to write to the file\"),\n }),\n async execute({ path, content }) {\n let safePath: string;\n try {\n safePath = ensureSafePath(path);\n } catch (e: any) {\n return { error: e.message };\n }\n\n // Snapshot before overwriting (if file exists)\n const { getCheckpointManager } = await import(\"../checkpoint.js\");\n const cp = getCheckpointManager();\n if (cp) cp.snapshot(safePath);\n\n // Pre-validate content before writing (non-blocking)\n const { preValidate } = await import(\"../pre-validate.js\");\n const validation = preValidate(safePath, content);\n\n mkdirSync(dirname(safePath), { recursive: true });\n\n // Atomic write: write to temp file, then rename to target.\n // Prevents partial writes on crash/interrupt.\n const tmpPath = `${safePath}.${randomUUID().slice(0, 8)}.tmp`;\n try {\n writeFileSync(tmpPath, content, \"utf-8\");\n renameSync(tmpPath, safePath);\n } catch (e) {\n try {\n unlinkSync(tmpPath);\n } catch {\n /* best-effort cleanup of temp file */\n }\n throw e;\n }\n\n // Invalidate read cache for this file\n const { getFileReadCache } = await import(\"../file-cache.js\");\n getFileReadCache().invalidate(safePath);\n\n // Track file access\n const { getFileTracker } = await import(\"../file-tracker.js\");\n getFileTracker().recordWrite(safePath);\n\n // Track in active transaction\n const { recordTransactionFile } = await import(\"./transaction.js\");\n recordTransactionFile(safePath);\n\n // Diff preview (non-blocking)\n const { getDiffSummary } = await import(\"../diff-preview.js\");\n const diff = getDiffSummary(safePath);\n\n return {\n success: true,\n path,\n bytesWritten: Buffer.byteLength(content),\n ...(validation.warnings.length > 0\n ? { preValidation: validation.warnings }\n : {}),\n ...(diff ? { diff: diff.preview } : {}),\n };\n },\n});\n","import { z } from \"zod\";\nimport { readFileSync, writeFileSync, existsSync } from \"node:fs\";\nimport { resolve, relative } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { defineTool } from \"../base.js\";\nimport { getWorkspace } from \"../workspace-context.js\";\nimport { assertNotSensitivePath } from \"./sensitive-paths.js\";\n\nfunction ensureSafePath(filePath: string): string {\n const cwd = getWorkspace();\n const resolved = resolve(cwd, filePath);\n const home = homedir();\n\n // Block credential files before the home-dir allowance — see\n // file-read.ts / sensitive-paths.ts for the rationale.\n assertNotSensitivePath(resolved);\n\n // /var is NOT blocked because macOS tmpdir is /var/folders/... — see file-write.ts\n const isSafeTmpVar =\n resolved.startsWith(\"/var/folders/\") ||\n resolved.startsWith(\"/private/var/folders/\") ||\n resolved.startsWith(\"/var/tmp/\") ||\n resolved.startsWith(\"/private/var/tmp/\") ||\n // Linux tmpdir — see file-read.ts.\n resolved === \"/tmp\" ||\n resolved.startsWith(\"/tmp/\");\n if (!isSafeTmpVar && resolved.startsWith(\"/var\")) {\n throw new Error(`Path blocked: \"${filePath}\" is a protected system path`);\n }\n const BLOCKED_PREFIXES = [\n \"/etc\",\n \"/usr\",\n \"/proc\",\n \"/sys\",\n \"/dev\",\n \"/sbin\",\n \"/boot\",\n ];\n if (BLOCKED_PREFIXES.some((p) => resolved.startsWith(p))) {\n throw new Error(`Path blocked: \"${filePath}\" is a protected system path`);\n }\n\n const isInHome = resolved.startsWith(home);\n const isInCwd = !relative(cwd, resolved).startsWith(\"..\");\n if (!isInHome && !isInCwd && !isSafeTmpVar) {\n throw new Error(\n `Path blocked: \"${filePath}\" is outside home directory and workspace`,\n );\n }\n\n return resolved;\n}\n\n/**\n * Find the closest matching substring in the file content.\n * Uses the first line of old_string to find candidate locations,\n * then returns surrounding context.\n */\nfunction findClosestMatch(content: string, oldString: string): string | null {\n // Use the first non-empty line as a search anchor\n const lines = oldString.split(\"\\n\").filter((l) => l.trim().length > 0);\n if (lines.length === 0) return null;\n\n const firstLine = lines[0].trim();\n if (firstLine.length < 5) return null; // Too short to be useful\n\n // Search for the first line (case-insensitive, trimmed)\n const contentLines = content.split(\"\\n\");\n let bestIdx = -1;\n let bestScore = 0;\n\n for (let i = 0; i < contentLines.length; i++) {\n const trimmed = contentLines[i].trim();\n // Exact match of first line\n if (trimmed === firstLine) {\n bestIdx = i;\n bestScore = 100;\n break;\n }\n // Partial match — check if the line contains most of the search\n if (trimmed.includes(firstLine.slice(0, Math.min(30, firstLine.length)))) {\n if (bestScore < 50) {\n bestIdx = i;\n bestScore = 50;\n }\n }\n }\n\n if (bestIdx === -1) return null;\n\n // Return context: 2 lines before + match area + 2 lines after\n const numLines = oldString.split(\"\\n\").length;\n const start = Math.max(0, bestIdx - 1);\n const end = Math.min(contentLines.length, bestIdx + numLines + 1);\n const context = contentLines.slice(start, end);\n\n return context.map((l, i) => `${start + i + 1}\\t${l}`).join(\"\\n\");\n}\n\nexport const fileEditTool = defineTool({\n name: \"file_edit\",\n description:\n \"Perform a surgical string replacement in a file. The old_string must match exactly one location. Returns { success, replacements } or { error }. Supports absolute paths within home directory.\",\n permission: \"confirm\",\n inputSchema: z.object({\n path: z.string().describe(\"Path to the file to edit\"),\n old_string: z.string().describe(\"The exact string to find and replace\"),\n new_string: z.string().describe(\"The replacement string\"),\n }),\n async execute({ path, old_string, new_string }) {\n let safePath: string;\n try {\n safePath = ensureSafePath(path);\n } catch (e: any) {\n return { error: e.message };\n }\n\n if (!existsSync(safePath)) {\n return { error: `File not found: ${path}` };\n }\n const content = readFileSync(safePath, \"utf-8\");\n const occurrences = content.split(old_string).length - 1;\n\n if (occurrences === 0) {\n // Try to find the closest match for recovery\n const suggestion = findClosestMatch(content, old_string);\n if (suggestion) {\n return {\n error: \"old_string not found in file\",\n suggestion: `Closest match found:\\n${suggestion}`,\n };\n }\n return { error: \"old_string not found in file\" };\n }\n if (occurrences > 1) {\n return {\n error: `old_string found ${occurrences} times — must be unique. Provide more surrounding context.`,\n };\n }\n\n // Snapshot before editing\n const { getCheckpointManager } = await import(\"../checkpoint.js\");\n const cp = getCheckpointManager();\n if (cp) cp.snapshot(safePath);\n\n // Function-form replacement so $1/$&/etc. in new_string don't get\n // interpreted as regex backreferences. Agent-generated content\n // often contains literal `$` (shell vars, regex patterns, jQuery,\n // template literals) and losing them silently corrupts the write.\n const updated = content.replace(old_string, () => new_string);\n\n // Pre-validate content before writing (non-blocking)\n const { preValidate } = await import(\"../pre-validate.js\");\n const validation = preValidate(safePath, updated);\n\n writeFileSync(safePath, updated, \"utf-8\");\n\n // Invalidate read cache for this file\n const { getFileReadCache } = await import(\"../file-cache.js\");\n getFileReadCache().invalidate(safePath);\n\n // Diff preview (non-blocking)\n const { getDiffSummary } = await import(\"../diff-preview.js\");\n const diff = getDiffSummary(safePath);\n\n return {\n success: true,\n path,\n ...(validation.warnings.length > 0\n ? { preValidation: validation.warnings }\n : {}),\n ...(diff ? { diff: diff.preview } : {}),\n };\n },\n});\n","import { z } from \"zod\";\nimport { spawn } from \"node:child_process\";\nimport { defineTool } from \"../base.js\";\nimport {\n checkGitSafety,\n formatViolations,\n hasHardBlock,\n} from \"./git-safety.js\";\nimport { checkSandbox, type SandboxLevel } from \"./sandbox.js\";\nimport { DockerSandbox } from \"../sandbox/docker-sandbox.js\";\nimport { getWorkspace } from \"../workspace-context.js\";\n\nconst DEFAULT_TIMEOUT = 120_000;\nconst BACKGROUND_TIMEOUT = 600_000; // 10 minutes max for background tasks\nlet HEAD_BYTES = 20_000;\nlet TAIL_BYTES = 20_000;\n\n/**\n * Env var names that must NEVER reach a shell child under the\n * \"restricted\" sandbox level. See v9 assessment's Attacker finding\n * (#8, 1/10 agents, high-severity): the parent's `process.env` on\n * this machine includes `OP_SERVICE_ACCOUNT_TOKEN` (which grants\n * access to the entire 1Password \"Dev Keys\" vault — 60 items) plus\n * every provider API key loaded at shell startup. Pre-fix, a\n * prompt-injection payload that managed to trigger `env | curl ...`\n * would exfiltrate the crown-jewel 1Password token.\n *\n * Explicit-name list covers the known secrets in this project's\n * environment; the pattern list catches anything matching a common\n * secret-name shape. Inclusive over-scrubbing is fine — a child\n * that needs one of these back can re-export it from the command\n * itself, which is audit-visible. Quiet exfiltration from env is\n * the attack.\n */\nconst SCRUBBED_ENV_NAMES = new Set([\n // 1Password service-account + bare-session token (the wrapped session\n // prefix is handled by SCRUBBED_ENV_PREFIXES below — see v11 Attacker\n // finding: real 1Password CLI env vars are `OP_SESSION_<accountid>`,\n // e.g. `OP_SESSION_abc123xyz`, which escaped both the bare-name set\n // AND the regex pattern in pass 25).\n \"OP_SERVICE_ACCOUNT_TOKEN\",\n \"OP_SESSION\",\n // Provider keys (first-party)\n \"ANTHROPIC_API_KEY\",\n \"OPENAI_API_KEY\",\n \"GOOGLE_GENERATIVE_AI_API_KEY\",\n \"GEMINI_API_KEY\",\n \"DEEPSEEK_API_KEY\",\n \"MOONSHOT_API_KEY\",\n \"BRAINSTORM_API_KEY\",\n // Cloud creds\n \"AWS_SECRET_ACCESS_KEY\",\n \"AWS_SESSION_TOKEN\",\n \"AWS_ACCESS_KEY_ID\",\n // Datastore passwords\n \"DATABASE_URL\",\n \"POSTGRES_PASSWORD\",\n // Integration tokens\n \"SLACK_BOT_TOKEN\",\n \"LINEAR_API_KEY\",\n \"STRIPE_SECRET_KEY\",\n \"POSTHOG_API_KEY\",\n \"SENTRY_AUTH_TOKEN\",\n]);\n\n// Anything matching this shape is presumed secret even if not in the\n// explicit list. Conservative by design: over-scrubbing a non-secret\n// is cheap (the child can re-export it), but under-scrubbing a real\n// secret is a leak.\n//\n// v12 Attacker finding: the pre-pass-31 pattern only matched the\n// compound forms `API_KEY` and `PRIVATE_KEY`, missing bare `_KEY`\n// suffixes. Real leaks that escaped:\n// - SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY\n// - DATADOG_APP_KEY, HONEYCOMB_WRITEKEY, MIXPANEL_PROJECT_KEY\n// - SENTRY_DSN (auth in URL; DSN shape not covered)\n// - _AUTH / _BEARER / _COOKIE / _JWT / _PAT (personal access token)\n// Pass 31 broadens to catch those. `SSH_AUTH_SOCK` (Unix socket path\n// used by ssh-agent, not a secret) is the one name that would be\n// scrubbed incorrectly — keep it working via the allowlist.\nconst SCRUBBED_ENV_PATTERN =\n /(?:API_KEY|SECRET|PASSWORD|CREDENTIALS|PRIVATE_KEY|_TOKEN|_KEY|KEY$|_AUTH|_BEARER|_COOKIE|_DSN|_JWT|_PAT)/i;\n// Note: `KEY$` (end-anchor) catches shapes like HONEYCOMB_WRITEKEY\n// that don't use the `_KEY` convention. Over-matches any env var\n// ending in \"KEY\" — mostly fine (MONKEY / DONKEY etc. aren't\n// realistic env names). If a legitimate env var ending in KEY ever\n// needs to pass through, add to SCRUBBED_ENV_ALLOWLIST.\n\n/**\n * Env-name prefixes that are always scrubbed. The exact-match set and\n * regex above catch most shapes, but some integrations namespace tokens\n * under a prefix: `OP_SESSION_<accountid>` (1Password CLI), `AWS_`\n * (namespaced cloud creds), `GCP_` (Google Cloud). Adding these as\n * prefixes closes the v11 Attacker finding where bare-name lookup\n * missed `OP_SESSION_abc123` and the regex didn't match either.\n *\n * GITHUB_ is NOT in this list because `GITHUB_TOKEN` is explicitly\n * allowlisted; most other GITHUB_* vars are benign (GITHUB_ACTIONS,\n * GITHUB_REPOSITORY, GITHUB_SHA, etc.) and scrubbing them would break\n * `gh` CLI workflows.\n */\nconst SCRUBBED_ENV_PREFIXES = [\"OP_SESSION_\", \"AWS_\", \"GCP_\", \"AZURE_\"];\n\n// Env names to KEEP even when they match the scrub pattern. `gh` is\n// part of our tool surface and fails hard without GITHUB_TOKEN /\n// GH_TOKEN — scrubbing these would break a first-class workflow.\n// The trade-off is documented: a prompt-injection attacker can still\n// exfiltrate via GitHub if the user has a token loaded, but GitHub\n// is a trusted exfil channel (audit-logged by GitHub itself).\n//\n// SSH_AUTH_SOCK is the Unix socket path exported by ssh-agent. It's\n// NOT a secret — scrubbing it just forces the child to re-key\n// every git/ssh call. Keep it passing through. (Added in pass 31:\n// the broader `_AUTH` pattern would scrub it otherwise.)\nconst SCRUBBED_ENV_ALLOWLIST = new Set([\n \"GITHUB_TOKEN\",\n \"GH_TOKEN\",\n \"SSH_AUTH_SOCK\",\n]);\n\n/**\n * Produce a sanitized env for shell children. Under the \"restricted\"\n * sandbox level, removes every name in SCRUBBED_ENV_NAMES plus any\n * name matching SCRUBBED_ENV_PATTERN (minus the allowlist). Under\n * \"none\" returns process.env unchanged — the caller explicitly opted\n * out of sandboxing.\n */\nexport function buildChildEnv(level: SandboxLevel): NodeJS.ProcessEnv {\n if (level === \"none\") return process.env;\n const scrubbed: NodeJS.ProcessEnv = {};\n for (const [name, value] of Object.entries(process.env)) {\n if (SCRUBBED_ENV_ALLOWLIST.has(name)) {\n scrubbed[name] = value;\n continue;\n }\n if (SCRUBBED_ENV_NAMES.has(name)) continue;\n if (SCRUBBED_ENV_PATTERN.test(name)) continue;\n if (SCRUBBED_ENV_PREFIXES.some((prefix) => name.startsWith(prefix)))\n continue;\n scrubbed[name] = value;\n }\n return scrubbed;\n}\n\n// Module-level sandbox config — set by the CLI during startup via\n// `configureSandbox()`. Default flipped from \"none\" to \"restricted\"\n// per v9 assessment's Attacker finding: pre-fix, a caller that\n// forgot to call configureSandbox() (test harnesses, embedder SDKs,\n// early-boot shell calls before config loads) ran every command\n// unsandboxed. \"restricted\" blocks the destructive patterns in\n// sandbox.ts (rm -rf /, curl | sh, sudo, etc.) by default; callers\n// that genuinely need the unrestricted \"none\" level must opt in\n// explicitly via `configureSandbox(\"none\", ...)`.\nlet currentSandboxLevel: SandboxLevel = \"restricted\";\nlet currentProjectPath: string | undefined;\n\n// Docker sandbox — lazy-started on first container-mode shell call\nlet dockerSandbox: DockerSandbox | null = null;\nlet dockerConfig: { image: string; timeout: number } = {\n image: \"node:22-slim\",\n timeout: 120_000,\n};\n\n/** Configure the shell sandbox level and output limits. Call once during CLI startup. */\nexport function configureSandbox(\n level: SandboxLevel,\n projectPath?: string,\n maxOutputBytes?: number,\n containerImage?: string,\n containerTimeout?: number,\n): void {\n currentSandboxLevel = level;\n currentProjectPath = projectPath;\n if (maxOutputBytes) {\n // Split output budget: 40% head, 60% tail (tail is more useful for errors)\n HEAD_BYTES = Math.floor(maxOutputBytes * 0.4);\n TAIL_BYTES = Math.floor(maxOutputBytes * 0.6);\n }\n if (containerImage) dockerConfig.image = containerImage;\n if (containerTimeout) dockerConfig.timeout = containerTimeout;\n}\n\n/** Stop and clean up the Docker sandbox container, if running. */\nexport function stopDockerSandbox(): void {\n if (dockerSandbox) {\n dockerSandbox.stop();\n dockerSandbox = null;\n }\n}\n\n/** Swap the Docker sandbox instance. Returns the previous instance for restore. */\nexport function setDockerSandbox(\n instance: DockerSandbox | null,\n): DockerSandbox | null {\n const prev = dockerSandbox;\n dockerSandbox = instance;\n return prev;\n}\n\n// Kill a whole process group (shell + every child it forked). Used\n// everywhere we need to cancel a shell: abort signal, timeout, or\n// background abort. CI Linux (dash as /bin/sh) exposed the gap — a\n// plain `child.kill(\"SIGTERM\")` there signals only the shell, which\n// exits without forwarding to its children; the `sleep 30` is\n// reparented to init and runs to completion. macOS bash happens to\n// propagate, which is why this was invisible locally.\n//\n// Relies on `detached: true` in spawn — that makes the shell a\n// process-group leader (pgid == pid), so -pid addresses the whole\n// group. Swallows errors: ESRCH (group already gone) and EPERM\n// (race with init reaping) are both \"nothing to do\", not failures.\nfunction killProcessGroup(\n pid: number | undefined,\n signal: \"SIGTERM\" | \"SIGKILL\",\n): void {\n if (!pid) return;\n try {\n process.kill(-pid, signal);\n } catch {\n // Group already dead, or permission denied by a race with init —\n // either way, no one to signal.\n }\n}\n\n// ── Background Task Management ──────────────────────────────────────\n\ninterface BackgroundTask {\n id: string;\n command: string;\n startedAt: number;\n}\n\nconst backgroundTasks = new Map<string, BackgroundTask>();\nconst MAX_BACKGROUND_TASKS = 50;\nlet nextTaskId = 0;\n\ntype BackgroundEvent = {\n taskId: string;\n command: string;\n exitCode: number;\n stdout: string;\n stderr: string;\n};\n\nlet backgroundEventHandler: ((event: BackgroundEvent) => void) | null = null;\nconst pendingEvents: BackgroundEvent[] = [];\nconst MAX_PENDING_EVENTS = 100;\n\n/** Set a callback for background task completion events. Replays any queued events. */\nexport function setBackgroundEventHandler(\n handler: typeof backgroundEventHandler,\n): void {\n backgroundEventHandler = handler;\n if (handler && pendingEvents.length > 0) {\n // Replay events that arrived before handler was registered\n for (const event of pendingEvents) handler(event);\n }\n // Clear pending events on every handler change (including null).\n // Without this, orphaned events from background test runs accumulate\n // in the module-level array holding full stdout/stderr strings.\n pendingEvents.length = 0;\n}\n\n// ── Tool Output Streaming ──────────────────────────────────────\n\nlet toolOutputHandler:\n | ((event: { toolName: string; chunk: string }) => void)\n | null = null;\n\n/** Set a callback for streaming tool output chunks during foreground execution. */\nexport function setToolOutputHandler(handler: typeof toolOutputHandler): void {\n toolOutputHandler = handler;\n}\n\n/** Get list of currently running background tasks. */\nexport function getBackgroundTasks(): BackgroundTask[] {\n return Array.from(backgroundTasks.values());\n}\n\n/**\n * Collect output with head+tail truncation.\n * Keeps the first HEAD_BYTES and last TAIL_BYTES of output,\n * so both the start (config/setup) and end (errors/summary) are visible.\n *\n * Tail uses a fixed-size circular line buffer to avoid repeated large\n * string allocations from concatenation + slicing.\n */\nclass OutputCollector {\n private head = \"\";\n private totalBytes = 0;\n private readonly maxHead: number;\n private readonly maxTail: number;\n private headFull = false;\n\n // Circular line buffer for tail\n private readonly tailLines: string[];\n private tailWriteIdx = 0;\n private tailLineCount = 0;\n private tailBytes = 0;\n private readonly maxTailLines: number;\n\n constructor(maxHead = HEAD_BYTES, maxTail = TAIL_BYTES) {\n this.maxHead = maxHead;\n this.maxTail = maxTail;\n // Pre-allocate ring buffer — estimate ~80 chars/line average\n this.maxTailLines = Math.max(64, Math.ceil(maxTail / 80));\n this.tailLines = new Array(this.maxTailLines).fill(\"\");\n }\n\n append(chunk: string): void {\n this.totalBytes += chunk.length;\n\n if (!this.headFull) {\n const remaining = this.maxHead - this.head.length;\n if (chunk.length <= remaining) {\n this.head += chunk;\n return;\n }\n this.head += chunk.slice(0, remaining);\n this.headFull = true;\n chunk = chunk.slice(remaining);\n }\n\n // Split into lines and push into circular buffer\n const lines = chunk.split(\"\\n\");\n for (const line of lines) {\n const evicted = this.tailLines[this.tailWriteIdx];\n this.tailBytes -= evicted.length;\n this.tailLines[this.tailWriteIdx] = line;\n this.tailBytes += line.length;\n this.tailWriteIdx = (this.tailWriteIdx + 1) % this.maxTailLines;\n this.tailLineCount++;\n }\n }\n\n toString(): string {\n if (!this.headFull) return this.head;\n\n // Read lines from ring buffer in order\n const count = Math.min(this.tailLineCount, this.maxTailLines);\n const start =\n this.tailLineCount >= this.maxTailLines ? this.tailWriteIdx : 0;\n const ordered: string[] = [];\n let bytes = 0;\n\n for (let i = 0; i < count; i++) {\n const idx = (start + i) % this.maxTailLines;\n const line = this.tailLines[idx];\n bytes += line.length;\n // Trim from the start if we exceed maxTail bytes\n if (bytes > this.maxTail && ordered.length > 0) continue;\n ordered.push(line);\n }\n\n const tail = ordered.join(\"\\n\");\n const omitted = this.totalBytes - this.head.length - tail.length;\n if (omitted <= 0) return this.head + tail;\n return `${this.head}\\n\\n... ${omitted.toLocaleString()} bytes omitted ...\\n\\n${tail}`;\n }\n}\n\nexport const shellTool = defineTool({\n name: \"shell\",\n description:\n \"Execute a shell command via /bin/sh -c. Returns { stdout, stderr, exitCode }. Output is truncated to first 200 + last 200 lines if >400 lines total. Default timeout: 30s. Use `background: true` for long-running commands (returns immediately with a task ID, notifies on completion). Blocked by sandbox for dangerous commands (rm -rf, sudo, etc.).\",\n permission: \"confirm\",\n inputSchema: z.object({\n command: z\n .string()\n .describe(\"The command to execute (passed to /bin/sh -c)\"),\n cwd: z.string().optional().describe(\"Working directory for the command\"),\n timeout: z\n .number()\n .optional()\n .describe(`Timeout in milliseconds (default ${DEFAULT_TIMEOUT})`),\n background: z\n .boolean()\n .optional()\n .describe(\n \"Run in background. Returns immediately with a task ID. You will be notified on completion.\",\n ),\n }),\n async execute({ command, cwd, timeout, background }, ctx) {\n // Sandbox check — block dangerous commands based on configured level\n const sandboxResult = checkSandbox(\n command,\n currentSandboxLevel,\n currentProjectPath,\n );\n if (!sandboxResult.allowed) {\n return {\n stdout: \"\",\n stderr: sandboxResult.reason ?? \"Command blocked by sandbox\",\n exitCode: 1,\n blocked: true,\n };\n }\n\n // Git safety check — block destructive git operations\n if (/\\bgit\\b/.test(command)) {\n const violations = checkGitSafety(command);\n if (violations.length > 0 && hasHardBlock(violations)) {\n return {\n stdout: \"\",\n stderr: formatViolations(violations),\n exitCode: 1,\n blocked: true,\n };\n }\n }\n\n // Container mode: route through Docker sandbox\n if (currentSandboxLevel === \"container\" && currentProjectPath) {\n if (!dockerSandbox) {\n if (!DockerSandbox.isAvailable()) {\n return {\n stdout: \"\",\n stderr:\n \"Docker is not available. Install Docker or switch to sandbox = 'restricted'.\",\n exitCode: 1,\n blocked: true,\n };\n }\n dockerSandbox = new DockerSandbox({\n hostWorkspace: currentProjectPath,\n image: dockerConfig.image,\n timeout: dockerConfig.timeout,\n });\n dockerSandbox.start();\n }\n\n const result = dockerSandbox.exec(command);\n return {\n stdout: result.output,\n stderr: \"\",\n exitCode: result.exitCode,\n };\n }\n\n // Background mode: spawn and return immediately, notify on completion\n if (background) {\n const taskId = `bg-${nextTaskId++}`;\n const timeoutMs = timeout ?? BACKGROUND_TIMEOUT;\n const child = spawn(\"/bin/sh\", [\"-c\", command], {\n cwd: cwd ?? getWorkspace(),\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: buildChildEnv(currentSandboxLevel),\n // Put the shell + everything it spawns into its own process\n // group so we can kill the whole group on abort/timeout. See\n // killProcessGroup() for the CI-Linux rationale.\n detached: true,\n });\n\n // Detach the child's handle from the parent's event loop. Without\n // this, a long-running background task (sleep 100, a dev server,\n // etc.) would keep Node alive after the user quit the CLI, because\n // the ChildProcess handle counts as a live reference. The 'close'\n // listener below still fires when the child exits, so completion\n // notification is unaffected.\n child.unref();\n\n backgroundTasks.set(taskId, {\n id: taskId,\n command,\n startedAt: Date.now(),\n });\n\n const bgStdout = new OutputCollector();\n const bgStderr = new OutputCollector();\n child.stdout.setEncoding(\"utf-8\");\n child.stderr.setEncoding(\"utf-8\");\n child.stdout.on(\"data\", (chunk: string) => bgStdout.append(chunk));\n child.stderr.on(\"data\", (chunk: string) => bgStderr.append(chunk));\n\n // Timeout: SIGTERM then SIGKILL, same pattern as foreground.\n // Group kill (via -pid) ensures we catch shell grandchildren on\n // Linux where SIGTERM to dash doesn't forward.\n const bgTimer = setTimeout(() => {\n killProcessGroup(child.pid, \"SIGTERM\");\n setTimeout(() => {\n if (child.exitCode === null) killProcessGroup(child.pid, \"SIGKILL\");\n }, 5000);\n }, timeoutMs);\n bgTimer.unref(); // Don't keep event loop alive for background timeout\n\n // Honour the caller's AbortSignal even in background mode. A\n // background task by design survives the turn that spawned it,\n // but when the USER cancels (Ctrl+C / desktop Stop), the signal\n // DOES fire, and ignoring it leaves a runaway subprocess the\n // user explicitly told us to stop. Mirrors the foreground\n // branch; we only attach the listener once and detach it on\n // completion so the signal can't keep the listener array\n // growing on long-lived per-session controllers.\n const bgAbortSignal = ctx?.abortSignal;\n const onBgAbort = () => {\n killProcessGroup(child.pid, \"SIGTERM\");\n setTimeout(() => {\n if (child.exitCode === null) killProcessGroup(child.pid, \"SIGKILL\");\n }, 2000);\n };\n\n let completed = false;\n const emitCompletion = (exitCode: number, stderr?: string) => {\n if (completed) return; // Idempotent — error+close can both fire\n completed = true;\n clearTimeout(bgTimer);\n if (bgAbortSignal) {\n bgAbortSignal.removeEventListener(\"abort\", onBgAbort);\n }\n backgroundTasks.delete(taskId);\n const event: BackgroundEvent = {\n taskId,\n command,\n exitCode,\n stdout: bgStdout.toString(),\n stderr: stderr ?? bgStderr.toString(),\n };\n if (backgroundEventHandler) {\n backgroundEventHandler(event);\n } else {\n if (pendingEvents.length < MAX_PENDING_EVENTS)\n pendingEvents.push(event);\n }\n };\n\n child.on(\"close\", (code, signal) => {\n // POSIX convention: signal-terminated processes report exitCode\n // 128+signum. We don't know the exact number, so fall back to\n // 128 (generic \"killed by signal\") — non-zero so callers can\n // distinguish cancelled from clean-exit.\n emitCompletion(code ?? (signal ? 128 : 1));\n });\n\n child.on(\"error\", (err) => {\n emitCompletion(1, err.message);\n });\n\n if (bgAbortSignal) {\n if (bgAbortSignal.aborted) {\n // Already aborted before we could register — kill now and\n // let the close handler fire naturally.\n onBgAbort();\n } else {\n bgAbortSignal.addEventListener(\"abort\", onBgAbort, { once: true });\n }\n }\n\n return {\n taskId,\n status: \"running\",\n message: `Running in background (${taskId}). You will be notified on completion.`,\n };\n }\n\n const timeoutMs = timeout ?? DEFAULT_TIMEOUT;\n\n return new Promise((resolve) => {\n const stdout = new OutputCollector();\n const stderr = new OutputCollector();\n\n const child = spawn(\"/bin/sh\", [\"-c\", command], {\n cwd: cwd ?? getWorkspace(),\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: buildChildEnv(currentSandboxLevel),\n // Process-group leader so abort/timeout can kill everything\n // the command forked — see killProcessGroup().\n detached: true,\n });\n\n child.stdout.setEncoding(\"utf-8\");\n child.stderr.setEncoding(\"utf-8\");\n\n child.stdout.on(\"data\", (chunk: string) => {\n stdout.append(chunk);\n if (toolOutputHandler) toolOutputHandler({ toolName: \"shell\", chunk });\n });\n child.stderr.on(\"data\", (chunk: string) => {\n stderr.append(chunk);\n if (toolOutputHandler) toolOutputHandler({ toolName: \"shell\", chunk });\n });\n\n const timer = setTimeout(() => {\n killProcessGroup(child.pid, \"SIGTERM\");\n // Give 5s for graceful shutdown, then force kill the group.\n setTimeout(() => {\n if (child.exitCode === null) killProcessGroup(child.pid, \"SIGKILL\");\n }, 5000);\n }, timeoutMs);\n\n // Propagate caller aborts into a SIGTERM/SIGKILL pair on the\n // child. Without this, user cancel (Ctrl+C or desktop Stop\n // button) only clears the local stream; the shell command keeps\n // running to completion and its output bleeds into the next\n // turn as a ghost PostToolUse event. The AI SDK forwards its\n // signal through ToolExecuteContext — we just have to honour it.\n // { once: true } keeps this from leaking listeners if the signal\n // is a long-lived one shared across turns.\n const onAbort = () => {\n killProcessGroup(child.pid, \"SIGTERM\");\n setTimeout(() => {\n if (child.exitCode === null) killProcessGroup(child.pid, \"SIGKILL\");\n }, 2000);\n };\n const abortSignal = ctx?.abortSignal;\n if (abortSignal) {\n if (abortSignal.aborted) {\n // Signal fired before we could register — kill immediately\n // and skip the execution.\n onAbort();\n } else {\n abortSignal.addEventListener(\"abort\", onAbort, { once: true });\n }\n }\n\n child.on(\"close\", (code, signal) => {\n clearTimeout(timer);\n if (abortSignal) {\n abortSignal.removeEventListener(\"abort\", onAbort);\n }\n const exitCode = code ?? (signal ? 128 : 1);\n resolve({\n stdout: stdout.toString(),\n stderr: stderr.toString(),\n exitCode,\n ...(signal ? { signal } : {}),\n });\n });\n\n child.on(\"error\", (err) => {\n clearTimeout(timer);\n if (abortSignal) {\n abortSignal.removeEventListener(\"abort\", onAbort);\n }\n resolve({\n stdout: \"\",\n stderr: err.message,\n exitCode: 1,\n });\n });\n });\n },\n});\n","/**\n * Git safety layer — guards against destructive git operations by\n * pattern-matching the raw shell command string BEFORE it runs.\n *\n * Rules enforced here:\n * 1. Never force-push to protected branches (main/master/production/release)\n * 2. Block destructive ops (reset --hard, checkout --, restore, clean -f)\n * 3. Block hook-skipping flags (--no-verify, --no-gpg-sign)\n * 4. Warn against --amend of already-pushed commits (prefer new commits)\n * 5. Warn against `git add -A` / `git add .` — stage specific files instead\n *\n * Credential scanning on staged files is intentionally NOT handled here —\n * that's a content-inspection concern owned by the secret-scanner in\n * packages/core and the auto-verify hooks. This module is purely a\n * command-pattern firewall that runs before the shell tool executes.\n */\n\nexport interface GitSafetyViolation {\n rule: string;\n description: string;\n suggestion: string;\n}\n\nconst PROTECTED_BRANCHES = [\"main\", \"master\", \"production\", \"release\"];\n\nconst DESTRUCTIVE_PATTERNS: Array<{\n pattern: RegExp;\n rule: string;\n description: string;\n suggestion: string;\n}> = [\n {\n pattern: /git\\s+push\\s+.*--force\\b(?!-with-lease)/,\n rule: \"no-force-push-main\",\n description:\n \"Force-pushing can overwrite upstream commits and cause data loss.\",\n suggestion:\n \"Use `git push` without --force flag. On feature branches, `git push --force-with-lease` is safer.\",\n },\n {\n pattern: /git\\s+reset\\s+--hard\\b/,\n rule: \"no-hard-reset\",\n description:\n \"git reset --hard discards all uncommitted changes permanently.\",\n suggestion:\n \"Use `git stash` to save changes before resetting, or use `git reset --soft` to keep changes staged.\",\n },\n {\n pattern: /git\\s+checkout\\s+--\\s/,\n rule: \"no-checkout-discard\",\n description:\n \"git checkout -- discards uncommitted changes to files permanently.\",\n suggestion:\n \"Use `git stash` to save changes first, or verify you truly want to discard.\",\n },\n {\n pattern: /git\\s+restore\\b(?!\\s+--staged)/,\n rule: \"no-restore-discard\",\n description:\n \"git restore discards uncommitted changes to files permanently.\",\n suggestion: \"Use `git stash` to save changes first.\",\n },\n {\n pattern: /git\\s+clean\\s+-[a-zA-Z]*f/,\n rule: \"no-clean-force\",\n description: \"git clean -f permanently deletes untracked files.\",\n suggestion:\n \"Use `git clean -n` (dry run) first to see what would be deleted.\",\n },\n {\n pattern: /git\\s+branch\\s+-[a-zA-Z]*D\\b/,\n rule: \"no-force-delete-branch\",\n description:\n \"git branch -D force-deletes a branch even if not fully merged.\",\n suggestion:\n \"Use `git branch -d` (lowercase) which only deletes if fully merged.\",\n },\n {\n pattern: /git\\s+rebase\\s+-i\\b/,\n rule: \"no-interactive-rebase\",\n description:\n \"Interactive rebase requires terminal interaction which is not supported.\",\n suggestion: \"Use non-interactive rebase or create new commits instead.\",\n },\n];\n\nconst HOOK_SKIP_PATTERNS: Array<{ pattern: RegExp; flag: string }> = [\n { pattern: /--no-verify\\b/, flag: \"--no-verify\" },\n { pattern: /--no-gpg-sign\\b/, flag: \"--no-gpg-sign\" },\n { pattern: /-c\\s+commit\\.gpgsign=false\\b/, flag: \"commit.gpgsign=false\" },\n { pattern: /-c\\s+core\\.hooksPath=/, flag: \"core.hooksPath override\" },\n { pattern: /\\bHUSKY=0\\b/, flag: \"HUSKY=0\" },\n];\n\nconst BROAD_STAGING_PATTERNS = [\n /git\\s+add\\s+-A\\b/,\n /git\\s+add\\s+--all\\b/,\n /git\\s+add\\s+\\.\\s*$/,\n];\n\n/**\n * Check if a command targets a protected branch with force-push.\n */\nfunction isForceToProtected(command: string): boolean {\n const forcePush = /git\\s+push\\s+.*--force(?:-with-lease)?\\b/.test(command);\n if (!forcePush) return false;\n\n // Check if any protected branch name appears in the command\n for (const branch of PROTECTED_BRANCHES) {\n if (new RegExp(`\\\\b${branch}\\\\b`).test(command)) return true;\n }\n // `git push --force origin` without a branch targets the current tracking branch\n // which could be main — flag it as suspicious\n if (/git\\s+push\\s+--force\\s+\\w+\\s*$/.test(command)) return true;\n return false;\n}\n\n/**\n * Check a shell command for git safety violations.\n * Returns violations found, or empty array if safe.\n */\nexport function checkGitSafety(command: string): GitSafetyViolation[] {\n const violations: GitSafetyViolation[] = [];\n\n // Check force-push to protected branches (highest severity)\n if (isForceToProtected(command)) {\n violations.push({\n rule: \"no-force-push-protected\",\n description: `Force-pushing to a protected branch (${PROTECTED_BRANCHES.join(\"/\")}) can destroy team members' work.`,\n suggestion:\n \"Never force-push to main/master. Create a new branch and PR instead.\",\n });\n }\n\n // Check destructive operations\n for (const {\n pattern,\n rule,\n description,\n suggestion,\n } of DESTRUCTIVE_PATTERNS) {\n if (pattern.test(command)) {\n // Skip force-push if already caught as protected branch\n if (\n rule === \"no-force-push-main\" &&\n violations.some((v) => v.rule === \"no-force-push-protected\")\n )\n continue;\n violations.push({ rule, description, suggestion });\n }\n }\n\n // Check hook-skipping flags\n for (const { pattern, flag } of HOOK_SKIP_PATTERNS) {\n if (pattern.test(command)) {\n violations.push({\n rule: \"no-skip-hooks\",\n description: `The flag ${flag} bypasses git hooks. Pre-commit hooks exist for a reason (linting, tests, secrets detection).`,\n suggestion: `Remove ${flag} and fix the underlying issue that the hook is catching.`,\n });\n }\n }\n\n // Check --amend\n if (/git\\s+commit\\s+.*--amend\\b/.test(command)) {\n violations.push({\n rule: \"prefer-new-commit\",\n description:\n \"Amending rewrites the previous commit. If the previous commit was already pushed, this causes divergence.\",\n suggestion:\n \"Create a new commit instead. If you must amend, only do so on unpushed commits.\",\n });\n }\n\n // Check broad staging\n for (const pattern of BROAD_STAGING_PATTERNS) {\n if (pattern.test(command)) {\n violations.push({\n rule: \"no-broad-staging\",\n description:\n \"`git add -A` or `git add .` can accidentally stage secrets (.env), large files, or unrelated changes.\",\n suggestion:\n \"Stage specific files by name: `git add path/to/file.ts path/to/other.ts`\",\n });\n break;\n }\n }\n\n return violations;\n}\n\n/**\n * Format violations as a human-readable block message.\n */\nexport function formatViolations(violations: GitSafetyViolation[]): string {\n if (violations.length === 0) return \"\";\n\n const lines = [\"Git safety: blocked operation\\n\"];\n for (const v of violations) {\n lines.push(` [${v.rule}] ${v.description}`);\n lines.push(` → ${v.suggestion}\\n`);\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * Returns true if any violation is a hard block (must not proceed).\n * Some violations are warnings (--amend, broad staging) that the model can override with reasoning.\n */\nexport function hasHardBlock(violations: GitSafetyViolation[]): boolean {\n const HARD_RULES = new Set([\n \"no-force-push-protected\",\n \"no-force-push-main\",\n \"no-skip-hooks\",\n \"no-hard-reset\",\n \"no-clean-force\",\n \"no-interactive-rebase\",\n ]);\n return violations.some((v) => HARD_RULES.has(v.rule));\n}\n","/**\n * Shell sandbox — blocks dangerous commands before execution.\n *\n * Three levels:\n * - none: no restrictions (current default)\n * - restricted: block dangerous patterns, warn on risky ones\n * - container: Docker isolation (routes commands through DockerSandbox)\n */\n\nexport type SandboxLevel = \"none\" | \"restricted\" | \"container\";\n\nexport interface SandboxResult {\n allowed: boolean;\n reason?: string;\n}\n\n/** Patterns that are always blocked in restricted mode. */\nconst BLOCKED_PATTERNS: Array<{ pattern: RegExp; reason: string }> = [\n // Destructive filesystem operations\n {\n pattern: /\\brm\\s+(-\\w*r\\w*\\s+.*)?\\/\\s*$/,\n reason: \"Recursive deletion of root filesystem\",\n },\n {\n pattern: /\\brm\\s+-\\w*rf\\w*\\s+\\//,\n reason: \"Recursive force deletion from root\",\n },\n { pattern: /\\bmkfs\\b/, reason: \"Filesystem creation is destructive\" },\n { pattern: /\\bdd\\s+if=/, reason: \"Raw disk operations blocked\" },\n { pattern: />\\s*\\/dev\\/sd[a-z]/, reason: \"Direct device writes blocked\" },\n {\n pattern: /\\bchmod\\s+777\\b/,\n reason: \"World-writable permissions are insecure\",\n },\n // Privilege escalation\n { pattern: /\\bsudo\\b/, reason: \"Elevated privileges not allowed in sandbox\" },\n { pattern: /\\bsu\\s+-c\\b/, reason: \"Privilege escalation via su blocked\" },\n { pattern: /\\bpkexec\\b/, reason: \"Privilege escalation via pkexec blocked\" },\n { pattern: /\\bdoas\\b/, reason: \"Privilege escalation via doas blocked\" },\n // Fork bombs and system control\n { pattern: /:\\(\\)\\s*\\{\\s*:\\|:&\\s*\\}\\s*;/, reason: \"Fork bomb detected\" },\n { pattern: /\\bshutdown\\b/, reason: \"System shutdown blocked\" },\n { pattern: /\\breboot\\b/, reason: \"System reboot blocked\" },\n { pattern: /\\binit\\s+[06]\\b/, reason: \"System halt/reboot blocked\" },\n // Remote code execution\n {\n pattern: /\\bcurl\\b.*\\|\\s*(ba)?sh/,\n reason: \"Piping remote content to shell is risky\",\n },\n {\n pattern: /\\bwget\\b.*\\|\\s*(ba)?sh/,\n reason: \"Piping remote content to shell is risky\",\n },\n {\n pattern: /\\beval\\s+\"?\\$\\(.*curl/,\n reason: \"Eval of remote content blocked\",\n },\n // Encoding bypass detection — catch attempts to obfuscate dangerous commands\n {\n pattern: /\\bbase64\\s+(-d|--decode)\\b.*\\|\\s*(ba)?sh/,\n reason: \"Encoded command piped to shell blocked\",\n },\n {\n pattern: /\\bbase64\\b.*\\|\\s*(ba)?sh/,\n reason: \"Encoded command piped to shell blocked\",\n },\n {\n pattern: /\\bpython[23]?\\s+-c\\b/,\n reason: \"Inline Python execution blocked in sandbox — use a .py file\",\n },\n {\n pattern: /\\bnode\\s+-e\\b/,\n reason: \"Inline Node.js execution blocked in sandbox — use a .js file\",\n },\n {\n pattern: /\\bperl\\s+-e\\b/,\n reason: \"Inline Perl execution blocked in sandbox — use a .pl file\",\n },\n {\n pattern: /\\bruby\\s+-e\\b/,\n reason: \"Inline Ruby execution blocked in sandbox — use a .rb file\",\n },\n {\n pattern: /\\$'\\\\x[0-9a-fA-F]/,\n reason: \"ANSI-C quoted escape sequence blocked\",\n },\n // Git history rewriting\n {\n pattern: /\\bgit\\s+filter-branch\\b/,\n reason: \"History rewriting via filter-branch blocked\",\n },\n {\n pattern: /\\bgit\\s+filter-repo\\b/,\n reason: \"History rewriting via filter-repo blocked\",\n },\n {\n pattern: /\\bgit\\s+gc\\s+.*--prune=now/,\n reason: \"Aggressive garbage collection blocked\",\n },\n {\n pattern: /\\bgit\\s+reflog\\s+expire\\s+.*--expire=now/,\n reason: \"Reflog expiry blocked\",\n },\n // Sensitive-path reads (v11 Attacker finding): pre-pass-30,\n // `restricted` blocked destructive command PATTERNS but did NOT\n // block READING credential files. A prompt-injection payload could\n // `cat ~/.ssh/id_rsa` or `cat ~/.aws/credentials` freely. These\n // paths hold keys that the process.env scrub can't cover because\n // they're on disk, not in env. Match anywhere in the command; any\n // tool (cat/head/tail/less/xxd/< redirect) hits the same pattern.\n //\n // This is path-name defense, not a real capability sandbox — a\n // determined attacker can still read via alternative paths (symlinks,\n // /proc reads, tool-chained obfuscation). For true FS isolation the\n // user must run sandbox=\"container\". This closes the obvious path.\n // NOTE on the `\\$SUB` alternation: the sandbox's\n // `normalizeForPatternMatch()` step collapses any `$(...)` or\n // backtick subshell to the literal token `$SUB` before matching.\n // So a payload like `cat $(echo ~)/.ssh/id_rsa` becomes\n // `cat $SUB/.ssh/id_rsa` and matches here alongside the direct\n // path forms. Without this, v12 Attacker's \"string tricks\" bypass\n // let subshell-expanded paths sail past the filter.\n {\n // Covers ~/, $HOME, /Users/<user> (macOS), /home/<user> (Linux),\n // /var/root (macOS root-user home), AND $SUB (any subshell\n // expansion). v12 Attacker/Pessimist finding: the macOS root\n // user's home directory is /var/root, not /Users/root, so a\n // command running as root or a payload traversing to root-owned\n // paths would escape the prior regex.\n pattern:\n /(?:~|\\$HOME|\\$SUB|\\/Users\\/[^/]+|\\/home\\/[^/]+|\\/var\\/root)\\/\\.ssh\\//,\n reason:\n \"Reading ~/.ssh/* blocked — use sandbox=container for workspace-edit workflows that need SSH\",\n },\n {\n pattern:\n /(?:~|\\$HOME|\\$SUB|\\/Users\\/[^/]+|\\/home\\/[^/]+)\\/\\.aws\\/credentials/,\n reason: \"Reading AWS credentials blocked\",\n },\n {\n pattern: /(?:~|\\$HOME|\\$SUB|\\/Users\\/[^/]+|\\/home\\/[^/]+)\\/\\.netrc/,\n reason: \"Reading ~/.netrc blocked (contains remote auth tokens)\",\n },\n {\n pattern: /(?:~|\\$HOME|\\$SUB|\\/Users\\/[^/]+|\\/home\\/[^/]+)\\/\\.config\\/op\\//,\n reason: \"Reading 1Password config blocked\",\n },\n {\n pattern: /(?:~|\\$HOME|\\$SUB|\\/Users\\/[^/]+|\\/home\\/[^/]+)\\/\\.gnupg\\//,\n reason: \"Reading GPG keyring blocked\",\n },\n {\n pattern:\n /(?:~|\\$HOME|\\$SUB|\\/Users\\/[^/]+|\\/home\\/[^/]+)\\/\\.docker\\/config\\.json/,\n reason: \"Reading Docker registry config blocked (contains auth)\",\n },\n {\n pattern: /(?:~|\\$HOME|\\$SUB|\\/Users\\/[^/]+|\\/home\\/[^/]+)\\/\\.npmrc/,\n reason: \"Reading ~/.npmrc blocked (may contain auth tokens)\",\n },\n {\n pattern: /\\/etc\\/shadow\\b|\\/etc\\/sudoers\\b/,\n reason: \"Reading /etc/shadow or /etc/sudoers blocked\",\n },\n {\n pattern: /\\/proc\\/[^/\\s]+\\/environ\\b/,\n reason: \"Reading /proc/*/environ blocked (leaks parent env)\",\n },\n];\n\n/**\n * Check if a command is allowed under the given sandbox level.\n */\nexport function checkSandbox(\n command: string,\n level: SandboxLevel,\n projectPath?: string,\n): SandboxResult {\n if (level === \"none\") {\n return { allowed: true };\n }\n\n if (level === \"container\") {\n // Container mode: Docker provides isolation, allow all commands\n return { allowed: true };\n }\n\n return checkRestricted(command, projectPath);\n}\n\n// Normalize a command string to defeat trivial obfuscations before\n// pattern matching. Closes three v12 Attacker bypasses that the\n// checkpoint's F5 finding flagged:\n//\n// 1. Empty double-quote concat: /U\"\"sers/ → /Users/\n// 2. Empty single-quote concat: /U''sers/ → /Users/\n// 3. Subshell-to-sensitive-path concat:\n// cat $(echo ~)/.ssh/id_rsa (unchanged by the strip above)\n// The concat shape `)/.ssh/` or `` `/.ssh/`` is a strong signal:\n// there is no legitimate reason to build a path to a credential\n// directory via command substitution. Collapse the subshell to\n// a sentinel `$SUB` so the downstream sensitive-path regex\n// treats it like any other variable and matches the suffix.\n//\n// Does NOT try to be a real shell parser — the true fix is a\n// capability-based sandbox (container mode) and this file's header\n// already acknowledges that. This is defense-in-depth against the\n// three most ergonomic prompt-injection bypasses.\nfunction normalizeForPatternMatch(command: string): string {\n let out = command;\n // Iterate the subshell strip so nested `$(echo $(echo ~))` fully\n // collapses to `$SUB`. Without the loop, the first pass matches\n // only the OUTER `$(echo $(echo ~)` (up to the first `)`), leaving\n // a stray `)` after the replace that breaks the downstream\n // sensitive-path regex. Bound iterations to prevent pathological\n // cases; real payloads rarely nest past depth 3.\n for (let i = 0; i < 8; i++) {\n const prev = out;\n out = out\n // $(anything) → $SUB. `[^()]*` rejects parens inside, so the\n // innermost subshell matches first on each pass.\n .replace(/\\$\\([^()]*\\)/g, \"$SUB\")\n // `anything` (backticks) → $SUB. Nested backticks are rare; a\n // single pass is enough in practice because the shell itself\n // struggles with them.\n .replace(/`[^`]*`/g, \"$SUB\");\n if (out === prev) break;\n }\n return (\n out\n // Empty string concat — `\"\"`, `''` split a path character while\n // shell resolution collapses them. Strip before regex match.\n .replace(/\"\"/g, \"\")\n .replace(/''/g, \"\")\n // Strip any REMAINING single- or double-quotes. The shell removes\n // them during expansion, and v12 Attacker's `\"$(echo ~)\"/.ssh/`\n // payload relies on quote-wrapping the expanded value so the\n // `$SUB` sentinel isn't immediately followed by `/`. After\n // stripping, the concat shape is exposed for the regex.\n .replace(/[\"']/g, \"\")\n // Collapse consecutive slashes. Shells treat `/a//b` identically\n // to `/a/b`, so `~//.ssh/id_rsa` is a valid read of the key.\n // Self-probe after the first F5 pass found this gap.\n .replace(/\\/{2,}/g, \"/\")\n );\n}\n\nfunction checkRestricted(command: string, projectPath?: string): SandboxResult {\n // Normalize obfuscations before checking so the existing sensitive-\n // path regex catches subshell-concat and quote-concat bypasses.\n const normalized = normalizeForPatternMatch(command);\n\n // Phase 1: Check blocked patterns against the FULL normalized string\n // first. This catches pipe-based patterns like \"curl ... | sh\" that\n // would be destroyed by command splitting (the pipe is the attack\n // vector). Test both the raw command AND the normalized form — some\n // patterns (e.g., the ANSI-C escape) rely on the literal characters\n // that normalize would strip.\n for (const { pattern, reason } of BLOCKED_PATTERNS) {\n pattern.lastIndex = 0;\n if (pattern.test(command) || pattern.test(normalized)) {\n return { allowed: false, reason: `Sandbox blocked: ${reason}` };\n }\n }\n\n // Phase 2: Split chained commands and check each subcommand independently.\n // Catches bypass via: \"npm install; rm -rf /\" where Phase 1 might miss\n // patterns that only appear in a subcommand (e.g., after ; or &&).\n const subcommands = splitChainedCommands(command);\n\n for (const sub of subcommands) {\n const subNormalized = normalizeForPatternMatch(sub);\n for (const { pattern, reason } of BLOCKED_PATTERNS) {\n pattern.lastIndex = 0;\n if (pattern.test(sub) || pattern.test(subNormalized)) {\n return { allowed: false, reason: `Sandbox blocked: ${reason}` };\n }\n }\n\n if (projectPath) {\n const systemPaths =\n /(?:>|tee|cp|mv|install)\\s+\\/?(?:usr|etc|var|opt|tmp|home|root|Library|System|private|proc|sys|dev)\\//;\n if (systemPaths.test(sub)) {\n return {\n allowed: false,\n reason: \"Sandbox blocked: writing outside project directory\",\n };\n }\n }\n }\n\n return { allowed: true };\n}\n\n/** Split shell command into subcommands (;, &&, ||, |, $(), backticks). */\nfunction splitChainedCommands(command: string): string[] {\n const parts = command.split(/\\s*(?:;|&&|\\|\\||\\|)\\s*/);\n const subshellRe = /\\$\\(([^)]+)\\)|`([^`]+)`/g;\n let m;\n while ((m = subshellRe.exec(command)) !== null) {\n parts.push(m[1] ?? m[2]);\n }\n return parts.filter((p) => p.trim().length > 0);\n}\n","import { z } from \"zod\";\nimport fg from \"fast-glob\";\nimport { defineTool } from \"../base.js\";\nimport { getWorkspace } from \"../workspace-context.js\";\n\nexport const globTool = defineTool({\n name: \"glob\",\n description:\n \"Find files matching a glob pattern. Returns matching file paths sorted by modification time.\",\n permission: \"auto\",\n inputSchema: z.object({\n pattern: z\n .string()\n .describe('Glob pattern (e.g., \"**/*.ts\", \"src/**/*.tsx\")'),\n cwd: z\n .string()\n .optional()\n .describe(\"Directory to search in (default: current directory)\"),\n }),\n async execute({ pattern, cwd }) {\n const files = await fg(pattern, {\n cwd: cwd ?? getWorkspace(),\n ignore: [\"**/node_modules/**\", \"**/dist/**\", \"**/.git/**\"],\n stats: true,\n });\n\n const sorted = files\n .sort((a, b) => (b.stats?.mtimeMs ?? 0) - (a.stats?.mtimeMs ?? 0))\n .map((f) => f.path);\n\n return { files: sorted, count: sorted.length };\n },\n});\n","import { z } from \"zod\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { defineTool } from \"../base.js\";\nimport { getWorkspace } from \"../workspace-context.js\";\n\nconst execFileAsync = promisify(execFile);\n\nexport const grepTool = defineTool({\n name: \"grep\",\n description:\n 'Search file contents using ripgrep (regex). Returns matching lines with file:line format. Default: max 50 results from current directory. Use `glob` to filter files (e.g., \"*.ts\"). Use `path` to search a specific directory. Returns { matches: string[], matchCount } or { error }.',\n permission: \"auto\",\n inputSchema: z.object({\n pattern: z.string().describe(\"Regex pattern to search for\"),\n path: z\n .string()\n .optional()\n .describe(\"File or directory to search (default: current directory)\"),\n glob: z\n .string()\n .optional()\n .describe('Glob pattern to filter files (e.g., \"*.ts\")'),\n maxResults: z\n .number()\n .optional()\n .describe(\"Maximum number of results (default: 50)\"),\n }),\n async execute({ pattern, path, glob: fileGlob, maxResults }) {\n const args = [\n \"--no-heading\",\n \"--line-number\",\n \"--color\",\n \"never\",\n \"-m\",\n String(maxResults ?? 50),\n ];\n if (fileGlob) args.push(\"--glob\", fileGlob);\n args.push(pattern);\n args.push(path ?? \".\");\n\n try {\n const { stdout } = await execFileAsync(\"rg\", args, {\n cwd: getWorkspace(),\n timeout: 10_000,\n maxBuffer: 1024 * 1024,\n });\n const lines = stdout.trim().split(\"\\n\").filter(Boolean);\n return { matches: lines.slice(0, maxResults ?? 50), count: lines.length };\n } catch (err: any) {\n // rg exits with code 1 when no matches found — that's not an error\n if (err.code === 1) return { matches: [], count: 0 };\n // rg not installed, fall back to grep\n if (err.code === \"ENOENT\") {\n return {\n error: \"ripgrep (rg) not found. Install it: brew install ripgrep\",\n };\n }\n return { error: err.message };\n }\n },\n});\n","import { z } from 'zod';\nimport { defineTool } from '../base.js';\nimport { runGit } from './git-common.js';\n\nexport const gitStatusTool = defineTool({\n name: 'git_status',\n description: 'Show the working tree status (modified, staged, untracked files).',\n permission: 'auto',\n inputSchema: z.object({\n cwd: z.string().optional().describe('Working directory (default: current)'),\n }),\n async execute({ cwd }) {\n const result = await runGit(['status', '--short'], cwd);\n if (result.exitCode !== 0) {\n return { status: 'Not a git repository', isGitRepo: false };\n }\n return { status: result.stdout.trim() || '(clean working tree)', isGitRepo: true };\n },\n});\n","/**\n * Shared git command helper used by all git tools.\n * Centralizes exec options and error handling.\n */\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { getWorkspace } from \"../workspace-context.js\";\n\nconst execFileAsync = promisify(execFile);\n\nconst DEFAULT_TIMEOUT = 30_000;\nconst MAX_OUTPUT = 1_000_000; // 1MB max\n\nexport interface GitResult {\n stdout: string;\n stderr: string;\n exitCode: number;\n}\n\n/**\n * Run a git command with consistent options.\n * Returns structured result instead of throwing on non-zero exit.\n */\nexport async function runGit(\n args: string[],\n cwd?: string,\n timeout = DEFAULT_TIMEOUT,\n): Promise<GitResult> {\n try {\n const { stdout, stderr } = await execFileAsync(\"git\", args, {\n cwd: cwd ?? getWorkspace(),\n timeout,\n maxBuffer: MAX_OUTPUT,\n });\n return { stdout, stderr, exitCode: 0 };\n } catch (err: any) {\n return {\n stdout: err.stdout ?? \"\",\n stderr: err.stderr ?? err.message,\n exitCode: err.code ?? 1,\n };\n }\n}\n","import { z } from 'zod';\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport { defineTool } from '../base.js';\n\nconst execFileAsync = promisify(execFile);\n\nexport const gitDiffTool = defineTool({\n name: 'git_diff',\n description: 'Show changes between commits, the working tree, or the staging area.',\n permission: 'auto',\n inputSchema: z.object({\n staged: z.boolean().optional().describe('Show staged changes (default: unstaged)'),\n file: z.string().optional().describe('Limit diff to a specific file'),\n cwd: z.string().optional().describe('Working directory'),\n }),\n async execute({ staged, file, cwd }) {\n const args = ['diff'];\n if (staged) args.push('--cached');\n if (file) args.push('--', file);\n try {\n const { stdout } = await execFileAsync('git', args, {\n cwd: cwd ?? process.cwd(),\n maxBuffer: 1024 * 1024 * 5,\n });\n return { diff: stdout.slice(0, 15000) || '(no changes)', truncated: stdout.length > 15000 };\n } catch (err: any) {\n return { error: err.message };\n }\n },\n});\n","import { z } from 'zod';\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport { defineTool } from '../base.js';\n\nconst execFileAsync = promisify(execFile);\n\nexport const gitLogTool = defineTool({\n name: 'git_log',\n description: 'Show recent commit history.',\n permission: 'auto',\n inputSchema: z.object({\n count: z.number().optional().describe('Number of commits to show (default: 20)'),\n file: z.string().optional().describe('Show history for a specific file'),\n cwd: z.string().optional().describe('Working directory'),\n }),\n async execute({ count, file, cwd }) {\n const args = ['log', '--oneline', '-n', String(count ?? 20)];\n if (file) args.push('--', file);\n try {\n const { stdout } = await execFileAsync('git', args, { cwd: cwd ?? process.cwd() });\n return { log: stdout.trim() };\n } catch (err: any) {\n return { error: err.message };\n }\n },\n});\n","import { z } from \"zod\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { createLogger } from \"@brainst0rm/shared\";\nimport { defineTool } from \"../base.js\";\n\nconst execFileAsync = promisify(execFile);\nconst log = createLogger(\"git-commit\");\n\n/**\n * Smart git commit tool with two modes:\n *\n * 1. **Analyze mode** (message omitted): Stages files, scans for credentials,\n * then returns rich context (status, diff summary, recent commits) so the\n * model can generate a contextual commit message.\n *\n * 2. **Commit mode** (message provided): Stages files, scans for credentials,\n * and commits with the given message.\n *\n * Both modes enforce: explicit file paths only, credential scanning, and\n * optional Co-Authored-By attribution.\n */\nexport const gitCommitTool = defineTool({\n name: \"git_commit\",\n description:\n \"Stage specific files and create a git commit. Two modes: (1) Omit `message` to get context for writing a good commit message (status, diff summary, recent commits). (2) Provide `message` to commit directly. Always scans for credentials before committing. Never stages all files — explicit paths required.\",\n permission: \"confirm\",\n inputSchema: z.object({\n message: z\n .string()\n .optional()\n .describe(\n \"Commit message (what + why). Omit to get context for generating a message. When provided, should summarize the change and explain motivation.\",\n ),\n files: z\n .array(z.string())\n .min(1)\n .describe(\n 'Files to stage — explicit paths required (no wildcards, no \"all\")',\n ),\n cwd: z.string().optional().describe(\"Working directory\"),\n coAuthors: z\n .array(z.string())\n .optional()\n .describe('Co-author lines to append (format: \"Name <email>\")'),\n }),\n async execute({ message, files, cwd, coAuthors }) {\n const opts = { cwd: cwd ?? process.cwd() };\n\n try {\n // Stage specific files only (never git add -A)\n await execFileAsync(\"git\", [\"add\", ...files], opts);\n\n // Scan staged diff for credentials before committing\n const { stdout: diff } = await execFileAsync(\n \"git\",\n [\"diff\", \"--cached\", \"--unified=0\"],\n opts,\n );\n const credentialHits = scanDiffForCredentials(diff);\n if (credentialHits.length > 0) {\n // Unstage and abort\n await execFileAsync(\"git\", [\"reset\", \"HEAD\", ...files], opts).catch(\n (e) => {\n log.warn(\n { err: e },\n \"Failed to unstage files after credential detection\",\n );\n },\n );\n return {\n error: `Credential detected in staged changes — commit blocked.\\n${credentialHits.map((h) => ` ${h.file}: ${h.pattern} (${h.preview})`).join(\"\\n\")}\\n\\nRemove the credential before committing.`,\n };\n }\n\n // Analyze mode: gather context for the model to generate a commit message\n if (!message) {\n const context = await gatherCommitContext(opts);\n return {\n needsMessage: true,\n context,\n stagedFiles: files,\n hint: \"Use this context to write a commit message (what + why), then call git_commit again with the message.\",\n };\n }\n\n // Build full commit message with optional co-authors\n const fullMessage = buildCommitMessage(message, coAuthors);\n\n // Commit\n const { stdout } = await execFileAsync(\n \"git\",\n [\"commit\", \"-m\", fullMessage],\n opts,\n );\n return { success: true, output: stdout.trim() };\n } catch (err: any) {\n return { error: err.stderr || err.message };\n }\n },\n});\n\n/**\n * Gather context to help generate a good commit message:\n * - git status (staged vs unstaged overview)\n * - git diff --cached --stat (what changed, file-level summary)\n * - git diff --cached (actual changes, truncated for large diffs)\n * - git log --oneline -5 (recent commit style reference)\n */\nasync function gatherCommitContext(opts: {\n cwd: string;\n}): Promise<{\n status: string;\n diffStat: string;\n diffPreview: string;\n recentCommits: string;\n}> {\n const MAX_DIFF_CHARS = 8000;\n\n const [statusResult, diffStatResult, diffResult, logResult] =\n await Promise.all([\n execFileAsync(\"git\", [\"status\", \"--short\"], opts).catch(() => ({\n stdout: \"\",\n })),\n execFileAsync(\"git\", [\"diff\", \"--cached\", \"--stat\"], opts).catch(() => ({\n stdout: \"\",\n })),\n execFileAsync(\"git\", [\"diff\", \"--cached\"], opts).catch(() => ({\n stdout: \"\",\n })),\n execFileAsync(\"git\", [\"log\", \"--oneline\", \"-5\"], opts).catch(() => ({\n stdout: \"\",\n })),\n ]);\n\n let diffPreview = diffResult.stdout;\n if (diffPreview.length > MAX_DIFF_CHARS) {\n diffPreview =\n diffPreview.slice(0, MAX_DIFF_CHARS) +\n `\\n\\n... truncated (${diffPreview.length} total chars)`;\n }\n\n return {\n status: statusResult.stdout.trim(),\n diffStat: diffStatResult.stdout.trim(),\n diffPreview: diffPreview.trim(),\n recentCommits: logResult.stdout.trim(),\n };\n}\n\n/**\n * Build the final commit message with optional Co-Authored-By trailers.\n */\nfunction buildCommitMessage(message: string, coAuthors?: string[]): string {\n if (!coAuthors || coAuthors.length === 0) return message;\n\n const trailers = coAuthors\n .map((author) => `Co-Authored-By: ${author}`)\n .join(\"\\n\");\n return `${message}\\n\\n${trailers}`;\n}\n\n// --- Credential scanning (unchanged from PR #1) ---\n\ninterface CredentialHit {\n file: string;\n pattern: string;\n preview: string;\n}\n\nconst CREDENTIAL_PATTERNS: Array<{ name: string; pattern: RegExp }> = [\n { name: \"AWS Access Key\", pattern: /AKIA[0-9A-Z]{16}/ },\n { name: \"GitHub Token\", pattern: /gh[ps]_[A-Za-z0-9_]{36,}/ },\n { name: \"OpenAI/Anthropic Key\", pattern: /sk-(?:ant-)?[A-Za-z0-9-]{20,}/ },\n { name: \"Stripe Key\", pattern: /(?:sk|pk)_(?:live|test)_[A-Za-z0-9]{20,}/ },\n {\n name: \"PEM Private Key\",\n pattern: /-----BEGIN (?:RSA |EC )?PRIVATE KEY-----/,\n },\n { name: \"BR API Key\", pattern: /br_(?:live|test)_[A-Za-z0-9]{20,}/ },\n {\n name: \"Generic Secret\",\n pattern:\n /(?:password|token|api_key|apikey|secret)\\s*[:=]\\s*['\"]([^'\"]{8,})['\"]/i,\n },\n];\n\nfunction scanDiffForCredentials(diff: string): CredentialHit[] {\n const hits: CredentialHit[] = [];\n let currentFile = \"\";\n\n for (const line of diff.split(\"\\n\")) {\n if (line.startsWith(\"diff --git\")) {\n const match = line.match(/b\\/(.+)$/);\n currentFile = match?.[1] ?? \"\";\n continue;\n }\n // Only scan added lines (not removed)\n if (!line.startsWith(\"+\") || line.startsWith(\"+++\")) continue;\n\n for (const { name, pattern } of CREDENTIAL_PATTERNS) {\n if (pattern.test(line)) {\n hits.push({\n file: currentFile,\n pattern: name,\n preview: line.slice(1, 60) + (line.length > 60 ? \"...\" : \"\"),\n });\n }\n }\n }\n return hits;\n}\n","import { z } from \"zod\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { defineTool } from \"../base.js\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * GitHub PR tool — full pull request lifecycle via the gh CLI.\n * Requires `gh` to be installed and authenticated.\n *\n * Actions: create, list, view, merge, close, reopen, diff, checks, comment, ready\n */\nexport const ghPrTool = defineTool({\n name: \"gh_pr\",\n description:\n \"Full GitHub pull request management. Actions: create (new PR), list (filter by state), view (details+files), merge (with strategy), close/reopen, diff (full patch), checks (CI status), comment (add discussion), ready (mark draft as ready for review).\",\n permission: \"confirm\",\n inputSchema: z.object({\n action: z\n .enum([\n \"create\",\n \"list\",\n \"view\",\n \"merge\",\n \"close\",\n \"reopen\",\n \"diff\",\n \"checks\",\n \"comment\",\n \"ready\",\n ])\n .describe(\"PR action to perform\"),\n // create fields\n title: z.string().optional().describe(\"PR title (< 70 chars)\"),\n body: z.string().optional().describe(\"PR body (markdown)\"),\n base: z.string().optional().describe(\"Base branch (default: main)\"),\n draft: z.boolean().optional().describe(\"Create as draft PR\"),\n reviewers: z\n .array(z.string())\n .optional()\n .describe(\"Request review from these users\"),\n labels: z.array(z.string()).optional().describe(\"Labels to apply\"),\n // view/merge/close/diff/checks/comment fields\n number: z.number().optional().describe(\"PR number\"),\n // merge fields\n mergeMethod: z\n .enum([\"merge\", \"squash\", \"rebase\"])\n .optional()\n .describe(\"Merge strategy (default: merge)\"),\n deleteAfterMerge: z\n .boolean()\n .optional()\n .describe(\"Delete branch after merge (default: true)\"),\n // comment fields\n commentBody: z.string().optional().describe(\"Comment text (markdown)\"),\n // list fields\n state: z\n .enum([\"open\", \"closed\", \"merged\", \"all\"])\n .optional()\n .describe(\"Filter by state\"),\n limit: z.number().optional().describe(\"Max items (default: 10)\"),\n author: z.string().optional().describe(\"Filter by author\"),\n search: z.string().optional().describe(\"Search query for PRs\"),\n cwd: z.string().optional().describe(\"Working directory\"),\n }),\n async execute(input) {\n const opts = { cwd: input.cwd ?? process.cwd() };\n\n try {\n switch (input.action) {\n case \"create\": {\n if (!input.title) return { error: \"title is required\" };\n if (!input.body) return { error: \"body is required\" };\n const args = [\n \"pr\",\n \"create\",\n \"--title\",\n input.title,\n \"--body\",\n input.body,\n ];\n if (input.base) args.push(\"--base\", input.base);\n if (input.draft) args.push(\"--draft\");\n if (input.reviewers?.length)\n for (const r of input.reviewers) args.push(\"--reviewer\", r);\n if (input.labels?.length)\n for (const l of input.labels) args.push(\"--label\", l);\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n return { success: true, url: stdout.trim() };\n }\n\n case \"list\": {\n const args = [\n \"pr\",\n \"list\",\n \"--json\",\n \"number,title,state,author,url,headRefName,labels,isDraft,createdAt,updatedAt\",\n \"--limit\",\n String(input.limit ?? 10),\n ];\n if (input.state && input.state !== \"all\")\n args.push(\"--state\", input.state);\n if (input.author) args.push(\"--author\", input.author);\n if (input.search) args.push(\"--search\", input.search);\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n return { prs: JSON.parse(stdout) };\n }\n\n case \"view\": {\n if (!input.number) return { error: \"number is required\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"pr\",\n \"view\",\n String(input.number),\n \"--json\",\n \"number,title,state,body,author,url,additions,deletions,files,reviewDecision,reviewRequests,labels,milestone,isDraft,mergeable,headRefName,baseRefName,commits\",\n ],\n opts,\n );\n return { pr: JSON.parse(stdout) };\n }\n\n case \"merge\": {\n if (!input.number) return { error: \"number is required\" };\n const args = [\"pr\", \"merge\", String(input.number)];\n const method = input.mergeMethod ?? \"merge\";\n args.push(`--${method}`);\n if (input.deleteAfterMerge !== false) args.push(\"--delete-branch\");\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n return { success: true, output: stdout.trim() };\n }\n\n case \"close\": {\n if (!input.number) return { error: \"number is required\" };\n const args = [\"pr\", \"close\", String(input.number)];\n if (input.commentBody) args.push(\"--comment\", input.commentBody);\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n return { success: true, output: stdout.trim() };\n }\n\n case \"reopen\": {\n if (!input.number) return { error: \"number is required\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\"pr\", \"reopen\", String(input.number)],\n opts,\n );\n return { success: true, output: stdout.trim() };\n }\n\n case \"diff\": {\n if (!input.number) return { error: \"number is required\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\"pr\", \"diff\", String(input.number)],\n opts,\n );\n return { diff: stdout };\n }\n\n case \"checks\": {\n if (!input.number) return { error: \"number is required\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"pr\",\n \"checks\",\n String(input.number),\n \"--json\",\n \"name,state,conclusion,startedAt,completedAt,detailsUrl\",\n ],\n opts,\n );\n return { checks: JSON.parse(stdout) };\n }\n\n case \"comment\": {\n if (!input.number) return { error: \"number is required\" };\n if (!input.commentBody) return { error: \"commentBody is required\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"pr\",\n \"comment\",\n String(input.number),\n \"--body\",\n input.commentBody,\n ],\n opts,\n );\n return { success: true, url: stdout.trim() };\n }\n\n case \"ready\": {\n if (!input.number) return { error: \"number is required\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\"pr\", \"ready\", String(input.number)],\n opts,\n );\n return { success: true, output: stdout.trim() };\n }\n\n default:\n return { error: `Unknown action: ${input.action}` };\n }\n } catch (err: any) {\n return { error: err.stderr || err.message };\n }\n },\n});\n","import { z } from \"zod\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { defineTool } from \"../base.js\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * GitHub Issue tool — full issue lifecycle via the gh CLI.\n * Requires `gh` to be installed and authenticated.\n *\n * Actions: create, list, view, comment, close, reopen, edit, label, assign, pin, transfer\n */\nexport const ghIssueTool = defineTool({\n name: \"gh_issue\",\n description:\n \"Full GitHub issue management. Actions: create, list (filter by state/label/assignee/milestone), view (with comments), comment, close (with reason), reopen, edit (title/body), label (add/remove), assign (add/remove), pin/unpin, transfer (to another repo).\",\n permission: \"confirm\",\n inputSchema: z.object({\n action: z\n .enum([\n \"create\",\n \"list\",\n \"view\",\n \"comment\",\n \"close\",\n \"reopen\",\n \"edit\",\n \"label\",\n \"assign\",\n \"pin\",\n \"unpin\",\n \"transfer\",\n ])\n .describe(\"Issue action to perform\"),\n // create/edit fields\n title: z.string().optional().describe(\"Issue title\"),\n body: z.string().optional().describe(\"Issue body (markdown)\"),\n labels: z\n .array(z.string())\n .optional()\n .describe(\"Labels to apply (create) or add (label action)\"),\n assignees: z.array(z.string()).optional().describe(\"Users to assign\"),\n milestone: z.string().optional().describe(\"Milestone name or number\"),\n // view/comment/close/edit/label/assign/pin fields\n number: z.number().optional().describe(\"Issue number\"),\n // comment fields\n commentBody: z.string().optional().describe(\"Comment text (markdown)\"),\n // close fields\n reason: z\n .enum([\"completed\", \"not_planned\"])\n .optional()\n .describe(\"Close reason\"),\n // label action\n removeLabels: z\n .array(z.string())\n .optional()\n .describe(\"Labels to remove (label action)\"),\n // transfer\n targetRepo: z\n .string()\n .optional()\n .describe(\"Target repo for transfer (owner/repo)\"),\n // list fields\n state: z\n .enum([\"open\", \"closed\", \"all\"])\n .optional()\n .describe(\"Filter by state\"),\n label: z.string().optional().describe(\"Filter by label\"),\n assignee: z.string().optional().describe(\"Filter by assignee\"),\n search: z.string().optional().describe(\"Search query\"),\n limit: z.number().optional().describe(\"Max items (default: 10)\"),\n cwd: z.string().optional().describe(\"Working directory\"),\n }),\n async execute(input) {\n const opts = { cwd: input.cwd ?? process.cwd() };\n\n try {\n switch (input.action) {\n case \"create\": {\n if (!input.title) return { error: \"title is required\" };\n const args = [\"issue\", \"create\", \"--title\", input.title];\n if (input.body) args.push(\"--body\", input.body);\n if (input.labels?.length)\n args.push(\"--label\", input.labels.join(\",\"));\n if (input.assignees?.length)\n args.push(\"--assignee\", input.assignees.join(\",\"));\n if (input.milestone) args.push(\"--milestone\", input.milestone);\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n return { success: true, url: stdout.trim() };\n }\n\n case \"list\": {\n const args = [\n \"issue\",\n \"list\",\n \"--json\",\n \"number,title,state,author,labels,assignees,milestone,url,createdAt,updatedAt\",\n \"--limit\",\n String(input.limit ?? 10),\n ];\n if (input.state && input.state !== \"all\")\n args.push(\"--state\", input.state);\n if (input.label) args.push(\"--label\", input.label);\n if (input.assignee) args.push(\"--assignee\", input.assignee);\n if (input.search) args.push(\"--search\", input.search);\n if (input.milestone) args.push(\"--milestone\", input.milestone);\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n return { issues: JSON.parse(stdout) };\n }\n\n case \"view\": {\n if (!input.number) return { error: \"number is required\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"issue\",\n \"view\",\n String(input.number),\n \"--json\",\n \"number,title,state,body,author,labels,assignees,milestone,url,comments,createdAt,closedAt\",\n ],\n opts,\n );\n return { issue: JSON.parse(stdout) };\n }\n\n case \"comment\": {\n if (!input.number) return { error: \"number is required\" };\n if (!input.commentBody) return { error: \"commentBody is required\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"issue\",\n \"comment\",\n String(input.number),\n \"--body\",\n input.commentBody,\n ],\n opts,\n );\n return { success: true, url: stdout.trim() };\n }\n\n case \"close\": {\n if (!input.number) return { error: \"number is required\" };\n const args = [\"issue\", \"close\", String(input.number)];\n if (input.reason) args.push(\"--reason\", input.reason);\n if (input.commentBody) args.push(\"--comment\", input.commentBody);\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n return { success: true, output: stdout.trim() };\n }\n\n case \"reopen\": {\n if (!input.number) return { error: \"number is required\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\"issue\", \"reopen\", String(input.number)],\n opts,\n );\n return { success: true, output: stdout.trim() };\n }\n\n case \"edit\": {\n if (!input.number) return { error: \"number is required\" };\n const args = [\"issue\", \"edit\", String(input.number)];\n if (input.title) args.push(\"--title\", input.title);\n if (input.body) args.push(\"--body\", input.body);\n if (input.milestone) args.push(\"--milestone\", input.milestone);\n if (input.labels?.length)\n args.push(\"--add-label\", input.labels.join(\",\"));\n if (input.assignees?.length)\n args.push(\"--add-assignee\", input.assignees.join(\",\"));\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n return { success: true, output: stdout.trim() };\n }\n\n case \"label\": {\n if (!input.number) return { error: \"number is required\" };\n const args = [\"issue\", \"edit\", String(input.number)];\n if (input.labels?.length)\n args.push(\"--add-label\", input.labels.join(\",\"));\n if (input.removeLabels?.length)\n args.push(\"--remove-label\", input.removeLabels.join(\",\"));\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n return { success: true, output: stdout.trim() };\n }\n\n case \"assign\": {\n if (!input.number) return { error: \"number is required\" };\n if (!input.assignees?.length)\n return { error: \"assignees is required\" };\n const args = [\"issue\", \"edit\", String(input.number)];\n args.push(\"--add-assignee\", input.assignees.join(\",\"));\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n return { success: true, output: stdout.trim() };\n }\n\n case \"pin\": {\n if (!input.number) return { error: \"number is required\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\"issue\", \"pin\", String(input.number)],\n opts,\n );\n return { success: true, output: stdout.trim() };\n }\n\n case \"unpin\": {\n if (!input.number) return { error: \"number is required\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\"issue\", \"unpin\", String(input.number)],\n opts,\n );\n return { success: true, output: stdout.trim() };\n }\n\n case \"transfer\": {\n if (!input.number) return { error: \"number is required\" };\n if (!input.targetRepo) return { error: \"targetRepo is required\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\"issue\", \"transfer\", String(input.number), input.targetRepo],\n opts,\n );\n return { success: true, output: stdout.trim() };\n }\n\n default:\n return { error: `Unknown action: ${input.action}` };\n }\n } catch (err: any) {\n return { error: err.stderr || err.message };\n }\n },\n});\n","import { z } from \"zod\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { defineTool } from \"../base.js\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * GitHub Code Review tool — full review workflow via gh CLI + API.\n *\n * Actions: list, create, approve, request-changes, comment, view-comments\n *\n * The most impactful GitHub capability for AI agents — enables:\n * - Reviewing PRs with structured feedback\n * - Approving PRs that pass review\n * - Requesting changes with specific inline comments\n * - Commenting on specific lines of code\n */\nexport const ghReviewTool = defineTool({\n name: \"gh_review\",\n description:\n \"GitHub code review workflow. Actions: list (reviews on a PR), create (submit review with comment/approve/request-changes), approve (shortcut), request-changes (shortcut with body), comment (add inline or general comment on PR review), view-comments (see review comments on a PR).\",\n permission: \"confirm\",\n inputSchema: z.object({\n action: z\n .enum([\n \"list\",\n \"create\",\n \"approve\",\n \"request-changes\",\n \"comment\",\n \"view-comments\",\n ])\n .describe(\"Review action\"),\n number: z.number().describe(\"PR number\"),\n // create fields\n event: z\n .enum([\"COMMENT\", \"APPROVE\", \"REQUEST_CHANGES\"])\n .optional()\n .describe(\"Review event type (for create)\"),\n body: z.string().optional().describe(\"Review body (markdown)\"),\n // comment fields — for inline review comments via API\n path: z.string().optional().describe(\"File path for inline comment\"),\n line: z\n .number()\n .optional()\n .describe(\"Line number in the diff for inline comment\"),\n side: z\n .enum([\"LEFT\", \"RIGHT\"])\n .optional()\n .describe(\"Side of the diff (LEFT=old, RIGHT=new)\"),\n commentBody: z.string().optional().describe(\"Inline comment text\"),\n cwd: z.string().optional().describe(\"Working directory\"),\n }),\n async execute(input) {\n const opts = { cwd: input.cwd ?? process.cwd() };\n const num = String(input.number);\n\n try {\n switch (input.action) {\n case \"list\": {\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"api\",\n `repos/{owner}/{repo}/pulls/${num}/reviews`,\n \"--jq\",\n \".[] | {id: .id, user: .user.login, state: .state, body: .body, submitted_at: .submitted_at}\",\n ],\n opts,\n );\n // Parse JSONL output\n const reviews = stdout\n .trim()\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => JSON.parse(line));\n return { reviews };\n }\n\n case \"create\": {\n const args = [\"pr\", \"review\", num];\n const event = input.event ?? \"COMMENT\";\n switch (event) {\n case \"APPROVE\":\n args.push(\"--approve\");\n break;\n case \"REQUEST_CHANGES\":\n args.push(\"--request-changes\");\n break;\n case \"COMMENT\":\n args.push(\"--comment\");\n break;\n }\n if (input.body) args.push(\"--body\", input.body);\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n return { success: true, output: stdout.trim() };\n }\n\n case \"approve\": {\n const args = [\"pr\", \"review\", num, \"--approve\"];\n if (input.body) args.push(\"--body\", input.body);\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n return { success: true, output: stdout.trim() };\n }\n\n case \"request-changes\": {\n if (!input.body)\n return { error: \"body is required for request-changes\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\"pr\", \"review\", num, \"--request-changes\", \"--body\", input.body],\n opts,\n );\n return { success: true, output: stdout.trim() };\n }\n\n case \"comment\": {\n if (!input.commentBody) return { error: \"commentBody is required\" };\n if (input.path && input.line) {\n // Inline review comment via API\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"api\",\n `repos/{owner}/{repo}/pulls/${num}/comments`,\n \"--method\",\n \"POST\",\n \"--field\",\n `body=${input.commentBody}`,\n \"--field\",\n `path=${input.path}`,\n \"--field\",\n `line=${input.line}`,\n \"--field\",\n `side=${input.side ?? \"RIGHT\"}`,\n ],\n opts,\n );\n return { success: true, comment: JSON.parse(stdout) };\n }\n // General PR comment\n const { stdout } = await execFileAsync(\n \"gh\",\n [\"pr\", \"comment\", num, \"--body\", input.commentBody],\n opts,\n );\n return { success: true, url: stdout.trim() };\n }\n\n case \"view-comments\": {\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"api\",\n `repos/{owner}/{repo}/pulls/${num}/comments`,\n \"--jq\",\n \".[] | {id: .id, user: .user.login, body: .body, path: .path, line: .line, created_at: .created_at}\",\n ],\n opts,\n );\n const comments = stdout\n .trim()\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => JSON.parse(line));\n return { comments };\n }\n\n default:\n return { error: `Unknown action: ${input.action}` };\n }\n } catch (err: any) {\n return { error: err.stderr || err.message };\n }\n },\n});\n","import { z } from \"zod\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { defineTool } from \"../base.js\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * GitHub Actions tool — CI/CD workflow management via gh CLI.\n *\n * Enables agents to:\n * - Monitor CI status before merging PRs\n * - Trigger manual workflows\n * - Cancel/rerun failed runs\n * - Download build artifacts\n * - View workflow logs for debugging\n */\nexport const ghActionsTool = defineTool({\n name: \"gh_actions\",\n description:\n \"GitHub Actions CI/CD management. Actions: workflows (list workflow definitions), runs (list recent runs with status), view-run (run details+jobs), trigger (dispatch workflow), cancel (stop a run), rerun (retry failed run), logs (download job logs), artifacts (list/download build artifacts).\",\n permission: \"confirm\",\n inputSchema: z.object({\n action: z\n .enum([\n \"workflows\",\n \"runs\",\n \"view-run\",\n \"trigger\",\n \"cancel\",\n \"rerun\",\n \"logs\",\n \"artifacts\",\n ])\n .describe(\"Actions action\"),\n // run-specific fields\n runId: z.number().optional().describe(\"Workflow run ID\"),\n // trigger fields\n workflow: z\n .string()\n .optional()\n .describe(\"Workflow filename or ID (for trigger)\"),\n ref: z.string().optional().describe(\"Branch/tag ref (for trigger)\"),\n inputs: z\n .record(z.string())\n .optional()\n .describe(\"Workflow dispatch inputs (key-value pairs)\"),\n // runs filter fields\n branch: z.string().optional().describe(\"Filter runs by branch\"),\n status: z\n .enum([\n \"queued\",\n \"in_progress\",\n \"completed\",\n \"success\",\n \"failure\",\n \"cancelled\",\n ])\n .optional()\n .describe(\"Filter runs by status\"),\n limit: z.number().optional().describe(\"Max items (default: 10)\"),\n cwd: z.string().optional().describe(\"Working directory\"),\n }),\n async execute(input) {\n const opts = { cwd: input.cwd ?? process.cwd() };\n\n try {\n switch (input.action) {\n case \"workflows\": {\n const { stdout } = await execFileAsync(\n \"gh\",\n [\"workflow\", \"list\", \"--json\", \"id,name,state,path\"],\n opts,\n );\n return { workflows: JSON.parse(stdout) };\n }\n\n case \"runs\": {\n const args = [\n \"run\",\n \"list\",\n \"--json\",\n \"databaseId,displayTitle,status,conclusion,headBranch,createdAt,updatedAt,url,workflowName\",\n \"--limit\",\n String(input.limit ?? 10),\n ];\n if (input.branch) args.push(\"--branch\", input.branch);\n if (input.status) args.push(\"--status\", input.status);\n if (input.workflow) args.push(\"--workflow\", input.workflow);\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n return { runs: JSON.parse(stdout) };\n }\n\n case \"view-run\": {\n if (!input.runId) return { error: \"runId is required\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"run\",\n \"view\",\n String(input.runId),\n \"--json\",\n \"databaseId,displayTitle,status,conclusion,headBranch,jobs,createdAt,updatedAt,url\",\n ],\n opts,\n );\n return { run: JSON.parse(stdout) };\n }\n\n case \"trigger\": {\n if (!input.workflow) return { error: \"workflow is required\" };\n const args = [\"workflow\", \"run\", input.workflow];\n if (input.ref) args.push(\"--ref\", input.ref);\n if (input.inputs) {\n for (const [key, value] of Object.entries(input.inputs)) {\n args.push(\"--field\", `${key}=${value}`);\n }\n }\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n return {\n success: true,\n output: stdout.trim() || \"Workflow triggered\",\n };\n }\n\n case \"cancel\": {\n if (!input.runId) return { error: \"runId is required\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\"run\", \"cancel\", String(input.runId)],\n opts,\n );\n return { success: true, output: stdout.trim() };\n }\n\n case \"rerun\": {\n if (!input.runId) return { error: \"runId is required\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\"run\", \"rerun\", String(input.runId), \"--failed\"],\n opts,\n );\n return { success: true, output: stdout.trim() };\n }\n\n case \"logs\": {\n if (!input.runId) return { error: \"runId is required\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\"run\", \"view\", String(input.runId), \"--log-failed\"],\n { ...opts, maxBuffer: 5_000_000 },\n );\n // Truncate logs to prevent context overflow\n const maxLen = 50_000;\n const truncated = stdout.length > maxLen;\n return {\n logs: stdout.slice(0, maxLen),\n truncated,\n totalLength: stdout.length,\n };\n }\n\n case \"artifacts\": {\n if (!input.runId) return { error: \"runId is required\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"api\",\n `repos/{owner}/{repo}/actions/runs/${input.runId}/artifacts`,\n \"--jq\",\n \".artifacts[] | {id: .id, name: .name, size_in_bytes: .size_in_bytes, created_at: .created_at, expired: .expired}\",\n ],\n opts,\n );\n const artifacts = stdout\n .trim()\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => JSON.parse(line));\n return { artifacts };\n }\n\n default:\n return { error: `Unknown action: ${input.action}` };\n }\n } catch (err: any) {\n return { error: err.stderr || err.message };\n }\n },\n});\n","import { z } from \"zod\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { defineTool } from \"../base.js\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * GitHub Release tool — release management via gh CLI.\n */\nexport const ghReleaseTool = defineTool({\n name: \"gh_release\",\n description:\n \"GitHub release management. Actions: create (with auto-generated or custom notes), list, view, delete, upload (attach files to release), download (get release assets).\",\n permission: \"confirm\",\n inputSchema: z.object({\n action: z\n .enum([\"create\", \"list\", \"view\", \"delete\", \"upload\", \"download\"])\n .describe(\"Release action\"),\n // create fields\n tag: z.string().optional().describe(\"Tag name (e.g., v1.0.0)\"),\n title: z.string().optional().describe(\"Release title\"),\n notes: z.string().optional().describe(\"Release notes (markdown)\"),\n target: z.string().optional().describe(\"Target branch/commit\"),\n draft: z.boolean().optional().describe(\"Create as draft\"),\n prerelease: z.boolean().optional().describe(\"Mark as prerelease\"),\n generateNotes: z\n .boolean()\n .optional()\n .describe(\"Auto-generate notes from commits\"),\n // upload/download fields\n files: z\n .array(z.string())\n .optional()\n .describe(\"File paths to upload as assets\"),\n pattern: z.string().optional().describe(\"Glob pattern for download assets\"),\n // view/delete fields — use tag\n limit: z.number().optional().describe(\"Max items (default: 10)\"),\n cwd: z.string().optional().describe(\"Working directory\"),\n }),\n async execute(input) {\n const opts = { cwd: input.cwd ?? process.cwd() };\n\n try {\n switch (input.action) {\n case \"create\": {\n if (!input.tag) return { error: \"tag is required\" };\n const args = [\"release\", \"create\", input.tag];\n if (input.title) args.push(\"--title\", input.title);\n if (input.notes) args.push(\"--notes\", input.notes);\n if (input.target) args.push(\"--target\", input.target);\n if (input.draft) args.push(\"--draft\");\n if (input.prerelease) args.push(\"--prerelease\");\n if (input.generateNotes) args.push(\"--generate-notes\");\n if (input.files?.length) args.push(...input.files);\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n return { success: true, url: stdout.trim() };\n }\n\n case \"list\": {\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"release\",\n \"list\",\n \"--json\",\n \"tagName,name,isDraft,isPrerelease,publishedAt,url\",\n \"--limit\",\n String(input.limit ?? 10),\n ],\n opts,\n );\n return { releases: JSON.parse(stdout) };\n }\n\n case \"view\": {\n if (!input.tag) return { error: \"tag is required\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"release\",\n \"view\",\n input.tag,\n \"--json\",\n \"tagName,name,body,isDraft,isPrerelease,publishedAt,assets,url,author\",\n ],\n opts,\n );\n return { release: JSON.parse(stdout) };\n }\n\n case \"delete\": {\n if (!input.tag) return { error: \"tag is required\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\"release\", \"delete\", input.tag, \"--yes\"],\n opts,\n );\n return { success: true, output: stdout.trim() };\n }\n\n case \"upload\": {\n if (!input.tag) return { error: \"tag is required\" };\n if (!input.files?.length) return { error: \"files is required\" };\n const { stdout } = await execFileAsync(\n \"gh\",\n [\"release\", \"upload\", input.tag, ...input.files],\n opts,\n );\n return { success: true, output: stdout.trim() };\n }\n\n case \"download\": {\n if (!input.tag) return { error: \"tag is required\" };\n const args = [\"release\", \"download\", input.tag];\n if (input.pattern) args.push(\"--pattern\", input.pattern);\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n return { success: true, output: stdout.trim() };\n }\n\n default:\n return { error: `Unknown action: ${input.action}` };\n }\n } catch (err: any) {\n return { error: err.stderr || err.message };\n }\n },\n});\n","import { z } from \"zod\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { defineTool } from \"../base.js\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * GitHub Search tool — cross-repo code, issue, and commit search.\n *\n * Critical for context gathering — find related code, prior issues,\n * and commit history across the entire GitHub ecosystem.\n */\nexport const ghSearchTool = defineTool({\n name: \"gh_search\",\n description:\n \"GitHub search across repos. Actions: code (find code by content/filename/language), issues (search issues+PRs with filters), commits (search commit messages), repos (find repositories by topic/language/stars), prs (search pull requests specifically).\",\n permission: \"auto\",\n readonly: true,\n inputSchema: z.object({\n action: z\n .enum([\"code\", \"issues\", \"commits\", \"repos\", \"prs\"])\n .describe(\"Search type\"),\n query: z.string().describe(\"Search query (GitHub search syntax)\"),\n // common filters\n repo: z.string().optional().describe(\"Limit to repo (owner/repo)\"),\n owner: z.string().optional().describe(\"Limit to owner/org\"),\n language: z.string().optional().describe(\"Filter by language\"),\n // code-specific\n filename: z.string().optional().describe(\"Filter by filename\"),\n extension: z.string().optional().describe(\"Filter by file extension\"),\n // issue-specific\n state: z.enum([\"open\", \"closed\"]).optional().describe(\"Filter by state\"),\n label: z.string().optional().describe(\"Filter by label\"),\n // common\n limit: z.number().optional().describe(\"Max results (default: 10)\"),\n sort: z.string().optional().describe(\"Sort field\"),\n order: z.enum([\"asc\", \"desc\"]).optional().describe(\"Sort order\"),\n cwd: z.string().optional().describe(\"Working directory\"),\n }),\n async execute(input) {\n const opts = { cwd: input.cwd ?? process.cwd() };\n\n try {\n // Build the query with filters\n // Note: repo/owner use --repo/--owner flags, not query string,\n // because gh CLI wraps the query and escapes colons in repo: syntax.\n let q = input.query;\n if (input.language) q += ` language:${input.language}`;\n const repoFlags: string[] = [];\n if (input.repo) repoFlags.push(\"--repo\", input.repo);\n if (input.owner) repoFlags.push(\"--owner\", input.owner);\n\n switch (input.action) {\n case \"code\": {\n if (input.filename) q += ` filename:${input.filename}`;\n if (input.extension) q += ` extension:${input.extension}`;\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"search\",\n \"code\",\n q,\n ...repoFlags,\n \"--json\",\n \"repository,path,textMatches\",\n \"--limit\",\n String(input.limit ?? 10),\n ],\n opts,\n );\n return { results: JSON.parse(stdout) };\n }\n\n case \"issues\": {\n if (input.state) q += ` state:${input.state}`;\n if (input.label) q += ` label:${input.label}`;\n const issueArgs = [\n \"search\",\n \"issues\",\n q,\n ...repoFlags,\n \"--json\",\n \"number,title,state,repository,author,labels,url,createdAt\",\n \"--limit\",\n String(input.limit ?? 10),\n ];\n if (input.sort) issueArgs.push(\"--sort\", input.sort);\n if (input.order) issueArgs.push(\"--order\", input.order);\n const { stdout: issueOut } = await execFileAsync(\n \"gh\",\n issueArgs,\n opts,\n );\n return { results: JSON.parse(issueOut) };\n }\n\n case \"prs\": {\n if (input.state) q += ` state:${input.state}`;\n if (input.label) q += ` label:${input.label}`;\n const prArgs = [\n \"search\",\n \"prs\",\n q,\n ...repoFlags,\n \"--json\",\n \"number,title,state,repository,author,labels,url,createdAt\",\n \"--limit\",\n String(input.limit ?? 10),\n ];\n if (input.sort) prArgs.push(\"--sort\", input.sort);\n if (input.order) prArgs.push(\"--order\", input.order);\n const { stdout: prOut } = await execFileAsync(\"gh\", prArgs, opts);\n return { results: JSON.parse(prOut) };\n }\n\n case \"commits\": {\n const commitArgs = [\n \"search\",\n \"commits\",\n q,\n ...repoFlags,\n \"--json\",\n \"sha,commit,repository,url\",\n \"--limit\",\n String(input.limit ?? 10),\n ];\n if (input.sort) commitArgs.push(\"--sort\", input.sort);\n if (input.order) commitArgs.push(\"--order\", input.order);\n const { stdout: commitOut } = await execFileAsync(\n \"gh\",\n commitArgs,\n opts,\n );\n return { results: JSON.parse(commitOut) };\n }\n\n case \"repos\": {\n const repoArgs = [\n \"search\",\n \"repos\",\n q,\n ...repoFlags,\n \"--json\",\n \"fullName,description,stargazersCount,language,url,updatedAt,isArchived\",\n \"--limit\",\n String(input.limit ?? 10),\n ];\n if (input.sort) repoArgs.push(\"--sort\", input.sort);\n if (input.order) repoArgs.push(\"--order\", input.order);\n const { stdout: repoOut } = await execFileAsync(\"gh\", repoArgs, opts);\n return { results: JSON.parse(repoOut) };\n }\n\n default:\n return { error: `Unknown action: ${input.action}` };\n }\n } catch (err: any) {\n return { error: err.stderr || err.message };\n }\n },\n});\n","import { z } from \"zod\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { defineTool } from \"../base.js\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * GitHub Security tool — vulnerability and compliance management.\n *\n * Enables agents to monitor and respond to security alerts,\n * track dependency vulnerabilities, and export SBOMs.\n */\nexport const ghSecurityTool = defineTool({\n name: \"gh_security\",\n description:\n \"GitHub security management. Actions: dependabot (list/view/dismiss dependency vulnerability alerts), code-scanning (list/view CodeQL alerts), secret-scanning (list/view exposed secret alerts), sbom (export software bill of materials).\",\n permission: \"confirm\",\n inputSchema: z.object({\n action: z\n .enum([\"dependabot\", \"code-scanning\", \"secret-scanning\", \"sbom\"])\n .describe(\"Security action\"),\n // sub-action for alert types\n subAction: z\n .enum([\"list\", \"view\", \"dismiss\", \"reopen\"])\n .optional()\n .describe(\"Sub-action (default: list)\"),\n // alert fields\n alertNumber: z\n .number()\n .optional()\n .describe(\"Alert number (for view/dismiss)\"),\n dismissReason: z\n .string()\n .optional()\n .describe(\"Reason for dismissing alert\"),\n // filter fields\n state: z\n .enum([\"open\", \"closed\", \"dismissed\", \"fixed\"])\n .optional()\n .describe(\"Filter by state\"),\n severity: z\n .enum([\"critical\", \"high\", \"medium\", \"low\"])\n .optional()\n .describe(\"Filter by severity\"),\n limit: z.number().optional().describe(\"Max items (default: 10)\"),\n cwd: z.string().optional().describe(\"Working directory\"),\n }),\n async execute(input) {\n const opts = { cwd: input.cwd ?? process.cwd() };\n const sub = input.subAction ?? \"list\";\n\n try {\n switch (input.action) {\n case \"dependabot\": {\n if (sub === \"list\") {\n const args = [\n \"api\",\n \"repos/{owner}/{repo}/dependabot/alerts\",\n \"--jq\",\n \".[] | {number: .number, state: .state, severity: .security_advisory.severity, package: .dependency.package.name, ecosystem: .dependency.package.ecosystem, summary: .security_advisory.summary, url: .html_url}\",\n ];\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n let alerts = stdout\n .trim()\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => JSON.parse(line));\n if (input.state)\n alerts = alerts.filter((a: any) => a.state === input.state);\n if (input.severity)\n alerts = alerts.filter((a: any) => a.severity === input.severity);\n return { alerts: alerts.slice(0, input.limit ?? 10) };\n }\n if (sub === \"view\" && input.alertNumber) {\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"api\",\n `repos/{owner}/{repo}/dependabot/alerts/${input.alertNumber}`,\n ],\n opts,\n );\n return { alert: JSON.parse(stdout) };\n }\n if (sub === \"dismiss\" && input.alertNumber) {\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"api\",\n `repos/{owner}/{repo}/dependabot/alerts/${input.alertNumber}`,\n \"--method\",\n \"PATCH\",\n \"--field\",\n \"state=dismissed\",\n \"--field\",\n `dismissed_reason=${input.dismissReason ?? \"tolerable_risk\"}`,\n ],\n opts,\n );\n return { success: true, alert: JSON.parse(stdout) };\n }\n return { error: \"Invalid subAction or missing alertNumber\" };\n }\n\n case \"code-scanning\": {\n if (sub === \"list\") {\n const args = [\n \"api\",\n \"repos/{owner}/{repo}/code-scanning/alerts\",\n \"--jq\",\n \".[] | {number: .number, state: .state, severity: .rule.severity, rule: .rule.id, description: .rule.description, tool: .tool.name, url: .html_url}\",\n ];\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n let alerts = stdout\n .trim()\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => JSON.parse(line));\n if (input.state)\n alerts = alerts.filter((a: any) => a.state === input.state);\n if (input.severity)\n alerts = alerts.filter((a: any) => a.severity === input.severity);\n return { alerts: alerts.slice(0, input.limit ?? 10) };\n }\n if (sub === \"view\" && input.alertNumber) {\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"api\",\n `repos/{owner}/{repo}/code-scanning/alerts/${input.alertNumber}`,\n ],\n opts,\n );\n return { alert: JSON.parse(stdout) };\n }\n return { error: \"Invalid subAction or missing alertNumber\" };\n }\n\n case \"secret-scanning\": {\n if (sub === \"list\") {\n const args = [\n \"api\",\n \"repos/{owner}/{repo}/secret-scanning/alerts\",\n \"--jq\",\n \".[] | {number: .number, state: .state, secret_type: .secret_type, secret_type_display_name: .secret_type_display_name, url: .html_url, created_at: .created_at}\",\n ];\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n let alerts = stdout\n .trim()\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => JSON.parse(line));\n if (input.state)\n alerts = alerts.filter((a: any) => a.state === input.state);\n return { alerts: alerts.slice(0, input.limit ?? 10) };\n }\n if (sub === \"view\" && input.alertNumber) {\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"api\",\n `repos/{owner}/{repo}/secret-scanning/alerts/${input.alertNumber}`,\n ],\n opts,\n );\n return { alert: JSON.parse(stdout) };\n }\n return { error: \"Invalid subAction or missing alertNumber\" };\n }\n\n case \"sbom\": {\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"api\",\n \"repos/{owner}/{repo}/dependency-graph/sbom\",\n \"--jq\",\n \".sbom\",\n ],\n opts,\n );\n return { sbom: JSON.parse(stdout) };\n }\n\n default:\n return { error: `Unknown action: ${input.action}` };\n }\n } catch (err: any) {\n return { error: err.stderr || err.message };\n }\n },\n});\n","import { z } from \"zod\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { defineTool } from \"../base.js\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * GitHub Repository tool — repo metadata, collaborators, and branch protection.\n *\n * Enables agents to understand the repo environment: who has access,\n * what branches are protected, merge requirements, and repo settings.\n */\nexport const ghRepoTool = defineTool({\n name: \"gh_repo\",\n description:\n \"GitHub repository management. Actions: info (repo metadata, visibility, default branch), collaborators (list with permission levels), branch-protection (view rules for a branch), topics (list/set repo topics), labels (list/create/delete labels), milestones (list/create milestones), fork (fork a repo), clone-url (get clone URLs).\",\n permission: \"auto\",\n readonly: true,\n inputSchema: z.object({\n action: z\n .enum([\n \"info\",\n \"collaborators\",\n \"branch-protection\",\n \"topics\",\n \"labels\",\n \"milestones\",\n \"fork\",\n \"clone-url\",\n ])\n .describe(\"Repo action\"),\n // repo identifier (defaults to current repo)\n repo: z.string().optional().describe(\"Repository (owner/repo)\"),\n // branch-protection\n branch: z\n .string()\n .optional()\n .describe(\"Branch name (for branch-protection)\"),\n // topics\n setTopics: z\n .array(z.string())\n .optional()\n .describe(\"Set topics (replaces existing)\"),\n // labels\n labelName: z.string().optional().describe(\"Label name\"),\n labelColor: z.string().optional().describe(\"Label color hex (without #)\"),\n labelDescription: z.string().optional().describe(\"Label description\"),\n // milestones\n milestoneTitle: z.string().optional().describe(\"Milestone title\"),\n milestoneDueDate: z.string().optional().describe(\"Due date (YYYY-MM-DD)\"),\n // common\n limit: z.number().optional().describe(\"Max items (default: 20)\"),\n cwd: z.string().optional().describe(\"Working directory\"),\n }),\n async execute(input) {\n const opts = { cwd: input.cwd ?? process.cwd() };\n const repoFlag = input.repo ? [\"--repo\", input.repo] : [];\n\n try {\n switch (input.action) {\n case \"info\": {\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"repo\",\n \"view\",\n ...repoFlag,\n \"--json\",\n \"name,owner,description,url,defaultBranchRef,isPrivate,isFork,stargazerCount,forkCount,diskUsage,languages,licenseInfo,createdAt,pushedAt,homepageUrl\",\n ],\n opts,\n );\n return { repo: JSON.parse(stdout) };\n }\n\n case \"collaborators\": {\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"api\",\n input.repo\n ? `repos/${input.repo}/collaborators`\n : \"repos/{owner}/{repo}/collaborators\",\n \"--jq\",\n \".[] | {login: .login, role: .role_name, permissions: .permissions}\",\n ],\n opts,\n );\n const collaborators = stdout\n .trim()\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => JSON.parse(line));\n return { collaborators };\n }\n\n case \"branch-protection\": {\n const br = input.branch ?? \"main\";\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"api\",\n input.repo\n ? `repos/${input.repo}/branches/${br}/protection`\n : `repos/{owner}/{repo}/branches/${br}/protection`,\n ],\n opts,\n );\n return { protection: JSON.parse(stdout) };\n }\n\n case \"topics\": {\n if (input.setTopics) {\n // Set topics (mutating) — use --raw-field for JSON array\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"api\",\n input.repo\n ? `repos/${input.repo}/topics`\n : \"repos/{owner}/{repo}/topics\",\n \"--method\",\n \"PUT\",\n \"--raw-field\",\n `names=${JSON.stringify(input.setTopics)}`,\n ],\n opts,\n );\n return { success: true, topics: JSON.parse(stdout) };\n }\n // List topics\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"api\",\n input.repo\n ? `repos/${input.repo}/topics`\n : \"repos/{owner}/{repo}/topics\",\n \"--jq\",\n \".names\",\n ],\n opts,\n );\n return { topics: JSON.parse(stdout) };\n }\n\n case \"labels\": {\n if (input.labelName && input.labelColor) {\n // Create label (mutating)\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"api\",\n input.repo\n ? `repos/${input.repo}/labels`\n : \"repos/{owner}/{repo}/labels\",\n \"--method\",\n \"POST\",\n \"--field\",\n `name=${input.labelName}`,\n \"--field\",\n `color=${input.labelColor}`,\n \"--field\",\n `description=${input.labelDescription ?? \"\"}`,\n ],\n opts,\n );\n return { success: true, label: JSON.parse(stdout) };\n }\n // List labels\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"api\",\n input.repo\n ? `repos/${input.repo}/labels`\n : \"repos/{owner}/{repo}/labels\",\n \"--jq\",\n \".[] | {name: .name, color: .color, description: .description}\",\n ],\n opts,\n );\n const labels = stdout\n .trim()\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => JSON.parse(line));\n return { labels: labels.slice(0, input.limit ?? 20) };\n }\n\n case \"milestones\": {\n if (input.milestoneTitle) {\n // Create milestone (mutating)\n const args = [\n \"api\",\n input.repo\n ? `repos/${input.repo}/milestones`\n : \"repos/{owner}/{repo}/milestones\",\n \"--method\",\n \"POST\",\n \"--field\",\n `title=${input.milestoneTitle}`,\n ];\n if (input.milestoneDueDate) {\n args.push(\n \"--field\",\n `due_on=${input.milestoneDueDate}T00:00:00Z`,\n );\n }\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n return { success: true, milestone: JSON.parse(stdout) };\n }\n // List milestones\n const { stdout } = await execFileAsync(\n \"gh\",\n [\n \"api\",\n input.repo\n ? `repos/${input.repo}/milestones`\n : \"repos/{owner}/{repo}/milestones\",\n \"--jq\",\n \".[] | {number: .number, title: .title, state: .state, open_issues: .open_issues, closed_issues: .closed_issues, due_on: .due_on}\",\n ],\n opts,\n );\n const milestones = stdout\n .trim()\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => JSON.parse(line));\n return { milestones };\n }\n\n case \"fork\": {\n const args = [\"repo\", \"fork\", ...repoFlag, \"--clone=false\"];\n const { stdout } = await execFileAsync(\"gh\", args, opts);\n return { success: true, output: stdout.trim() };\n }\n\n case \"clone-url\": {\n const { stdout } = await execFileAsync(\n \"gh\",\n [\"repo\", \"view\", ...repoFlag, \"--json\", \"sshUrl,url\"],\n opts,\n );\n return JSON.parse(stdout);\n }\n\n default:\n return { error: `Unknown action: ${input.action}` };\n }\n } catch (err: any) {\n return { error: err.stderr || err.message };\n }\n },\n});\n","import { z } from \"zod\";\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { defineTool } from \"../base.js\";\n\nconst execFileAsync = promisify(execFile);\n\nconst PROTECTED_BRANCHES = new Set([\"main\", \"master\", \"production\", \"release\"]);\n\nexport const gitBranchTool = defineTool({\n name: \"git_branch\",\n description:\n \"Manage git branches — create, switch, delete, or list. Protects main/master from deletion. Warns about uncommitted changes before switching.\",\n permission: \"confirm\",\n inputSchema: z.object({\n action: z\n .enum([\"create\", \"switch\", \"delete\", \"list\"])\n .describe(\"Branch action\"),\n name: z\n .string()\n .optional()\n .describe(\"Branch name (required for create/switch/delete)\"),\n startPoint: z\n .string()\n .optional()\n .describe(\"Starting point for new branch (default: HEAD)\"),\n cwd: z.string().optional().describe(\"Working directory\"),\n }),\n async execute({ action, name, startPoint, cwd }) {\n const opts = { cwd: cwd ?? process.cwd() };\n\n try {\n switch (action) {\n case \"create\":\n return await createBranch(name, startPoint, opts);\n case \"switch\":\n return await switchBranch(name, opts);\n case \"delete\":\n return await deleteBranch(name, opts);\n case \"list\":\n return await listBranches(opts);\n default:\n return { error: `Unknown action: ${action}` };\n }\n } catch (err: any) {\n return { error: err.stderr || err.message };\n }\n },\n});\n\nasync function createBranch(\n name: string | undefined,\n startPoint: string | undefined,\n opts: { cwd: string },\n) {\n if (!name) return { error: 'name is required for \"create\" action' };\n\n const args = [\"checkout\", \"-b\", name];\n if (startPoint) args.push(startPoint);\n\n const { stdout } = await execFileAsync(\"git\", args, opts);\n return { success: true, branch: name, output: stdout.trim() };\n}\n\nasync function switchBranch(name: string | undefined, opts: { cwd: string }) {\n if (!name) return { error: 'name is required for \"switch\" action' };\n\n // Check for uncommitted changes\n const { stdout: status } = await execFileAsync(\n \"git\",\n [\"status\", \"--porcelain\"],\n opts,\n );\n if (status.trim()) {\n return {\n error:\n \"Uncommitted changes detected. Stash or commit them first (use git_stash).\",\n uncommittedFiles: status.trim().split(\"\\n\").length,\n status: status.trim(),\n };\n }\n\n const { stdout } = await execFileAsync(\"git\", [\"checkout\", name], opts);\n return { success: true, branch: name, output: stdout.trim() };\n}\n\nasync function deleteBranch(name: string | undefined, opts: { cwd: string }) {\n if (!name) return { error: 'name is required for \"delete\" action' };\n\n if (PROTECTED_BRANCHES.has(name)) {\n return {\n error: `Cannot delete protected branch \"${name}\". Protected branches: ${[...PROTECTED_BRANCHES].join(\", \")}`,\n };\n }\n\n // Use -d (safe delete — only if fully merged)\n const { stdout } = await execFileAsync(\"git\", [\"branch\", \"-d\", name], opts);\n return { success: true, deleted: name, output: stdout.trim() };\n}\n\nasync function listBranches(opts: { cwd: string }) {\n const { stdout } = await execFileAsync(\n \"git\",\n [\n \"branch\",\n \"-a\",\n \"--format=%(refname:short) %(objectname:short) %(upstream:short) %(HEAD)\",\n ],\n opts,\n );\n\n const branches = stdout\n .trim()\n .split(\"\\n\")\n .filter(Boolean)\n .map((line) => {\n const parts = line.trim().split(\" \");\n const isCurrent = parts[parts.length - 1] === \"*\";\n return {\n name: parts[0],\n commit: parts[1],\n upstream: parts[2] || null,\n current: isCurrent,\n };\n });\n\n return { branches };\n}\n","import { z } from 'zod';\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport { defineTool } from '../base.js';\n\nconst execFileAsync = promisify(execFile);\n\nexport const gitStashTool = defineTool({\n name: 'git_stash',\n description:\n 'Manage git stash — push changes to stash, pop/apply from stash, or list stashed entries. Useful before switching branches with uncommitted work.',\n permission: 'confirm',\n inputSchema: z.object({\n action: z.enum(['push', 'pop', 'apply', 'list', 'drop']).describe('Stash action'),\n message: z.string().optional().describe('Stash message (for \"push\")'),\n index: z.number().optional().describe('Stash index (for pop/apply/drop, default: 0)'),\n cwd: z.string().optional().describe('Working directory'),\n }),\n async execute({ action, message, index, cwd }) {\n const opts = { cwd: cwd ?? process.cwd() };\n\n try {\n switch (action) {\n case 'push': {\n const args = ['stash', 'push'];\n if (message) args.push('-m', message);\n const { stdout } = await execFileAsync('git', args, opts);\n return { success: true, output: stdout.trim() };\n }\n case 'pop': {\n const ref = `stash@{${index ?? 0}}`;\n const { stdout } = await execFileAsync('git', ['stash', 'pop', ref], opts);\n return { success: true, output: stdout.trim() };\n }\n case 'apply': {\n const ref = `stash@{${index ?? 0}}`;\n const { stdout } = await execFileAsync('git', ['stash', 'apply', ref], opts);\n return { success: true, output: stdout.trim() };\n }\n case 'list': {\n const { stdout } = await execFileAsync('git', ['stash', 'list'], opts);\n const entries = stdout\n .trim()\n .split('\\n')\n .filter(Boolean)\n .map((line) => {\n const match = line.match(/^(stash@\\{\\d+\\}):\\s*(.+)$/);\n return match ? { ref: match[1], description: match[2] } : { ref: '', description: line };\n });\n return { entries, count: entries.length };\n }\n case 'drop': {\n const ref = `stash@{${index ?? 0}}`;\n const { stdout } = await execFileAsync('git', ['stash', 'drop', ref], opts);\n return { success: true, output: stdout.trim() };\n }\n default:\n return { error: `Unknown action: ${action}` };\n }\n } catch (err: any) {\n return { error: err.stderr || err.message };\n }\n },\n});\n","import { z } from \"zod\";\nimport { readdirSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { defineTool } from \"../base.js\";\nimport { getWorkspace } from \"../workspace-context.js\";\n\nexport const listDirTool = defineTool({\n name: \"list_dir\",\n description: \"List directory contents with file sizes and types.\",\n permission: \"auto\",\n inputSchema: z.object({\n path: z.string().optional().describe(\"Directory path (default: current)\"),\n recursive: z\n .boolean()\n .optional()\n .describe(\"List recursively (default: false)\"),\n }),\n async execute({ path, recursive }) {\n const dir = path ?? getWorkspace();\n const entries: Array<{ name: string; type: string; size: number }> = [];\n\n function scan(d: string, prefix = \"\") {\n for (const entry of readdirSync(d, { withFileTypes: true })) {\n if (\n entry.name.startsWith(\".\") ||\n entry.name === \"node_modules\" ||\n entry.name === \"dist\"\n )\n continue;\n const fullPath = join(d, entry.name);\n const displayName = prefix ? `${prefix}/${entry.name}` : entry.name;\n if (entry.isDirectory()) {\n entries.push({ name: displayName + \"/\", type: \"dir\", size: 0 });\n if (recursive) scan(fullPath, displayName);\n } else {\n try {\n const stat = statSync(fullPath);\n entries.push({ name: displayName, type: \"file\", size: stat.size });\n } catch {\n entries.push({ name: displayName, type: \"file\", size: 0 });\n }\n }\n }\n }\n\n scan(dir);\n return {\n entries: entries.slice(0, 200),\n total: entries.length,\n truncated: entries.length > 200,\n };\n },\n});\n","import { z } from \"zod\";\nimport {\n readFileSync,\n writeFileSync,\n renameSync,\n existsSync,\n unlinkSync,\n} from \"node:fs\";\nimport { resolve, relative } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { randomUUID } from \"node:crypto\";\nimport { defineTool } from \"../base.js\";\nimport { applyEdits } from \"./edit-common.js\";\nimport { getWorkspace } from \"../workspace-context.js\";\nimport { assertNotSensitivePath } from \"./sensitive-paths.js\";\n\nfunction ensureSafePath(filePath: string): string {\n const cwd = getWorkspace();\n const resolved = resolve(cwd, filePath);\n const home = homedir();\n\n // Block credential files before the home-dir allowance — same\n // F5-class fix as file-read/edit/write. See sensitive-paths.ts.\n assertNotSensitivePath(resolved);\n\n // Match file-write.ts/file-edit.ts: /var is NOT blocked wholesale because\n // macOS tmpdir lives at /var/folders/... (symlinked from /private/var/folders).\n // multi_edit previously blocked all of /var, so it refused to operate in\n // the same tmp workspace where file_write and file_edit worked fine — an\n // orchestration agent would get inconsistent results and loop.\n const isSafeTmpVar =\n resolved.startsWith(\"/var/folders/\") ||\n resolved.startsWith(\"/private/var/folders/\") ||\n resolved.startsWith(\"/var/tmp/\") ||\n resolved.startsWith(\"/private/var/tmp/\") ||\n // Linux tmpdir — see file-read.ts for rationale.\n resolved === \"/tmp\" ||\n resolved.startsWith(\"/tmp/\");\n if (!isSafeTmpVar && resolved.startsWith(\"/var\")) {\n throw new Error(`Path blocked: \"${filePath}\" is a protected system path`);\n }\n const BLOCKED = [\"/etc\", \"/usr\", \"/proc\", \"/sys\", \"/dev\", \"/sbin\", \"/boot\"];\n if (BLOCKED.some((p) => resolved.startsWith(p))) {\n throw new Error(`Path blocked: \"${filePath}\" is a protected system path`);\n }\n const isInHome = resolved.startsWith(home);\n const isInCwd = !relative(cwd, resolved).startsWith(\"..\");\n if (!isInHome && !isInCwd && !isSafeTmpVar) {\n throw new Error(\n `Path blocked: \"${filePath}\" is outside home directory and workspace`,\n );\n }\n return resolved;\n}\n\nexport const multiEditTool = defineTool({\n name: \"multi_edit\",\n description:\n \"Perform multiple find-and-replace edits in a single file atomically.\",\n permission: \"confirm\",\n inputSchema: z.object({\n path: z.string().describe(\"Path to the file to edit\"),\n edits: z\n .array(\n z.object({\n old_string: z.string().describe(\"Exact string to find\"),\n new_string: z.string().describe(\"Replacement string\"),\n }),\n )\n .describe(\"Array of find-and-replace operations\"),\n }),\n async execute({ path, edits }) {\n let safePath: string;\n try {\n safePath = ensureSafePath(path);\n } catch (e: any) {\n return { error: e.message };\n }\n if (!existsSync(safePath)) return { error: `File not found: ${path}` };\n\n const original = readFileSync(safePath, \"utf-8\");\n const { content, results, appliedCount } = applyEdits(original, edits);\n\n if (appliedCount > 0) {\n const { getCheckpointManager } = await import(\"../checkpoint.js\");\n const cp = getCheckpointManager();\n if (cp) cp.snapshot(safePath);\n // Atomic write: tmp file then rename. Clean up the tmp file on failure\n // so retries don't leave stale \".tmp\" files in the user's directories\n // (matches file-write.ts's pattern).\n const tmpPath = `${safePath}.${randomUUID().slice(0, 8)}.tmp`;\n try {\n writeFileSync(tmpPath, content, \"utf-8\");\n renameSync(tmpPath, safePath);\n } catch (e) {\n try {\n unlinkSync(tmpPath);\n } catch {\n /* best-effort cleanup of temp file */\n }\n throw e;\n }\n }\n\n return {\n path: safePath,\n applied: appliedCount,\n total: edits.length,\n results,\n };\n },\n});\n","/**\n * Shared edit logic used by file_edit, multi_edit, and batch_edit.\n * Centralizes the find-count-replace pattern to avoid duplication.\n */\n\nexport interface EditResult {\n applied: boolean;\n content?: string;\n error?: string;\n occurrences?: number;\n}\n\n/**\n * Apply a single string replacement to content.\n * Returns the updated content if successful, or an error message if not.\n */\nexport function applyEdit(\n content: string,\n oldString: string,\n newString: string,\n): EditResult {\n const occurrences = content.split(oldString).length - 1;\n\n if (occurrences === 0) {\n return { applied: false, error: \"not found\" };\n }\n if (occurrences > 1) {\n return {\n applied: false,\n error: `${occurrences} occurrences (must be unique)`,\n occurrences,\n };\n }\n\n // Function-form replacement — the STRING form interprets $1/$&/$`/$'\n // in newString as regex backreferences. Without this, a tool call\n // like file_edit({ new_string: \"regex /^(foo)$/\" }) would have \"$/\"\n // and other $-sequences silently stripped on write. Matters for\n // agent-generated shell scripts, regex patterns, and any code with\n // dollar signs (e.g., `${VAR}` expansion, jQuery `$()`, etc.).\n return {\n applied: true,\n content: content.replace(oldString, () => newString),\n };\n}\n\n/**\n * Apply multiple edits to content sequentially.\n * Returns the final content and per-edit results.\n */\nexport function applyEdits(\n content: string,\n edits: Array<{ old_string: string; new_string: string }>,\n): {\n content: string;\n results: Array<{ old: string; applied: boolean; reason?: string }>;\n appliedCount: number;\n} {\n let current = content;\n const results: Array<{ old: string; applied: boolean; reason?: string }> = [];\n let appliedCount = 0;\n\n for (const edit of edits) {\n const result = applyEdit(current, edit.old_string, edit.new_string);\n if (result.applied && result.content) {\n current = result.content;\n results.push({ old: edit.old_string.slice(0, 40), applied: true });\n appliedCount++;\n } else {\n results.push({\n old: edit.old_string.slice(0, 40),\n applied: false,\n reason: result.error,\n });\n }\n }\n\n return { content: current, results, appliedCount };\n}\n","import { z } from \"zod\";\nimport { readFileSync, writeFileSync, existsSync } from \"node:fs\";\nimport { resolve, relative } from \"node:path\";\nimport { defineTool } from \"../base.js\";\nimport { getWorkspace } from \"../workspace-context.js\";\n\nfunction ensureSafePath(filePath: string): string {\n const cwd = getWorkspace();\n const resolved = resolve(cwd, filePath);\n const rel = relative(cwd, resolved);\n if (rel.startsWith(\"..\") || rel.startsWith(\"/\")) {\n throw new Error(`Path traversal blocked: \"${filePath}\" escapes workspace`);\n }\n return resolved;\n}\n\ninterface FileEditResult {\n path: string;\n applied: number;\n total: number;\n errors: string[];\n}\n\n/**\n * Apply edits across multiple files in a single tool call.\n * Two-phase execution: validate all edits, then apply.\n * Partial success: files with valid edits are written even if other files fail.\n */\nexport const batchEditTool = defineTool({\n name: \"batch_edit\",\n description:\n \"Apply find-and-replace edits across multiple files in one operation. Each file gets its own list of edits. Reduces round-trips for multi-file refactors.\",\n permission: \"confirm\",\n inputSchema: z.object({\n files: z\n .array(\n z.object({\n path: z.string().describe(\"Path to the file\"),\n edits: z\n .array(\n z.object({\n old_string: z\n .string()\n .describe(\n \"Exact string to find (must be unique in the file)\",\n ),\n new_string: z.string().describe(\"Replacement string\"),\n }),\n )\n .min(1),\n }),\n )\n .min(1)\n .describe(\"List of files, each with its own edits\"),\n }),\n async execute({ files }) {\n const results: FileEditResult[] = [];\n\n for (const file of files) {\n const fileResult: FileEditResult = {\n path: file.path,\n applied: 0,\n total: file.edits.length,\n errors: [],\n };\n\n // Validate path\n let safePath: string;\n try {\n safePath = ensureSafePath(file.path);\n } catch (e: any) {\n fileResult.errors.push(e.message);\n results.push(fileResult);\n continue;\n }\n\n if (!existsSync(safePath)) {\n fileResult.errors.push(`File not found: ${file.path}`);\n results.push(fileResult);\n continue;\n }\n\n let content = readFileSync(safePath, \"utf-8\");\n\n // Validate and apply each edit\n for (const edit of file.edits) {\n const count = content.split(edit.old_string).length - 1;\n if (count === 0) {\n fileResult.errors.push(\n `Not found: \"${edit.old_string.slice(0, 50)}${edit.old_string.length > 50 ? \"...\" : \"\"}\"`,\n );\n continue;\n }\n if (count > 1) {\n fileResult.errors.push(\n `${count} occurrences: \"${edit.old_string.slice(0, 50)}${edit.old_string.length > 50 ? \"...\" : \"\"}\" — must be unique`,\n );\n continue;\n }\n content = content.replace(edit.old_string, edit.new_string);\n fileResult.applied++;\n }\n\n // Write if any edits succeeded\n if (fileResult.applied > 0) {\n const { getCheckpointManager } = await import(\"../checkpoint.js\");\n const cp = getCheckpointManager();\n if (cp) cp.snapshot(safePath);\n writeFileSync(safePath, content, \"utf-8\");\n }\n\n results.push(fileResult);\n }\n\n const filesModified = results.filter((r) => r.applied > 0).length;\n const totalEditsApplied = results.reduce((sum, r) => sum + r.applied, 0);\n const totalEdits = results.reduce((sum, r) => sum + r.total, 0);\n\n return {\n filesModified,\n totalFiles: files.length,\n editsApplied: totalEditsApplied,\n totalEdits,\n results,\n };\n },\n});\n","import { z } from \"zod\";\nimport { defineTool } from \"../base.js\";\n\n// ── Anti-Fingerprinting ────────────────────────────────────────────\n// Rotating User-Agent pool prevents adversarial sites from detecting\n// and targeting Brainstorm agents specifically. Static \"BrainstormCLI/0.1\"\n// was identified as a fingerprinting vector in the Agent Traps analysis.\n\nconst USER_AGENTS = [\n \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36\",\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36\",\n \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.2 Safari/605.1.15\",\n \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36\",\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\",\n];\n\nlet uaIndex = 0;\n/**\n * Rotating User-Agent. Exported so other web-adjacent tools\n * (web_search in particular) can share the anti-fingerprinting\n * pool rather than each inventing their own static string.\n */\nexport function getNextUserAgent(): string {\n const ua = USER_AGENTS[uaIndex % USER_AGENTS.length];\n uaIndex++;\n return ua;\n}\n\n/** Standard browser-like headers to avoid fingerprinting. */\nexport function getBrowserHeaders(): Record<string, string> {\n return {\n \"User-Agent\": getNextUserAgent(),\n Accept: \"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\",\n \"Accept-Language\": \"en-US,en;q=0.9\",\n \"Accept-Encoding\": \"gzip, deflate, br\",\n \"Cache-Control\": \"no-cache\",\n \"Sec-Fetch-Dest\": \"document\",\n \"Sec-Fetch-Mode\": \"navigate\",\n \"Sec-Fetch-Site\": \"none\",\n };\n}\n\nexport const webFetchTool = defineTool({\n name: \"web_fetch\",\n description: \"Fetch and return the content of a URL.\",\n permission: \"auto\",\n inputSchema: z.object({\n url: z.string().describe(\"URL to fetch\"),\n maxLength: z\n .number()\n .optional()\n .describe(\"Max response length in characters (default: 10000)\"),\n }),\n async execute({ url, maxLength }) {\n try {\n const response = await fetch(url, {\n signal: AbortSignal.timeout(10_000),\n headers: getBrowserHeaders(),\n redirect: \"follow\",\n });\n if (!response.ok)\n return {\n error: `HTTP ${response.status}: ${response.statusText}`,\n url,\n };\n const text = await response.text();\n const limit = maxLength ?? 10000;\n return {\n content: text.slice(0, limit),\n truncated: text.length > limit,\n contentType: response.headers.get(\"content-type\") ?? \"unknown\",\n url,\n };\n } catch (err: any) {\n return { error: err.message, url };\n }\n },\n});\n","import { z } from \"zod\";\nimport { defineTool } from \"../base.js\";\nimport { getBrowserHeaders } from \"./web-fetch.js\";\n\nexport const webSearchTool = defineTool({\n name: \"web_search\",\n description:\n \"Search the web for information. Returns search result snippets.\",\n permission: \"auto\",\n inputSchema: z.object({\n query: z.string().describe(\"Search query\"),\n }),\n async execute({ query }) {\n try {\n const url = `https://html.duckduckgo.com/html/?q=${encodeURIComponent(query)}`;\n // Share the rotating anti-fingerprinting headers with web_fetch.\n // Pre-fix this sent `User-Agent: BrainstormCLI/0.1` — the EXACT\n // static UA that web-fetch.ts's comment calls out as\n // \"identified as a fingerprinting vector in the Agent Traps\n // analysis.\" DuckDuckGo (and any other site that profiles\n // agent traffic) could fingerprint-and-throttle Brainstorm\n // queries from this one string alone, while web_fetch stayed\n // invisible. Unifying under getBrowserHeaders closes the gap.\n const response = await fetch(url, {\n signal: AbortSignal.timeout(10_000),\n headers: getBrowserHeaders(),\n });\n const html = await response.text();\n\n // Extract snippets from DuckDuckGo HTML results\n const results: Array<{ title: string; snippet: string }> = [];\n const snippetPattern = /class=\"result__snippet\"[^>]*>([\\s\\S]*?)<\\/a>/g;\n const titlePattern = /class=\"result__a\"[^>]*>([^<]*)<\\/a>/g;\n\n const titles: string[] = [];\n let m;\n while ((m = titlePattern.exec(html)) !== null && titles.length < 5) {\n titles.push(m[1].trim());\n }\n\n const snippets: string[] = [];\n while ((m = snippetPattern.exec(html)) !== null && snippets.length < 5) {\n snippets.push(m[1].replace(/<[^>]+>/g, \"\").trim());\n }\n\n for (let i = 0; i < Math.min(titles.length, snippets.length); i++) {\n results.push({ title: titles[i], snippet: snippets[i] });\n }\n\n return { results, query };\n } catch (err: any) {\n return { error: err.message, query };\n }\n },\n});\n","import { z } from \"zod\";\nimport { execFile, spawn } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { defineTool } from \"../base.js\";\nimport { checkSandbox } from \"./sandbox.js\";\n\nconst execFileAsync = promisify(execFile);\n\n// Track spawned background processes (capped to prevent memory leaks)\nconst MAX_MANAGED_PROCESSES = 100;\nconst managedProcesses = new Map<\n string,\n { pid: number; command: string; startedAt: number }\n>();\n\nfunction cleanupStaleProcesses(): void {\n if (managedProcesses.size <= MAX_MANAGED_PROCESSES) return;\n // Evict oldest entries\n const sorted = [...managedProcesses.entries()].sort(\n (a, b) => a[1].startedAt - b[1].startedAt,\n );\n const toRemove = sorted.slice(\n 0,\n managedProcesses.size - MAX_MANAGED_PROCESSES,\n );\n for (const [key, entry] of toRemove) {\n try {\n // Kill the whole process group — the spawn uses `detached: true`\n // so pid is the pgid. On Linux `/bin/sh` (dash) exits on SIGTERM\n // without forwarding to children, so killing only the shell pid\n // leaves the actual command (npm run dev, etc.) orphaned.\n process.kill(-entry.pid, \"SIGTERM\");\n } catch {\n /* already dead */\n }\n managedProcesses.delete(key);\n }\n}\n\nexport const processSpawnTool = defineTool({\n name: \"process_spawn\",\n description:\n \"Start a long-running background process (dev server, watcher, etc).\",\n permission: \"confirm\",\n inputSchema: z.object({\n name: z.string().describe(\"Process name for management\"),\n command: z.string().describe(\"Command to run\"),\n cwd: z.string().optional().describe(\"Working directory\"),\n }),\n async execute({ name, command, cwd }) {\n // Enforce sandbox restrictions (same as shell tool)\n const sandboxResult = checkSandbox(command, \"restricted\");\n if (!sandboxResult.allowed) {\n return { error: `Blocked by sandbox: ${sandboxResult.reason}` };\n }\n\n if (managedProcesses.size >= MAX_MANAGED_PROCESSES) {\n return {\n error: `Too many background processes (max ${MAX_MANAGED_PROCESSES}). Kill some first.`,\n };\n }\n\n if (managedProcesses.has(name)) {\n return {\n error: `Process '${name}' is already running (pid: ${managedProcesses.get(name)!.pid})`,\n };\n }\n\n const child = spawn(\"/bin/sh\", [\"-c\", command], {\n cwd: cwd ?? process.cwd(),\n detached: true,\n stdio: \"ignore\",\n });\n child.unref();\n\n if (child.pid) {\n managedProcesses.set(name, {\n pid: child.pid,\n command,\n startedAt: Date.now(),\n });\n cleanupStaleProcesses();\n return { success: true, name, pid: child.pid };\n }\n return { error: \"Failed to spawn process\" };\n },\n});\n\nexport const processKillTool = defineTool({\n name: \"process_kill\",\n description: \"Kill a managed background process by name.\",\n permission: \"confirm\",\n inputSchema: z.object({\n name: z.string().describe(\"Process name to kill\"),\n }),\n async execute({ name }) {\n const proc = managedProcesses.get(name);\n if (!proc) {\n return {\n error: `No managed process named '${name}'. Active: ${Array.from(managedProcesses.keys()).join(\", \") || \"none\"}`,\n };\n }\n\n try {\n // Group-kill — see cleanupStaleProcesses() for the Linux rationale.\n process.kill(-proc.pid, \"SIGTERM\");\n managedProcesses.delete(name);\n return { success: true, name, pid: proc.pid };\n } catch (err: any) {\n managedProcesses.delete(name);\n return { error: err.message, name };\n }\n },\n});\n","import { z } from \"zod\";\nimport { defineTool } from \"../base.js\";\nimport type { AgentTask, TaskStatus } from \"@brainst0rm/shared\";\n\n/**\n * In-session task store. Shared across the three task tools.\n * Tasks are ephemeral — they live only for the duration of the session.\n */\nconst tasks = new Map<string, AgentTask>();\nlet nextId = 1;\n\n/** Event callback set by the agent loop to forward task events to the TUI. */\nlet onTaskEvent:\n | ((type: \"task-created\" | \"task-updated\", task: AgentTask) => void)\n | null = null;\n\nexport function setTaskEventHandler(handler: typeof onTaskEvent): void {\n onTaskEvent = handler;\n}\n\nexport function clearTasks(): void {\n tasks.clear();\n nextId = 1;\n}\n\nexport const taskCreateTool = defineTool({\n name: \"task_create\",\n description:\n \"Create a task to track progress on multi-step work. Use this to show the user what you are working on.\",\n permission: \"auto\",\n inputSchema: z.object({\n description: z\n .string()\n .describe(\"Short description of the task (1 sentence)\"),\n }),\n async execute({ description }) {\n const id = `task-${nextId++}`;\n const now = Date.now();\n const task: AgentTask = {\n id,\n description,\n status: \"in_progress\",\n createdAt: now,\n updatedAt: now,\n };\n tasks.set(id, task);\n onTaskEvent?.(\"task-created\", task);\n return { id, status: task.status };\n },\n});\n\nexport const taskUpdateTool = defineTool({\n name: \"task_update\",\n description:\n \"Update the status of an existing task. Mark tasks as completed when done, or failed if they cannot be completed.\",\n permission: \"auto\",\n inputSchema: z.object({\n id: z.string().describe(\"Task ID returned by task_create\"),\n status: z\n .enum([\"pending\", \"in_progress\", \"completed\", \"failed\"])\n .describe(\"New status\"),\n }),\n async execute({ id, status }) {\n const task = tasks.get(id);\n if (!task) return { error: `Task ${id} not found` };\n task.status = status as TaskStatus;\n task.updatedAt = Date.now();\n onTaskEvent?.(\"task-updated\", task);\n return { id, status: task.status };\n },\n});\n\nexport const taskListTool = defineTool({\n name: \"task_list\",\n description: \"List all tasks in the current session with their status.\",\n permission: \"auto\",\n inputSchema: z.object({}),\n async execute() {\n const all = Array.from(tasks.values()).map((t) => ({\n id: t.id,\n description: t.description,\n status: t.status,\n }));\n return { tasks: all, total: all.length };\n },\n});\n","import { z } from \"zod\";\nimport { defineTool } from \"../base.js\";\n\nconst BR_BASE = \"https://api.brainstormrouter.com\";\n\n/** Get the BR API key from env (set by the CLI from vault resolution). */\nfunction getBRKey(): string | null {\n return process.env._BR_RESOLVED_KEY ?? process.env.BRAINSTORM_API_KEY ?? null;\n}\n\nasync function brFetch(path: string): Promise<any> {\n const key = getBRKey();\n if (!key) return { error: \"No BrainstormRouter API key available.\" };\n\n const res = await fetch(`${BR_BASE}${path}`, {\n headers: { Authorization: `Bearer ${key}` },\n signal: AbortSignal.timeout(10_000),\n });\n\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n return { error: `BR API ${res.status}: ${body.slice(0, 200)}` };\n }\n\n return res.json();\n}\n\n// ── Operations Dashboard ──────────────────────────────────────────\n\nexport const brStatusTool = defineTool({\n name: \"br_status\",\n description:\n \"BrainstormRouter self-check: identity, budget remaining, provider health, recent errors, and suggestions. Call this to understand the current state of your AI gateway.\",\n permission: \"auto\",\n inputSchema: z.object({}),\n async execute() {\n return brFetch(\"/v1/self\");\n },\n});\n\n// ── Budget ────────────────────────────────────────────────────────\n\nexport const brBudgetTool = defineTool({\n name: \"br_budget\",\n description:\n \"Check your BrainstormRouter budget: daily/monthly spend, limits, remaining balance, and spend forecast. Call before expensive operations to avoid hitting limits.\",\n permission: \"auto\",\n inputSchema: z.object({}),\n async execute() {\n const [status, forecast] = await Promise.all([\n brFetch(\"/v1/budget/status\"),\n brFetch(\"/v1/budget/forecast\"),\n ]);\n return { status, forecast };\n },\n});\n\n// ── Model Rankings ────────────────────────────────────────────────\n\nexport const brLeaderboardTool = defineTool({\n name: \"br_leaderboard\",\n description:\n \"Real model performance rankings from BrainstormRouter production data: quality, speed, reliability, cost efficiency. Use to understand which models are best for different tasks.\",\n permission: \"auto\",\n inputSchema: z.object({\n sort: z\n .enum([\"overall\", \"quality\", \"speed\", \"reliability\", \"cost_efficiency\"])\n .optional()\n .describe(\"Sort by this dimension (default: overall)\"),\n }),\n async execute({ sort }) {\n return brFetch(`/v1/intelligence/rankings${sort ? `?sort=${sort}` : \"\"}`);\n },\n});\n\n// ── Cost Insights ─────────────────────────────────────────────────\n\nexport const brInsightsTool = defineTool({\n name: \"br_insights\",\n description:\n \"Cost optimization recommendations from BrainstormRouter: identifies waste, suggests cheaper models, estimates potential savings.\",\n permission: \"auto\",\n inputSchema: z.object({}),\n async execute() {\n return brFetch(\"/v1/insights/optimize\");\n },\n});\n\n// ── Available Models ──────────────────────────────────────────────\n\nexport const brModelsTool = defineTool({\n name: \"br_models\",\n description:\n \"List all models available through BrainstormRouter with pricing. Use to discover what models you can route to.\",\n permission: \"auto\",\n inputSchema: z.object({}),\n async execute() {\n return brFetch(\"/v1/models\");\n },\n});\n\n// ── Memory ────────────────────────────────────────────────────────\n\nexport const brMemorySearchTool = defineTool({\n name: \"br_memory_search\",\n description:\n \"Search BrainstormRouter persistent memory by keyword. Memory persists across sessions — use to recall previous context, decisions, or project state.\",\n permission: \"auto\",\n inputSchema: z.object({\n query: z.string().describe(\"Search query for memory entries\"),\n }),\n async execute({ query }) {\n const key = getBRKey();\n if (!key) return { error: \"No BrainstormRouter API key available.\" };\n\n const res = await fetch(`${BR_BASE}/v1/memory/query`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${key}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ query }),\n signal: AbortSignal.timeout(10_000),\n });\n\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n return { error: `BR API ${res.status}: ${body.slice(0, 200)}` };\n }\n\n return res.json();\n },\n});\n\nexport const brMemoryStoreTool = defineTool({\n name: \"br_memory_store\",\n description:\n \"Save a fact to BrainstormRouter persistent memory. Persists across sessions. Use for important decisions, project context, or user preferences.\",\n permission: \"confirm\",\n inputSchema: z.object({\n text: z.string().describe(\"The fact or context to remember\"),\n block: z\n .enum([\"human\", \"system\", \"project\", \"general\"])\n .optional()\n .describe(\n \"Memory block: human (about the user), system (agent instructions), project (current work context), general (everything else). Matches BR's discovery contract per /v1/memory/blocks.\",\n ),\n }),\n async execute({ text, block }) {\n const key = getBRKey();\n if (!key) return { error: \"No BrainstormRouter API key available.\" };\n\n const res = await fetch(`${BR_BASE}/v1/memory/store`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${key}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ context: text, block: block ?? \"general\" }),\n signal: AbortSignal.timeout(10_000),\n });\n\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n return { error: `BR API ${res.status}: ${body.slice(0, 200)}` };\n }\n\n return res.json();\n },\n});\n\n// ── Health Check ──────────────────────────────────────────────────\n\nexport const brHealthTool = defineTool({\n name: \"br_health\",\n description:\n \"Quick health check of BrainstormRouter. Returns status, version, uptime. Hits the unauthenticated /health probe so it works even without an API key — use as a connectivity test when things seem slow or broken.\",\n permission: \"auto\",\n inputSchema: z.object({}),\n async execute() {\n // /health is the unauthenticated probe; /v1/health requires auth and\n // returns a different (richer) payload. We want the connectivity test\n // here, not the authenticated provider-health surface — that's br_status.\n try {\n const res = await fetch(`${BR_BASE}/health`, {\n signal: AbortSignal.timeout(10_000),\n });\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n return { error: `BR /health ${res.status}: ${body.slice(0, 200)}` };\n }\n return res.json();\n } catch (e) {\n const err = e as Error;\n return { error: `BR /health unreachable: ${err.name}: ${err.message}` };\n }\n },\n});\n","/**\n * Letta-inspired Agent Memory Tools — give the agent explicit control\n * over its own persistent memory.\n *\n * Four tools:\n * - memory_save: store important information across sessions\n * - memory_search: recall previously saved information\n * - memory_list: list all saved memories by category\n * - memory_forget: remove outdated or incorrect memories\n *\n * These complement the existing middleware-based auto-extraction by\n * letting the agent deliberately decide what to remember.\n */\n\nimport { z } from \"zod\";\nimport { defineTool, type BrainstormToolDef } from \"../base.js\";\n\n// ── Types for injection ─────────────────────────────────────────────\n\nexport interface MemoryBackend {\n /** Save to file-based memory (MemoryManager). */\n saveFile(entry: {\n type: \"user\" | \"project\" | \"feedback\" | \"reference\";\n name: string;\n description: string;\n content: string;\n }): void;\n /** Search file-based memory. */\n searchFiles(query: string): Array<{\n name: string;\n description: string;\n content: string;\n type: string;\n }>;\n /** List all file-based memories. */\n listFiles(): Array<{\n id: string;\n name: string;\n description: string;\n content: string;\n type: string;\n }>;\n /** Delete a file-based memory. */\n deleteFile(id: string): boolean;\n /** Save to project memory table (structured, SQLite). */\n saveProject(key: string, value: string, category: string): void;\n /** List project memories. */\n listProject(category?: string): Array<{\n key: string;\n value: string;\n category: string;\n }>;\n /** Delete from project memory. */\n deleteProject(key: string): void;\n}\n\n// ── Tool Factory ────────────────────────────────────────────────────\n\nconst BLOCK_TO_TYPE = {\n project: \"project\",\n user: \"user\",\n reference: \"reference\",\n} as const;\n\n/**\n * Create the 4 agent memory tools, injected with a memory backend.\n *\n * Called during session setup with the active MemoryManager + ProjectMemoryRepository.\n */\nexport function createMemoryTools(backend: MemoryBackend): BrainstormToolDef[] {\n const memorySaveTool = defineTool({\n name: \"memory_save\",\n description:\n \"Save important information to persistent memory. Persists across sessions. Use for decisions, conventions, user preferences, warnings, or any fact worth remembering. The agent controls what to remember — be selective.\",\n permission: \"auto\",\n inputSchema: z.object({\n key: z\n .string()\n .describe(\n \"Short descriptive key (e.g., 'auth-pattern', 'user-prefers-typescript')\",\n ),\n value: z.string().describe(\"The information to remember\"),\n category: z\n .enum([\"decision\", \"convention\", \"warning\", \"general\"])\n .default(\"general\")\n .describe(\n \"Category: decision (architectural choice), convention (code pattern), warning (pitfall), general\",\n ),\n block: z\n .enum([\"project\", \"user\", \"reference\"])\n .default(\"project\")\n .describe(\n \"Memory block: project (this codebase), user (preferences), reference (external info)\",\n ),\n }),\n async execute({ key, value, category, block }) {\n const type = BLOCK_TO_TYPE[block] ?? \"project\";\n const slug = key\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .slice(0, 40);\n\n // Write to both stores for redundancy\n backend.saveFile({\n type: type as \"user\" | \"project\" | \"feedback\" | \"reference\",\n name: key,\n description: `${category}: ${value.slice(0, 80)}`,\n content: value,\n });\n backend.saveProject(slug, value, category);\n\n return {\n saved: true,\n key: slug,\n category,\n block,\n message: `Remembered: \"${key}\" (${category})`,\n };\n },\n });\n\n const memorySearchTool = defineTool({\n name: \"memory_search\",\n description:\n \"Search persistent memory for previously saved information. Use when you need to recall a decision, convention, or fact from a previous session.\",\n permission: \"auto\",\n inputSchema: z.object({\n query: z.string().describe(\"What to search for\"),\n }),\n async execute({ query }) {\n // Search both stores\n const fileResults = backend.searchFiles(query);\n const projectResults = backend.listProject().filter((m) => {\n const text = `${m.key} ${m.value}`.toLowerCase();\n return query\n .toLowerCase()\n .split(/\\s+/)\n .some((term) => text.includes(term));\n });\n\n // Merge and deduplicate\n const seen = new Set<string>();\n const results: Array<{\n key: string;\n value: string;\n source: string;\n category?: string;\n }> = [];\n\n for (const r of projectResults) {\n if (seen.has(r.key)) continue;\n seen.add(r.key);\n results.push({\n key: r.key,\n value: r.value,\n source: \"project_memory\",\n category: r.category,\n });\n }\n\n for (const r of fileResults) {\n const key = r.name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .slice(0, 40);\n if (seen.has(key)) continue;\n seen.add(key);\n results.push({\n key: r.name,\n value: r.content,\n source: \"file_memory\",\n });\n }\n\n if (results.length === 0) {\n return { found: 0, message: \"No memories found matching that query.\" };\n }\n\n return { found: results.length, results: results.slice(0, 10) };\n },\n });\n\n const memoryListTool = defineTool({\n name: \"memory_list\",\n description:\n \"List all saved memories for the current project, optionally filtered by category.\",\n permission: \"auto\",\n inputSchema: z.object({\n category: z\n .enum([\"decision\", \"convention\", \"warning\", \"general\", \"all\"])\n .default(\"all\")\n .describe(\"Filter by category, or 'all' for everything\"),\n }),\n async execute({ category }) {\n const cat = category === \"all\" ? undefined : category;\n const projectMemories = backend.listProject(cat);\n const fileMemories = backend.listFiles();\n\n // Merge, project memories take priority\n const seen = new Set(projectMemories.map((m) => m.key));\n const extras = fileMemories\n .filter((m) => !seen.has(m.id))\n .map((m) => ({\n key: m.name,\n value: m.content,\n category: m.type,\n }));\n\n const all = [...projectMemories, ...extras];\n\n if (all.length === 0) {\n return {\n count: 0,\n message:\n \"No memories saved yet. Use memory_save to remember important information.\",\n };\n }\n\n return { count: all.length, memories: all };\n },\n });\n\n const memoryForgetTool = defineTool({\n name: \"memory_forget\",\n description:\n \"Remove a memory entry that is no longer relevant or accurate.\",\n permission: \"confirm\",\n inputSchema: z.object({\n key: z.string().describe(\"The key of the memory to remove\"),\n }),\n async execute({ key }) {\n const slug = key\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .slice(0, 40);\n\n backend.deleteProject(slug);\n backend.deleteFile(slug);\n\n return { forgotten: true, key: slug, message: `Forgot: \"${key}\"` };\n },\n });\n\n return [memorySaveTool, memorySearchTool, memoryListTool, memoryForgetTool];\n}\n","/**\n * SleepTool — gives the daemon model temporal agency.\n *\n * Instead of waking on a fixed interval, the model can choose\n * how long to sleep and explain why. The daemon controller\n * interprets the result and schedules the next tick accordingly.\n *\n * ⚠️ Prompt cache warning: Anthropic's prompt cache expires after ~5 minutes.\n * Sleeping longer than that means the next tick pays full input token cost.\n * The description below tells the model about this trade-off.\n */\n\nimport { z } from \"zod\";\nimport { defineTool } from \"../base.js\";\n\nexport const daemonSleepTool = defineTool({\n name: \"daemon_sleep\",\n description: `Put the daemon to sleep for a specified duration.\n\nUse this when there's nothing to do right now. The daemon will wake after the specified time (or earlier if the user sends input or a scheduled task fires).\n\n**Cost trade-off:** Prompt cache expires after ~5 minutes of inactivity. Sleeping ≤ 4 minutes keeps the cache warm (cheap next tick). Sleeping > 5 minutes invalidates the cache (expensive next tick). Choose wisely:\n- Short sleep (30-240s): Use when you expect activity soon or want to monitor something.\n- Medium sleep (240-300s): Maximum sleep that preserves prompt cache.\n- Long sleep (300-3600s): Use when truly idle. Saves API calls but next tick costs more tokens.\n\nIf you don't call this tool, the daemon uses its default tick interval.`,\n permission: \"auto\",\n concurrent: false,\n readonly: true,\n inputSchema: z.object({\n seconds: z\n .number()\n .min(5)\n .max(3600)\n .describe(\"How long to sleep in seconds (5-3600).\"),\n reason: z\n .string()\n .describe(\"Why you're sleeping this long. Logged for observability.\"),\n }),\n async execute(input) {\n return {\n sleepMs: input.seconds * 1000,\n reason: input.reason,\n cacheWarning:\n input.seconds > 300\n ? \"Prompt cache will expire during this sleep. Next tick will be more expensive.\"\n : undefined,\n };\n },\n});\n","/**\n * Build Verification Tool — auto-detect and run build/lint commands.\n *\n * After code is written, this tool verifies it compiles/parses.\n * Auto-detects the build system from the project (go, tsc, cargo, python).\n * When autofix is true, returns errors to the LLM for correction (max 3 attempts).\n *\n * Learned from: Living Case Study — agents wrote code that didn't compile\n * and nobody caught it because there was no build verification step.\n */\n\nimport { z } from \"zod\";\nimport { existsSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { execFileSync } from \"node:child_process\";\nimport { defineTool } from \"../base.js\";\nimport { getWorkspace } from \"../workspace-context.js\";\n\nfunction detectBuildCommand(cwd: string): string | null {\n if (existsSync(join(cwd, \"go.mod\"))) return \"go vet ./...\";\n if (existsSync(join(cwd, \"tsconfig.json\"))) return \"npx tsc --noEmit\";\n if (existsSync(join(cwd, \"Cargo.toml\"))) return \"cargo check\";\n if (existsSync(join(cwd, \"pyproject.toml\")))\n return \"python -m compileall -q .\";\n if (existsSync(join(cwd, \"package.json\"))) {\n try {\n const pkg = JSON.parse(\n require(\"node:fs\").readFileSync(join(cwd, \"package.json\"), \"utf-8\"),\n );\n if (pkg.scripts?.build) return \"npm run build\";\n if (pkg.scripts?.typecheck) return \"npm run typecheck\";\n } catch {\n /* ignore */\n }\n }\n return null;\n}\n\nfunction runCommand(\n command: string,\n cwd: string,\n): { passed: boolean; output: string; command: string } {\n try {\n // Use shell execution to handle quoting, pipes, and composite commands correctly\n const stdout = execFileSync(\"/bin/sh\", [\"-c\", command], {\n cwd,\n stdio: \"pipe\",\n timeout: 120_000,\n encoding: \"utf-8\",\n });\n return { passed: true, output: stdout.slice(0, 2000), command };\n } catch (err) {\n const stderr = (err as { stderr?: string }).stderr ?? \"\";\n const stdout = (err as { stdout?: string }).stdout ?? \"\";\n return {\n passed: false,\n output: (stderr + \"\\n\" + stdout).trim().slice(0, 3000),\n command,\n };\n }\n}\n\nexport const buildVerifyTool = defineTool({\n name: \"build_verify\",\n description:\n \"Run build/lint verification on the project. Auto-detects build system (Go, TypeScript, Rust, Python) or accepts a custom command. Returns pass/fail with error output. Use after writing code to verify it compiles.\",\n permission: \"confirm\",\n inputSchema: z.object({\n command: z\n .string()\n .optional()\n .describe(\n \"Build command to run. If omitted, auto-detects from project (go vet, tsc --noEmit, cargo check, etc.)\",\n ),\n cwd: z\n .string()\n .optional()\n .describe(\"Working directory. Defaults to current directory.\"),\n }),\n async execute({ command, cwd }) {\n const workDir = resolve(cwd ?? getWorkspace());\n\n const buildCmd = command ?? detectBuildCommand(workDir);\n if (!buildCmd) {\n return {\n passed: false,\n command: \"none\",\n output: \"No build system detected. Provide a command explicitly.\",\n attempt: 1,\n };\n }\n\n const result = runCommand(buildCmd, workDir);\n\n return {\n passed: result.passed,\n command: result.command,\n output: result.output,\n ...(result.passed\n ? {}\n : {\n fix_instruction:\n \"The build failed. Read the error output above and fix the code. Then run build_verify again to confirm the fix.\",\n }),\n };\n },\n});\n","/**\n * Memory Omni-Tool — agent-callable tool for reading, writing,\n * searching, promoting, and demoting memory entries at runtime.\n *\n * Operations:\n * read — Get full content of a memory entry\n * write — Create or update a memory entry\n * search — Search memories by query\n * list — List all memories (with tier info)\n * promote — Move entry from archive to system (always in prompt)\n * demote — Move entry from system to archive (on-demand)\n * delete — Remove a memory entry\n */\n\nimport { z } from \"zod\";\nimport { defineTool } from \"../base.js\";\n\nexport const memoryTool = defineTool({\n name: \"memory\",\n description:\n \"Read, write, search, and manage persistent memory. \" +\n \"Memory persists across sessions. System-tier entries are always in the prompt; \" +\n \"archive-tier entries are searchable on demand. \" +\n \"Operations: read, write, search, list, promote, demote, delete.\",\n permission: \"auto\",\n inputSchema: z.object({\n operation: z\n .enum([\"read\", \"write\", \"search\", \"list\", \"promote\", \"demote\", \"delete\"])\n .describe(\"Memory operation to perform\"),\n id: z\n .string()\n .optional()\n .describe(\"Memory entry ID (for read, promote, demote, delete)\"),\n query: z\n .string()\n .optional()\n .describe(\"Search query (for search operation)\"),\n name: z.string().optional().describe(\"Entry name (for write operation)\"),\n description: z\n .string()\n .optional()\n .describe(\"One-line description (for write operation)\"),\n content: z\n .string()\n .optional()\n .describe(\"Entry content (for write operation)\"),\n type: z\n .enum([\"user\", \"project\", \"feedback\", \"reference\"])\n .optional()\n .describe(\n \"Memory type (for write). user/feedback → system tier, project/reference → archive\",\n ),\n tier: z\n .enum([\"system\", \"archive\"])\n .optional()\n .describe(\n \"Override tier placement (for write). system = always in prompt\",\n ),\n reason: z\n .string()\n .optional()\n .describe(\"Why this memory operation is being performed\"),\n }),\n async execute(input) {\n // Memory tool is a stub that gets wired at runtime by the agent loop\n // because it needs access to the MemoryManager instance.\n // This definition provides the schema for LLM tool calling.\n return {\n error:\n \"Memory tool not wired. This tool must be connected to a MemoryManager instance at runtime.\",\n };\n },\n});\n\n/**\n * Create a memory tool wired to a specific MemoryManager.\n * Called during agent loop initialization.\n */\nexport function createWiredMemoryTool(manager: any) {\n return defineTool({\n name: \"memory\",\n description: memoryTool.description,\n permission: \"auto\",\n inputSchema: memoryTool.inputSchema,\n async execute(input) {\n switch (input.operation) {\n case \"read\": {\n if (!input.id) return { error: \"id required for read\" };\n const entry = manager.get(input.id);\n if (!entry) return { error: `Memory entry \"${input.id}\" not found` };\n return {\n id: entry.id,\n name: entry.name,\n type: entry.type,\n tier: entry.tier,\n description: entry.description,\n content: entry.content,\n };\n }\n\n case \"write\": {\n if (!input.name) return { error: \"name required for write\" };\n if (!input.content) return { error: \"content required for write\" };\n const entry = manager.save({\n name: input.name,\n description: input.description ?? \"\",\n content: input.content,\n type: input.type ?? \"project\",\n tier: input.tier,\n source: \"agent_extraction\" as const,\n author: \"agent\",\n });\n return {\n saved: true,\n id: entry.id,\n tier: entry.tier,\n trustScore: entry.trustScore,\n message:\n entry.tier === \"quarantine\"\n ? `Memory \"${entry.name}\" quarantined (low trust: ${entry.trustScore.toFixed(1)})`\n : `Memory \"${entry.name}\" saved to ${entry.tier}`,\n };\n }\n\n case \"search\": {\n if (!input.query) return { error: \"query required for search\" };\n const results = manager.search(input.query);\n return {\n results: results.map((m: any) => ({\n id: m.id,\n name: m.name,\n type: m.type,\n tier: m.tier,\n description: m.description,\n preview: m.content.slice(0, 200),\n })),\n count: results.length,\n };\n }\n\n case \"list\": {\n const all = manager.list();\n return {\n system: all\n .filter((m: any) => m.tier === \"system\")\n .map((m: any) => ({\n id: m.id,\n name: m.name,\n type: m.type,\n description: m.description,\n })),\n archive: all\n .filter((m: any) => m.tier === \"archive\")\n .map((m: any) => ({\n id: m.id,\n name: m.name,\n type: m.type,\n description: m.description,\n })),\n total: all.length,\n };\n }\n\n case \"promote\": {\n if (!input.id) return { error: \"id required for promote\" };\n // Check if entry is quarantined — agent cannot promote quarantined entries\n const existing = manager.get(input.id);\n if (existing?.tier === \"quarantine\") {\n return {\n error: `Cannot promote \"${input.id}\" — entry is quarantined (trust: ${existing.trustScore.toFixed(1)}). Quarantined entries require user confirmation to promote.`,\n quarantined: true,\n };\n }\n const ok = manager.promote(input.id);\n if (!ok)\n return {\n error: `Cannot promote \"${input.id}\" — not found or already in system`,\n };\n return {\n promoted: true,\n id: input.id,\n message: `\"${input.id}\" moved to system tier (always in prompt)`,\n };\n }\n\n case \"demote\": {\n if (!input.id) return { error: \"id required for demote\" };\n const ok = manager.demote(input.id);\n if (!ok)\n return {\n error: `Cannot demote \"${input.id}\" — not found or already in archive`,\n };\n return {\n demoted: true,\n id: input.id,\n message: `\"${input.id}\" moved to archive (search to load)`,\n };\n }\n\n case \"delete\": {\n if (!input.id) return { error: \"id required for delete\" };\n const ok = manager.delete(input.id);\n if (!ok) return { error: `Memory entry \"${input.id}\" not found` };\n return { deleted: true, id: input.id };\n }\n\n default:\n return { error: `Unknown operation: ${input.operation}` };\n }\n },\n });\n}\n","/**\n * Pipeline Dispatch Tool — allows the daemon agent to invoke the\n * 9-phase orchestration pipeline as a structured operation.\n *\n * When KAIROS is running autonomously, the agent can call this tool\n * to dispatch a multi-phase software development lifecycle:\n * spec → implementation → review (parallel) → verify → document\n *\n * Like the memory tool, this is a stub that gets wired at runtime\n * with a real PhaseDispatcher via createWiredPipelineTool().\n */\n\nimport { z } from \"zod\";\nimport { defineTool } from \"../base.js\";\n\nexport const pipelineTool = defineTool({\n name: \"pipeline_dispatch\",\n description:\n \"Dispatch a structured multi-phase development pipeline. \" +\n \"Phases: spec → implementation → review (3 parallel reviewers) → verify → document. \" +\n \"Use this for complex tasks that benefit from structured execution with specialized agents. \" +\n \"The pipeline automatically selects which phases to run based on the request.\",\n permission: \"confirm\",\n inputSchema: z.object({\n request: z\n .string()\n .describe(\n \"What to build/fix/refactor. Be specific — this drives phase selection and agent prompts.\",\n ),\n phases: z\n .array(z.string())\n .optional()\n .describe(\n \"Override phase selection. Default: auto-selected. Options: spec, implementation, review, verify, document\",\n ),\n dryRun: z\n .boolean()\n .optional()\n .describe(\n \"If true, show what agents would be dispatched without running them\",\n ),\n }),\n async execute(input) {\n return {\n error:\n \"Pipeline tool not wired. This tool must be connected to a PhaseDispatcher at runtime.\",\n };\n },\n});\n\n/**\n * Create a pipeline tool wired to a real PhaseDispatcher.\n * Called during daemon/chat session initialization.\n */\nexport function createWiredPipelineTool(\n runPipeline: (\n request: string,\n opts?: { phases?: string[]; dryRun?: boolean },\n ) => Promise<{\n phases: Array<{ phase: string; output: string; cost: number }>;\n totalCost: number;\n }>,\n) {\n return defineTool({\n name: \"pipeline_dispatch\",\n description: pipelineTool.description,\n permission: \"confirm\",\n inputSchema: pipelineTool.inputSchema,\n async execute(input) {\n try {\n const result = await runPipeline(input.request, {\n phases: input.phases,\n dryRun: input.dryRun,\n });\n\n if (input.dryRun) {\n return {\n dryRun: true,\n phases: result.phases.map((p) => p.phase),\n message: `Would dispatch ${result.phases.length} phases: ${result.phases.map((p) => p.phase).join(\" → \")}`,\n };\n }\n\n return {\n completed: true,\n phases: result.phases.map((p) => ({\n phase: p.phase,\n outputPreview: p.output.slice(0, 200),\n cost: p.cost,\n })),\n totalCost: result.totalCost,\n message: `Pipeline completed: ${result.phases.length} phases, $${result.totalCost.toFixed(4)} total cost`,\n };\n } catch (err: any) {\n return {\n error: `Pipeline failed: ${err.message}`,\n };\n }\n },\n });\n}\n","/**\n * Code Graph Tools — structural code queries via the knowledge graph.\n *\n * These replace the need for agents to use grep + shell for questions like\n * \"who calls this function?\" Instead of parsing text output, agents get\n * structured results in milliseconds.\n *\n * Tools:\n * code_callers — who calls this function?\n * code_callees — what does this function call?\n * code_definition — go to definition (function/class/method)\n * code_impact — transitive callers (what breaks if X changes?)\n * code_stats — graph stats (diagnostics)\n */\n\nimport { z } from \"zod\";\nimport { defineTool } from \"../base.js\";\n\nexport const codeCallersTool = defineTool({\n name: \"code_callers\",\n description:\n \"Find all call sites of a function by name. Returns structured results \" +\n \"with caller function, file, and line. MUCH faster than grep for 'who calls X'. \" +\n \"Requires the project to be indexed (run onboard first).\",\n permission: \"auto\",\n inputSchema: z.object({\n name: z.string().describe(\"The function name to find callers for\"),\n limit: z.number().optional().describe(\"Max results to return (default 50)\"),\n }),\n async execute() {\n return {\n error: \"Code graph tool not wired. See createWiredCodeGraphTools().\",\n };\n },\n});\n\nexport const codeCalleesTool = defineTool({\n name: \"code_callees\",\n description:\n \"Find all functions called by a given function. Returns what the function invokes. \" +\n \"Use this to understand dependencies of a function.\",\n permission: \"auto\",\n inputSchema: z.object({\n caller: z.string().describe(\"The caller function name\"),\n limit: z.number().optional(),\n }),\n async execute() {\n return {\n error: \"Code graph tool not wired. See createWiredCodeGraphTools().\",\n };\n },\n});\n\nexport const codeDefinitionTool = defineTool({\n name: \"code_definition\",\n description:\n \"Find where a function, class, or method is defined. Returns kind, file, and line. \" +\n \"Equivalent to 'go to definition' in an IDE.\",\n permission: \"auto\",\n inputSchema: z.object({\n name: z.string().describe(\"The symbol name to find\"),\n }),\n async execute() {\n return { error: \"Code graph tool not wired.\" };\n },\n});\n\nexport const codeImpactTool = defineTool({\n name: \"code_impact\",\n description:\n \"Impact analysis: find all transitive callers of a function. Use this BEFORE \" +\n \"changing a function signature to understand what might break. Returns callers up to N depth.\",\n permission: \"auto\",\n inputSchema: z.object({\n name: z.string().describe(\"The function name to analyze\"),\n depth: z.number().optional().describe(\"Max transitive depth (default 3)\"),\n }),\n async execute() {\n return { error: \"Code graph tool not wired.\" };\n },\n});\n\nexport const codeStatsTool = defineTool({\n name: \"code_stats\",\n description:\n \"Get code graph statistics: file count, function count, class count, call edge count. \" +\n \"Use this to verify the graph is populated.\",\n permission: \"auto\",\n inputSchema: z.object({}),\n async execute() {\n return { error: \"Code graph tool not wired.\" };\n },\n});\n\n/**\n * Create wired versions of the code graph tools that actually query a CodeGraph instance.\n */\nexport function createWiredCodeGraphTools(graph: any) {\n return [\n defineTool({\n name: \"code_callers\",\n description: codeCallersTool.description,\n permission: \"auto\",\n inputSchema: codeCallersTool.inputSchema,\n async execute(input) {\n try {\n const callers = graph.findCallers(input.name, {\n limit: input.limit ?? 50,\n });\n return {\n count: callers.length,\n callers: callers.map((c: any) => ({\n caller: c.caller ?? \"(module-level)\",\n file: c.file.replace(process.cwd() + \"/\", \"\"),\n line: c.line,\n })),\n };\n } catch (e: any) {\n return { error: `Code graph query failed: ${e.message}` };\n }\n },\n }),\n defineTool({\n name: \"code_callees\",\n description: codeCalleesTool.description,\n permission: \"auto\",\n inputSchema: codeCalleesTool.inputSchema,\n async execute(input) {\n try {\n const callees = graph.findCallees(input.caller, {\n limit: input.limit ?? 50,\n });\n return {\n count: callees.length,\n callees: callees.map((c: any) => ({\n callee: c.callee,\n file: c.file.replace(process.cwd() + \"/\", \"\"),\n line: c.line,\n })),\n };\n } catch (e: any) {\n return { error: `Code graph query failed: ${e.message}` };\n }\n },\n }),\n defineTool({\n name: \"code_definition\",\n description: codeDefinitionTool.description,\n permission: \"auto\",\n inputSchema: codeDefinitionTool.inputSchema,\n async execute(input) {\n try {\n const defs = graph.findDefinition(input.name);\n return {\n count: defs.length,\n definitions: defs.map((d: any) => ({\n kind: d.kind,\n name: d.name,\n className: d.className,\n file: d.file.replace(process.cwd() + \"/\", \"\"),\n line: d.startLine,\n signature: d.signature,\n })),\n };\n } catch (e: any) {\n return { error: `Code graph query failed: ${e.message}` };\n }\n },\n }),\n defineTool({\n name: \"code_impact\",\n description: codeImpactTool.description,\n permission: \"auto\",\n inputSchema: codeImpactTool.inputSchema,\n async execute(input) {\n try {\n const impact = graph.impactAnalysis(input.name, input.depth ?? 3);\n return {\n count: impact.length,\n transitiveCallers: impact.map((i: any) => ({\n name: i.name,\n depth: i.depth,\n file: i.file.replace(process.cwd() + \"/\", \"\"),\n })),\n };\n } catch (e: any) {\n return { error: `Code graph query failed: ${e.message}` };\n }\n },\n }),\n defineTool({\n name: \"code_stats\",\n description: codeStatsTool.description,\n permission: \"auto\",\n inputSchema: codeStatsTool.inputSchema,\n async execute() {\n try {\n return graph.stats();\n } catch (e: any) {\n return { error: `Code graph query failed: ${e.message}` };\n }\n },\n }),\n ];\n}\n","export { createTimeoutController } from \"./timeout.js\";\nexport { defineTool, type BrainstormToolDef } from \"./base.js\";\nexport {\n withWorkspace,\n getWorkspace,\n enterWorkspace,\n} from \"./workspace-context.js\";\nexport {\n FileReadCache,\n getFileReadCache,\n resetFileReadCache,\n} from \"./file-cache.js\";\nexport {\n SessionFileTracker,\n getFileTracker,\n resetFileTracker,\n} from \"./file-tracker.js\";\nexport {\n ToolHealthTracker,\n getToolHealthTracker,\n resetToolHealthTracker,\n type ToolHealthEntry,\n} from \"./tool-health.js\";\nexport {\n CheckpointManager,\n initCheckpointManager,\n getCheckpointManager,\n} from \"./checkpoint.js\";\nexport { undoTool } from \"./builtin/undo.js\";\nexport {\n scratchpadWriteTool,\n scratchpadReadTool,\n getScratchpadEntries,\n clearScratchpad,\n formatScratchpadContext,\n} from \"./builtin/scratchpad.js\";\nexport {\n askUserTool,\n resolveAskUser,\n hasPendingQuestion,\n} from \"./builtin/ask-user.js\";\nexport {\n routingHintTool,\n getRoutingHint,\n consumeRoutingHint,\n resetRoutingHint,\n type RoutingPreference,\n} from \"./builtin/routing-hint.js\";\nexport { costEstimateTool } from \"./builtin/cost-estimate.js\";\nexport { createToolSearchTool } from \"./builtin/tool-search.js\";\nexport {\n isParallelSafe,\n classifyToolBatch,\n executeWithParallelism,\n setToolRegistryForParallel,\n} from \"./parallel.js\";\nexport {\n getTierForComplexity,\n getToolsForTier,\n isToolInTier,\n escalateTier,\n getTierForTool,\n estimateTokenSavings,\n type ToolTier,\n} from \"./progressive.js\";\nexport {\n DockerSandbox,\n isSafeCommand,\n translatePath,\n type SandboxConfig,\n type SandboxExecResult,\n} from \"./sandbox/docker-sandbox.js\";\nexport { planPreviewTool } from \"./builtin/plan-preview.js\";\nexport {\n beginTransactionTool,\n commitTransactionTool,\n rollbackTransactionTool,\n isTransactionActive,\n recordTransactionFile,\n} from \"./builtin/transaction.js\";\nexport {\n ToolRegistry,\n ToolRateLimiter,\n getToolRateLimiter,\n type PermissionCheckFn,\n} from \"./registry.js\";\nexport { fileReadTool } from \"./builtin/file-read.js\";\nexport { fileWriteTool } from \"./builtin/file-write.js\";\nexport { fileEditTool } from \"./builtin/file-edit.js\";\nexport { shellTool } from \"./builtin/shell.js\";\nexport { globTool } from \"./builtin/glob.js\";\nexport { grepTool } from \"./builtin/grep.js\";\nexport { gitStatusTool } from \"./builtin/git-status.js\";\nexport { gitDiffTool } from \"./builtin/git-diff.js\";\nexport { gitLogTool } from \"./builtin/git-log.js\";\nexport { gitCommitTool } from \"./builtin/git-commit.js\";\nexport {\n checkGitSafety,\n formatViolations,\n hasHardBlock,\n type GitSafetyViolation,\n} from \"./builtin/git-safety.js\";\nexport { checkSandbox, type SandboxLevel } from \"./builtin/sandbox.js\";\nexport {\n configureSandbox,\n stopDockerSandbox,\n setDockerSandbox,\n setBackgroundEventHandler,\n getBackgroundTasks,\n setToolOutputHandler,\n} from \"./builtin/shell.js\";\nexport { ghPrTool } from \"./builtin/gh-pr.js\";\nexport { ghIssueTool } from \"./builtin/gh-issue.js\";\nexport { ghReviewTool } from \"./builtin/gh-review.js\";\nexport { ghActionsTool } from \"./builtin/gh-actions.js\";\nexport { ghReleaseTool } from \"./builtin/gh-release.js\";\nexport { ghSearchTool } from \"./builtin/gh-search.js\";\nexport { ghSecurityTool } from \"./builtin/gh-security.js\";\nexport { ghRepoTool } from \"./builtin/gh-repo.js\";\nexport { gitBranchTool } from \"./builtin/git-branch.js\";\nexport { gitStashTool } from \"./builtin/git-stash.js\";\nexport { listDirTool } from \"./builtin/list-dir.js\";\nexport { multiEditTool } from \"./builtin/multi-edit.js\";\nexport { batchEditTool } from \"./builtin/batch-edit.js\";\nexport { webFetchTool } from \"./builtin/web-fetch.js\";\nexport { webSearchTool } from \"./builtin/web-search.js\";\nexport { processSpawnTool, processKillTool } from \"./builtin/process-manage.js\";\nexport {\n taskCreateTool,\n taskUpdateTool,\n taskListTool,\n setTaskEventHandler,\n clearTasks,\n} from \"./builtin/task-manage.js\";\nexport {\n brStatusTool,\n brBudgetTool,\n brLeaderboardTool,\n brInsightsTool,\n brModelsTool,\n brMemorySearchTool,\n brMemoryStoreTool,\n brHealthTool,\n} from \"./builtin/br-intelligence.js\";\nexport {\n createMemoryTools,\n type MemoryBackend,\n} from \"./builtin/memory-tools.js\";\nexport { daemonSleepTool } from \"./builtin/sleep.js\";\n\nimport { ToolRegistry } from \"./registry.js\";\nimport { fileReadTool } from \"./builtin/file-read.js\";\nimport { fileWriteTool } from \"./builtin/file-write.js\";\nimport { fileEditTool } from \"./builtin/file-edit.js\";\nimport { shellTool } from \"./builtin/shell.js\";\nimport { globTool } from \"./builtin/glob.js\";\nimport { grepTool } from \"./builtin/grep.js\";\nimport { gitStatusTool } from \"./builtin/git-status.js\";\nimport { gitDiffTool } from \"./builtin/git-diff.js\";\nimport { gitLogTool } from \"./builtin/git-log.js\";\nimport { gitCommitTool } from \"./builtin/git-commit.js\";\nimport { ghPrTool } from \"./builtin/gh-pr.js\";\nimport { ghIssueTool } from \"./builtin/gh-issue.js\";\nimport { ghReviewTool } from \"./builtin/gh-review.js\";\nimport { ghActionsTool } from \"./builtin/gh-actions.js\";\nimport { ghReleaseTool } from \"./builtin/gh-release.js\";\nimport { ghSearchTool } from \"./builtin/gh-search.js\";\nimport { ghSecurityTool } from \"./builtin/gh-security.js\";\nimport { ghRepoTool } from \"./builtin/gh-repo.js\";\nimport { gitBranchTool } from \"./builtin/git-branch.js\";\nimport { gitStashTool } from \"./builtin/git-stash.js\";\nimport { listDirTool } from \"./builtin/list-dir.js\";\nimport { multiEditTool } from \"./builtin/multi-edit.js\";\nimport { batchEditTool } from \"./builtin/batch-edit.js\";\nimport { webFetchTool } from \"./builtin/web-fetch.js\";\nimport { webSearchTool } from \"./builtin/web-search.js\";\nimport { processSpawnTool, processKillTool } from \"./builtin/process-manage.js\";\nimport { buildVerifyTool } from \"./builtin/build-verify.js\";\nimport {\n taskCreateTool,\n taskUpdateTool,\n taskListTool,\n} from \"./builtin/task-manage.js\";\nimport { undoTool } from \"./builtin/undo.js\";\nimport {\n scratchpadWriteTool,\n scratchpadReadTool,\n} from \"./builtin/scratchpad.js\";\nimport { askUserTool } from \"./builtin/ask-user.js\";\nimport { routingHintTool } from \"./builtin/routing-hint.js\";\nimport { costEstimateTool } from \"./builtin/cost-estimate.js\";\nimport { planPreviewTool } from \"./builtin/plan-preview.js\";\nimport {\n beginTransactionTool,\n commitTransactionTool,\n rollbackTransactionTool,\n} from \"./builtin/transaction.js\";\nimport {\n brStatusTool,\n brBudgetTool,\n brLeaderboardTool,\n brInsightsTool,\n brModelsTool,\n brMemorySearchTool,\n brMemoryStoreTool,\n brHealthTool,\n} from \"./builtin/br-intelligence.js\";\nimport { createToolSearchTool } from \"./builtin/tool-search.js\";\nimport { daemonSleepTool } from \"./builtin/sleep.js\";\nimport { memoryTool } from \"./builtin/memory-tool.js\";\nexport { createWiredMemoryTool } from \"./builtin/memory-tool.js\";\nimport { pipelineTool } from \"./builtin/pipeline-tool.js\";\nexport { createWiredPipelineTool } from \"./builtin/pipeline-tool.js\";\nimport {\n codeCallersTool,\n codeCalleesTool,\n codeDefinitionTool,\n codeImpactTool,\n codeStatsTool,\n} from \"./builtin/code-graph-tools.js\";\nexport { createWiredCodeGraphTools } from \"./builtin/code-graph-tools.js\";\n\nexport function createDefaultToolRegistry(opts?: {\n daemon?: boolean;\n}): ToolRegistry {\n const registry = new ToolRegistry();\n // Filesystem (8)\n registry.register(fileReadTool);\n registry.register(fileWriteTool);\n registry.register(fileEditTool);\n registry.register(multiEditTool);\n registry.register(batchEditTool);\n registry.register(listDirTool);\n registry.register(globTool);\n registry.register(grepTool);\n // Shell (3)\n registry.register(shellTool);\n registry.register(processSpawnTool);\n registry.register(processKillTool);\n registry.register(buildVerifyTool);\n // Git (6)\n registry.register(gitStatusTool);\n registry.register(gitDiffTool);\n registry.register(gitLogTool);\n registry.register(gitCommitTool);\n registry.register(gitBranchTool);\n registry.register(gitStashTool);\n // GitHub (2)\n // GitHub (8)\n registry.register(ghPrTool);\n registry.register(ghIssueTool);\n registry.register(ghReviewTool);\n registry.register(ghActionsTool);\n registry.register(ghReleaseTool);\n registry.register(ghSearchTool);\n registry.register(ghSecurityTool);\n registry.register(ghRepoTool);\n // Web (2)\n registry.register(webFetchTool);\n registry.register(webSearchTool);\n // Tasks (3)\n registry.register(taskCreateTool);\n registry.register(taskUpdateTool);\n registry.register(taskListTool);\n // Undo (1)\n registry.register(undoTool);\n // Scratchpad (2)\n registry.register(scratchpadWriteTool);\n registry.register(scratchpadReadTool);\n // Ask user (1)\n registry.register(askUserTool);\n // Routing + Cost (2)\n registry.register(routingHintTool);\n registry.register(costEstimateTool);\n registry.register(planPreviewTool);\n // Transactions (3)\n registry.register(beginTransactionTool);\n registry.register(commitTransactionTool);\n registry.register(rollbackTransactionTool);\n // BrainstormRouter intelligence (8) — native REST calls, no MCP needed\n registry.register(brStatusTool);\n registry.register(brBudgetTool);\n registry.register(brLeaderboardTool);\n registry.register(brInsightsTool);\n registry.register(brModelsTool);\n registry.register(brMemorySearchTool);\n registry.register(brMemoryStoreTool);\n registry.register(brHealthTool);\n // Memory (1) — read, write, search, promote, demote persistent memory\n registry.register(memoryTool);\n // Code Graph (5) — structural queries via tree-sitter knowledge graph (stubs, wired at runtime)\n registry.register(codeCallersTool);\n registry.register(codeCalleesTool);\n registry.register(codeDefinitionTool);\n registry.register(codeImpactTool);\n registry.register(codeStatsTool);\n // Tool search (1) — discovers and resolves deferred MCP tools\n registry.register(createToolSearchTool(registry));\n // Daemon-only tools — registered when daemon mode is active\n if (opts?.daemon) {\n registry.register(daemonSleepTool);\n registry.register(pipelineTool); // Stub — wired at runtime with createWiredPipelineTool\n }\n return registry;\n}\n"],"mappings":"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","names":["node","max","index","require_constants","require_utils","require_parse","branch","opts","value","rest","source","state","require_picomatch","pattern","relative","require_utils","tasks","require_fs","statSync","queueMicrotask","tasks","require_constants","require_fs","require_utils","require_async","entries","tasks","require_sync","require_fs","require_settings","require_out","tasks","errorHandler","context","resolve","require_common","require_async","entries","require_async","entries","require_stream","require_sync","entries","require_sync","require_settings","require_out","require_reader","require_stream","resolve","require_async","resolve","entries","require_entry","require_async","entries","require_stream","require_sync","entries","require_sync","entries","require_settings","require_out","FastGlob","posix","escapePath","convertPathToPattern","win32","tasks","homedir","resolve","relative","randomUUID","homedir","readFileSync","writeFileSync","existsSync","resolve","relative","homedir","execFile","promisify","execFile","promisify","execFile","promisify","execFile","promisify","execFile","promisify","execFile","promisify","execFile","promisify","execFile","promisify","execFile","promisify","execFile","promisify","execFile","promisify","execFile","promisify","execFile","promisify","execFile","promisify","readFileSync","writeFileSync","renameSync","existsSync","unlinkSync","resolve","relative","homedir","randomUUID","readFileSync","writeFileSync","existsSync","resolve","relative","execFile","spawn","promisify","existsSync","join","resolve","execFileSync","z","resolve","tool","result","homedir","getFileTracker","getFileReadCache","ensureSafePath","relative","getCheckpointManager","randomUUID","recordTransactionFile","existsSync","readFileSync","writeFileSync","timeoutMs","fg","execFileAsync","promisify","execFile","DEFAULT_TIMEOUT","stdout","PROTECTED_BRANCHES","entries","renameSync","unlinkSync","spawn","join","__require","execFileSync"]}