@sourcegraph/amp 0.0.1749246959-g551fd5 → 0.0.1749256326-gf8b1cf
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.
- package/dist/amp.js +1 -2
- package/dist/client-D82aFqMl.js +0 -1
- package/dist/console-RPzEsLY0.js +0 -1
- package/dist/create_file.node-Dg6SfP0E.js +0 -1
- package/dist/edit_file.node-DOTivrdL.js +0 -1
- package/dist/executable-Cvv6G9ik.js +0 -1
- package/dist/files-DrSncnX3.js +0 -1
- package/dist/fuzzy-server.js +0 -1
- package/dist/glob.node-Betywdle.js +0 -1
- package/dist/index-C1JH-cfZ.js +0 -1
- package/dist/list_directory.node-B8bOIV1q.js +0 -1
- package/dist/load-profile-CgexvkzB.js +0 -1
- package/dist/{main-X3N3IEqE.js → main-8KUolY-x.js} +10 -11
- package/dist/node-BIJw0rpH.js +0 -1
- package/dist/{node-ChwsFdlu.js → node-BSnweH9G.js} +1 -2
- package/dist/node-CQsX6uby.js +0 -1
- package/dist/node-DeN3f1CH.js +0 -1
- package/dist/node-cSLqYAQI.js +0 -1
- package/dist/node-l0bjR3wx.js +0 -1
- package/dist/read_file.node-Cf-KhpsY.js +0 -1
- package/dist/{stdio-vZX8mSpo.js → stdio-KJwwMQUN.js} +1 -2
- package/dist/storybook.js +0 -1
- package/dist/undo_edit.node-CCYYuJ4U.js +0 -1
- package/package.json +2 -1
- package/dist/amp.js.map +0 -1
- package/dist/client-D82aFqMl.js.map +0 -1
- package/dist/console-RPzEsLY0.js.map +0 -1
- package/dist/create_file.node-Dg6SfP0E.js.map +0 -1
- package/dist/edit_file.node-DOTivrdL.js.map +0 -1
- package/dist/executable-Cvv6G9ik.js.map +0 -1
- package/dist/files-DrSncnX3.js.map +0 -1
- package/dist/fuzzy-server.js.map +0 -1
- package/dist/glob.node-Betywdle.js.map +0 -1
- package/dist/index-C1JH-cfZ.js.map +0 -1
- package/dist/list_directory.node-B8bOIV1q.js.map +0 -1
- package/dist/load-profile-CgexvkzB.js.map +0 -1
- package/dist/main-X3N3IEqE.js.map +0 -1
- package/dist/node-BIJw0rpH.js.map +0 -1
- package/dist/node-CQsX6uby.js.map +0 -1
- package/dist/node-ChwsFdlu.js.map +0 -1
- package/dist/node-DeN3f1CH.js.map +0 -1
- package/dist/node-cSLqYAQI.js.map +0 -1
- package/dist/node-l0bjR3wx.js.map +0 -1
- package/dist/read_file.node-Cf-KhpsY.js.map +0 -1
- package/dist/stdio-vZX8mSpo.js.map +0 -1
- package/dist/storybook.js.map +0 -1
- package/dist/undo_edit.node-CCYYuJ4U.js.map +0 -1
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"node-l0bjR3wx.js","sources":["../../core/src/tools/builtin/web_search/node.ts"],"sourcesContent":["import { promiseFactoryToObservable } from '@sourcegraph/observable'\nimport { fetchFromAmpServer } from '../../../server-api/client'\nimport { HEADER_KEY_THREAD_ID } from '../../../server-api/headers'\nimport {\n\tFALLBACK_TO_OLD_INTERNAL_API,\n\tinternalAPIClient,\n} from '../../../server-api/internal-api-client'\nimport type { webSearchToolReg } from './common'\n\nexport const nodeWebSearchTool: NonNullable<(typeof webSearchToolReg)['fn']> = (\n\t{ args },\n\t{ threadID },\n) => {\n\treturn promiseFactoryToObservable(async (signal) => {\n\t\ttry {\n\t\t\tconst resp = await internalAPIClient.webSearch(\n\t\t\t\t{\n\t\t\t\t\tquery: args.query,\n\t\t\t\t\tnumResults: args.num_results || 5,\n\t\t\t\t\tthread: threadID,\n\t\t\t\t},\n\t\t\t\t{ signal },\n\t\t\t)\n\t\t\tif (!resp.ok) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to perform web search: ${resp.error.message || 'Unknown error'}`,\n\t\t\t\t)\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tstatus: 'done' as const,\n\t\t\t\tresult: resp.result,\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (FALLBACK_TO_OLD_INTERNAL_API) {\n\t\t\t\t// Fallback to old API\n\t\t\t\tconst url = `/api/web-search?query=${encodeURIComponent(args.query)}&numResults=${args.num_results || 5}`\n\t\t\t\tconst response = await fetchFromAmpServer(url, {\n\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\tsignal,\n\t\t\t\t\theaders: threadID ? { [HEADER_KEY_THREAD_ID]: threadID } : undefined,\n\t\t\t\t})\n\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\tconst errorText = await response.text()\n\t\t\t\t\tthrow new Error(`Server returned ${response.status}: ${errorText}`)\n\t\t\t\t}\n\n\t\t\t\tconst results = await response.json()\n\t\t\t\treturn {\n\t\t\t\t\tstatus: 'done' as const,\n\t\t\t\t\tresult: results,\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t})\n}\n"],"names":["nodeWebSearchTool","args","threadID","promiseFactoryToObservable","signal","resp","internalAPIClient","FALLBACK_TO_OLD_INTERNAL_API","url","response","fetchFromAmpServer","HEADER_KEY_THREAD_ID","errorText"],"mappings":";;;AASO,MAAMA,IAAkE,CAC9E,EAAE,MAAAC,KACF,EAAE,UAAAC,QAEKC,EAA2B,OAAOC,MAAW;AAC/C,MAAA;AACG,UAAAC,IAAO,MAAMC,EAAkB;AAAA,MACpC;AAAA,QACC,OAAOL,EAAK;AAAA,QACZ,YAAYA,EAAK,eAAe;AAAA,QAChC,QAAQC;AAAA,MACT;AAAA,MACA,EAAE,QAAAE,EAAO;AAAA,IACV;AACI,QAAA,CAACC,EAAK;AACT,YAAM,IAAI;AAAA,QACT,iCAAiCA,EAAK,MAAM,WAAW,eAAe;AAAA,MACvE;AAGM,WAAA;AAAA,MACN,QAAQ;AAAA,MACR,QAAQA,EAAK;AAAA,IACd;AAAA,UACe;AACf,QAAIE,GAA8B;AAE3B,YAAAC,IAAM,yBAAyB,mBAAmBP,EAAK,KAAK,CAAC,eAAeA,EAAK,eAAe,CAAC,IACjGQ,IAAW,MAAMC,EAAmBF,GAAK;AAAA,QAC9C,QAAQ;AAAA,QACR,QAAAJ;AAAA,QACA,SAASF,IAAW,EAAE,CAACS,CAAoB,GAAGT,EAAa,IAAA;AAAA,MAAA,CAC3D;AAEG,UAAA,CAACO,EAAS,IAAI;AACX,cAAAG,IAAY,MAAMH,EAAS,KAAK;AACtC,cAAM,IAAI,MAAM,mBAAmBA,EAAS,MAAM,KAAKG,CAAS,EAAE;AAAA,MAAA;AAI5D,aAAA;AAAA,QACN,QAAQ;AAAA,QACR,QAHe,MAAMH,EAAS,KAAK;AAAA,MAIpC;AAAA,IAAA;AAAA,EAGD;AACD,CACA;"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"read_file.node-Cf-KhpsY.js","sources":["../../core/src/tools/builtin/filesystem/read_file.node.ts"],"sourcesContent":["import { promiseFactoryToObservable } from '@sourcegraph/observable'\nimport { type readFileToolReg } from './read_file.common'\nimport { readFileContentWith } from './read_file.util'\n\nexport const nodeReadFileTool: NonNullable<typeof readFileToolReg.fn> = (\n\t{ args },\n\t{ dir, dirs, threadID, filesystem },\n) => {\n\tconst readFileContentFn = readFileContentWith({ readFileFn: filesystem.readFile })\n\treturn promiseFactoryToObservable(async (signal) =>\n\t\treadFileContentFn({ args }, { dir, dirs, threadID, filesystem }, signal),\n\t)\n}\n"],"names":["nodeReadFileTool","args","dir","dirs","threadID","filesystem","readFileContentFn","readFileContentWith","promiseFactoryToObservable","signal"],"mappings":";;AAIa,MAAAA,IAA2D,CACvE,EAAE,MAAAC,KACF,EAAE,KAAAC,GAAK,MAAAC,GAAM,UAAAC,GAAU,YAAAC,QACnB;AACJ,QAAMC,IAAoBC,EAAoB,EAAE,YAAYF,EAAW,UAAU;AAC1E,SAAAG;AAAA,IAA2B,OAAOC,MACxCH,EAAkB,EAAE,MAAAL,EAAK,GAAG,EAAE,KAAAC,GAAK,MAAAC,GAAM,UAAAC,GAAU,YAAAC,EAAW,GAAGI,CAAM;AAAA,EACxE;AACD;"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"stdio-vZX8mSpo.js","sources":["../../node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/windows.js","../../node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/mode.js","../../node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/index.js","../../node_modules/.pnpm/which@2.0.2/node_modules/which/which.js","../../node_modules/.pnpm/path-key@3.1.1/node_modules/path-key/index.js","../../node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/resolveCommand.js","../../node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/escape.js","../../node_modules/.pnpm/shebang-regex@3.0.0/node_modules/shebang-regex/index.js","../../node_modules/.pnpm/shebang-command@2.0.0/node_modules/shebang-command/index.js","../../node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/readShebang.js","../../node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/parse.js","../../node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/enoent.js","../../node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/index.js","../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.12.0/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js","../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.12.0/node_modules/@modelcontextprotocol/sdk/dist/esm/client/stdio.js"],"sourcesContent":["module.exports = isexe\nisexe.sync = sync\n\nvar fs = require('fs')\n\nfunction checkPathExt (path, options) {\n var pathext = options.pathExt !== undefined ?\n options.pathExt : process.env.PATHEXT\n\n if (!pathext) {\n return true\n }\n\n pathext = pathext.split(';')\n if (pathext.indexOf('') !== -1) {\n return true\n }\n for (var i = 0; i < pathext.length; i++) {\n var p = pathext[i].toLowerCase()\n if (p && path.substr(-p.length).toLowerCase() === p) {\n return true\n }\n }\n return false\n}\n\nfunction checkStat (stat, path, options) {\n if (!stat.isSymbolicLink() && !stat.isFile()) {\n return false\n }\n return checkPathExt(path, options)\n}\n\nfunction isexe (path, options, cb) {\n fs.stat(path, function (er, stat) {\n cb(er, er ? false : checkStat(stat, path, options))\n })\n}\n\nfunction sync (path, options) {\n return checkStat(fs.statSync(path), path, options)\n}\n","module.exports = isexe\nisexe.sync = sync\n\nvar fs = require('fs')\n\nfunction isexe (path, options, cb) {\n fs.stat(path, function (er, stat) {\n cb(er, er ? false : checkStat(stat, options))\n })\n}\n\nfunction sync (path, options) {\n return checkStat(fs.statSync(path), options)\n}\n\nfunction checkStat (stat, options) {\n return stat.isFile() && checkMode(stat, options)\n}\n\nfunction checkMode (stat, options) {\n var mod = stat.mode\n var uid = stat.uid\n var gid = stat.gid\n\n var myUid = options.uid !== undefined ?\n options.uid : process.getuid && process.getuid()\n var myGid = options.gid !== undefined ?\n options.gid : process.getgid && process.getgid()\n\n var u = parseInt('100', 8)\n var g = parseInt('010', 8)\n var o = parseInt('001', 8)\n var ug = u | g\n\n var ret = (mod & o) ||\n (mod & g) && gid === myGid ||\n (mod & u) && uid === myUid ||\n (mod & ug) && myUid === 0\n\n return ret\n}\n","var fs = require('fs')\nvar core\nif (process.platform === 'win32' || global.TESTING_WINDOWS) {\n core = require('./windows.js')\n} else {\n core = require('./mode.js')\n}\n\nmodule.exports = isexe\nisexe.sync = sync\n\nfunction isexe (path, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = {}\n }\n\n if (!cb) {\n if (typeof Promise !== 'function') {\n throw new TypeError('callback not provided')\n }\n\n return new Promise(function (resolve, reject) {\n isexe(path, options || {}, function (er, is) {\n if (er) {\n reject(er)\n } else {\n resolve(is)\n }\n })\n })\n }\n\n core(path, options || {}, function (er, is) {\n // ignore EACCES because that just means we aren't allowed to run it\n if (er) {\n if (er.code === 'EACCES' || options && options.ignoreErrors) {\n er = null\n is = false\n }\n }\n cb(er, is)\n })\n}\n\nfunction sync (path, options) {\n // my kingdom for a filtered catch\n try {\n return core.sync(path, options || {})\n } catch (er) {\n if (options && options.ignoreErrors || er.code === 'EACCES') {\n return false\n } else {\n throw er\n }\n }\n}\n","const isWindows = process.platform === 'win32' ||\n process.env.OSTYPE === 'cygwin' ||\n process.env.OSTYPE === 'msys'\n\nconst path = require('path')\nconst COLON = isWindows ? ';' : ':'\nconst isexe = require('isexe')\n\nconst getNotFoundError = (cmd) =>\n Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' })\n\nconst getPathInfo = (cmd, opt) => {\n const colon = opt.colon || COLON\n\n // If it has a slash, then we don't bother searching the pathenv.\n // just check the file itself, and that's it.\n const pathEnv = cmd.match(/\\//) || isWindows && cmd.match(/\\\\/) ? ['']\n : (\n [\n // windows always checks the cwd first\n ...(isWindows ? [process.cwd()] : []),\n ...(opt.path || process.env.PATH ||\n /* istanbul ignore next: very unusual */ '').split(colon),\n ]\n )\n const pathExtExe = isWindows\n ? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM'\n : ''\n const pathExt = isWindows ? pathExtExe.split(colon) : ['']\n\n if (isWindows) {\n if (cmd.indexOf('.') !== -1 && pathExt[0] !== '')\n pathExt.unshift('')\n }\n\n return {\n pathEnv,\n pathExt,\n pathExtExe,\n }\n}\n\nconst which = (cmd, opt, cb) => {\n if (typeof opt === 'function') {\n cb = opt\n opt = {}\n }\n if (!opt)\n opt = {}\n\n const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)\n const found = []\n\n const step = i => new Promise((resolve, reject) => {\n if (i === pathEnv.length)\n return opt.all && found.length ? resolve(found)\n : reject(getNotFoundError(cmd))\n\n const ppRaw = pathEnv[i]\n const pathPart = /^\".*\"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw\n\n const pCmd = path.join(pathPart, cmd)\n const p = !pathPart && /^\\.[\\\\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd\n : pCmd\n\n resolve(subStep(p, i, 0))\n })\n\n const subStep = (p, i, ii) => new Promise((resolve, reject) => {\n if (ii === pathExt.length)\n return resolve(step(i + 1))\n const ext = pathExt[ii]\n isexe(p + ext, { pathExt: pathExtExe }, (er, is) => {\n if (!er && is) {\n if (opt.all)\n found.push(p + ext)\n else\n return resolve(p + ext)\n }\n return resolve(subStep(p, i, ii + 1))\n })\n })\n\n return cb ? step(0).then(res => cb(null, res), cb) : step(0)\n}\n\nconst whichSync = (cmd, opt) => {\n opt = opt || {}\n\n const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)\n const found = []\n\n for (let i = 0; i < pathEnv.length; i ++) {\n const ppRaw = pathEnv[i]\n const pathPart = /^\".*\"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw\n\n const pCmd = path.join(pathPart, cmd)\n const p = !pathPart && /^\\.[\\\\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd\n : pCmd\n\n for (let j = 0; j < pathExt.length; j ++) {\n const cur = p + pathExt[j]\n try {\n const is = isexe.sync(cur, { pathExt: pathExtExe })\n if (is) {\n if (opt.all)\n found.push(cur)\n else\n return cur\n }\n } catch (ex) {}\n }\n }\n\n if (opt.all && found.length)\n return found\n\n if (opt.nothrow)\n return null\n\n throw getNotFoundError(cmd)\n}\n\nmodule.exports = which\nwhich.sync = whichSync\n","'use strict';\n\nconst pathKey = (options = {}) => {\n\tconst environment = options.env || process.env;\n\tconst platform = options.platform || process.platform;\n\n\tif (platform !== 'win32') {\n\t\treturn 'PATH';\n\t}\n\n\treturn Object.keys(environment).reverse().find(key => key.toUpperCase() === 'PATH') || 'Path';\n};\n\nmodule.exports = pathKey;\n// TODO: Remove this for the next major release\nmodule.exports.default = pathKey;\n","'use strict';\n\nconst path = require('path');\nconst which = require('which');\nconst getPathKey = require('path-key');\n\nfunction resolveCommandAttempt(parsed, withoutPathExt) {\n const env = parsed.options.env || process.env;\n const cwd = process.cwd();\n const hasCustomCwd = parsed.options.cwd != null;\n // Worker threads do not have process.chdir()\n const shouldSwitchCwd = hasCustomCwd && process.chdir !== undefined && !process.chdir.disabled;\n\n // If a custom `cwd` was specified, we need to change the process cwd\n // because `which` will do stat calls but does not support a custom cwd\n if (shouldSwitchCwd) {\n try {\n process.chdir(parsed.options.cwd);\n } catch (err) {\n /* Empty */\n }\n }\n\n let resolved;\n\n try {\n resolved = which.sync(parsed.command, {\n path: env[getPathKey({ env })],\n pathExt: withoutPathExt ? path.delimiter : undefined,\n });\n } catch (e) {\n /* Empty */\n } finally {\n if (shouldSwitchCwd) {\n process.chdir(cwd);\n }\n }\n\n // If we successfully resolved, ensure that an absolute path is returned\n // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it\n if (resolved) {\n resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved);\n }\n\n return resolved;\n}\n\nfunction resolveCommand(parsed) {\n return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);\n}\n\nmodule.exports = resolveCommand;\n","'use strict';\n\n// See http://www.robvanderwoude.com/escapechars.php\nconst metaCharsRegExp = /([()\\][%!^\"`<>&|;, *?])/g;\n\nfunction escapeCommand(arg) {\n // Escape meta chars\n arg = arg.replace(metaCharsRegExp, '^$1');\n\n return arg;\n}\n\nfunction escapeArgument(arg, doubleEscapeMetaChars) {\n // Convert to string\n arg = `${arg}`;\n\n // Algorithm below is based on https://qntm.org/cmd\n // It's slightly altered to disable JS backtracking to avoid hanging on specially crafted input\n // Please see https://github.com/moxystudio/node-cross-spawn/pull/160 for more information\n\n // Sequence of backslashes followed by a double quote:\n // double up all the backslashes and escape the double quote\n arg = arg.replace(/(?=(\\\\+?)?)\\1\"/g, '$1$1\\\\\"');\n\n // Sequence of backslashes followed by the end of the string\n // (which will become a double quote later):\n // double up all the backslashes\n arg = arg.replace(/(?=(\\\\+?)?)\\1$/, '$1$1');\n\n // All other backslashes occur literally\n\n // Quote the whole thing:\n arg = `\"${arg}\"`;\n\n // Escape meta chars\n arg = arg.replace(metaCharsRegExp, '^$1');\n\n // Double escape meta chars if necessary\n if (doubleEscapeMetaChars) {\n arg = arg.replace(metaCharsRegExp, '^$1');\n }\n\n return arg;\n}\n\nmodule.exports.command = escapeCommand;\nmodule.exports.argument = escapeArgument;\n","'use strict';\nmodule.exports = /^#!(.*)/;\n","'use strict';\nconst shebangRegex = require('shebang-regex');\n\nmodule.exports = (string = '') => {\n\tconst match = string.match(shebangRegex);\n\n\tif (!match) {\n\t\treturn null;\n\t}\n\n\tconst [path, argument] = match[0].replace(/#! ?/, '').split(' ');\n\tconst binary = path.split('/').pop();\n\n\tif (binary === 'env') {\n\t\treturn argument;\n\t}\n\n\treturn argument ? `${binary} ${argument}` : binary;\n};\n","'use strict';\n\nconst fs = require('fs');\nconst shebangCommand = require('shebang-command');\n\nfunction readShebang(command) {\n // Read the first 150 bytes from the file\n const size = 150;\n const buffer = Buffer.alloc(size);\n\n let fd;\n\n try {\n fd = fs.openSync(command, 'r');\n fs.readSync(fd, buffer, 0, size, 0);\n fs.closeSync(fd);\n } catch (e) { /* Empty */ }\n\n // Attempt to extract shebang (null is returned if not a shebang)\n return shebangCommand(buffer.toString());\n}\n\nmodule.exports = readShebang;\n","'use strict';\n\nconst path = require('path');\nconst resolveCommand = require('./util/resolveCommand');\nconst escape = require('./util/escape');\nconst readShebang = require('./util/readShebang');\n\nconst isWin = process.platform === 'win32';\nconst isExecutableRegExp = /\\.(?:com|exe)$/i;\nconst isCmdShimRegExp = /node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;\n\nfunction detectShebang(parsed) {\n parsed.file = resolveCommand(parsed);\n\n const shebang = parsed.file && readShebang(parsed.file);\n\n if (shebang) {\n parsed.args.unshift(parsed.file);\n parsed.command = shebang;\n\n return resolveCommand(parsed);\n }\n\n return parsed.file;\n}\n\nfunction parseNonShell(parsed) {\n if (!isWin) {\n return parsed;\n }\n\n // Detect & add support for shebangs\n const commandFile = detectShebang(parsed);\n\n // We don't need a shell if the command filename is an executable\n const needsShell = !isExecutableRegExp.test(commandFile);\n\n // If a shell is required, use cmd.exe and take care of escaping everything correctly\n // Note that `forceShell` is an hidden option used only in tests\n if (parsed.options.forceShell || needsShell) {\n // Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/`\n // The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument\n // Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called,\n // we need to double escape them\n const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile);\n\n // Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\\bar)\n // This is necessary otherwise it will always fail with ENOENT in those cases\n parsed.command = path.normalize(parsed.command);\n\n // Escape command & arguments\n parsed.command = escape.command(parsed.command);\n parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars));\n\n const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n parsed.args = ['/d', '/s', '/c', `\"${shellCommand}\"`];\n parsed.command = process.env.comspec || 'cmd.exe';\n parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped\n }\n\n return parsed;\n}\n\nfunction parse(command, args, options) {\n // Normalize arguments, similar to nodejs\n if (args && !Array.isArray(args)) {\n options = args;\n args = null;\n }\n\n args = args ? args.slice(0) : []; // Clone array to avoid changing the original\n options = Object.assign({}, options); // Clone object to avoid changing the original\n\n // Build our parsed object\n const parsed = {\n command,\n args,\n options,\n file: undefined,\n original: {\n command,\n args,\n },\n };\n\n // Delegate further parsing to shell or non-shell\n return options.shell ? parsed : parseNonShell(parsed);\n}\n\nmodule.exports = parse;\n","'use strict';\n\nconst isWin = process.platform === 'win32';\n\nfunction notFoundError(original, syscall) {\n return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), {\n code: 'ENOENT',\n errno: 'ENOENT',\n syscall: `${syscall} ${original.command}`,\n path: original.command,\n spawnargs: original.args,\n });\n}\n\nfunction hookChildProcess(cp, parsed) {\n if (!isWin) {\n return;\n }\n\n const originalEmit = cp.emit;\n\n cp.emit = function (name, arg1) {\n // If emitting \"exit\" event and exit code is 1, we need to check if\n // the command exists and emit an \"error\" instead\n // See https://github.com/IndigoUnited/node-cross-spawn/issues/16\n if (name === 'exit') {\n const err = verifyENOENT(arg1, parsed);\n\n if (err) {\n return originalEmit.call(cp, 'error', err);\n }\n }\n\n return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params\n };\n}\n\nfunction verifyENOENT(status, parsed) {\n if (isWin && status === 1 && !parsed.file) {\n return notFoundError(parsed.original, 'spawn');\n }\n\n return null;\n}\n\nfunction verifyENOENTSync(status, parsed) {\n if (isWin && status === 1 && !parsed.file) {\n return notFoundError(parsed.original, 'spawnSync');\n }\n\n return null;\n}\n\nmodule.exports = {\n hookChildProcess,\n verifyENOENT,\n verifyENOENTSync,\n notFoundError,\n};\n","'use strict';\n\nconst cp = require('child_process');\nconst parse = require('./lib/parse');\nconst enoent = require('./lib/enoent');\n\nfunction spawn(command, args, options) {\n // Parse the arguments\n const parsed = parse(command, args, options);\n\n // Spawn the child process\n const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);\n\n // Hook into child process \"exit\" event to emit an error if the command\n // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16\n enoent.hookChildProcess(spawned, parsed);\n\n return spawned;\n}\n\nfunction spawnSync(command, args, options) {\n // Parse the arguments\n const parsed = parse(command, args, options);\n\n // Spawn the child process\n const result = cp.spawnSync(parsed.command, parsed.args, parsed.options);\n\n // Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16\n result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);\n\n return result;\n}\n\nmodule.exports = spawn;\nmodule.exports.spawn = spawn;\nmodule.exports.sync = spawnSync;\n\nmodule.exports._parse = parse;\nmodule.exports._enoent = enoent;\n","import { JSONRPCMessageSchema } from \"../types.js\";\n/**\n * Buffers a continuous stdio stream into discrete JSON-RPC messages.\n */\nexport class ReadBuffer {\n append(chunk) {\n this._buffer = this._buffer ? Buffer.concat([this._buffer, chunk]) : chunk;\n }\n readMessage() {\n if (!this._buffer) {\n return null;\n }\n const index = this._buffer.indexOf(\"\\n\");\n if (index === -1) {\n return null;\n }\n const line = this._buffer.toString(\"utf8\", 0, index).replace(/\\r$/, '');\n this._buffer = this._buffer.subarray(index + 1);\n return deserializeMessage(line);\n }\n clear() {\n this._buffer = undefined;\n }\n}\nexport function deserializeMessage(line) {\n return JSONRPCMessageSchema.parse(JSON.parse(line));\n}\nexport function serializeMessage(message) {\n return JSON.stringify(message) + \"\\n\";\n}\n//# sourceMappingURL=stdio.js.map","import spawn from \"cross-spawn\";\nimport process from \"node:process\";\nimport { PassThrough } from \"node:stream\";\nimport { ReadBuffer, serializeMessage } from \"../shared/stdio.js\";\n/**\n * Environment variables to inherit by default, if an environment is not explicitly given.\n */\nexport const DEFAULT_INHERITED_ENV_VARS = process.platform === \"win32\"\n ? [\n \"APPDATA\",\n \"HOMEDRIVE\",\n \"HOMEPATH\",\n \"LOCALAPPDATA\",\n \"PATH\",\n \"PROCESSOR_ARCHITECTURE\",\n \"SYSTEMDRIVE\",\n \"SYSTEMROOT\",\n \"TEMP\",\n \"USERNAME\",\n \"USERPROFILE\",\n ]\n : /* list inspired by the default env inheritance of sudo */\n [\"HOME\", \"LOGNAME\", \"PATH\", \"SHELL\", \"TERM\", \"USER\"];\n/**\n * Returns a default environment object including only environment variables deemed safe to inherit.\n */\nexport function getDefaultEnvironment() {\n const env = {};\n for (const key of DEFAULT_INHERITED_ENV_VARS) {\n const value = process.env[key];\n if (value === undefined) {\n continue;\n }\n if (value.startsWith(\"()\")) {\n // Skip functions, which are a security risk.\n continue;\n }\n env[key] = value;\n }\n return env;\n}\n/**\n * Client transport for stdio: this will connect to a server by spawning a process and communicating with it over stdin/stdout.\n *\n * This transport is only available in Node.js environments.\n */\nexport class StdioClientTransport {\n constructor(server) {\n this._abortController = new AbortController();\n this._readBuffer = new ReadBuffer();\n this._stderrStream = null;\n this._serverParams = server;\n if (server.stderr === \"pipe\" || server.stderr === \"overlapped\") {\n this._stderrStream = new PassThrough();\n }\n }\n /**\n * Starts the server process and prepares to communicate with it.\n */\n async start() {\n if (this._process) {\n throw new Error(\"StdioClientTransport already started! If using Client class, note that connect() calls start() automatically.\");\n }\n return new Promise((resolve, reject) => {\n var _a, _b, _c, _d, _e, _f;\n this._process = spawn(this._serverParams.command, (_a = this._serverParams.args) !== null && _a !== void 0 ? _a : [], {\n env: (_b = this._serverParams.env) !== null && _b !== void 0 ? _b : getDefaultEnvironment(),\n stdio: [\"pipe\", \"pipe\", (_c = this._serverParams.stderr) !== null && _c !== void 0 ? _c : \"inherit\"],\n shell: false,\n signal: this._abortController.signal,\n windowsHide: process.platform === \"win32\" && isElectron(),\n cwd: this._serverParams.cwd,\n });\n this._process.on(\"error\", (error) => {\n var _a, _b;\n if (error.name === \"AbortError\") {\n // Expected when close() is called.\n (_a = this.onclose) === null || _a === void 0 ? void 0 : _a.call(this);\n return;\n }\n reject(error);\n (_b = this.onerror) === null || _b === void 0 ? void 0 : _b.call(this, error);\n });\n this._process.on(\"spawn\", () => {\n resolve();\n });\n this._process.on(\"close\", (_code) => {\n var _a;\n this._process = undefined;\n (_a = this.onclose) === null || _a === void 0 ? void 0 : _a.call(this);\n });\n (_d = this._process.stdin) === null || _d === void 0 ? void 0 : _d.on(\"error\", (error) => {\n var _a;\n (_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, error);\n });\n (_e = this._process.stdout) === null || _e === void 0 ? void 0 : _e.on(\"data\", (chunk) => {\n this._readBuffer.append(chunk);\n this.processReadBuffer();\n });\n (_f = this._process.stdout) === null || _f === void 0 ? void 0 : _f.on(\"error\", (error) => {\n var _a;\n (_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, error);\n });\n if (this._stderrStream && this._process.stderr) {\n this._process.stderr.pipe(this._stderrStream);\n }\n });\n }\n /**\n * The stderr stream of the child process, if `StdioServerParameters.stderr` was set to \"pipe\" or \"overlapped\".\n *\n * If stderr piping was requested, a PassThrough stream is returned _immediately_, allowing callers to\n * attach listeners before the start method is invoked. This prevents loss of any early\n * error output emitted by the child process.\n */\n get stderr() {\n var _a, _b;\n if (this._stderrStream) {\n return this._stderrStream;\n }\n return (_b = (_a = this._process) === null || _a === void 0 ? void 0 : _a.stderr) !== null && _b !== void 0 ? _b : null;\n }\n processReadBuffer() {\n var _a, _b;\n while (true) {\n try {\n const message = this._readBuffer.readMessage();\n if (message === null) {\n break;\n }\n (_a = this.onmessage) === null || _a === void 0 ? void 0 : _a.call(this, message);\n }\n catch (error) {\n (_b = this.onerror) === null || _b === void 0 ? void 0 : _b.call(this, error);\n }\n }\n }\n async close() {\n this._abortController.abort();\n this._process = undefined;\n this._readBuffer.clear();\n }\n send(message) {\n return new Promise((resolve) => {\n var _a;\n if (!((_a = this._process) === null || _a === void 0 ? void 0 : _a.stdin)) {\n throw new Error(\"Not connected\");\n }\n const json = serializeMessage(message);\n if (this._process.stdin.write(json)) {\n resolve();\n }\n else {\n this._process.stdin.once(\"drain\", resolve);\n }\n });\n }\n}\nfunction isElectron() {\n return \"type\" in process;\n}\n//# sourceMappingURL=stdio.js.map"],"names":["windows","isexe","sync","fs","require$$0","checkPathExt","path","options","pathext","p","checkStat","stat","cb","er","mode","checkMode","mod","uid","gid","myUid","myGid","u","g","o","ug","ret","core","global","require$$1","require$$2","isexe_1","resolve","reject","is","isWindows","COLON","getNotFoundError","cmd","getPathInfo","opt","colon","pathEnv","pathExtExe","pathExt","which","found","step","i","ppRaw","pathPart","pCmd","subStep","ii","ext","res","whichSync","j","cur","which_1","pathKey","environment","key","pathKeyModule","getPathKey","resolveCommandAttempt","parsed","withoutPathExt","env","cwd","hasCustomCwd","shouldSwitchCwd","resolved","resolveCommand","resolveCommand_1","metaCharsRegExp","escapeCommand","arg","escapeArgument","doubleEscapeMetaChars","_escape","shebangRegex","shebangCommand","string","match","argument","binary","readShebang","command","buffer","fd","readShebang_1","escape","require$$3","isWin","isExecutableRegExp","isCmdShimRegExp","detectShebang","shebang","parseNonShell","commandFile","needsShell","needsDoubleEscapeMetaChars","shellCommand","parse","args","parse_1","notFoundError","original","syscall","hookChildProcess","cp","originalEmit","name","arg1","err","verifyENOENT","status","verifyENOENTSync","enoent","spawn","spawned","spawnSync","result","crossSpawnModule","ReadBuffer","chunk","index","line","deserializeMessage","JSONRPCMessageSchema","serializeMessage","message","DEFAULT_INHERITED_ENV_VARS","process","getDefaultEnvironment","value","StdioClientTransport","server","PassThrough","_a","_b","_c","_d","_e","_f","isElectron","error","_code","json"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]}
|
package/dist/storybook.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"storybook.js","sources":["../src/storybook.ts"],"sourcesContent":["import {\n\tfilterPrintedThread,\n\tprintThreadToConsole,\n} from '@sourcegraph/amp-core/src/threads/console'\nimport type { ThreadToolUseID } from '@sourcegraph/amp-core/src/threads/thread'\nimport {\n\tnewThreadID,\n\tnewThreadToolUseID,\n\ttype Thread,\n\ttype ThreadMessage,\n} from '@sourcegraph/amp-core/src/threads/thread'\nimport { BASH_TOOL_NAME } from '@sourcegraph/amp-core/src/tools/builtin/bash/common'\nimport { GREP_TOOL_NAME } from '@sourcegraph/amp-core/src/tools/builtin/grep/common'\nimport { colorPrinter, monochromePrinter } from '@sourcegraph/amp-core/src/util/color'\nimport { stdout } from 'node:process'\nimport { parseArgs } from 'node:util'\n\n// Stories for the CLI\ntype Story = {\n\tname: string\n\tthread: Thread\n}\n\n// Create a Bash story based on the web storybook examples\nfunction createBashStory(): Story {\n\tconst threadID = newThreadID()\n\tconst toolUseIDs: ThreadToolUseID[] = []\n\n\t// Generate tool use IDs\n\tfor (let i = 0; i < 20; i++) {\n\t\ttoolUseIDs.push(newThreadToolUseID())\n\t}\n\n\tconst threadMessages: ThreadMessage[] = [\n\t\t// Example 1: Command with ANSI color codes\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[0]!,\n\t\t\t\t\tname: BASH_TOOL_NAME,\n\t\t\t\t\tinput: { cmd: 'npm test' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[0]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tprogress: {\n\t\t\t\t\t\t\toutput: \"> tstest@1.0.0 test /Users/owi/Projects/tstest\\n> jest\\n\\n\\u001b[31mFAIL\\u001b[39m src/index.test.ts\\n \\u001b[90m● \\u001b[39mTest suite failed to run\\n\\n \\u001b[31m[96msrc/index.test.ts\\u001b[39m\\u001b[90m [0m:\\u001b[39m \\u001b[93m[13\\u001b[39m \\u001b[90m[0m:\\u001b[39m \\u001b[93m[37\\u001b[39m \\u001b[90m[0m - \\u001b[31merror\\u001b[39m \\u001b[90m[0m \\u001b[90m[90m TS2554:\\u001b[39m\\n \\u001b[90mExpected 0-1 arguments, but got 2.\\u001b[39m\\n\\n \\u001b[7m13\\u001b[39m \\u001b[90m[0m expect(helloWorld(\\u001b[32m'TypeScript'\\u001b[39m, 2)).toBe(\\u001b[32m'Greetings, TypeScript!'\\u001b[39m);\\n \\u001b[7m\\u001b[39m \\u001b[90m[0m \\u001b[31m[91m~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\\u001b[39m\\n\\n \\u001b[96msrc/index.test.ts\\u001b[39m\\u001b[90m [0m::\\u001b[39m \\u001b[93m[17\\u001b[39m \\u001b[90m[0m::\\u001b[39m \\u001b[93m[37\\u001b[39m \\u001b[90m[0m - \\u001b[31merror\\u001b[39m \\u001b[90m[0m \\u001b[90m[90m TS2554:\\u001b[39m\\n \\u001b[90mExpected 0-1 arguments, but got 2.\\u001b[39m\\n\\n \\u001b[7m17\\u001b[39m \\u001b[90m[0m expect(helloWorld(\\u001b[32m'TypeScript'\\u001b[39m, 0)).toBe(\\u001b[32m'Hey, TypeScript!'\\u001b[39m);\\n \\u001b[7m\\u001b[39m \\u001b[90m[0m \\u001b[31m[91m~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\\u001b[39m\\n\\n\\nTest Suites: 1 failed, 1 total\\nTests: 0 total\\nSnapshots: 0 total\\nTime: 0.364 s, estimated 1 s\\nRan all test suites.\\n\\u001b[31m ELIFECYCLE\\u001b[39m Test failed. See above for more details.\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tresult: {\n\t\t\t\t\t\t\toutput: `> tstest@1.0.0 test /Users/owi/Projects/tstest\\n> jest\\n\\nFAIL src/index.test.ts\\n ● Test suite failed to run\\n\\n [96msrc/index.test.ts[0m:[93m13[0m:[93m37[0m - [91merror[0m[90m TS2554: [0mExpected 0-1 arguments, but got 2.\\n\\n [7m13[0m expect(helloWorld('TypeScript', 2)).toBe('Greetings, TypeScript!');\\n [7m [0m [91m ~[0m\\n [96msrc/index.test.ts[0m:[93m17[0m:[93m37[0m - [91merror[0m[90m TS2554: [0mExpected 0-1 arguments, but got 2.\\n\\n [7m17[0m expect(helloWorld('TypeScript', 0)).toBe('Hey, TypeScript!');\\n [7m [0m [91m ~[0m\\n\\nTest Suites: 1 failed, 1 total\\nTests: 0 total\\nSnapshots: 0 total\\nTime: 0.364 s, estimated 1 s\\nRan all test suites.\\n ELIFECYCLE Test failed. See above for more details.\\n`,\n\t\t\t\t\t\t\texitCode: 1,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example 2: Queued command\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[1]!,\n\t\t\t\t\tname: BASH_TOOL_NAME,\n\t\t\t\t\tinput: { cmd: 'echo hello world' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[1]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'queued',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example 3: Success case\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[2]!,\n\t\t\t\t\tname: BASH_TOOL_NAME,\n\t\t\t\t\tinput: { cmd: 'echo hello world' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[2]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tprogress: { output: 'hello world' },\n\t\t\t\t\t\tresult: { output: 'hello world', exitCode: 0 },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example 4: Rejected by user\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[3]!,\n\t\t\t\t\tname: BASH_TOOL_NAME,\n\t\t\t\t\tinput: { cmd: 'rm -rf /' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[3]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'rejected-by-user',\n\t\t\t\t\t\ttoAllow: [],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example 5: Subdirectory\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[4]!,\n\t\t\t\t\tname: BASH_TOOL_NAME,\n\t\t\t\t\tinput: { cmd: 'ls -la', cwd: './src' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[4]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tprogress: {\n\t\t\t\t\t\t\toutput: 'total 32\\ndrwxr-xr-x 6 user staff 192 Apr 22 14:35 .\\ndrwxr-xr-x 12 user staff 384 Apr 22 14:30 ..\\n-rw-r--r-- 1 user staff 2546 Apr 22 14:35 main.ts\\n-rw-r--r-- 1 user staff 982 Apr 22 14:30 common.ts\\n-rw-r--r-- 1 user staff 4285 Apr 22 14:35 storybook.ts',\n\t\t\t\t\t\t},\n\t\t\t\t\t\tresult: {\n\t\t\t\t\t\t\toutput: 'total 32\\ndrwxr-xr-x 6 user staff 192 Apr 22 14:35 .\\ndrwxr-xr-x 12 user staff 384 Apr 22 14:30 ..\\n-rw-r--r-- 1 user staff 2546 Apr 22 14:35 main.ts\\n-rw-r--r-- 1 user staff 982 Apr 22 14:30 common.ts\\n-rw-r--r-- 1 user staff 4285 Apr 22 14:35 storybook.ts',\n\t\t\t\t\t\t\texitCode: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example 6: Error case\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[5]!,\n\t\t\t\t\tname: BASH_TOOL_NAME,\n\t\t\t\t\tinput: { cmd: 'some-command --flag' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[5]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: {\n\t\t\t\t\t\t\toutput: 'some-command: command not found',\n\t\t\t\t\t\t\texitCode: 127,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example 7: Cancelled\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[6]!,\n\t\t\t\t\tname: BASH_TOOL_NAME,\n\t\t\t\t\tinput: { cmd: 'echo \"hello world && sleep 1\"' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[6]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'cancelled',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example 8: Output with Windows line endings (CRLF)\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[7]!,\n\t\t\t\t\tname: BASH_TOOL_NAME,\n\t\t\t\t\tinput: { cmd: 'echo \"Windows-style line endings demo\"' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[7]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: {\n\t\t\t\t\t\t\toutput: '<HTML><HEAD><meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\">\\r\\n<TITLE>301 Moved</TITLE></HEAD><BODY>\\r\\n<H1>301 Moved</H1>\\r\\nThe document has moved\\r\\n<A HREF=\"http://www.google.com/\">here</A>.\\r\\n</BODY></HTML>\\r\\n',\n\t\t\t\t\t\t\texitCode: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t]\n\n\treturn {\n\t\tname: 'bash',\n\t\tthread: {\n\t\t\tid: threadID,\n\t\t\tcreated: 0,\n\t\t\tv: 0,\n\t\t\tmessages: threadMessages,\n\t\t},\n\t}\n}\n\n// Create a story for list_directory tool\nfunction createListDirectoryStory(): Story {\n\tconst threadID = newThreadID()\n\tconst toolUseIDs: ThreadToolUseID[] = []\n\n\t// Generate tool use IDs\n\tfor (let i = 0; i < 5; i++) {\n\t\ttoolUseIDs.push(newThreadToolUseID())\n\t}\n\n\tconst threadMessages: ThreadMessage[] = [\n\t\t// Example: list files in current directory\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[0]!,\n\t\t\t\t\tname: 'list_directory',\n\t\t\t\t\tinput: {},\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[0]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: [\n\t\t\t\t\t\t\t'dist/',\n\t\t\t\t\t\t\t'node_modules/',\n\t\t\t\t\t\t\t'src/',\n\t\t\t\t\t\t\t'.gitignore',\n\t\t\t\t\t\t\t'package.json',\n\t\t\t\t\t\t\t'README.md',\n\t\t\t\t\t\t\t'tsconfig.json',\n\t\t\t\t\t\t\t'vite.config.ts',\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: List files in src directory\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[1]!,\n\t\t\t\t\tname: 'list_directory',\n\t\t\t\t\tinput: { path: 'src' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[1]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: [\n\t\t\t\t\t\t\t'common.ts',\n\t\t\t\t\t\t\t'ink-main.ts',\n\t\t\t\t\t\t\t'line-editor/',\n\t\t\t\t\t\t\t'main.ts',\n\t\t\t\t\t\t\t'storybook.ts',\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t]\n\n\treturn {\n\t\tname: 'list_directory',\n\t\tthread: {\n\t\t\tid: threadID,\n\t\t\tcreated: 0,\n\t\t\tv: 0,\n\t\t\tmessages: threadMessages,\n\t\t},\n\t}\n}\n\n// Create a story for Grep tool\nfunction createGrepStory(): Story {\n\tconst threadID = newThreadID()\n\tconst toolUseIDs: ThreadToolUseID[] = []\n\n\t// Generate tool use IDs\n\tfor (let i = 0; i < 5; i++) {\n\t\ttoolUseIDs.push(newThreadToolUseID())\n\t}\n\n\tconst threadMessages: ThreadMessage[] = [\n\t\t// Example: Search for a pattern\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[0]!,\n\t\t\t\t\tname: GREP_TOOL_NAME,\n\t\t\t\t\tinput: { pattern: 'function createListDirectoryStory' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[0]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: [\n\t\t\t\t\t\t\t'src/storybook.ts:101:function createListDirectoryStory(): Story {',\n\t\t\t\t\t\t\t'src/storybook.ts:178: createListDirectoryStory(),',\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: Search for a pattern with path\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[1]!,\n\t\t\t\t\tname: GREP_TOOL_NAME,\n\t\t\t\t\tinput: { pattern: 'function', path: 'src/main.ts' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[1]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: [\n\t\t\t\t\t\t\t'src/main.ts:114:async function readStdinContent(): Promise<string> {',\n\t\t\t\t\t\t\t'src/main.ts:158:async function main() {',\n\t\t\t\t\t\t\t'src/main.ts:644:function printStateMachine<S extends { type: string }, E extends { type: string }>(',\n\t\t\t\t\t\t\t'src/main.ts:665:function hideCursor(): void {',\n\t\t\t\t\t\t\t'src/main.ts:668:function showCursor(): void {',\n\t\t\t\t\t\t\t'src/main.ts:672:function drawProgressIndicator(number: number): void {',\n\t\t\t\t\t\t\t'src/main.ts:678:function clearProgressIndicator(): void {',\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t]\n\n\treturn {\n\t\tname: GREP_TOOL_NAME,\n\t\tthread: {\n\t\t\tid: threadID,\n\t\t\tcreated: 0,\n\t\t\tv: 0,\n\t\t\tmessages: threadMessages,\n\t\t},\n\t}\n}\n\n// Create a story for read_file tool\nfunction createReadFileStory(): Story {\n\tconst threadID = newThreadID()\n\tconst toolUseIDs: ThreadToolUseID[] = []\n\n\t// Generate tool use IDs\n\tfor (let i = 0; i < 5; i++) {\n\t\ttoolUseIDs.push(newThreadToolUseID())\n\t}\n\n\tconst threadMessages: ThreadMessage[] = [\n\t\t// Example: Read entire file\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[0]!,\n\t\t\t\t\tname: 'read_file',\n\t\t\t\t\tinput: { path: 'src/main.ts' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[0]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: 'import { program } from \"commander\"\\n\\nexport function main() {\\n console.log(\"Hello world\")\\n}\\n\\nmain()\\n',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: Read specific line range\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[1]!,\n\t\t\t\t\tname: 'read_file',\n\t\t\t\t\tinput: { path: 'package.json' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[1]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: `\n{\n \"name\": \"my-project\",\n \"version\": \"1.0.0\",\n \"description\": \"A sample project\",\n \"main\": \"index.js\",\n \"scripts\": {\n\n \"test\": \"jest\"\n },\n \"author\": \"Your Name\",\n \"license\": \"ISC\",\n \"dependencies\": {\n \"commander\": \"^8.0.0\",\n \"jest\": \"^27.0.0\"\n },\n \"devDependencies\": {\n \"typescript\": \"^4.0.0\"\n },\n \"jest\": {\n \"testEnvironment\": \"node\",\n \"transform\": {\n \"^.+\\\\.tsx?$\": \"ts-jest\"\n },\n \"testRegex\": \"(/__tests__/.*|(\\\\.|/)(test|spec))\\\\.(jsx?|tsx?)$\",\n \"moduleFileExtensions\": [\"ts\", \"tsx\", \"js\", \"jsx\", \"json\", \"node\"]\n }\n \"ts-node\": {\n \"esm\": true\n },\n \"type\": \"module\"\n}\n `,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: File not found error\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[2]!,\n\t\t\t\t\tname: 'read_file',\n\t\t\t\t\tinput: { path: 'non-existent-file.txt' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[2]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\terror: { message: 'File not found: non-existent-file.txt' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t]\n\n\treturn {\n\t\tname: 'read_file',\n\t\tthread: {\n\t\t\tid: threadID,\n\t\t\tcreated: 0,\n\t\t\tv: 0,\n\t\t\tmessages: threadMessages,\n\t\t},\n\t}\n}\n\n// Create a story for edit_file tool\nfunction createEditFileStory(): Story {\n\tconst threadID = newThreadID()\n\tconst toolUseIDs: ThreadToolUseID[] = []\n\n\t// Generate tool use IDs\n\tfor (let i = 0; i < 6; i++) {\n\t\ttoolUseIDs.push(newThreadToolUseID())\n\t}\n\n\tconst threadMessages: ThreadMessage[] = [\n\t\t// Example: Successful edit\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[0]!,\n\t\t\t\t\tname: 'edit_file',\n\t\t\t\t\tinput: {\n\t\t\t\t\t\tpath: 'src/components/button.tsx',\n\t\t\t\t\t\told_str: 'const Button = ({ text, onClick }) => {',\n\t\t\t\t\t\tnew_str: 'const Button = ({ text, onClick, disabled }) => {',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[0]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: '```diff\\nIndex: src/components/button.tsx\\n===================================================================\\n--- src/components/button.tsx original\\n+++ src/components/button.tsx modified\\n@@ -1,5 +1,5 @@\\n-const Button = ({ text, onClick }) => {\\n+const Button = ({ text, onClick, disabled }) => {\\n return (\\n <button onClick={onClick} className=\"btn\">\\n {text}\\n```',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: Multiple changes\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[1]!,\n\t\t\t\t\tname: 'edit_file',\n\t\t\t\t\tinput: {\n\t\t\t\t\t\tpath: 'src/components/button.tsx',\n\t\t\t\t\t\told_str: '<button onClick={onClick} className=\"btn\">',\n\t\t\t\t\t\tnew_str: '<button onClick={onClick} className=\"btn\" disabled={disabled}>',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[1]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: '```diff\\nIndex: src/components/button.tsx\\n===================================================================\\n--- src/components/button.tsx original\\n+++ src/components/button.tsx modified\\n@@ -1,7 +1,7 @@\\n const Button = ({ text, onClick, disabled }) => {\\n return (\\n- <button onClick={onClick} className=\"btn\">\\n+ <button onClick={onClick} className=\"btn\" disabled={disabled}>\\n {text}\\n </button>\\n );\\n```',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: Error case\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[2]!,\n\t\t\t\t\tname: 'edit_file',\n\t\t\t\t\tinput: {\n\t\t\t\t\t\tpath: 'src/components/button.tsx',\n\t\t\t\t\t\told_str: 'text that does not exist',\n\t\t\t\t\t\tnew_str: 'replacement text',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[2]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t'Could not find text \"text that does not exist\" in file \"src/components/button.tsx\"',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: Edit with diagnostics\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[3]!,\n\t\t\t\t\tname: 'edit_file',\n\t\t\t\t\tinput: {\n\t\t\t\t\t\tpath: 'src/components/form.tsx',\n\t\t\t\t\t\told_str:\n\t\t\t\t\t\t\t'function Form() {\\n return (\\n <form>\\n <input type=\"text\" />\\n </form>\\n );\\n}',\n\t\t\t\t\t\tnew_str:\n\t\t\t\t\t\t\t'function Form() {\\n const handleSubmit = (e) => {\\n e.preventDefault();\\n };\\n\\n return (\\n <form onSubmit={handleSubmit}>\\n <input type=\"text\" required />\\n </form>\\n );\\n}',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[3]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: {\n\t\t\t\t\t\t\tdiff: '```diff\\nIndex: src/components/form.tsx\\n===================================================================\\n--- src/components/form.tsx original\\n+++ src/components/form.tsx modified\\n@@ -1,6 +1,10 @@\\n function Form() {\\n+ const handleSubmit = (e) => {\\n+ e.preventDefault();\\n+ };\\n+\\n return (\\n- <form>\\n- <input type=\"text\" />\\n+ <form onSubmit={handleSubmit}>\\n+ <input type=\"text\" required />\\n </form>\\n );\\n }\\n```',\n\t\t\t\t\t\t\tlineRange: [1, 11],\n\t\t\t\t\t\t\tdiagnostics: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tpath: 'src/components/form.tsx',\n\t\t\t\t\t\t\t\t\trange: {\n\t\t\t\t\t\t\t\t\t\ttype: 'full',\n\t\t\t\t\t\t\t\t\t\tstart: { line: 2, character: 23 },\n\t\t\t\t\t\t\t\t\t\tend: { line: 2, character: 24 },\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tseverity: 'error',\n\t\t\t\t\t\t\t\t\tmessage: \"Parameter 'e' implicitly has an 'any' type.\",\n\t\t\t\t\t\t\t\t\tsource: 'ts',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tpath: 'src/components/form.tsx',\n\t\t\t\t\t\t\t\t\trange: {\n\t\t\t\t\t\t\t\t\t\ttype: 'full',\n\t\t\t\t\t\t\t\t\t\tstart: { line: 8, character: 6 },\n\t\t\t\t\t\t\t\t\t\tend: { line: 8, character: 31 },\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t\t\t'Form submission is missing validation or feedback for the user',\n\t\t\t\t\t\t\t\t\tsource: 'eslint',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t]\n\n\treturn {\n\t\tname: 'edit_file',\n\t\tthread: {\n\t\t\tid: threadID,\n\t\t\tcreated: 0,\n\t\t\tv: 0,\n\t\t\tmessages: threadMessages,\n\t\t},\n\t}\n}\n\n// Create a story for create_file tool\nfunction createCreateFileStory(): Story {\n\tconst threadID = newThreadID()\n\tconst toolUseIDs: ThreadToolUseID[] = []\n\n\t// Generate tool use IDs\n\tfor (let i = 0; i < 5; i++) {\n\t\ttoolUseIDs.push(newThreadToolUseID())\n\t}\n\n\tconst threadMessages: ThreadMessage[] = [\n\t\t// Example: Successful file creation\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[0]!,\n\t\t\t\t\tname: 'create_file',\n\t\t\t\t\tinput: {\n\t\t\t\t\t\tpath: 'src/components/new-component.tsx',\n\t\t\t\t\t\tcontent:\n\t\t\t\t\t\t\t\"import React from 'react'\\n\\nconst NewComponent = () => {\\n return <div>New Component</div>\\n}\\n\\nexport default NewComponent\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[0]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: Creating file in nested directory\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[1]!,\n\t\t\t\t\tname: 'create_file',\n\t\t\t\t\tinput: {\n\t\t\t\t\t\tpath: 'src/utils/helpers/date-utils.ts',\n\t\t\t\t\t\tcontent:\n\t\t\t\t\t\t\t\"export const formatDate = (date: Date): string => {\\n return date.toISOString().split('T')[0]\\n}\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[1]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: Error case - directory doesn't exist\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[2]!,\n\t\t\t\t\tname: 'create_file',\n\t\t\t\t\tinput: {\n\t\t\t\t\t\tpath: 'non-existent-dir/file.ts',\n\t\t\t\t\t\tcontent: 'console.log(\"Hello\")',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[2]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\terror: { message: 'Directory does not exist: non-existent-dir' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t]\n\n\treturn {\n\t\tname: 'create_file',\n\t\tthread: {\n\t\t\tid: threadID,\n\t\t\tcreated: 0,\n\t\t\tv: 0,\n\t\t\tmessages: threadMessages,\n\t\t},\n\t}\n}\n\n// Create a story for think tool\nfunction createThinkStory(): Story {\n\tconst threadID = newThreadID()\n\tconst toolUseIDs: ThreadToolUseID[] = []\n\n\t// Generate tool use IDs\n\tfor (let i = 0; i < 3; i++) {\n\t\ttoolUseIDs.push(newThreadToolUseID())\n\t}\n\n\tconst threadMessages: ThreadMessage[] = [\n\t\t// Example: Basic thought process\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[0]!,\n\t\t\t\t\tname: 'think',\n\t\t\t\t\tinput: {\n\t\t\t\t\t\tthoughts:\n\t\t\t\t\t\t\t'I need to analyze how this codebase structures its component hierarchy. Let me look at the relationship between parent and child components...',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[0]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: '',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: Complex reasoning with problem solving\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[1]!,\n\t\t\t\t\tname: 'think',\n\t\t\t\t\tinput: {\n\t\t\t\t\t\tthoughts:\n\t\t\t\t\t\t\t'The bug could be caused by one of several issues:\\n\\n1. Race condition in the async/await flow\\n2. Improper state management with missing cleanup\\n3. Event listeners not being properly removed\\n\\nLet me analyze each possibility:\\n\\n**Race condition:** The component is making an API call and trying to update state after the component unmounts. I should check for isMounted guards or AbortController usage.\\n\\n**State management:** If using React context or a state management library, there might be subscription issues that need cleanup.\\n\\n**Event listeners:** DOM event listeners attached in useEffect might not be properly cleaned up in the return function.\\n\\nI should check each of these areas in the code.',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[1]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: '',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t]\n\n\treturn {\n\t\tname: 'think',\n\t\tthread: {\n\t\t\tid: threadID,\n\t\t\tcreated: 0,\n\t\t\tv: 0,\n\t\t\tmessages: threadMessages,\n\t\t},\n\t}\n}\n\n// Create a story for mermaid diagrams\nfunction createMermaidStory(): Story {\n\tconst threadID = newThreadID()\n\tconst toolUseIDs: ThreadToolUseID[] = []\n\n\t// Generate tool use IDs\n\tfor (let i = 0; i < 5; i++) {\n\t\ttoolUseIDs.push(newThreadToolUseID())\n\t}\n\n\tconst threadMessages: ThreadMessage[] = [\n\t\t// Example: Flowchart diagram\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[0]!,\n\t\t\t\t\tname: 'mermaid',\n\t\t\t\t\tinput: {\n\t\t\t\t\t\tcode: `graph TD\n A[Start] --> B{Decision}\n B -->|Yes| C[Process]\n B -->|No| D[End]`,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[0]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: { success: true },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: Sequence diagram\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[1]!,\n\t\t\t\t\tname: 'mermaid',\n\t\t\t\t\tinput: {\n\t\t\t\t\t\tcode: `sequenceDiagram\n participant User\n participant System\n User->>System: Request data\n System-->>User: Return results`,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[1]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: { success: true },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: Error case\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[2]!,\n\t\t\t\t\tname: 'mermaid',\n\t\t\t\t\tinput: {\n\t\t\t\t\t\tcode: 'invalid mermaid syntax',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[2]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\terror: { message: 'Invalid Mermaid syntax' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t]\n\n\treturn {\n\t\tname: 'mermaid',\n\t\tthread: {\n\t\t\tid: threadID,\n\t\t\tcreated: 0,\n\t\t\tv: 0,\n\t\t\tmessages: threadMessages,\n\t\t},\n\t}\n}\n\n// Create a story for codebase_search_agent\nfunction createCodebaseSearchStory(): Story {\n\tconst threadID = newThreadID()\n\tconst toolUseIDs: ThreadToolUseID[] = []\n\n\t// Generate tool use IDs\n\tfor (let i = 0; i < 5; i++) {\n\t\ttoolUseIDs.push(newThreadToolUseID())\n\t}\n\n\tconst threadMessages: ThreadMessage[] = [\n\t\t// Example: Successful search with results\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[0]!,\n\t\t\t\t\tname: 'codebase_search_agent',\n\t\t\t\t\tinput: {\n\t\t\t\t\t\tquery: 'How does the authentication system validate JWT tokens?',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[0]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: 'I searched through the codebase and found the JWT validation implementation in these files:\\n\\n```auth/jwt.ts\\nfunction validateToken(token: string): User | null {\\n try {\\n const decoded = jwt.verify(token, process.env.JWT_SECRET);\\n return userService.findById(decoded.userId);\\n } catch (err) {\\n logger.error(\"JWT validation failed\", { error: err.message });\\n return null;\\n }\\n}\\n```\\n\\n```middleware/auth.ts\\nexport const authMiddleware = async (req, res, next) => {\\n const authHeader = req.headers.authorization;\\n if (!authHeader || !authHeader.startsWith(\"Bearer \")) {\\n return res.status(401).json({ error: \"Invalid authentication header\" });\\n }\\n \\n const token = authHeader.split(\" \")[1];\\n const user = await validateToken(token);\\n \\n if (!user) {\\n return res.status(401).json({ error: \"Invalid or expired token\" });\\n }\\n \\n req.user = user;\\n next();\\n};\\n```',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: In progress search\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[1]!,\n\t\t\t\t\tname: 'codebase_search_agent',\n\t\t\t\t\tinput: {\n\t\t\t\t\t\tquery: 'Where is the error handling logic for the file watcher component?',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[1]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'in-progress',\n\t\t\t\t\t\tprogress: {\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t'I found some file watcher related files using `glob`. Now searching for error handling patterns with `ripgrep`...',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: No results found\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[2]!,\n\t\t\t\t\tname: 'codebase_search_agent',\n\t\t\t\t\tinput: {\n\t\t\t\t\t\tquery: 'How are GraphQL subscriptions implemented?',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[2]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: \"I searched through the codebase but couldn't find any implementation of GraphQL subscriptions. I looked for files containing GraphQL-related terms and specifically for subscription patterns, but there don't appear to be any GraphQL subscriptions implemented in this codebase.\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: Error case\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[3]!,\n\t\t\t\t\tname: 'codebase_search_agent',\n\t\t\t\t\tinput: {\n\t\t\t\t\t\tquery: 'How is the database connection pool managed?',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[3]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t'The search agent encountered an error: timeout after 30 seconds',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t]\n\n\treturn {\n\t\tname: 'codebase_search_agent',\n\t\tthread: {\n\t\t\tid: threadID,\n\t\t\tcreated: 0,\n\t\t\tv: 0,\n\t\t\tmessages: threadMessages,\n\t\t},\n\t}\n}\n\n// Create a story for get_diagnostics tool\nfunction createGetDiagnosticsStory(): Story {\n\tconst threadID = newThreadID()\n\tconst toolUseIDs: ThreadToolUseID[] = []\n\n\t// Generate tool use IDs\n\tfor (let i = 0; i < 5; i++) {\n\t\ttoolUseIDs.push(newThreadToolUseID())\n\t}\n\n\tconst threadMessages: ThreadMessage[] = [\n\t\t// Example: File with diagnostic warnings\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[0]!,\n\t\t\t\t\tname: 'get_diagnostics',\n\t\t\t\t\tinput: { path: 'src/components/app.tsx' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[0]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpath: 'src/components/app.tsx',\n\t\t\t\t\t\t\t\trange: {\n\t\t\t\t\t\t\t\t\ttype: 'full',\n\t\t\t\t\t\t\t\t\tstart: { line: 44, character: 7 },\n\t\t\t\t\t\t\t\t\tend: { line: 44, character: 10 },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\t\t\t\tmessage: 'unused variable \"foo\"',\n\t\t\t\t\t\t\t\tsource: 'ts',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpath: 'src/components/app.tsx',\n\t\t\t\t\t\t\t\trange: {\n\t\t\t\t\t\t\t\t\ttype: 'full',\n\t\t\t\t\t\t\t\t\tstart: { line: 66, character: 9 },\n\t\t\t\t\t\t\t\t\tend: { line: 66, character: 14 },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tseverity: 'warning',\n\t\t\t\t\t\t\t\tmessage: 'unused variable \"horse\"',\n\t\t\t\t\t\t\t\tsource: 'ts',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpath: 'src/components/app.tsx',\n\t\t\t\t\t\t\t\trange: {\n\t\t\t\t\t\t\t\t\ttype: 'full',\n\t\t\t\t\t\t\t\t\tstart: { line: 119, character: 1 },\n\t\t\t\t\t\t\t\t\tend: { line: 121, character: 18 },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tseverity: 'hint',\n\t\t\t\t\t\t\t\tmessage: 'Consider using const instead of let',\n\t\t\t\t\t\t\t\tsource: 'eslint',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: Directory with multiple files having errors\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[1]!,\n\t\t\t\t\tname: 'get_diagnostics',\n\t\t\t\t\tinput: { path: 'src/components' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[1]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpath: 'src/components/main.ts',\n\t\t\t\t\t\t\t\trange: { type: 'legacy', start: { line: 9 } },\n\t\t\t\t\t\t\t\tseverity: 'error',\n\t\t\t\t\t\t\t\tmessage: 'invalid syntax',\n\t\t\t\t\t\t\t\tsource: 'ts',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpath: 'src/components/widget.tsx',\n\t\t\t\t\t\t\t\trange: {\n\t\t\t\t\t\t\t\t\ttype: 'full',\n\t\t\t\t\t\t\t\t\tstart: { line: 45, character: 12 },\n\t\t\t\t\t\t\t\t\tend: { line: 45, character: 22 },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tseverity: 'error',\n\t\t\t\t\t\t\t\tmessage: 'invalid semicolon',\n\t\t\t\t\t\t\t\tsource: 'ts',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: No diagnostics found\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[2]!,\n\t\t\t\t\tname: 'get_diagnostics',\n\t\t\t\t\tinput: { path: '.' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[2]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: [],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: Error case\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[3]!,\n\t\t\t\t\tname: 'get_diagnostics',\n\t\t\t\t\tinput: { path: 'src/components/unknown.tsx' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[3]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\terror: { message: 'Failed to get diagnostics' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t]\n\n\treturn {\n\t\tname: 'get_diagnostics',\n\t\tthread: {\n\t\t\tid: threadID,\n\t\t\tcreated: 0,\n\t\t\tv: 0,\n\t\t\tmessages: threadMessages,\n\t\t},\n\t}\n}\n\n// Create a story for format_file tool\nfunction createFormatFileStory(): Story {\n\tconst threadID = newThreadID()\n\tconst toolUseIDs: ThreadToolUseID[] = []\n\n\t// Generate tool use IDs\n\tfor (let i = 0; i < 5; i++) {\n\t\ttoolUseIDs.push(newThreadToolUseID())\n\t}\n\n\tconst threadMessages: ThreadMessage[] = [\n\t\t// Example: Successful formatting\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[0]!,\n\t\t\t\t\tname: 'format_file',\n\t\t\t\t\tinput: {\n\t\t\t\t\t\tpath: 'web/src/lib/components/prompt-editor/file-changes-summary.svelte',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[0]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: \"```diff\\nIndex: web/src/lib/components/prompt-editor/file-changes-summary.svelte\\n===================================================================\\n--- web/src/lib/components/prompt-editor/file-changes-summary.svelte original\\n+++ web/src/lib/components/prompt-editor/file-changes-summary.svelte modified\\n@@ -3,13 +3,13 @@\\n\\n import { firstValueFrom } from '@sourcegraph/observable'\\n import type { Thread } from '@sourcegraph/amp-core/src/threads/thread'\\n import type { ThreadWorkerStatus } from '@sourcegraph/amp-core/src/threads/thread-worker'\\n+ import { onMount } from 'svelte'\\n import { getWebviewAPIContext } from '../../../webview-api/context'\\n import DiffStat from '../diff-stat.svelte'\\n import FilePath from '../thread/structure/file-path.svelte'\\n import * as HoverCard from '../ui/hover-card'\\n- import { onMount } from 'svelte'\\n\\n let {\\n thread,\\n workerStatus,\\n@@ -17,10 +17,8 @@\\n }\\n\\n // This will track if the hover card is currently open\\n let isHovering = $state(false)\\n-\\n\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: In progress\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[1]!,\n\t\t\t\t\tname: 'format_file',\n\t\t\t\t\tinput: { path: 'src/components/button.tsx' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[1]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'in-progress',\n\t\t\t\t\t\tprogress: undefined,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: Error case\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[2]!,\n\t\t\t\t\tname: 'format_file',\n\t\t\t\t\tinput: { path: 'src/components/missing.tsx' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[2]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\terror: { message: 'Failed to format file: file not found' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t]\n\n\treturn {\n\t\tname: 'format_file',\n\t\tthread: {\n\t\t\tid: threadID,\n\t\t\tcreated: 0,\n\t\t\tv: 0,\n\t\t\tmessages: threadMessages,\n\t\t},\n\t}\n}\n\n// Create a story for undo_edit tool\nfunction createUndoEditStory(): Story {\n\tconst threadID = newThreadID()\n\tconst toolUseIDs: ThreadToolUseID[] = []\n\n\t// Generate tool use IDs\n\tfor (let i = 0; i < 5; i++) {\n\t\ttoolUseIDs.push(newThreadToolUseID())\n\t}\n\n\tconst threadMessages: ThreadMessage[] = [\n\t\t// Example: Successful undo\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[0]!,\n\t\t\t\t\tname: 'undo_edit',\n\t\t\t\t\tinput: { path: 'src/components/button.tsx' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[0]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: '```diff\\nIndex: src/components/button.tsx\\n===================================================================\\n--- src/components/button.tsx original\\n+++ src/components/button.tsx modified\\n@@ -1,5 +1,5 @@\\n-const Button = ({ text, onClick, disabled }) => {\\n+const Button = ({ text, onClick }) => {\\n return (\\n- <button onClick={onClick} className=\"btn\" disabled={disabled}>\\n+ <button onClick={onClick} className=\"btn\">\\n {text}\\n </button>\\n );\\n```',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: In progress\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[1]!,\n\t\t\t\t\tname: 'undo_edit',\n\t\t\t\t\tinput: { path: 'src/components/button.tsx' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[1]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'in-progress',\n\t\t\t\t\t\tprogress: undefined,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: Error case\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[2]!,\n\t\t\t\t\tname: 'undo_edit',\n\t\t\t\t\tinput: { path: 'src/components/nonexistent.tsx' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[2]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\terror: { message: 'Failed to undo edit: file not found' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t]\n\n\treturn {\n\t\tname: 'undo_edit',\n\t\tthread: {\n\t\t\tid: threadID,\n\t\t\tcreated: 0,\n\t\t\tv: 0,\n\t\t\tmessages: threadMessages,\n\t\t},\n\t}\n}\n\n// Create a story for glob tool\nfunction createGlobStory(): Story {\n\tconst threadID = newThreadID()\n\tconst toolUseIDs: ThreadToolUseID[] = []\n\n\t// Generate tool use IDs\n\tfor (let i = 0; i < 5; i++) {\n\t\ttoolUseIDs.push(newThreadToolUseID())\n\t}\n\n\tconst threadMessages: ThreadMessage[] = [\n\t\t// Example: Basic glob search\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[0]!,\n\t\t\t\t\tname: 'glob',\n\t\t\t\t\tinput: { filePattern: '**/*.ts' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[0]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: ['src/app.ts', 'src/utils/helpers.ts', 'src/components/button.ts'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: Glob search with limit\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[1]!,\n\t\t\t\t\tname: 'glob',\n\t\t\t\t\tinput: { filePattern: '**/*.ts', limit: 5 },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[1]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: [\n\t\t\t\t\t\t\t'src/app.ts',\n\t\t\t\t\t\t\t'src/utils/helpers.ts',\n\t\t\t\t\t\t\t'src/components/button.ts',\n\t\t\t\t\t\t\t'src/models/user.ts',\n\t\t\t\t\t\t\t'src/config.ts',\n\t\t\t\t\t\t\t'--- 10 more files not shown ---',\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: In-progress glob search\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[2]!,\n\t\t\t\t\tname: 'glob',\n\t\t\t\t\tinput: { filePattern: '**/*.{js,ts}' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[2]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'in-progress',\n\t\t\t\t\t\tprogress: ['src/app.ts', 'src/utils/helpers.ts'],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: No results found\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[3]!,\n\t\t\t\t\tname: 'glob',\n\t\t\t\t\tinput: { filePattern: '**/*test*.ts' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[3]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: [],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t]\n\n\treturn {\n\t\tname: 'glob',\n\t\tthread: {\n\t\t\tid: threadID,\n\t\t\tcreated: 0,\n\t\t\tv: 0,\n\t\t\tmessages: threadMessages,\n\t\t},\n\t}\n}\n\n// Create a story for markdown rendering\nfunction createMarkdownRenderingStory(): Story {\n\tconst threadID = newThreadID()\n\tconst toolUseIDs: ThreadToolUseID[] = []\n\n\t// Generate tool use IDs\n\tfor (let i = 0; i < 1; i++) {\n\t\ttoolUseIDs.push(newThreadToolUseID())\n\t}\n\n\tconst threadMessages: ThreadMessage[] = [\n\t\t// Example of various markdown elements\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\ttext: `# Markdown Rendering Test\n\n## Lists with links and bold formatting\n\n- **Bold item** with [link to documentation](https://example.com)\n- Regular item with *italic text*\n- Item with \\`inline code\\` and [another link](https://github.com)\n - Nested item 1\n - Nested item 2 with **bold [and link](https://nested-example.com)**\n\n- List item with nested code block:\n \\`\\`\\`javascript\n function example() {\n return \"Hello from nested code block\";\n }\n \\`\\`\\`\n\n## Tables with columns and rows\n\n| Name | Type | Description |\n|------|------|-------------|\n| id | string | Unique identifier |\n| title | string | Item title |\n| completed | boolean | Whether the item is completed |\n| priority | number | Item priority (1-5) |\n\n## Code blocks\n\n\\`\\`\\`typescript\ninterface User {\n id: string;\n name: string;\n email?: string;\n role: 'admin' | 'user';\n}\n\nfunction getUserById(id: string): User | undefined {\n // Implementation\n return users.find(user => user.id === id);\n}\n\\`\\`\\`\n\n\\`\\`\\`bash\n# Install dependencies\nnpm install\n\n# Run development server\nnpm run dev\n\\`\\`\\`\n\n## Links\n\nStandalone link: https://example.com/standalone\n\n[Named link with title](https://example.com/named \"Link Title\")\n\n## Checkboxes\n\n- [ ] Uncompleted task\n- [x] Completed task\n- [ ] Task with **bold text** and [link](https://task-example.com)\n- [x] Completed task with \\`inline code\\`\n`,\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t]\n\n\treturn {\n\t\tname: 'markdown_rendering',\n\t\tthread: {\n\t\t\tid: threadID,\n\t\t\tcreated: 0,\n\t\t\tv: 0,\n\t\t\tmessages: threadMessages,\n\t\t},\n\t}\n}\n\n// Create a story for fetch tool\nfunction createFetchStory(): Story {\n\tconst threadID = newThreadID()\n\tconst toolUseIDs: ThreadToolUseID[] = []\n\n\t// Generate tool use IDs\n\tfor (let i = 0; i < 5; i++) {\n\t\ttoolUseIDs.push(newThreadToolUseID())\n\t}\n\n\tconst threadMessages: ThreadMessage[] = [\n\t\t// Example: Basic fetch\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[0]!,\n\t\t\t\t\tname: 'fetch',\n\t\t\t\t\tinput: { url: 'https://example.com' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[0]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: '<h1>Example Domain</h1>\\n<p>This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.</p>\\n<p><a href=\"https://www.iana.org/domains/example\">More information...</a></p>',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: Fetch with max_length\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[1]!,\n\t\t\t\t\tname: 'fetch',\n\t\t\t\t\tinput: { url: 'https://docs.example.com/api', max_length: 1000 },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[1]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: '# API Documentation\\n\\n## Introduction\\nThis document describes the REST API endpoints available for the Example service.\\n\\n## Authentication\\nAll API requests require authentication using an API key. Include the API key in the `Authorization` header as follows:\\n\\n```\\nAuthorization: Bearer YOUR_API_KEY\\n```\\n\\n## Endpoints\\n\\n### GET /users\\nReturns a list of users.\\n\\n#### Query Parameters\\n- `limit` (optional): Maximum number of users to return. Default is 20.\\n- `offset` (optional): Offset for pagination. Default is 0.\\n\\n#### Response\\n```json\\n{\\n \"users\": [\\n {\\n \"id\": 1,\\n \"name\": \"John Doe\",\\n \"email\": \"john@example.com\"\\n },\\n {\\n \"id\": 2,\\n \"name\": \"Jane Smith\",\\n \"email\": \"jane@example.com\"\\n }\\n ],\\n \"total\": 2\\n}\\n```',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: Fetch raw HTML\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[2]!,\n\t\t\t\t\tname: 'fetch',\n\t\t\t\t\tinput: { url: 'https://example.com', raw: true },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[2]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'done',\n\t\t\t\t\t\tresult: '<!doctype html>\\n<html>\\n<head>\\n <title>Example Domain</title>\\n <meta charset=\"utf-8\" />\\n <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\" />\\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\\n</head>\\n<body>\\n<div>\\n <h1>Example Domain</h1>\\n <p>This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.</p>\\n <p><a href=\"https://www.iana.org/domains/example\">More information...</a></p>\\n</div>\\n</body>\\n</html>',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: In-progress fetch\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[3]!,\n\t\t\t\t\tname: 'fetch',\n\t\t\t\t\tinput: { url: 'https://api.example.com/large-dataset' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[3]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'in-progress',\n\t\t\t\t\t\tprogress: undefined,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\n\t\t// Example: Error case\n\t\t{\n\t\t\trole: 'assistant',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_use',\n\t\t\t\t\tid: toolUseIDs[4]!,\n\t\t\t\t\tname: 'fetch',\n\t\t\t\t\tinput: { url: 'https://nonexistent-domain-example.com' },\n\t\t\t\t},\n\t\t\t],\n\t\t\tstate: { type: 'complete', stopReason: 'end_turn' },\n\t\t},\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'tool_result',\n\t\t\t\t\ttoolUseID: toolUseIDs[4]!,\n\t\t\t\t\trun: {\n\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\terror: { message: 'Failed to fetch URL: DNS resolution failed' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t]\n\n\treturn {\n\t\tname: 'fetch',\n\t\tthread: {\n\t\t\tid: threadID,\n\t\t\tcreated: 0,\n\t\t\tv: 0,\n\t\t\tmessages: threadMessages,\n\t\t},\n\t}\n}\n\nconst stories: Story[] = [\n\tcreateBashStory(),\n\tcreateListDirectoryStory(),\n\tcreateGrepStory(),\n\tcreateReadFileStory(),\n\tcreateEditFileStory(),\n\tcreateCreateFileStory(),\n\tcreateThinkStory(),\n\tcreateMermaidStory(),\n\tcreateCodebaseSearchStory(),\n\n\tcreateGetDiagnosticsStory(),\n\tcreateFormatFileStory(),\n\tcreateUndoEditStory(),\n\tcreateGlobStory(),\n\tcreateFetchStory(),\n\tcreateMarkdownRenderingStory(),\n\t// Add more stories here...\n]\n\nfunction clearScreen(): void {\n\tprocess.stdout.write('\\x1Bc')\n}\n\nfunction printStory(story: Story, useColor: boolean): void {\n\tconst printer = useColor ? colorPrinter : monochromePrinter\n\tstdout.write(printer.print(`# ${story.name}`, { style: 'bold', color: 'green' }) + '\\n\\n')\n\n\tconst filtered = filterPrintedThread(story.thread, new Set(), new Set())\n\tprintThreadToConsole(filtered, (s) => stdout.write(s + '\\n'), 100, printer, 16, '> ')\n}\n\nfunction main(): void {\n\tconst options = {\n\t\tcolor: {\n\t\t\ttype: 'boolean',\n\t\t\tdescription: 'Enable color output',\n\t\t\tdefault: true,\n\t\t},\n\t\thelp: { type: 'boolean', default: false, short: 'h', description: 'Show help' },\n\t} as const\n\n\tconst { values, positionals } = parseArgs({ options, allowPositionals: true })\n\tconst showHelp = values.help\n\n\tconst printer = values.color ? colorPrinter : monochromePrinter\n\n\tif (showHelp) {\n\t\tclearScreen()\n\t\tstdout.write(\n\t\t\t`\\n${printer.print('Usage:', { style: 'bold' })} ${printer.print('pnpm cli:storybook', { color: 'green' })} [story-name] [options]\\n\\n`,\n\t\t)\n\t\tstdout.write(printer.print('Options:', { style: 'bold' }) + '\\n')\n\t\tfor (const [key, value] of Object.entries(options)) {\n\t\t\tconst shortFlag =\n\t\t\t\t'short' in value && value.short\n\t\t\t\t\t? `${printer.print(`-${value.short}`, { color: 'green' })}, `\n\t\t\t\t\t: ' '\n\t\t\tconst spacing = Math.max(1, 20 - key.length)\n\t\t\tstdout.write(\n\t\t\t\t` ${shortFlag}${printer.print(`--${key}`, { color: 'green' })}${' '.repeat(spacing)}${value.description}\\n`,\n\t\t\t)\n\t\t}\n\t\tstdout.write('\\n')\n\t\tstdout.write(printer.print('Available stories:', { style: 'bold' }) + '\\n')\n\t\tfor (const story of stories) {\n\t\t\tstdout.write(` ${printer.print(story.name, { color: 'green' }) + '\\n'}`)\n\t\t}\n\t\tstdout.write('\\n')\n\t\treturn\n\t}\n\n\t// Get requested story name from arguments or show all\n\tconst storyName = positionals[0]\n\n\tif (storyName) {\n\t\tconst story = stories.find((s) => s.name === storyName)\n\t\tif (story) {\n\t\t\tclearScreen()\n\t\t\tprintStory(story, values.color)\n\t\t} else {\n\t\t\tstdout.write(printer.print(`Story \"${storyName}\" not found`, { color: 'red' }) + '\\n\\n')\n\t\t\tstdout.write(printer.print('Available stories:', { style: 'bold' }) + '\\n')\n\t\t\tfor (const story of stories) {\n\t\t\t\tstdout.write(` ${printer.print(story.name, { color: 'green' })}\\n`)\n\t\t\t}\n\t\t\tprocess.exit(1)\n\t\t}\n\t} else {\n\t\tclearScreen()\n\t\tstdout.write(printer.print('# Amp CLI Storybook', { style: 'bold', color: 'cyan' }) + '\\n')\n\t\tstdout.write('\\n')\n\n\t\t// Print all stories with separators\n\t\tfor (let i = 0; i < stories.length; i++) {\n\t\t\tif (i > 0) {\n\t\t\t\tstdout.write('\\n' + '='.repeat(80) + '\\n\\n')\n\t\t\t}\n\t\t\tprintStory(stories[i]!, values.color)\n\t\t}\n\t}\n}\n\nmain()\n"],"names":["createBashStory","threadID","newThreadID","toolUseIDs","i","newThreadToolUseID","threadMessages","BASH_TOOL_NAME","createListDirectoryStory","createGrepStory","GREP_TOOL_NAME","createReadFileStory","createEditFileStory","createCreateFileStory","createThinkStory","createMermaidStory","createCodebaseSearchStory","createGetDiagnosticsStory","createFormatFileStory","createUndoEditStory","createGlobStory","createMarkdownRenderingStory","createFetchStory","stories","clearScreen","printStory","story","useColor","printer","colorPrinter","monochromePrinter","stdout","filtered","filterPrintedThread","printThreadToConsole","s","main","options","values","positionals","parseArgs","showHelp","key","value","shortFlag","spacing","storyName"],"mappings":"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"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"undo_edit.node-CCYYuJ4U.js","sources":["../../core/src/tools/builtin/filesystem/undo_edit.util.ts","../../core/src/tools/builtin/filesystem/undo_edit.node.ts"],"sourcesContent":["import type { UndoEditToolDef } from './undo_edit.common'\nimport logger from '../../../common/logger'\n\nexport abstract class EditHistoryManager<HistoryID> {\n\tprotected abstract storeEdit(\n\t\tfilePath: string,\n\t\toldContent: string,\n\t\tnewContent: string,\n\t): Promise<HistoryID>\n\tprotected abstract fetchEdit(\n\t\tfilePath: string,\n\t): Promise<{ id: HistoryID; oldContent: string; newContent: string } | undefined>\n\tprotected abstract deleteEdit(id: HistoryID): Promise<void>\n\n\tprivate readonly MAX_TRACKED_EDITS = 50\n\tprivate readonly editQueue: HistoryID[] = []\n\n\tpublic async recordEdit(\n\t\tfilePath: string,\n\t\toldContent: string,\n\t\tnewContent: string,\n\t): Promise<void> {\n\t\ttry {\n\t\t\tconst editKey = await this.storeEdit(filePath, oldContent, newContent)\n\n\t\t\t// Update the FIFO queue\n\t\t\t// Remove if already in queue (to add it to the end)\n\t\t\tconst existingIndex = this.editQueue.indexOf(editKey)\n\t\t\tif (existingIndex >= 0) {\n\t\t\t\tthis.editQueue.splice(existingIndex, 1)\n\t\t\t}\n\n\t\t\t// Add to end of queue (most recent)\n\t\t\tthis.editQueue.push(editKey)\n\n\t\t\t// If we exceed the limit, remove the oldest edit\n\t\t\tif (this.editQueue.length > this.MAX_TRACKED_EDITS) {\n\t\t\t\tconst oldestKey = this.editQueue.shift()\n\t\t\t\tif (oldestKey) {\n\t\t\t\t\tthis.deleteEdit(oldestKey)\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlogger.error('Failed to record edit:', error)\n\t\t}\n\t}\n\n\t// Function to get and remove the most recent edit for a file\n\tpublic async getLastEdit(\n\t\tfilePath: string,\n\t): Promise<{ oldContent: string; newContent: string } | undefined> {\n\t\ttry {\n\t\t\t// Get the edit data from memory\n\t\t\tconst editData = await this.fetchEdit(filePath)\n\t\t\tif (!editData) {\n\t\t\t\treturn undefined\n\t\t\t}\n\n\t\t\t// Remove from queue and map\n\t\t\tconst queueIndex = this.editQueue.indexOf(editData.id)\n\t\t\tif (queueIndex >= 0) {\n\t\t\t\tthis.editQueue.splice(queueIndex, 1)\n\t\t\t}\n\t\t\tthis.deleteEdit(editData.id)\n\n\t\t\treturn { oldContent: editData.oldContent, newContent: editData.newContent }\n\t\t} catch (error) {\n\t\t\tlogger.error('Failed to get last edit:', error)\n\t\t\treturn undefined\n\t\t}\n\t}\n}\n\nexport function checkUndoEditArgs(\n\targs: UndoEditToolDef['args'],\n): asserts args is UndoEditToolDef['args'] {\n\tif (typeof args !== 'object' || args === null) {\n\t\tthrow new Error('args must be an object. received instead: `' + JSON.stringify(args) + '`')\n\t}\n\tif (typeof args.path !== 'string') {\n\t\tthrow new Error(\n\t\t\t'path must be a string. received instead: `' + JSON.stringify(args.path) + '`',\n\t\t)\n\t}\n}\n","import { promiseFactoryToObservable } from '@sourcegraph/observable'\nimport crypto from 'node:crypto'\nimport fs, { writeFile } from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'path'\nimport logger from '../../../common/logger'\nimport { checkDirURIIsFile } from '../node-helpers'\nimport { createUnifiedDiff, formatDiffAsMarkdown } from './edit_file.common'\nimport type { undoEditToolReg } from './undo_edit.common'\nimport { EditHistoryManager, checkUndoEditArgs } from './undo_edit.util'\n\nexport const nodeUndoEditTool: NonNullable<(typeof undoEditToolReg)['fn']> = (\n\t{ args },\n\t{ dir, threadID, trackFileChange },\n) => {\n\treturn promiseFactoryToObservable(async (signal) => {\n\t\tcheckDirURIIsFile(dir)\n\t\tcheckUndoEditArgs(args)\n\n\t\tconst filePath = path.resolve(dir.fsPath, args.path)\n\n\t\t// Get the last edit from history (now async)\n\t\tconst lastEdit = await getLastEdit(args.path)\n\t\tif (!lastEdit) {\n\t\t\treturn {\n\t\t\t\tstatus: 'error' as const,\n\t\t\t\tprogress: {},\n\t\t\t\terror: {\n\t\t\t\t\tmessage: `No edit history found for file '${args.path}'.`,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tconst diff = createUnifiedDiff(lastEdit.newContent, lastEdit.oldContent, args.path)\n\t\tconst formattedDiff = formatDiffAsMarkdown(diff)\n\n\t\tawait trackFileChange(filePath, async (path) => {\n\t\t\tawait writeFile(path, lastEdit.oldContent, {\n\t\t\t\tencoding: 'utf-8',\n\t\t\t\tsignal,\n\t\t\t})\n\t\t})\n\n\t\treturn { status: 'done', progress: {}, result: formattedDiff }\n\t})\n}\n\ntype HistoryID = string\n\nclass NodeEditHistoryManager extends EditHistoryManager<HistoryID> {\n\tasync storeEdit(filePath: string, oldContent: string, newContent: string): Promise<HistoryID> {\n\t\tconst hashedFilename = getHashedFilename(filePath)\n\t\tconst tempDir = await getTempDir()\n\t\tconst editFile = path.join(tempDir, hashedFilename)\n\n\t\tconst editData = { filePath, oldContent, newContent }\n\t\tawait fs.writeFile(editFile, JSON.stringify(editData), 'utf-8')\n\n\t\treturn hashedFilename as HistoryID\n\t}\n\tasync fetchEdit(\n\t\tfilePath: string,\n\t): Promise<{ id: HistoryID; oldContent: string; newContent: string } | undefined> {\n\t\tconst hashedFilename = getHashedFilename(filePath)\n\t\tconst tempDir = await getTempDir()\n\t\tconst editFile = path.join(tempDir, hashedFilename)\n\n\t\ttry {\n\t\t\tawait fs.access(editFile)\n\t\t} catch {\n\t\t\treturn undefined\n\t\t}\n\n\t\tconst editDataStr = await fs.readFile(editFile, 'utf-8')\n\t\tconst editData = JSON.parse(editDataStr) as {\n\t\t\tfilePath: string\n\t\t\toldContent: string\n\t\t\tnewContent: string\n\t\t}\n\t\treturn {\n\t\t\tid: hashedFilename,\n\t\t\toldContent: editData.oldContent,\n\t\t\tnewContent: editData.newContent,\n\t\t}\n\t}\n\tasync deleteEdit(id: HistoryID): Promise<void> {\n\t\tconst tempDir = await getTempDir()\n\t\tconst editFile = path.join(tempDir, id)\n\t\tawait fs.unlink(editFile).catch(() => {})\n\t}\n}\n\nconst nodeEditHistoryManager = new NodeEditHistoryManager()\n\nexport const recordEdit = nodeEditHistoryManager.recordEdit.bind(nodeEditHistoryManager)\nexport const getLastEdit = nodeEditHistoryManager.getLastEdit.bind(nodeEditHistoryManager)\n\nlet tempDir = ''\nlet tempDirPromise: Promise<string> | null = null\n\nasync function getTempDir(): Promise<string> {\n\tif (tempDir) return tempDir\n\tif (!tempDirPromise) {\n\t\ttempDirPromise = fs\n\t\t\t.mkdtemp(path.join(os.tmpdir(), 'amp-edits-'))\n\t\t\t.then((dir) => {\n\t\t\t\ttempDir = dir\n\t\t\t\treturn dir\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tlogger.error('Failed to create edit history directory:', error)\n\t\t\t\tthrow error\n\t\t\t})\n\t}\n\treturn tempDirPromise\n}\n\nfunction getHashedFilename(filePath: string): string {\n\tconst hash = crypto.createHash('sha256').update(filePath).digest('hex').slice(0, 16)\n\treturn `${hash}-${path.basename(filePath)}`\n}\n"],"names":["EditHistoryManager","filePath","oldContent","newContent","editKey","existingIndex","oldestKey","error","logger","editData","queueIndex","checkUndoEditArgs","args","nodeUndoEditTool","dir","threadID","trackFileChange","promiseFactoryToObservable","signal","checkDirURIIsFile","path","lastEdit","getLastEdit","diff","createUnifiedDiff","formattedDiff","formatDiffAsMarkdown","writeFile","NodeEditHistoryManager","hashedFilename","getHashedFilename","tempDir","getTempDir","editFile","fs","editDataStr","id","nodeEditHistoryManager","recordEdit","tempDirPromise","os","crypto"],"mappings":"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"}
|