@sourcegraph/amp 0.0.1748433686-g2e7c5c → 0.0.1748462555-g4327bb

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/amp.js +2 -2
  2. package/dist/{color-DGLUYaqf.js → color-CUPGkX15.js} +78 -60
  3. package/dist/color-CUPGkX15.js.map +1 -0
  4. package/dist/{create_file.node-BJ9db1t8.js → create_file.node-SpjRITEy.js} +2 -2
  5. package/dist/{create_file.node-BJ9db1t8.js.map → create_file.node-SpjRITEy.js.map} +1 -1
  6. package/dist/{edit_file.node-BMxxYIGr.js → edit_file.node-D5N7LO47.js} +3 -3
  7. package/dist/{edit_file.node-BMxxYIGr.js.map → edit_file.node-D5N7LO47.js.map} +1 -1
  8. package/dist/{executable-D-KMMXSM.js → executable-c0v_Cgtd.js} +2 -2
  9. package/dist/{executable-D-KMMXSM.js.map → executable-c0v_Cgtd.js.map} +1 -1
  10. package/dist/{files-CfkeQImL.js → files-BHaKzjeq.js} +2 -2
  11. package/dist/{files-CfkeQImL.js.map → files-BHaKzjeq.js.map} +1 -1
  12. package/dist/{glob.node-B0mTFFtz.js → glob.node-DElvFTve.js} +3 -3
  13. package/dist/{glob.node-B0mTFFtz.js.map → glob.node-DElvFTve.js.map} +1 -1
  14. package/dist/{list_directory.node-DHsYGwWf.js → list_directory.node-XFwN3yE0.js} +2 -2
  15. package/dist/{list_directory.node-DHsYGwWf.js.map → list_directory.node-XFwN3yE0.js.map} +1 -1
  16. package/dist/{load-profile-OVWYid8R.js → load-profile-BYmdPZi4.js} +2 -2
  17. package/dist/{load-profile-OVWYid8R.js.map → load-profile-BYmdPZi4.js.map} +1 -1
  18. package/dist/{main-cp81A1je.js → main-DR9dUGdY.js} +8603 -8505
  19. package/dist/{main-cp81A1je.js.map → main-DR9dUGdY.js.map} +1 -1
  20. package/dist/{node-9ls77cDn.js → node-9bKk9FwK.js} +3 -3
  21. package/dist/{node-9ls77cDn.js.map → node-9bKk9FwK.js.map} +1 -1
  22. package/dist/{node-DOR8bmJd.js → node-B09Ab5Cm.js} +3 -3
  23. package/dist/{node-DOR8bmJd.js.map → node-B09Ab5Cm.js.map} +1 -1
  24. package/dist/{node-C_IajzJJ.js → node-Bp6ny8-f.js} +2 -2
  25. package/dist/{node-C_IajzJJ.js.map → node-Bp6ny8-f.js.map} +1 -1
  26. package/dist/{node-BlKhyOsp.js → node-CUJPEKyh.js} +7 -8
  27. package/dist/node-CUJPEKyh.js.map +1 -0
  28. package/dist/{node-BZRHbCOQ.js → node-DBAQSiZY.js} +2 -2
  29. package/dist/{node-BZRHbCOQ.js.map → node-DBAQSiZY.js.map} +1 -1
  30. package/dist/{node-KD2UfqlA.js → node-XBUPK8tB.js} +3 -3
  31. package/dist/{node-KD2UfqlA.js.map → node-XBUPK8tB.js.map} +1 -1
  32. package/dist/{read_file.node-Bju6vvoS.js → read_file.node-QTo58SRd.js} +2 -2
  33. package/dist/{read_file.node-Bju6vvoS.js.map → read_file.node-QTo58SRd.js.map} +1 -1
  34. package/dist/{stdio-BUwVOdui.js → stdio-ZOtkCu09.js} +3 -3
  35. package/dist/{stdio-BUwVOdui.js.map → stdio-ZOtkCu09.js.map} +1 -1
  36. package/dist/storybook.js +2 -2
  37. package/dist/storybook.js.map +1 -1
  38. package/dist/{undo_edit.node-DlNuubCp.js → undo_edit.node-DBBw_ukz.js} +2 -2
  39. package/dist/{undo_edit.node-DlNuubCp.js.map → undo_edit.node-DBBw_ukz.js.map} +1 -1
  40. package/package.json +1 -1
  41. package/dist/color-DGLUYaqf.js.map +0 -1
  42. package/dist/node-BlKhyOsp.js.map +0 -1
@@ -1 +1 @@
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
+ {"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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"}
@@ -3,7 +3,7 @@ import F from "node:crypto";
3
3
  import s, { writeFile as D } from "node:fs/promises";
4
4
  import g from "node:os";
5
5
  import c from "node:path";
6
- import { p as b, aT as E, a$ as v, b0 as x, n as m } from "./color-DGLUYaqf.js";
6
+ import { p as b, aT as E, a$ as v, b0 as x, n as m } from "./color-CUPGkX15.js";
7
7
  const C = 50, o = [];
