| Philip Zeyliger | 2032b1c | 2025-04-23 19:40:42 -0700 | [diff] [blame] | 1 | <html> |
| 2 | <head> |
| 3 | <title>sketch-tool-calls demo</title> |
| 4 | <link rel="stylesheet" href="demo.css" /> |
| 5 | |
| 6 | <script type="module" src="../sketch-tool-calls.ts"></script> |
| 7 | |
| 8 | <script> |
| 9 | const toolCalls = [ |
| 10 | [ |
| 11 | { |
| 12 | name: "bash", |
| 13 | input: JSON.stringify({ |
| 14 | command: |
| 15 | "docker ps -a --format '{{.ID}} {{.Image }} {{.Names}}' | grep sketch | awk '{print $1 }' | xargs -I {} docker rm {} && docker image prune -af", |
| 16 | }), |
| 17 | }, |
| 18 | ], |
| 19 | [ |
| 20 | { |
| 21 | name: "bash", |
| 22 | input: JSON.stringify({ |
| 23 | command: "ls -a", |
| 24 | }), |
| 25 | result_message: { |
| 26 | type: "tool", |
| 27 | tool_result: ".\n..", |
| 28 | }, |
| 29 | }, |
| 30 | ], |
| 31 | [ |
| 32 | { |
| 33 | name: "bash", |
| 34 | input: JSON.stringify({ |
| 35 | command: "sleep 200", |
| 36 | }), |
| 37 | result_message: { |
| 38 | type: "tool", |
| 39 | tool_error: "the user canceled this operation", |
| 40 | }, |
| 41 | }, |
| 42 | ], |
| 43 | [ |
| 44 | { |
| 45 | name: "title", |
| 46 | input: JSON.stringify({ |
| 47 | title: "a new title for this sketch", |
| 48 | }), |
| 49 | }, |
| 50 | ], |
| 51 | [ |
| 52 | { |
| 53 | name: "codereview", |
| 54 | input: "{}", |
| 55 | tool_call_id: "toolu_01WT5qQwHZgdogfKhkD8R9PZ", |
| 56 | result_message: { |
| 57 | type: "tool", |
| 58 | end_of_turn: false, |
| 59 | content: "", |
| 60 | tool_name: "codereview", |
| 61 | input: "{}", |
| 62 | tool_result: "OK", |
| 63 | tool_call_id: "toolu_01WT5qQwHZgdogfKhkD8R9PZ", |
| 64 | timestamp: "2025-04-14T16:33:17.575759565Z", |
| 65 | conversation_id: "xsa-8hw0", |
| 66 | start_time: "2025-04-14T16:33:07.11793816Z", |
| 67 | end_time: "2025-04-14T16:33:17.57575719Z", |
| 68 | elapsed: 10457819031, |
| 69 | idx: 45, |
| 70 | }, |
| 71 | }, |
| 72 | ], |
| 73 | [ |
| 74 | { |
| 75 | name: "codereview", |
| 76 | input: "{}", |
| 77 | tool_call_id: "toolu_01WT5qQwHZgdogfKhkD8R9PZ", |
| 78 | result_message: { |
| 79 | type: "tool", |
| 80 | end_of_turn: false, |
| 81 | content: "", |
| 82 | tool_name: "codereview", |
| 83 | input: "{}", |
| 84 | tool_result: "Not OK", |
| 85 | tool_call_id: "toolu_01WT5qQwHZgdogfKhkD8R9PZ", |
| 86 | timestamp: "2025-04-14T16:33:17.575759565Z", |
| 87 | conversation_id: "xsa-8hw0", |
| 88 | start_time: "2025-04-14T16:33:07.11793816Z", |
| 89 | end_time: "2025-04-14T16:33:17.57575719Z", |
| 90 | elapsed: 10457819031, |
| 91 | idx: 45, |
| 92 | }, |
| 93 | }, |
| 94 | ], |
| 95 | [ |
| 96 | { |
| 97 | name: "think", |
| 98 | input: |
| 99 | '{"thoughts":"I\'m going to inspect a few key components to understand their purpose and relationships:\\n1. sketch-app-shell.ts - Appears to be the main container component\\n2. sketch-timeline.ts - Likely manages the chat timeline\\n3. sketch-view-mode-select.ts - Handles switching between different views\\n\\nThis will help me create a comprehensive README that explains the components and their relationships."}', |
| 100 | tool_call_id: "toolu_01R1g5mQVgKxEJZFNp9QGvUr", |
| 101 | result_message: { |
| 102 | type: "tool", |
| 103 | end_of_turn: false, |
| 104 | content: "", |
| 105 | tool_name: "think", |
| 106 | input: |
| 107 | '{"thoughts":"I\'m going to inspect a few key components to understand their purpose and relationships:\\n1. sketch-app-shell.ts - Appears to be the main container component\\n2. sketch-timeline.ts - Likely manages the chat timeline\\n3. sketch-view-mode-select.ts - Handles switching between different views\\n\\nThis will help me create a comprehensive README that explains the components and their relationships."}', |
| 108 | tool_result: "recorded", |
| 109 | tool_call_id: "toolu_01R1g5mQVgKxEJZFNp9QGvUr", |
| 110 | timestamp: "2025-04-14T16:32:14.12647133Z", |
| 111 | conversation_id: "xsa-8hw0", |
| 112 | start_time: "2025-04-14T16:32:14.126454329Z", |
| 113 | end_time: "2025-04-14T16:32:14.126468539Z", |
| 114 | elapsed: 14209, |
| 115 | idx: 18, |
| 116 | }, |
| 117 | }, |
| 118 | ], |
| 119 | [ |
| 120 | { |
| 121 | name: "patch", |
| 122 | input: |
| 123 | '{"path":"/app/webui/src/web-components/README.md","patches":[{"operation":"overwrite","newText":"# Web Components\\n\\nThis directory contains the custom web components used in the Loop WebUI. These components are built using the [Lit](https://lit.dev/) library for creating fast, lightweight web components with a declarative template system.\\n\\n## Component Architecture\\n\\nThe components follow a hierarchical structure that creates a complete UI for interacting with the CodingAgent:\\n\\n```\\nsketch-app-shell (main container)\\n├── sketch-container-status\\n├── sketch-network-status\\n├── sketch-view-mode-select\\n├── sketch-timeline (chat view)\\n│ └── sketch-timeline-message\\n│ └── sketch-tool-calls\\n├── sketch-diff-view (code diff view)\\n└── sketch-chat-input\\n```\\n\\n## Component Overview\\n\\n### sketch-app-shell.ts\\nThe main container component that orchestrates the entire UI. It manages:\\n- View modes (chat, diff, charts, terminal)\\n- Network status and connection management\\n- Timeline data fetching and rendering\\n- Auto-scrolling behavior for chat messages\\n\\n### sketch-chat-input.ts\\nHandles user input for sending messages to the CodingAgent:\\n- Text input area with markdown support\\n- Send button and keyboard shortcuts (Enter to send, Shift+Enter for newline)\\n- Auto-focusing behavior\\n\\n### sketch-container-status.ts\\nDisplays information about the container environment:\\n- OS information\\n- Resource usage (CPU, memory)\\n- Container status indicators\\n\\n### sketch-diff-view.ts\\nProvides a visual diff viewer for code changes:\\n- Git commit display\\n- Side-by-side or unified diff viewing\\n- Syntax highlighting for code\\n- Comment creation for code review\\n\\n### sketch-network-status.ts\\nShows the current connection status to the server:\\n- Connected/disconnected indicators\\n- Error messages when connection issues occur\\n- Visual feedback on connection state\\n\\n### sketch-timeline.ts\\nDisplays the conversation history between user and CodingAgent:\\n- Message rendering\\n- Manages the sequence of messages\\n- Handles scrolling behavior\\n\\n### sketch-timeline-message.ts\\nRenders individual messages in the timeline:\\n- Different styling for user vs. agent messages\\n- Markdown rendering with syntax highlighting\\n- Handles special message types\\n\\n### sketch-tool-calls.ts\\nDisplays tool call information within messages:\\n- Tool call parameters and outputs\\n- Expandable/collapsible sections for tool details\\n- Syntax highlighting for code in tool outputs\\n\\n### sketch-view-mode-select.ts\\nProvides UI for switching between different views:\\n- Chat view for conversation\\n- Diff view for code changes\\n- Charts view for data visualization\\n- Terminal view for command execution\\n\\n## Development\\n\\n### Creating New Components\\n\\nWhen creating new components, follow these patterns:\\n\\n1. Use the `@customElement` decorator to define the component\\n2. Encapsulate styles using the static `styles` property\\n3. Use Lit\'s reactive properties (`@property`, `@state`) to manage component state\\n4. Implement lifecycle methods as needed (`connectedCallback`, `disconnectedCallback`, etc.)\\n\\n### Example\\n\\n```typescript\\nimport { css, html, LitElement } from \'lit\';\\nimport { customElement, property } from \'lit/decorators.js\';\\n\\n@customElement(\'sketch-new-component\')\\nexport class SketchNewComponent extends LitElement {\\n @property()\\n myProperty: string = \'default\';\\n\\n static styles = css`\\n :host {\\n display: block;\\n }\\n `;\\n\\n render() {\\n return html`\\n <div>\\n ${this.myProperty}\\n </div>\\n `;\\n }\\n}\\n\\ndeclare global {\\n interface HTMLElementTagNameMap {\\n \'sketch-new-component\': SketchNewComponent;\\n }\\n}\\n```\\n\\n### Best Practices\\n\\n1. Maintain a single responsibility for each component\\n2. Use properties and events for parent-child communication\\n3. Document the purpose and API of each component\\n4. Write tests for components where possible\\n5. Keep styles encapsulated within components\\n6. Use type definitions for strong typing\\n\\n## Related Resources\\n\\n- [Lit Documentation](https://lit.dev/docs/)\\n- [Web Components Introduction](https://developer.mozilla.org/en-US/docs/Web/Web_Components)\\n- See `/app/webui/readme.md` for more information on the Loop WebUI project\\n"}]}', |
| 124 | tool_call_id: "toolu_01TNhLX2AWkZwsu2KCLKrpju", |
| 125 | result_message: { |
| 126 | type: "tool", |
| 127 | end_of_turn: false, |
| 128 | content: "", |
| 129 | tool_name: "patch", |
| 130 | input: |
| 131 | '{"path":"/app/webui/src/web-components/README.md","patches":[{"operation":"overwrite","newText":"# Web Components\\n\\nThis directory contains the custom web components used in the Loop WebUI. These components are built using the [Lit](https://lit.dev/) library for creating fast, lightweight web components with a declarative template system.\\n\\n## Component Architecture\\n\\nThe components follow a hierarchical structure that creates a complete UI for interacting with the CodingAgent:\\n\\n```\\nsketch-app-shell (main container)\\n├── sketch-container-status\\n├── sketch-network-status\\n├── sketch-view-mode-select\\n├── sketch-timeline (chat view)\\n│ └── sketch-timeline-message\\n│ └── sketch-tool-calls\\n├── sketch-diff-view (code diff view)\\n└── sketch-chat-input\\n```\\n\\n## Component Overview\\n\\n### sketch-app-shell.ts\\nThe main container component that orchestrates the entire UI. It manages:\\n- View modes (chat, diff, charts, terminal)\\n- Network status and connection management\\n- Timeline data fetching and rendering\\n- Auto-scrolling behavior for chat messages\\n\\n### sketch-chat-input.ts\\nHandles user input for sending messages to the CodingAgent:\\n- Text input area with markdown support\\n- Send button and keyboard shortcuts (Enter to send, Shift+Enter for newline)\\n- Auto-focusing behavior\\n\\n### sketch-container-status.ts\\nDisplays information about the container environment:\\n- OS information\\n- Resource usage (CPU, memory)\\n- Container status indicators\\n\\n### sketch-diff-view.ts\\nProvides a visual diff viewer for code changes:\\n- Git commit display\\n- Side-by-side or unified diff viewing\\n- Syntax highlighting for code\\n- Comment creation for code review\\n\\n### sketch-network-status.ts\\nShows the current connection status to the server:\\n- Connected/disconnected indicators\\n- Error messages when connection issues occur\\n- Visual feedback on connection state\\n\\n### sketch-timeline.ts\\nDisplays the conversation history between user and CodingAgent:\\n- Message rendering\\n- Manages the sequence of messages\\n- Handles scrolling behavior\\n\\n### sketch-timeline-message.ts\\nRenders individual messages in the timeline:\\n- Different styling for user vs. agent messages\\n- Markdown rendering with syntax highlighting\\n- Handles special message types\\n\\n### sketch-tool-calls.ts\\nDisplays tool call information within messages:\\n- Tool call parameters and outputs\\n- Expandable/collapsible sections for tool details\\n- Syntax highlighting for code in tool outputs\\n\\n### sketch-view-mode-select.ts\\nProvides UI for switching between different views:\\n- Chat view for conversation\\n- Diff view for code changes\\n- Charts view for data visualization\\n- Terminal view for command execution\\n\\n## Development\\n\\n### Creating New Components\\n\\nWhen creating new components, follow these patterns:\\n\\n1. Use the `@customElement` decorator to define the component\\n2. Encapsulate styles using the static `styles` property\\n3. Use Lit\'s reactive properties (`@property`, `@state`) to manage component state\\n4. Implement lifecycle methods as needed (`connectedCallback`, `disconnectedCallback`, etc.)\\n\\n### Example\\n\\n```typescript\\nimport { css, html, LitElement } from \'lit\';\\nimport { customElement, property } from \'lit/decorators.js\';\\n\\n@customElement(\'sketch-new-component\')\\nexport class SketchNewComponent extends LitElement {\\n @property()\\n myProperty: string = \'default\';\\n\\n static styles = css`\\n :host {\\n display: block;\\n }\\n `;\\n\\n render() {\\n return html`\\n <div>\\n ${this.myProperty}\\n </div>\\n `;\\n }\\n}\\n\\ndeclare global {\\n interface HTMLElementTagNameMap {\\n \'sketch-new-component\': SketchNewComponent;\\n }\\n}\\n```\\n\\n### Best Practices\\n\\n1. Maintain a single responsibility for each component\\n2. Use properties and events for parent-child communication\\n3. Document the purpose and API of each component\\n4. Write tests for components where possible\\n5. Keep styles encapsulated within components\\n6. Use type definitions for strong typing\\n\\n## Related Resources\\n\\n- [Lit Documentation](https://lit.dev/docs/)\\n- [Web Components Introduction](https://developer.mozilla.org/en-US/docs/Web/Web_Components)\\n- See `/app/webui/readme.md` for more information on the Loop WebUI project\\n"}]}', |
| 132 | tool_result: "- Applied all patches\n", |
| 133 | tool_call_id: "toolu_01TNhLX2AWkZwsu2KCLKrpju", |
| 134 | timestamp: "2025-04-14T16:32:47.10299854Z", |
| 135 | conversation_id: "xsa-8hw0", |
| 136 | start_time: "2025-04-14T16:32:47.101660683Z", |
| 137 | end_time: "2025-04-14T16:32:47.102994206Z", |
| 138 | elapsed: 1333524, |
| 139 | idx: 34, |
| 140 | }, |
| 141 | }, |
| 142 | ], |
| 143 | [ |
| 144 | { |
| 145 | name: "done", |
| 146 | input: |
| 147 | '{"checklist_items":{"code_reviewed":{"status":"yes","description":"If any commits were made, the codereview tool was run and its output was addressed.","comments":"Since this commit only adds a documentation file (README.md) with no functional code changes, a formal code review is not essential, but I\'ve verified the content for accuracy and completeness."},"wrote_tests":{"status":"not applicable","description":"If code was changed, tests were written or updated.","comments":"No code was changed; only documentation was added. The README file is purely informational and doesn\'t require tests."},"passes_tests":{"status":"not applicable","description":"If any commits were made, tests pass.","comments":"No functional code changes were made that would impact existing tests. The addition of a README file is a documentation-only change."},"git_commit":{"status":"yes","description":"Create git commits for any code changes you made. Match the style of recent commit messages. Include \'Co-Authored-By: sketch\' and the original user prompt. Use GIT_AUTHOR_NAME=\\"Sean McCullough\\" GIT_AUTHOR_EMAIL=\\"banksean@gmail.com\\" (not git config).","comments":"Created a commit with a descriptive message that follows the requested format, including \'Co-Authored-By: sketch\' attribution."}}}', |
| 148 | tool_call_id: "toolu_01HPgWQJF1aF9LUqkdDKWeES", |
| 149 | result_message: { |
| 150 | type: "tool", |
| 151 | end_of_turn: false, |
| 152 | content: "", |
| 153 | tool_name: "done", |
| 154 | input: |
| 155 | '{"checklist_items":{"code_reviewed":{"status":"yes","description":"If any commits were made, the codereview tool was run and its output was addressed.","comments":"Since this commit only adds a documentation file (README.md) with no functional code changes, a formal code review is not essential, but I\'ve verified the content for accuracy and completeness."},"wrote_tests":{"status":"not applicable","description":"If code was changed, tests were written or updated.","comments":"No code was changed; only documentation was added. The README file is purely informational and doesn\'t require tests."},"passes_tests":{"status":"not applicable","description":"If any commits were made, tests pass.","comments":"No functional code changes were made that would impact existing tests. The addition of a README file is a documentation-only change."},"git_commit":{"status":"yes","description":"Create git commits for any code changes you made. Match the style of recent commit messages. Include \'Co-Authored-By: sketch\' and the original user prompt. Use GIT_AUTHOR_NAME=\\"Sean McCullough\\" GIT_AUTHOR_EMAIL=\\"banksean@gmail.com\\" (not git config).","comments":"Created a commit with a descriptive message that follows the requested format, including \'Co-Authored-By: sketch\' attribution."}}}', |
| 156 | tool_result: |
| 157 | "codereview tool has not been run for commit 0b1f45dc17fbe7800f5164993ec99d6564256787", |
| 158 | tool_error: true, |
| 159 | tool_call_id: "toolu_01HPgWQJF1aF9LUqkdDKWeES", |
| 160 | timestamp: "2025-04-14T16:33:04.639179373Z", |
| 161 | conversation_id: "xsa-8hw0", |
| 162 | start_time: "2025-04-14T16:33:04.616273148Z", |
| 163 | end_time: "2025-04-14T16:33:04.639173456Z", |
| 164 | elapsed: 22900309, |
| 165 | idx: 43, |
| 166 | }, |
| 167 | }, |
| 168 | ], |
| 169 | ]; |
| 170 | document.addEventListener("DOMContentLoaded", () => { |
| 171 | toolCalls.forEach((calls) => { |
| 172 | const toolCallsEl = document.createElement("sketch-tool-calls"); |
| 173 | toolCallsEl.toolCalls = calls; |
| 174 | document.body.append(toolCallsEl); |
| 175 | }); |
| 176 | }); |
| 177 | </script> |
| 178 | </head> |
| 179 | <body> |
| 180 | <h1>sketch-tool-calls demo</h1> |
| 181 | |
| 182 | <sketch-tool-calls></sketch-tool-calls> |
| 183 | </body> |
| 184 | </html> |