8
8
  async function J(t, i, d) {
9
9
  try {
@@ -79,4 +79,4 @@ export {
79
79
  T as nodeUndoEditTool,
80
80
  J as recordEdit
81
81
  };
82
- //# sourceMappingURL=undo_edit.node-DlNuubCp.js.map
82
+ //# sourceMappingURL=undo_edit.node-DBBw_ukz.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"undo_edit.node-DlNuubCp.js","sources":["../../core/src/tools/builtin/filesystem/undo_edit.node.ts"],"sourcesContent":["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 { UndoEditToolDef, undoEditToolReg } from './undo_edit.common'\n\nconst MAX_FILES = 50\nconst editQueue: string[] = []\n\nexport async function recordEdit(\n\tfilePath: string,\n\toldContent: string,\n\tnewContent: string,\n): Promise<void> {\n\ttry {\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\t// Update the FIFO queue\n\t\t// Remove if already in queue (to add it to the end)\n\t\tconst existingIndex = editQueue.indexOf(hashedFilename)\n\t\tif (existingIndex >= 0) {\n\t\t\teditQueue.splice(existingIndex, 1)\n\t\t}\n\n\t\t// Add to end of queue (most recent)\n\t\teditQueue.push(hashedFilename)\n\n\t\t// If we exceed the limit, remove the oldest edit\n\t\tif (editQueue.length > MAX_FILES) {\n\t\t\tconst oldestFile = editQueue.shift()\n\t\t\tif (oldestFile) {\n\t\t\t\tconst oldestPath = path.join(tempDir, oldestFile)\n\t\t\t\tawait fs.unlink(oldestPath).catch(() => {})\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tlogger.error('Failed to record edit:', error)\n\t}\n}\n\n// Function to get and remove the most recent edit for a file\nexport async function getLastEdit(\n\tfilePath: string,\n): Promise<{ oldContent: string; newContent: string } | undefined> {\n\ttry {\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\n\t\t// Remove from queue and delete file\n\t\tconst queueIndex = editQueue.indexOf(hashedFilename)\n\t\tif (queueIndex >= 0) {\n\t\t\teditQueue.splice(queueIndex, 1)\n\t\t}\n\t\tawait fs.unlink(editFile).catch(() => {})\n\n\t\treturn { oldContent: editData.oldContent, newContent: editData.newContent }\n\t} catch (error) {\n\t\tlogger.error('Failed to get last edit:', error)\n\t\treturn undefined\n\t}\n}\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\nfunction checkUndoEditArgs(args: UndoEditToolDef['args']): 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\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":["MAX_FILES","editQueue","recordEdit","filePath","oldContent","newContent","hashedFilename","getHashedFilename","tempDir","getTempDir","editFile","path","editData","fs","existingIndex","oldestFile","oldestPath","error","logger","getLastEdit","editDataStr","queueIndex","nodeUndoEditTool","args","dir","threadID","trackFileChange","promiseFactoryToObservable","signal","checkDirURIIsFile","checkUndoEditArgs","lastEdit","diff","createUnifiedDiff","formattedDiff","formatDiffAsMarkdown","writeFile","tempDirPromise","os","crypto"],"mappings":"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"}
1
+ {"version":3,"file":"undo_edit.node-DBBw_ukz.js","sources":["../../core/src/tools/builtin/filesystem/undo_edit.node.ts"],"sourcesContent":["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 { UndoEditToolDef, undoEditToolReg } from './undo_edit.common'\n\nconst MAX_FILES = 50\nconst editQueue: string[] = []\n\nexport async function recordEdit(\n\tfilePath: string,\n\toldContent: string,\n\tnewContent: string,\n): Promise<void> {\n\ttry {\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\t// Update the FIFO queue\n\t\t// Remove if already in queue (to add it to the end)\n\t\tconst existingIndex = editQueue.indexOf(hashedFilename)\n\t\tif (existingIndex >= 0) {\n\t\t\teditQueue.splice(existingIndex, 1)\n\t\t}\n\n\t\t// Add to end of queue (most recent)\n\t\teditQueue.push(hashedFilename)\n\n\t\t// If we exceed the limit, remove the oldest edit\n\t\tif (editQueue.length > MAX_FILES) {\n\t\t\tconst oldestFile = editQueue.shift()\n\t\t\tif (oldestFile) {\n\t\t\t\tconst oldestPath = path.join(tempDir, oldestFile)\n\t\t\t\tawait fs.unlink(oldestPath).catch(() => {})\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tlogger.error('Failed to record edit:', error)\n\t}\n}\n\n// Function to get and remove the most recent edit for a file\nexport async function getLastEdit(\n\tfilePath: string,\n): Promise<{ oldContent: string; newContent: string } | undefined> {\n\ttry {\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\n\t\t// Remove from queue and delete file\n\t\tconst queueIndex = editQueue.indexOf(hashedFilename)\n\t\tif (queueIndex >= 0) {\n\t\t\teditQueue.splice(queueIndex, 1)\n\t\t}\n\t\tawait fs.unlink(editFile).catch(() => {})\n\n\t\treturn { oldContent: editData.oldContent, newContent: editData.newContent }\n\t} catch (error) {\n\t\tlogger.error('Failed to get last edit:', error)\n\t\treturn undefined\n\t}\n}\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\nfunction checkUndoEditArgs(args: UndoEditToolDef['args']): 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\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":["MAX_FILES","editQueue","recordEdit","filePath","oldContent","newContent","hashedFilename","getHashedFilename","tempDir","getTempDir","editFile","path","editData","fs","existingIndex","oldestFile","oldestPath","error","logger","getLastEdit","editDataStr","queueIndex","nodeUndoEditTool","args","dir","threadID","trackFileChange","promiseFactoryToObservable","signal","checkDirURIIsFile","checkUndoEditArgs","lastEdit","diff","createUnifiedDiff","formattedDiff","formatDiffAsMarkdown","writeFile","tempDirPromise","os","crypto"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sourcegraph/amp",
3
- "version": "0.0.1748433686-g2e7c5c",
3
+ "version": "0.0.1748462555-g4327bb",
4
4
  "description": "CLI for Amp, an agentic coding tool in research preview from Sourcegraph.",
5
5
  "homepage": "https://ampcode.com/",
6
6
  "author": {