on 490c2f8 help sign in
7321 files changed+149−5596272
since splitsnapshots
unifiedsplit
flake.nix+1−1 internal/agent/tools/download.go+3−3 internal/agent/tools/fetch.go+11−11 internal/agent/tools/mcp-tools.go+1−1 internal/agent/tools/sourcegraph.go+4−4 internal/agent/tools/view.go+9−9 internal/agent/tools/view_test.go+2−2 internal/agent/tools/web_fetch.go+4−4 internal/agent/tools/web_search.go+1−1 internal/agent/tools/write.go+3−3 internal/cmd/session.go+1−1 internal/config/config.go−1 internal/ui/attachments/attachments.go+2−2 internal/ui/chat/agent.go+2−2 internal/ui/chat/bash.go+3−3 internal/ui/chat/diagnostics.go+1−1 internal/ui/chat/docker_mcp.go+2−2 internal/ui/chat/fetch.go+3−3 internal/ui/chat/file.go+8−8 internal/ui/chat/generic.go+2−2 internal/ui/chat/lsp_restart.go+1−1 internal/ui/chat/mcp.go+2−2 internal/ui/chat/messages.go+1−2 internal/ui/chat/references.go+1−1 internal/ui/chat/search.go+4−4 internal/ui/chat/todos.go+1−1 internal/ui/chat/tool_result_content.go+2−2 internal/ui/chat/tool_result_content_test.go+5−5 internal/ui/chat/tools.go+32−65 internal/ui/chat/unified_diff.go+14−13 internal/ui/chat/version_bump_test.go+10−10 internal/ui/difftastic/difftastic.go−60 internal/ui/model/chat.go−18 internal/ui/model/ui.go+13−35 vendor/charm.land/bubbles/v2/LICENSE−21 vendor/charm.land/bubbles/v2/cursor/cursor.go−241 vendor/charm.land/bubbles/v2/filepicker/filepicker.go−529 vendor/charm.land/bubbles/v2/filepicker/hidden_unix.go−11 vendor/charm.land/bubbles/v2/filepicker/hidden_windows.go−21 vendor/charm.land/bubbles/v2/help/help.go−253 vendor/charm.land/bubbles/v2/internal/memoization/memoization.go−125 vendor/charm.land/bubbles/v2/internal/runeutil/runeutil.go−102 vendor/charm.land/bubbles/v2/key/key.go−140 vendor/charm.land/bubbles/v2/spinner/spinner.go−211 vendor/charm.land/bubbles/v2/textarea/textarea.go−1897 vendor/charm.land/bubbles/v2/textinput/styles.go−96 vendor/charm.land/bubbles/v2/textinput/textinput.go−968 vendor/charm.land/bubbles/v2/viewport/highlight.go−141 vendor/charm.land/bubbles/v2/viewport/keymap.go−58 vendor/charm.land/bubbles/v2/viewport/viewport.go−765 vendor/charm.land/bubbletea/v2/.gitattributes−1 vendor/charm.land/bubbletea/v2/.gitignore−23 vendor/charm.land/bubbletea/v2/.golangci.yml−47 vendor/charm.land/bubbletea/v2/.goreleaser.yml−5 vendor/charm.land/bubbletea/v2/LICENSE−21 vendor/charm.land/bubbletea/v2/README.md−402 vendor/charm.land/bubbletea/v2/Taskfile.yaml−38 vendor/charm.land/bubbletea/v2/UPGRADE_GUIDE_V2.md−573 vendor/charm.land/bubbletea/v2/clipboard.go−70 vendor/charm.land/bubbletea/v2/color.go−91 vendor/charm.land/bubbletea/v2/commands.go−175 vendor/charm.land/bubbletea/v2/cursed_renderer.go−860 vendor/charm.land/bubbletea/v2/cursor.go−28 vendor/charm.land/bubbletea/v2/environ.go−34 vendor/charm.land/bubbletea/v2/exec.go−129 vendor/charm.land/bubbletea/v2/focus.go−9 vendor/charm.land/bubbletea/v2/input.go−54 vendor/charm.land/bubbletea/v2/key.go−371 vendor/charm.land/bubbletea/v2/keyboard.go−59 vendor/charm.land/bubbletea/v2/logging.go−53 vendor/charm.land/bubbletea/v2/mod.go−27 vendor/charm.land/bubbletea/v2/mouse.go−144 vendor/charm.land/bubbletea/v2/nil_renderer.go−53 vendor/charm.land/bubbletea/v2/options.go−168 vendor/charm.land/bubbletea/v2/paste.go−20 vendor/charm.land/bubbletea/v2/profile.go−15 vendor/charm.land/bubbletea/v2/raw.go−37 vendor/charm.land/bubbletea/v2/renderer.go−104 vendor/charm.land/bubbletea/v2/screen.go−68 vendor/charm.land/bubbletea/v2/signals_unix.go−33 vendor/charm.land/bubbletea/v2/signals_windows.go−10 vendor/charm.land/bubbletea/v2/tea.go−1439 vendor/charm.land/bubbletea/v2/termcap.go−48 vendor/charm.land/bubbletea/v2/termios_bsd.go−13 vendor/charm.land/bubbletea/v2/termios_other.go−8 vendor/charm.land/bubbletea/v2/termios_unix.go−14 vendor/charm.land/bubbletea/v2/termios_windows.go−11 vendor/charm.land/bubbletea/v2/tty.go−136 vendor/charm.land/bubbletea/v2/tty_unix.go−47 vendor/charm.land/bubbletea/v2/tty_windows.go−64 vendor/charm.land/bubbletea/v2/xterm.go−22 vendor/charm.land/catwalk/LICENSE−21 vendor/charm.land/catwalk/internal/providers/configs/aihubmix.json−3746 vendor/charm.land/catwalk/internal/providers/configs/alibaba-singapore.json−141 vendor/charm.land/catwalk/internal/providers/configs/alibaba-united-states.json−45 vendor/charm.land/catwalk/internal/providers/configs/anthropic.json−183 vendor/charm.land/catwalk/internal/providers/configs/avian.json−125 vendor/charm.land/catwalk/internal/providers/configs/azure.json−225 vendor/charm.land/catwalk/internal/providers/configs/baseten.json−187 vendor/charm.land/catwalk/internal/providers/configs/bedrock-europe.json−115 vendor/charm.land/catwalk/internal/providers/configs/bedrock-united-states.json−143 vendor/charm.land/catwalk/internal/providers/configs/cerebras.json−42 vendor/charm.land/catwalk/internal/providers/configs/chutes.json−227 vendor/charm.land/catwalk/internal/providers/configs/copilot.json−310 vendor/charm.land/catwalk/internal/providers/configs/cortecs.json−1697 vendor/charm.land/catwalk/internal/providers/configs/deepseek.json−45 vendor/charm.land/catwalk/internal/providers/configs/fireworks.json−171 vendor/charm.land/catwalk/internal/providers/configs/gemini.json−91 vendor/charm.land/catwalk/internal/providers/configs/groq.json−36 vendor/charm.land/catwalk/internal/providers/configs/huggingface.json−267 vendor/charm.land/catwalk/internal/providers/configs/ionet.json−335 vendor/charm.land/catwalk/internal/providers/configs/kimi.json−23 vendor/charm.land/catwalk/internal/providers/configs/minimax-china.json−91 vendor/charm.land/catwalk/internal/providers/configs/minimax.json−91 vendor/charm.land/catwalk/internal/providers/configs/moonshot.json−131 vendor/charm.land/catwalk/internal/providers/configs/nebius.json−419 vendor/charm.land/catwalk/internal/providers/configs/neuralwatt.json−155 vendor/charm.land/catwalk/internal/providers/configs/openai.json−352 vendor/charm.land/catwalk/internal/providers/configs/opencode-go.json−351 vendor/charm.land/catwalk/internal/providers/configs/opencode-zen.json−908 vendor/charm.land/catwalk/internal/providers/configs/openrouter.json−3831 vendor/charm.land/catwalk/internal/providers/configs/qiniucloud.json−179 vendor/charm.land/catwalk/internal/providers/configs/scaleway.json−141 vendor/charm.land/catwalk/internal/providers/configs/synthetic.json−197 vendor/charm.land/catwalk/internal/providers/configs/venice.json−1173 vendor/charm.land/catwalk/internal/providers/configs/vercel.json−3072 vendor/charm.land/catwalk/internal/providers/configs/vertexai.json−170 vendor/charm.land/catwalk/internal/providers/configs/xai.json−59 vendor/charm.land/catwalk/internal/providers/configs/zai.json−136 vendor/charm.land/catwalk/internal/providers/configs/zhipu-coding.json−136 vendor/charm.land/catwalk/internal/providers/configs/zhipu.json−120 vendor/charm.land/catwalk/internal/providers/providers.go−349 vendor/charm.land/catwalk/pkg/catwalk/client.go−79 vendor/charm.land/catwalk/pkg/catwalk/pkg.go−2 vendor/charm.land/catwalk/pkg/catwalk/provider.go−157 vendor/charm.land/catwalk/pkg/embedded/embedded.go−13 vendor/charm.land/fang/v2/.gitignore−3 vendor/charm.land/fang/v2/.golangci.yml−47 vendor/charm.land/fang/v2/.goreleaser.yml−5 vendor/charm.land/fang/v2/LICENSE.md−21 vendor/charm.land/fang/v2/README.md−92 vendor/charm.land/fang/v2/Taskfile.yml−7 vendor/charm.land/fang/v2/UPGRADE_GUIDE_V2.md−127 vendor/charm.land/fang/v2/fang.go−208 vendor/charm.land/fang/v2/fang_other.go−10 vendor/charm.land/fang/v2/fang_windows.go−30 vendor/charm.land/fang/v2/help.go−482 vendor/charm.land/fang/v2/theme.go−222 vendor/charm.land/fantasy/.editorconfig−18 vendor/charm.land/fantasy/.gitattributes−1 vendor/charm.land/fantasy/.gitignore−42 vendor/charm.land/fantasy/.golangci.yml−44 vendor/charm.land/fantasy/.goreleaser.yml−6 vendor/charm.land/fantasy/AGENTS.md−29 vendor/charm.land/fantasy/LICENSE−177 vendor/charm.land/fantasy/NOTICE−13 vendor/charm.land/fantasy/README.md−95 vendor/charm.land/fantasy/Taskfile.yaml−45 vendor/charm.land/fantasy/agent.go−1702 vendor/charm.land/fantasy/content.go−625 vendor/charm.land/fantasy/content_json.go−1046 vendor/charm.land/fantasy/crush.json−6 vendor/charm.land/fantasy/cspell.json−1 vendor/charm.land/fantasy/doc.go−2 vendor/charm.land/fantasy/errors.go−155 vendor/charm.land/fantasy/jsonrepair/jsonrepair.go−1648 vendor/charm.land/fantasy/model.go−261 vendor/charm.land/fantasy/model_json.go−156 vendor/charm.land/fantasy/object.go−236 vendor/charm.land/fantasy/object/object.go−620 vendor/charm.land/fantasy/provider.go−11 vendor/charm.land/fantasy/provider_registry.go−106 vendor/charm.land/fantasy/providers/anthropic/anthropic.go−1707 vendor/charm.land/fantasy/providers/anthropic/bedrock.go−15 vendor/charm.land/fantasy/providers/anthropic/call_useragent.go−14 vendor/charm.land/fantasy/providers/anthropic/computer_use.go−427 vendor/charm.land/fantasy/providers/anthropic/error.go−67 vendor/charm.land/fantasy/providers/anthropic/google.go−11 vendor/charm.land/fantasy/providers/anthropic/provider_options.go−283 vendor/charm.land/fantasy/providers/anthropic/sanitize.go−33 vendor/charm.land/fantasy/providers/azure/README.md−6 vendor/charm.land/fantasy/providers/azure/azure.go−125 vendor/charm.land/fantasy/providers/bedrock/README.md−10 vendor/charm.land/fantasy/providers/bedrock/bedrock.go−87 vendor/charm.land/fantasy/providers/google/README.md−63 vendor/charm.land/fantasy/providers/google/auth.go−15 vendor/charm.land/fantasy/providers/google/call_useragent.go−53 vendor/charm.land/fantasy/providers/google/error.go−51 vendor/charm.land/fantasy/providers/google/google.go−1488 vendor/charm.land/fantasy/providers/google/provider_options.go−146 vendor/charm.land/fantasy/providers/google/slice.go−11 vendor/charm.land/fantasy/providers/internal/httpheaders/httpheaders.go−60 vendor/charm.land/fantasy/providers/openai/call_useragent.go−31 vendor/charm.land/fantasy/providers/openai/error.go−92 vendor/charm.land/fantasy/providers/openai/language_model.go−990 vendor/charm.land/fantasy/providers/openai/language_model_hooks.go−668 vendor/charm.land/fantasy/providers/openai/openai.go−220 vendor/charm.land/fantasy/providers/openai/provider_options.go−217 vendor/charm.land/fantasy/providers/openai/responses_language_model.go−1678 vendor/charm.land/fantasy/providers/openai/responses_options.go−395 vendor/charm.land/fantasy/providers/openaicompat/language_model_hooks.go−516 vendor/charm.land/fantasy/providers/openaicompat/openaicompat.go−140 vendor/charm.land/fantasy/providers/openaicompat/provider_options.go−161 vendor/charm.land/fantasy/providers/openrouter/language_model_hooks.go−1063 vendor/charm.land/fantasy/providers/openrouter/openrouter.go−121 vendor/charm.land/fantasy/providers/openrouter/provider_options.go−218 vendor/charm.land/fantasy/providers/vercel/language_model_hooks.go−1074 vendor/charm.land/fantasy/providers/vercel/provider_options.go−195 vendor/charm.land/fantasy/providers/vercel/vercel.go−122 vendor/charm.land/fantasy/retry.go−155 vendor/charm.land/fantasy/schema/schema.go−442 vendor/charm.land/fantasy/tool.go−176 vendor/charm.land/fantasy/util.go−22 vendor/charm.land/fantasy/version.go−12 vendor/charm.land/fantasy/version.txt−1 vendor/charm.land/glamour/v2/.editorconfig−18 vendor/charm.land/glamour/v2/.gitattributes−2 vendor/charm.land/glamour/v2/.gitignore−2 vendor/charm.land/glamour/v2/.golangci.yml−44 vendor/charm.land/glamour/v2/.goreleaser.yml−6 vendor/charm.land/glamour/v2/CONTRIBUTING.md−23 vendor/charm.land/glamour/v2/LICENSE−21 vendor/charm.land/glamour/v2/README.md−129 vendor/charm.land/glamour/v2/Taskfile.yml−25 vendor/charm.land/glamour/v2/UPGRADE_GUIDE_V2.md−279 vendor/charm.land/glamour/v2/ansi/ansi.go−3 vendor/charm.land/glamour/v2/ansi/baseelement.go−157 vendor/charm.land/glamour/v2/ansi/blockelement.go−66 vendor/charm.land/glamour/v2/ansi/blockstack.go−95 vendor/charm.land/glamour/v2/ansi/codeblock.go−151 vendor/charm.land/glamour/v2/ansi/codespan.go−15 vendor/charm.land/glamour/v2/ansi/context.go−38 vendor/charm.land/glamour/v2/ansi/elements.go−481 vendor/charm.land/glamour/v2/ansi/emphasis.go−47 vendor/charm.land/glamour/v2/ansi/heading.go−80 vendor/charm.land/glamour/v2/ansi/image.go−57 vendor/charm.land/glamour/v2/ansi/link.go−112 vendor/charm.land/glamour/v2/ansi/listitem.go−29 vendor/charm.land/glamour/v2/ansi/margin.go−231 vendor/charm.land/glamour/v2/ansi/paragraph.go−63 vendor/charm.land/glamour/v2/ansi/renderer.go−166 vendor/charm.land/glamour/v2/ansi/style.go−252 vendor/charm.land/glamour/v2/ansi/table.go−206 vendor/charm.land/glamour/v2/ansi/table_links.go−234 vendor/charm.land/glamour/v2/ansi/task.go−27 vendor/charm.land/glamour/v2/ansi/templatehelper.go−86 vendor/charm.land/glamour/v2/examples.sh−19 vendor/charm.land/glamour/v2/gallery.sh−23 vendor/charm.land/glamour/v2/glamour.go−294 vendor/charm.land/glamour/v2/internal/autolink/autolink.go−55 vendor/charm.land/glamour/v2/styles/README.md−565 vendor/charm.land/glamour/v2/styles/ascii.json−87 vendor/charm.land/glamour/v2/styles/dark.json−191 vendor/charm.land/glamour/v2/styles/dracula.go−216 vendor/charm.land/glamour/v2/styles/dracula.json−188 vendor/charm.land/glamour/v2/styles/light.json−190 vendor/charm.land/glamour/v2/styles/notty.json−87 vendor/charm.land/glamour/v2/styles/pink.json−90 vendor/charm.land/glamour/v2/styles/styles.go−691 vendor/charm.land/glamour/v2/styles/tokyo-night.go−209 vendor/charm.land/glamour/v2/styles/tokyo-night.json−182 vendor/charm.land/glamour/v2/styles/tokyo_night.json−182 vendor/charm.land/lipgloss/v2/.editorconfig−18 vendor/charm.land/lipgloss/v2/.gitattributes−1 vendor/charm.land/lipgloss/v2/.gitignore−3 vendor/charm.land/lipgloss/v2/.golangci.yml−50 vendor/charm.land/lipgloss/v2/.goreleaser.yml−5 vendor/charm.land/lipgloss/v2/LICENSE−21 vendor/charm.land/lipgloss/v2/README.md−996 vendor/charm.land/lipgloss/v2/Taskfile.yaml−24 vendor/charm.land/lipgloss/v2/UPGRADE_GUIDE_V2.md−504 vendor/charm.land/lipgloss/v2/align.go−82 vendor/charm.land/lipgloss/v2/ansi_unix.go−8 vendor/charm.land/lipgloss/v2/ansi_windows.go−30 vendor/charm.land/lipgloss/v2/blending.go−196 vendor/charm.land/lipgloss/v2/borders.go−587 vendor/charm.land/lipgloss/v2/canvas.go−88 vendor/charm.land/lipgloss/v2/color.go−359 vendor/charm.land/lipgloss/v2/get.go−657 vendor/charm.land/lipgloss/v2/join.go−175 vendor/charm.land/lipgloss/v2/layer.go−327 vendor/charm.land/lipgloss/v2/lipgloss.go−3 vendor/charm.land/lipgloss/v2/position.go−134 vendor/charm.land/lipgloss/v2/query.go−92 vendor/charm.land/lipgloss/v2/ranges.go−48 vendor/charm.land/lipgloss/v2/runes.go−43 vendor/charm.land/lipgloss/v2/set.go−932 vendor/charm.land/lipgloss/v2/size.go−40 vendor/charm.land/lipgloss/v2/style.go−637 vendor/charm.land/lipgloss/v2/table/resizing.go−489 vendor/charm.land/lipgloss/v2/table/rows.go−130 vendor/charm.land/lipgloss/v2/table/table.go−568 vendor/charm.land/lipgloss/v2/table/util.go−44 vendor/charm.land/lipgloss/v2/terminal.go−124 vendor/charm.land/lipgloss/v2/tree/children.go−100 vendor/charm.land/lipgloss/v2/tree/enumerator.go−74 vendor/charm.land/lipgloss/v2/tree/renderer.go−165 vendor/charm.land/lipgloss/v2/tree/tree.go−407 vendor/charm.land/lipgloss/v2/unset.go−359 vendor/charm.land/lipgloss/v2/whitespace.go−76 vendor/charm.land/lipgloss/v2/wrap.go−113 vendor/charm.land/lipgloss/v2/writer.go−160 vendor/charm.land/log/v2/.gitignore−17 vendor/charm.land/log/v2/.golangci.yml−50 vendor/charm.land/log/v2/.goreleaser.yml−6 vendor/charm.land/log/v2/LICENSE−21 vendor/charm.land/log/v2/README.md−367 vendor/charm.land/log/v2/UPGRADE_GUIDE_V2.md−320 vendor/charm.land/log/v2/context.go−23 vendor/charm.land/log/v2/doc.go−3 vendor/charm.land/log/v2/formatter.go−27 vendor/charm.land/log/v2/json.go−157 vendor/charm.land/log/v2/level.go−65 vendor/charm.land/log/v2/logfmt.go−32 vendor/charm.land/log/v2/logger.go−413 vendor/charm.land/log/v2/logger_121.go−72 vendor/charm.land/log/v2/logger_no121.go−69 vendor/charm.land/log/v2/options.go−61 vendor/charm.land/log/v2/pkg.go−248 vendor/charm.land/log/v2/stdlog.go−67 vendor/charm.land/log/v2/styles.go−83 vendor/charm.land/log/v2/text.go−272 vendor/charm.land/x/vcr/LICENSE−21 vendor/charm.land/x/vcr/doc.go−3 vendor/charm.land/x/vcr/hooks.go−33 vendor/charm.land/x/vcr/marshaler.go−19 vendor/charm.land/x/vcr/matcher.go−70 vendor/charm.land/x/vcr/recorder.go−70 vendor/cloud.google.com/go/LICENSE−202 vendor/cloud.google.com/go/auth/CHANGES.md−483 vendor/cloud.google.com/go/auth/LICENSE−202 vendor/cloud.google.com/go/auth/README.md−40 vendor/cloud.google.com/go/auth/auth.go−618 vendor/cloud.google.com/go/auth/credentials/compute.go−102 vendor/cloud.google.com/go/auth/credentials/detect.go−471 vendor/cloud.google.com/go/auth/credentials/doc.go−45 vendor/cloud.google.com/go/auth/credentials/filetypes.go−329 vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/aws_provider.go−531 vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/executable_provider.go−284 vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/externalaccount.go−431 vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/file_provider.go−78 vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/info.go−74 vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/programmatic_provider.go−30 vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/url_provider.go−93 vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/x509_provider.go−220 vendor/cloud.google.com/go/auth/credentials/internal/externalaccountuser/externalaccountuser.go−115 vendor/cloud.google.com/go/auth/credentials/internal/gdch/gdch.go−198 vendor/cloud.google.com/go/auth/credentials/internal/impersonate/idtoken.go−105 vendor/cloud.google.com/go/auth/credentials/internal/impersonate/impersonate.go−168 vendor/cloud.google.com/go/auth/credentials/internal/stsexchange/sts_exchange.go−167 vendor/cloud.google.com/go/auth/credentials/selfsignedjwt.go−89 vendor/cloud.google.com/go/auth/grpctransport/dial_socketopt.go−62 vendor/cloud.google.com/go/auth/grpctransport/directpath.go−177 vendor/cloud.google.com/go/auth/grpctransport/grpctransport.go−675 vendor/cloud.google.com/go/auth/grpctransport/pool.go−119 vendor/cloud.google.com/go/auth/httptransport/httptransport.go−254 vendor/cloud.google.com/go/auth/httptransport/transport.go−548 vendor/cloud.google.com/go/auth/internal/compute/compute.go−65 vendor/cloud.google.com/go/auth/internal/compute/manufacturer.go−22 vendor/cloud.google.com/go/auth/internal/compute/manufacturer_linux.go−23 vendor/cloud.google.com/go/auth/internal/compute/manufacturer_windows.go−46 vendor/cloud.google.com/go/auth/internal/credsfile/credsfile.go−63 vendor/cloud.google.com/go/auth/internal/credsfile/filetype.go−159 vendor/cloud.google.com/go/auth/internal/credsfile/parse.go−99 vendor/cloud.google.com/go/auth/internal/internal.go−285 vendor/cloud.google.com/go/auth/internal/jwt/jwt.go−208 vendor/cloud.google.com/go/auth/internal/retry/retry.go−117 vendor/cloud.google.com/go/auth/internal/transport/cba.go−361 vendor/cloud.google.com/go/auth/internal/transport/cert/default_cert.go−65 vendor/cloud.google.com/go/auth/internal/transport/cert/enterprise_cert.go−54 vendor/cloud.google.com/go/auth/internal/transport/cert/secureconnect_cert.go−124 vendor/cloud.google.com/go/auth/internal/transport/cert/workload_cert.go−138 vendor/cloud.google.com/go/auth/internal/transport/headers/headers.go−61 vendor/cloud.google.com/go/auth/internal/transport/s2a.go−138 vendor/cloud.google.com/go/auth/internal/transport/transport.go−137 vendor/cloud.google.com/go/auth/internal/trustboundary/external_accounts_config_providers.go−100 vendor/cloud.google.com/go/auth/internal/trustboundary/trust_boundary.go−392 vendor/cloud.google.com/go/auth/internal/version.go−20 vendor/cloud.google.com/go/auth/oauth2adapt/CHANGES.md−82 vendor/cloud.google.com/go/auth/oauth2adapt/LICENSE−202 vendor/cloud.google.com/go/auth/oauth2adapt/oauth2adapt.go−200 vendor/cloud.google.com/go/auth/threelegged.go−382 vendor/cloud.google.com/go/civil/civil.go−500 vendor/cloud.google.com/go/compute/metadata/CHANGES.md−115 vendor/cloud.google.com/go/compute/metadata/LICENSE−202 vendor/cloud.google.com/go/compute/metadata/README.md−27 vendor/cloud.google.com/go/compute/metadata/log.go−149 vendor/cloud.google.com/go/compute/metadata/metadata.go−937 vendor/cloud.google.com/go/compute/metadata/retry.go−117 vendor/cloud.google.com/go/compute/metadata/retry_linux.go−31 vendor/cloud.google.com/go/compute/metadata/syscheck.go−28 vendor/cloud.google.com/go/compute/metadata/syscheck_linux.go−30 vendor/cloud.google.com/go/compute/metadata/syscheck_windows.go−39 vendor/git.sr.ht/~jackmordaunt/go-toast/.gitignore−1 vendor/git.sr.ht/~jackmordaunt/go-toast/ARCHITECTURE.md−244 vendor/git.sr.ht/~jackmordaunt/go-toast/LICENSE−61 vendor/git.sr.ht/~jackmordaunt/go-toast/README.md−86 vendor/git.sr.ht/~jackmordaunt/go-toast/constants.go−65 vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/data/xml/dom/xmldocument.go−73 vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/ui/notifications/toastnotification.go−88 vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/ui/notifications/toastnotificationmanager.go−53 vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/ui/notifications/toastnotificationmanagerforuser.go−68 vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/ui/notifications/toastnotifier.go−64 vendor/git.sr.ht/~jackmordaunt/go-toast/tmpl/powershell.go.tmpl−14 vendor/git.sr.ht/~jackmordaunt/go-toast/tmpl/tmpl.go−28 vendor/git.sr.ht/~jackmordaunt/go-toast/tmpl/xml.go.tmpl−34 vendor/git.sr.ht/~jackmordaunt/go-toast/toast.go−225 vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/bind.go−86 vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/bind_noop.go−19 vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/bind_windows.go−174 vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/impl.go−179 vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/procs.go−37 vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/registry.go−110 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/CHANGELOG.md−849 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/LICENSE.txt−21 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/README.md−39 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/ci.yml−29 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/cloud.go−44 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/doc.go−53 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/core.go−173 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/doc.go−264 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/errors.go−17 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/etag.go−57 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/exported.go−175 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/pipeline.go−77 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/request.go−260 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/response_error.go−201 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log/log.go−50 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/async/async.go−159 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/body/body.go−135 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/fake/fake.go−133 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/loc/loc.go−123 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/op/op.go−148 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/poller.go−24 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/util.go−212 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/constants.go−44 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/shared.go−149 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/doc.go−10 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/log.go−55 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/doc.go−10 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/policy.go−198 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/doc.go−10 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/errors.go−27 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pager.go−138 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pipeline.go−94 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_api_version.go−75 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_bearer_token.go−236 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_body_download.go−72 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_header.go−40 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_trace.go−154 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_include_response.go−35 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_key_credential.go−64 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_logging.go−264 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_request_id.go−34 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_retry.go−276 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_sas_credential.go−55 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_telemetry.go−83 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/poller.go−396 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/request.go−281 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/response.go−109 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_other.go−15 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_wasm.go−15 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_http_client.go−48 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/doc.go−9 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/progress.go−89 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/constants.go−41 vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/tracing.go−191 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/LICENSE.txt−21 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/diag.go−51 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/doc.go−7 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/doc.go−7 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/errorinfo.go−46 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/exported/exported.go−129 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/doc.go−7 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/log.go−104 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/poller/util.go−155 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/temporal/resource.go−123 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/doc.go−7 vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/uuid.go−76 vendor/github.com/JohannesKaufmann/html-to-markdown/.gitignore−14 vendor/github.com/JohannesKaufmann/html-to-markdown/CONTRIBUTING.md vendor/github.com/JohannesKaufmann/html-to-markdown/LICENSE−21 vendor/github.com/JohannesKaufmann/html-to-markdown/README.md−242 vendor/github.com/JohannesKaufmann/html-to-markdown/SECURITY.md−6 vendor/github.com/JohannesKaufmann/html-to-markdown/commonmark.go−393 vendor/github.com/JohannesKaufmann/html-to-markdown/escape/escape.go−65 vendor/github.com/JohannesKaufmann/html-to-markdown/from.go−464 vendor/github.com/JohannesKaufmann/html-to-markdown/logo_five_years.png vendor/github.com/JohannesKaufmann/html-to-markdown/markdown.go−212 vendor/github.com/JohannesKaufmann/html-to-markdown/utils.go−533 vendor/github.com/KyleBanks/depth/.gitignore−16 vendor/github.com/KyleBanks/depth/.travis.yml−9 vendor/github.com/KyleBanks/depth/LICENSE−21 vendor/github.com/KyleBanks/depth/Makefile−32 vendor/github.com/KyleBanks/depth/README.md−232 vendor/github.com/KyleBanks/depth/depth.go−129 vendor/github.com/KyleBanks/depth/pkg.go−184 vendor/github.com/MakeNowJust/heredoc/LICENSE−21 vendor/github.com/MakeNowJust/heredoc/README.md−52 vendor/github.com/MakeNowJust/heredoc/heredoc.go−105 vendor/github.com/Microsoft/go-winio/.gitattributes−1 vendor/github.com/Microsoft/go-winio/.gitignore−10 vendor/github.com/Microsoft/go-winio/.golangci.yml−147 vendor/github.com/Microsoft/go-winio/CODEOWNERS−1 vendor/github.com/Microsoft/go-winio/LICENSE−22 vendor/github.com/Microsoft/go-winio/README.md−89 vendor/github.com/Microsoft/go-winio/SECURITY.md−41 vendor/github.com/Microsoft/go-winio/backup.go−287 vendor/github.com/Microsoft/go-winio/doc.go−22 vendor/github.com/Microsoft/go-winio/ea.go−137 vendor/github.com/Microsoft/go-winio/file.go−320 vendor/github.com/Microsoft/go-winio/fileinfo.go−106 vendor/github.com/Microsoft/go-winio/hvsock.go−582 vendor/github.com/Microsoft/go-winio/internal/fs/doc.go−2 vendor/github.com/Microsoft/go-winio/internal/fs/fs.go−262 vendor/github.com/Microsoft/go-winio/internal/fs/security.go−12 vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go−61 vendor/github.com/Microsoft/go-winio/internal/socket/rawaddr.go−20 vendor/github.com/Microsoft/go-winio/internal/socket/socket.go−177 vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go−69 vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go−132 vendor/github.com/Microsoft/go-winio/pipe.go−586 vendor/github.com/Microsoft/go-winio/pkg/guid/guid.go−232 vendor/github.com/Microsoft/go-winio/pkg/guid/guid_nonwindows.go−16 vendor/github.com/Microsoft/go-winio/pkg/guid/guid_windows.go−13 vendor/github.com/Microsoft/go-winio/pkg/guid/variant_string.go−27 vendor/github.com/Microsoft/go-winio/privilege.go−196 vendor/github.com/Microsoft/go-winio/reparse.go−131 vendor/github.com/Microsoft/go-winio/sd.go−133 vendor/github.com/Microsoft/go-winio/syscall.go−5 vendor/github.com/Microsoft/go-winio/zsyscall_windows.go−378 vendor/github.com/PuerkitoBio/goquery/.gitattributes−1 vendor/github.com/PuerkitoBio/goquery/.gitignore−16 vendor/github.com/PuerkitoBio/goquery/LICENSE−12 vendor/github.com/PuerkitoBio/goquery/README.md−218 vendor/github.com/PuerkitoBio/goquery/array.go−124 vendor/github.com/PuerkitoBio/goquery/doc.go−123 vendor/github.com/PuerkitoBio/goquery/expand.go−70 vendor/github.com/PuerkitoBio/goquery/filter.go−163 vendor/github.com/PuerkitoBio/goquery/iteration.go−61 vendor/github.com/PuerkitoBio/goquery/manipulation.go−679 vendor/github.com/PuerkitoBio/goquery/property.go−275 vendor/github.com/PuerkitoBio/goquery/query.go−49 vendor/github.com/PuerkitoBio/goquery/traversal.go−704 vendor/github.com/PuerkitoBio/goquery/type.go−203 vendor/github.com/PuerkitoBio/goquery/utilities.go−177 vendor/github.com/alecthomas/chroma/v2/.editorconfig−17 vendor/github.com/alecthomas/chroma/v2/.gitignore−28 vendor/github.com/alecthomas/chroma/v2/.golangci.yml−122 vendor/github.com/alecthomas/chroma/v2/.goreleaser.yml−34 vendor/github.com/alecthomas/chroma/v2/AGENTS.md−11 vendor/github.com/alecthomas/chroma/v2/BUILD.bit−93 vendor/github.com/alecthomas/chroma/v2/COPYING−118 vendor/github.com/alecthomas/chroma/v2/Dockerfile−64 vendor/github.com/alecthomas/chroma/v2/Justfile−59 vendor/github.com/alecthomas/chroma/v2/README.md−309 vendor/github.com/alecthomas/chroma/v2/biome.json−6 vendor/github.com/alecthomas/chroma/v2/chroma.jpg vendor/github.com/alecthomas/chroma/v2/coalesce.go−35 vendor/github.com/alecthomas/chroma/v2/colour.go−192 vendor/github.com/alecthomas/chroma/v2/delegate.go−161 vendor/github.com/alecthomas/chroma/v2/doc.go−7 vendor/github.com/alecthomas/chroma/v2/emitters.go−233 vendor/github.com/alecthomas/chroma/v2/formatter.go−43 vendor/github.com/alecthomas/chroma/v2/formatters/api.go−57 vendor/github.com/alecthomas/chroma/v2/formatters/html/html.go−692 vendor/github.com/alecthomas/chroma/v2/formatters/json.go−39 vendor/github.com/alecthomas/chroma/v2/formatters/svg/font_liberation_mono.go−51 vendor/github.com/alecthomas/chroma/v2/formatters/svg/svg.go−222 vendor/github.com/alecthomas/chroma/v2/formatters/tokens.go−18 vendor/github.com/alecthomas/chroma/v2/formatters/tty_indexed.go−284 vendor/github.com/alecthomas/chroma/v2/formatters/tty_truecolour.go−76 vendor/github.com/alecthomas/chroma/v2/iterator.go−93 vendor/github.com/alecthomas/chroma/v2/lexer.go−179 vendor/github.com/alecthomas/chroma/v2/lexers/README.md−46 vendor/github.com/alecthomas/chroma/v2/lexers/caddyfile.go−275 vendor/github.com/alecthomas/chroma/v2/lexers/cl.go−243 vendor/github.com/alecthomas/chroma/v2/lexers/dns.go−17 vendor/github.com/alecthomas/chroma/v2/lexers/emacs.go−533 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/abap.xml−154 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/abnf.xml−66 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/actionscript.xml−68 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/actionscript_3.xml−163 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ada.xml−321 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/agda.xml−66 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/al.xml−75 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/alloy.xml−58 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ampl.xml−98 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/angular2.xml−109 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/antlr.xml−317 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/apacheconf.xml−74 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/apl.xml−59 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/applescript.xml−151 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arangodb_aql.xml−174 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arduino.xml−322 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/armasm.xml−126 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arturo.xml−119 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/atl.xml−165 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/autohotkey.xml−78 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/autoit.xml−70 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/awk.xml−95 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ballerina.xml−97 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bash.xml−222 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bash_session.xml−25 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/batchfile.xml−660 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/beef.xml−120 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bibtex.xml−152 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bicep.xml−84 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/blitzbasic.xml−141 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bnf.xml−28 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bqn.xml−83 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/brainfuck.xml−51 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c#.xml−121 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c++.xml−331 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c.xml−260 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c3.xml−374 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cap_n_proto.xml−122 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cassandra_cql.xml−137 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ceylon.xml−151 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cfengine3.xml−197 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cfstatement.xml−92 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/chaiscript.xml−134 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/chapel.xml−143 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cheetah.xml−55 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/clojure.xml−71 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cmake.xml−90 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cobol.xml−90 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/coffeescript.xml−210 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/common_lisp.xml−184 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/coq.xml−136 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/core.xml−79 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/crystal.xml−762 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/css.xml−323 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/csv.xml−53 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cue.xml−85 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cython.xml−372 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/d.xml−133 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dart.xml−213 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dax.xml−39 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/desktop_entry.xml−17 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/devicetree.xml−251 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/diff.xml−52 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/django_jinja.xml−153 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dns.xml−44 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/docker.xml−68 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dtd.xml−168 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dylan.xml−176 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ebnf.xml−90 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/elixir.xml−744 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/elm.xml−119 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/emacslisp.xml−132 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/erb.xml−37 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/erlang.xml−166 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/factor.xml−412 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fennel.xml−68 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fish.xml−159 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/forth.xml−78 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fortran.xml−102 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fortranfixed.xml−71 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fsharp.xml−245 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gas.xml−150 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gdscript.xml−259 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gdscript3.xml−270 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gemfile_lock.xml−81 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gettext.xml−24 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gherkin.xml−263 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gleam.xml−100 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/glsl.xml−65 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gnuplot.xml−289 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/go_template.xml−114 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/graphql.xml−92 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/groff.xml−90 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/groovy.xml−135 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/handlebars.xml−147 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hare.xml−98 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/haskell.xml−275 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hcl.xml−143 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hexdump.xml−189 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hlb.xml−131 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hlsl.xml−110 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/holyc.xml−252 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/html.xml−159 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hy.xml−104 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/idris.xml−216 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/igor.xml−47 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ini.xml−52 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/io.xml−71 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/iscdhcpd.xml−96 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/j.xml−157 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/janet.xml−48 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/java.xml−206 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/javascript.xml−160 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/json.xml−117 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jsonata.xml−83 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jsonnet.xml−138 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/julia.xml−400 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jungle.xml−98 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/kakoune.xml−96 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/kdl.xml−75 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/kotlin.xml−234 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lateralus.xml−184 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lean.xml−56 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lighttpd_configuration_file.xml−42 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lilypond.xml−133 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/llvm.xml−73 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lox.xml−78 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lua.xml−158 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/luau.xml−173 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/makefile.xml−131 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mako.xml−120 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mason.xml−89 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/materialize_sql_dialect.xml−155 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mathematica.xml−60 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/matlab.xml−114 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mcfunction.xml−138 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/meson.xml−86 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/metal.xml−270 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/microcad.xml−139 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/minizinc.xml−82 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mlir.xml−73 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/modelica.xml−106 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/modula-2.xml−245 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mojo.xml−228 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/monkeyc.xml−153 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/moonbit.xml−75 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/moonscript.xml−83 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/morrowindscript.xml−90 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/myghty.xml−77 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mysql.xml−121 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nasm.xml−126 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/natural.xml−143 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ndisasm.xml−123 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/newspeak.xml−121 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nginx_configuration_file.xml−101 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nim.xml−211 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nix.xml−258 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nsis.xml−59 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nu.xml−126 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/objective-c.xml−510 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/objectpascal.xml−142 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ocaml.xml−153 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/octave.xml−101 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/odin.xml−127 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/onesenterprise.xml−92 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/openedge_abl.xml−101 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/openscad.xml−96 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/org_mode.xml−329 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pacmanconf.xml−37 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/perl.xml−400 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/php.xml−258 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pig.xml−105 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pkgconfig.xml−73 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pl_pgsql.xml−119 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/plaintext.xml−21 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/plutus_core.xml−105 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pony.xml−135 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/postgresql_sql_dialect.xml−155 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/postscript.xml−93 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/povray.xml−58 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/powerquery.xml−51 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/powershell.xml−230 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/prolog.xml−115 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/promela.xml−119 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/promql.xml−123 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/properties.xml−45 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/protocol_buffer.xml−124 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/prql.xml−161 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/psl.xml−213 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/puppet.xml−100 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/python.xml−595 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/python_2.xml−356 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/qbasic.xml−173 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/qml.xml−113 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/r.xml−128 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/racket.xml−260 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ragel.xml−149 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/react.xml−236 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/reasonml.xml−147 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/reg.xml−68 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rego.xml−94 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rexx.xml−127 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rgbasm.xml−239 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ring.xml−74 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rpgle.xml−176 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rpm_spec.xml−58 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ruby.xml−728 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rust.xml−375 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sas.xml−191 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sass.xml−362 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scala.xml−274 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scdoc.xml−115 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scheme.xml−106 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scilab.xml−98 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scss.xml−373 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sed.xml−92 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sieve.xml−61 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/smali.xml−73 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/smalltalk.xml−294 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/smarty.xml−79 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/snbt.xml−58 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/snobol.xml−95 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/solidity.xml−291 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sourcepawn.xml−59 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/spade.xml−292 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sparql.xml−160 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sql.xml−90 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/squidconf.xml−63 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/standard_ml.xml−548 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/stas.xml−85 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/stylus.xml−132 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/swift.xml−207 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/systemd.xml−63 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/systemverilog.xml−181 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tablegen.xml−69 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tal.xml−43 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tasm.xml−135 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tcl.xml−272 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tcsh.xml−121 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/templ.xml−315 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/termcap.xml−75 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/terminfo.xml−84 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/terraform.xml−149 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tex.xml−113 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/thrift.xml−154 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/toml.xml−45 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tradingview.xml−81 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/transact-sql.xml−137 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/turing.xml−82 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/turtle.xml−170 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/twig.xml−155 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/txtpb.xml−162 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typescript.xml−302 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typoscript.xml−178 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typoscriptcssdata.xml−52 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typoscripthtmldata.xml−52 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typst.xml−108 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ucode.xml−147 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/v.xml−355 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/v_shell.xml−365 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vala.xml−72 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vb_net.xml−162 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/verilog.xml−158 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vhdl.xml−171 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vhs.xml−48 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/viml.xml−85 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vue.xml−295 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/wat.xml−149 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/wdte.xml−43 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/webgpu_shading_language.xml−142 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/webvtt.xml−283 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/whiley.xml−57 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/xml.xml−96 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/xorg.xml−35 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/yaml.xml−132 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/yang.xml−99 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/z80_assembly.xml−74 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/zed.xml−51 vendor/github.com/alecthomas/chroma/v2/lexers/embedded/zig.xml−187 vendor/github.com/alecthomas/chroma/v2/lexers/erb.go−29 vendor/github.com/alecthomas/chroma/v2/lexers/gemtext.go−37 vendor/github.com/alecthomas/chroma/v2/lexers/genshi.go−118 vendor/github.com/alecthomas/chroma/v2/lexers/go.go−81 vendor/github.com/alecthomas/chroma/v2/lexers/haxe.go−647 vendor/github.com/alecthomas/chroma/v2/lexers/html.go−8 vendor/github.com/alecthomas/chroma/v2/lexers/http.go−131 vendor/github.com/alecthomas/chroma/v2/lexers/lexers.go−85 vendor/github.com/alecthomas/chroma/v2/lexers/markdown.go−107 vendor/github.com/alecthomas/chroma/v2/lexers/markless.go−168 vendor/github.com/alecthomas/chroma/v2/lexers/mysql.go−33 vendor/github.com/alecthomas/chroma/v2/lexers/php.go−37 vendor/github.com/alecthomas/chroma/v2/lexers/raku.go−1710 vendor/github.com/alecthomas/chroma/v2/lexers/rst.go−89 vendor/github.com/alecthomas/chroma/v2/lexers/svelte.go−70 vendor/github.com/alecthomas/chroma/v2/lexers/typoscript.go−85 vendor/github.com/alecthomas/chroma/v2/lexers/yaml_jinja.go−20 vendor/github.com/alecthomas/chroma/v2/lexers/zed.go−24 vendor/github.com/alecthomas/chroma/v2/mutators.go−201 vendor/github.com/alecthomas/chroma/v2/pygments-lexers.txt−605 vendor/github.com/alecthomas/chroma/v2/quick/quick.go−44 vendor/github.com/alecthomas/chroma/v2/regexp.go−533 vendor/github.com/alecthomas/chroma/v2/registry.go−228 vendor/github.com/alecthomas/chroma/v2/remap.go−94 vendor/github.com/alecthomas/chroma/v2/renovate.json5−25 vendor/github.com/alecthomas/chroma/v2/serialise.go−483 vendor/github.com/alecthomas/chroma/v2/style.go−530 vendor/github.com/alecthomas/chroma/v2/styles/abap.xml−11 vendor/github.com/alecthomas/chroma/v2/styles/algol.xml−18 vendor/github.com/alecthomas/chroma/v2/styles/algol_nu.xml−18 vendor/github.com/alecthomas/chroma/v2/styles/api.go−95 vendor/github.com/alecthomas/chroma/v2/styles/arduino.xml−18 vendor/github.com/alecthomas/chroma/v2/styles/ashen.xml−69 vendor/github.com/alecthomas/chroma/v2/styles/aura-theme-dark-soft.xml−107 vendor/github.com/alecthomas/chroma/v2/styles/aura-theme-dark.xml−107 vendor/github.com/alecthomas/chroma/v2/styles/autumn.xml−36 vendor/github.com/alecthomas/chroma/v2/styles/average.xml−74 vendor/github.com/alecthomas/chroma/v2/styles/base16-snazzy.xml−74 vendor/github.com/alecthomas/chroma/v2/styles/borland.xml−26 vendor/github.com/alecthomas/chroma/v2/styles/bw.xml−23 vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-frappe.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-latte.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-macchiato.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-mocha.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/colorful.xml−52 vendor/github.com/alecthomas/chroma/v2/styles/compat.go−69 vendor/github.com/alecthomas/chroma/v2/styles/darcula.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/doom-one.xml−51 vendor/github.com/alecthomas/chroma/v2/styles/doom-one2.xml−64 vendor/github.com/alecthomas/chroma/v2/styles/dracula.xml−74 vendor/github.com/alecthomas/chroma/v2/styles/emacs.xml−44 vendor/github.com/alecthomas/chroma/v2/styles/evergarden.xml−33 vendor/github.com/alecthomas/chroma/v2/styles/friendly.xml−44 vendor/github.com/alecthomas/chroma/v2/styles/fruity.xml−19 vendor/github.com/alecthomas/chroma/v2/styles/github-dark.xml−46 vendor/github.com/alecthomas/chroma/v2/styles/github.xml−39 vendor/github.com/alecthomas/chroma/v2/styles/gruvbox-light.xml−34 vendor/github.com/alecthomas/chroma/v2/styles/gruvbox.xml−34 vendor/github.com/alecthomas/chroma/v2/styles/hr_high_contrast.xml−12 vendor/github.com/alecthomas/chroma/v2/styles/hrdark.xml−10 vendor/github.com/alecthomas/chroma/v2/styles/igor.xml−9 vendor/github.com/alecthomas/chroma/v2/styles/kanagawa-dragon.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/kanagawa-lotus.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/kanagawa-wave.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/lovelace.xml−53 vendor/github.com/alecthomas/chroma/v2/styles/manni.xml−44 vendor/github.com/alecthomas/chroma/v2/styles/modus-operandi.xml−13 vendor/github.com/alecthomas/chroma/v2/styles/modus-vivendi.xml−13 vendor/github.com/alecthomas/chroma/v2/styles/monokai.xml−29 vendor/github.com/alecthomas/chroma/v2/styles/monokailight.xml−26 vendor/github.com/alecthomas/chroma/v2/styles/murphy.xml−52 vendor/github.com/alecthomas/chroma/v2/styles/native.xml−35 vendor/github.com/alecthomas/chroma/v2/styles/nord.xml−46 vendor/github.com/alecthomas/chroma/v2/styles/nordic.xml−46 vendor/github.com/alecthomas/chroma/v2/styles/onedark.xml−25 vendor/github.com/alecthomas/chroma/v2/styles/onesenterprise.xml−10 vendor/github.com/alecthomas/chroma/v2/styles/paraiso-dark.xml−37 vendor/github.com/alecthomas/chroma/v2/styles/paraiso-light.xml−37 vendor/github.com/alecthomas/chroma/v2/styles/pastie.xml−45 vendor/github.com/alecthomas/chroma/v2/styles/perldoc.xml−37 vendor/github.com/alecthomas/chroma/v2/styles/pygments.xml−42 vendor/github.com/alecthomas/chroma/v2/styles/rainbow_dash.xml−40 vendor/github.com/alecthomas/chroma/v2/styles/rose-pine-dawn.xml−29 vendor/github.com/alecthomas/chroma/v2/styles/rose-pine-moon.xml−29 vendor/github.com/alecthomas/chroma/v2/styles/rose-pine.xml−29 vendor/github.com/alecthomas/chroma/v2/styles/rpgle.xml−30 vendor/github.com/alecthomas/chroma/v2/styles/rrt.xml−19 vendor/github.com/alecthomas/chroma/v2/styles/solarized-dark.xml−39 vendor/github.com/alecthomas/chroma/v2/styles/solarized-dark256.xml−41 vendor/github.com/alecthomas/chroma/v2/styles/solarized-light.xml−17 vendor/github.com/alecthomas/chroma/v2/styles/swapoff.xml−18 vendor/github.com/alecthomas/chroma/v2/styles/tango.xml−72 vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-day.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-moon.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-night.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-storm.xml−83 vendor/github.com/alecthomas/chroma/v2/styles/trac.xml−35 vendor/github.com/alecthomas/chroma/v2/styles/vim.xml−29 vendor/github.com/alecthomas/chroma/v2/styles/vs.xml−16 vendor/github.com/alecthomas/chroma/v2/styles/vulcan.xml−74 vendor/github.com/alecthomas/chroma/v2/styles/witchhazel.xml−31 vendor/github.com/alecthomas/chroma/v2/styles/xcode-dark.xml−31 vendor/github.com/alecthomas/chroma/v2/styles/xcode.xml−22 vendor/github.com/alecthomas/chroma/v2/table.py−31 vendor/github.com/alecthomas/chroma/v2/test.jsonl−2 vendor/github.com/alecthomas/chroma/v2/tokentype_enumer.go−588 vendor/github.com/alecthomas/chroma/v2/types.go−357 vendor/github.com/andybalholm/brotli/.gitignore−2 vendor/github.com/andybalholm/brotli/LICENSE−19 vendor/github.com/andybalholm/brotli/README.md−19 vendor/github.com/andybalholm/brotli/backward_references.go−185 vendor/github.com/andybalholm/brotli/backward_references_hq.go−796 vendor/github.com/andybalholm/brotli/bit_cost.go−436 vendor/github.com/andybalholm/brotli/bit_reader.go−266 vendor/github.com/andybalholm/brotli/bitwriter.go−56 vendor/github.com/andybalholm/brotli/block_splitter.go−144 vendor/github.com/andybalholm/brotli/block_splitter_command.go−434 vendor/github.com/andybalholm/brotli/block_splitter_distance.go−433 vendor/github.com/andybalholm/brotli/block_splitter_literal.go−433 vendor/github.com/andybalholm/brotli/brotli_bit_stream.go−1435 vendor/github.com/andybalholm/brotli/cluster.go−30 vendor/github.com/andybalholm/brotli/cluster_command.go−164 vendor/github.com/andybalholm/brotli/cluster_distance.go−326 vendor/github.com/andybalholm/brotli/cluster_literal.go−326 vendor/github.com/andybalholm/brotli/command.go−254 vendor/github.com/andybalholm/brotli/compress_fragment.go−834 vendor/github.com/andybalholm/brotli/compress_fragment_two_pass.go−775 vendor/github.com/andybalholm/brotli/constants.go−77 vendor/github.com/andybalholm/brotli/context.go−2176 vendor/github.com/andybalholm/brotli/decode.go−2581 vendor/github.com/andybalholm/brotli/dictionary.go−122890 vendor/github.com/andybalholm/brotli/dictionary_hash.go−32779 vendor/github.com/andybalholm/brotli/encode.go−1220 vendor/github.com/andybalholm/brotli/encoder.go−177 vendor/github.com/andybalholm/brotli/encoder_dict.go−22 vendor/github.com/andybalholm/brotli/encoder_fast.go−197 vendor/github.com/andybalholm/brotli/entropy_encode.go−592 vendor/github.com/andybalholm/brotli/entropy_encode_static.go−4399 vendor/github.com/andybalholm/brotli/fast_log.go−290 vendor/github.com/andybalholm/brotli/find_match_length.go−45 vendor/github.com/andybalholm/brotli/flate/LICENSE−27 vendor/github.com/andybalholm/brotli/flate/README.md−2 vendor/github.com/andybalholm/brotli/flate/gzip.go−65 vendor/github.com/andybalholm/brotli/flate/huffman_bit_writer.go−517 vendor/github.com/andybalholm/brotli/flate/huffman_code.go−346 vendor/github.com/andybalholm/brotli/flate/token.go−80 vendor/github.com/andybalholm/brotli/flate/writer.go−66 vendor/github.com/andybalholm/brotli/h10.go−287 vendor/github.com/andybalholm/brotli/h5.go−214 vendor/github.com/andybalholm/brotli/h6.go−216 vendor/github.com/andybalholm/brotli/hash.go−342 vendor/github.com/andybalholm/brotli/hash_composite.go−93 vendor/github.com/andybalholm/brotli/hash_forgetful_chain.go−252 vendor/github.com/andybalholm/brotli/hash_longest_match_quickly.go−214 vendor/github.com/andybalholm/brotli/hash_rolling.go−168 vendor/github.com/andybalholm/brotli/histogram.go−226 vendor/github.com/andybalholm/brotli/http.go−189 vendor/github.com/andybalholm/brotli/huffman.go−653 vendor/github.com/andybalholm/brotli/literal_cost.go−182 vendor/github.com/andybalholm/brotli/matchfinder/bargain1.go−212 vendor/github.com/andybalholm/brotli/matchfinder/bargain2.go−248 vendor/github.com/andybalholm/brotli/matchfinder/bargain3.go−278 vendor/github.com/andybalholm/brotli/matchfinder/emitter.go−34 vendor/github.com/andybalholm/brotli/matchfinder/m0.go−175 vendor/github.com/andybalholm/brotli/matchfinder/m4.go−339 vendor/github.com/andybalholm/brotli/matchfinder/matchfinder.go−103 vendor/github.com/andybalholm/brotli/matchfinder/pathfinder.go−328 vendor/github.com/andybalholm/brotli/matchfinder/textencoder.go−53 vendor/github.com/andybalholm/brotli/matchfinder/trio.go−326 vendor/github.com/andybalholm/brotli/matchfinder/zdfast.go−258 vendor/github.com/andybalholm/brotli/matchfinder/zfast.go−206 vendor/github.com/andybalholm/brotli/matchfinder/zm.go−301 vendor/github.com/andybalholm/brotli/memory.go−66 vendor/github.com/andybalholm/brotli/metablock.go−574 vendor/github.com/andybalholm/brotli/metablock_command.go−165 vendor/github.com/andybalholm/brotli/metablock_distance.go−165 vendor/github.com/andybalholm/brotli/metablock_literal.go−165 vendor/github.com/andybalholm/brotli/params.go−37 vendor/github.com/andybalholm/brotli/platform.go−103 vendor/github.com/andybalholm/brotli/prefix.go−30 vendor/github.com/andybalholm/brotli/prefix_dec.go−723 vendor/github.com/andybalholm/brotli/quality.go−196 vendor/github.com/andybalholm/brotli/reader.go−111 vendor/github.com/andybalholm/brotli/ringbuffer.go−134 vendor/github.com/andybalholm/brotli/state.go−294 vendor/github.com/andybalholm/brotli/static_dict.go−662 vendor/github.com/andybalholm/brotli/static_dict_lut.go−75094 vendor/github.com/andybalholm/brotli/symbol_list.go−22 vendor/github.com/andybalholm/brotli/transform.go−641 vendor/github.com/andybalholm/brotli/utf8_util.go−70 vendor/github.com/andybalholm/brotli/util.go−7 vendor/github.com/andybalholm/brotli/write_bits.go−52 vendor/github.com/andybalholm/brotli/writer.go−162 vendor/github.com/andybalholm/cascadia/.travis.yml−14 vendor/github.com/andybalholm/cascadia/LICENSE−24 vendor/github.com/andybalholm/cascadia/README.md−144 vendor/github.com/andybalholm/cascadia/parser.go−889 vendor/github.com/andybalholm/cascadia/pseudo_classes.go−458 vendor/github.com/andybalholm/cascadia/selector.go−586 vendor/github.com/andybalholm/cascadia/serialize.go−176 vendor/github.com/andybalholm/cascadia/specificity.go−26 vendor/github.com/atotto/clipboard/.travis.yml−22 vendor/github.com/atotto/clipboard/LICENSE−27 vendor/github.com/atotto/clipboard/README.md−48 vendor/github.com/atotto/clipboard/clipboard.go−20 vendor/github.com/atotto/clipboard/clipboard_darwin.go−52 vendor/github.com/atotto/clipboard/clipboard_plan9.go−42 vendor/github.com/atotto/clipboard/clipboard_unix.go−149 vendor/github.com/atotto/clipboard/clipboard_windows.go−157 vendor/github.com/aws/aws-sdk-go-v2/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/NOTICE.txt−3 vendor/github.com/aws/aws-sdk-go-v2/aws/accountid_endpoint_mode.go−18 vendor/github.com/aws/aws-sdk-go-v2/aws/checksum.go−33 vendor/github.com/aws/aws-sdk-go-v2/aws/config.go−254 vendor/github.com/aws/aws-sdk-go-v2/aws/context.go−22 vendor/github.com/aws/aws-sdk-go-v2/aws/credential_cache.go−235 vendor/github.com/aws/aws-sdk-go-v2/aws/credentials.go−234 vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/auto.go−38 vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/configuration.go−43 vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/defaults.go−50 vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/doc.go−2 vendor/github.com/aws/aws-sdk-go-v2/aws/defaultsmode.go−95 vendor/github.com/aws/aws-sdk-go-v2/aws/doc.go−62 vendor/github.com/aws/aws-sdk-go-v2/aws/endpoints.go−247 vendor/github.com/aws/aws-sdk-go-v2/aws/errors.go−9 vendor/github.com/aws/aws-sdk-go-v2/aws/from_ptr.go−365 vendor/github.com/aws/aws-sdk-go-v2/aws/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/aws/logging.go−119 vendor/github.com/aws/aws-sdk-go-v2/aws/logging_generate.go−95 vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/metadata.go−213 vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/middleware.go−168 vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/osname.go−24 vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/osname_go115.go−24 vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/recursion_detection.go−94 vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id.go−27 vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id_retriever.go−57 vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/user_agent.go−398 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/CHANGELOG.md−203 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/debug.go−144 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/decode.go−218 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/encode.go−167 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/error.go−23 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/headers.go−24 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/middleware.go−71 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/transport.go−13 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/transport_go117.go−12 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/header.go−175 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/header_value.go−521 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/message.go−99 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/array.go−61 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/encoder.go−80 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/map.go−78 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/middleware.go−62 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/object.go−68 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/value.go−117 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/restjson/decoder_util.go−85 vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/xml/error_utils.go−48 vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/none.go−20 vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/token_bucket.go−96 vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/token_rate_limit.go−83 vendor/github.com/aws/aws-sdk-go-v2/aws/request.go−25 vendor/github.com/aws/aws-sdk-go-v2/aws/restrict_file_permissions.go−21 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive.go−156 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive_ratelimit.go−158 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive_token_bucket.go−83 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/attempt_metrics.go−51 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/doc.go−80 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/errors.go−20 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/jitter_backoff.go−124 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/metadata.go−52 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/middleware.go−487 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/retry.go−103 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/retryable_error.go−228 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/standard.go−343 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/throttle_error.go−60 vendor/github.com/aws/aws-sdk-go-v2/aws/retry/timeout_error.go−52 vendor/github.com/aws/aws-sdk-go-v2/aws/retryer.go−127 vendor/github.com/aws/aws-sdk-go-v2/aws/runtime.go−14 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/cache.go−115 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/const.go−40 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/header_rules.go−82 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/headers.go−70 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/hmac.go−13 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/host.go−75 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/scope.go−13 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/time.go−36 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/util.go−80 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/middleware.go−420 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/presign_middleware.go−127 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/stream.go−86 vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/v4.go−564 vendor/github.com/aws/aws-sdk-go-v2/aws/to_ptr.go−297 vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/client.go−355 vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/content_type.go−42 vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/response_error.go−33 vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/response_error_middleware.go−56 vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/timeout_read_closer.go−109 vendor/github.com/aws/aws-sdk-go-v2/aws/types.go−42 vendor/github.com/aws/aws-sdk-go-v2/aws/version.go−8 vendor/github.com/aws/aws-sdk-go-v2/config/CHANGELOG.md−1097 vendor/github.com/aws/aws-sdk-go-v2/config/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/config/auth_scheme_preference.go−19 vendor/github.com/aws/aws-sdk-go-v2/config/config.go−237 vendor/github.com/aws/aws-sdk-go-v2/config/defaultsmode.go−47 vendor/github.com/aws/aws-sdk-go-v2/config/doc.go−20 vendor/github.com/aws/aws-sdk-go-v2/config/env_config.go−966 vendor/github.com/aws/aws-sdk-go-v2/config/generate.go−4 vendor/github.com/aws/aws-sdk-go-v2/config/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/errors.go−22 vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/ini.go−56 vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/parse.go−109 vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/sections.go−157 vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/strings.go−89 vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/token.go−32 vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/tokenize.go−92 vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/value.go−93 vendor/github.com/aws/aws-sdk-go-v2/config/load_options.go−1371 vendor/github.com/aws/aws-sdk-go-v2/config/local.go−51 vendor/github.com/aws/aws-sdk-go-v2/config/provider.go−802 vendor/github.com/aws/aws-sdk-go-v2/config/resolve.go−458 vendor/github.com/aws/aws-sdk-go-v2/config/resolve_bearer_token.go−122 vendor/github.com/aws/aws-sdk-go-v2/config/resolve_credentials.go−650 vendor/github.com/aws/aws-sdk-go-v2/config/shared_config.go−1704 vendor/github.com/aws/aws-sdk-go-v2/credentials/CHANGELOG.md−990 vendor/github.com/aws/aws-sdk-go-v2/credentials/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/credentials/doc.go−4 vendor/github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds/doc.go−58 vendor/github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds/provider.go−241 vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/auth.go−48 vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/client.go−165 vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/endpoints.go−20 vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/middleware.go−164 vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/provider.go−207 vendor/github.com/aws/aws-sdk-go-v2/credentials/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/dpop.go−150 vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/file.go−14 vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/provider.go−184 vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/token.go−110 vendor/github.com/aws/aws-sdk-go-v2/credentials/processcreds/doc.go−92 vendor/github.com/aws/aws-sdk-go-v2/credentials/processcreds/provider.go−296 vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/doc.go−81 vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_cached_token.go−232 vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_credentials_provider.go−165 vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_token_provider.go−147 vendor/github.com/aws/aws-sdk-go-v2/credentials/static_provider.go−63 vendor/github.com/aws/aws-sdk-go-v2/credentials/stscreds/assume_role_provider.go−338 vendor/github.com/aws/aws-sdk-go-v2/credentials/stscreds/web_identity_provider.go−181 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/CHANGELOG.md−584 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_client.go−358 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetDynamicData.go−77 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetIAMInfo.go−103 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetInstanceIdentityDocument.go−110 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetMetadata.go−77 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetRegion.go−73 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetToken.go−119 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetUserData.go−61 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/auth.go−48 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/doc.go−12 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/endpoints.go−20 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/internal/config/resolvers.go−114 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/request_middleware.go−313 vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/token_provider.go−261 vendor/github.com/aws/aws-sdk-go-v2/internal/auth/auth.go−45 vendor/github.com/aws/aws-sdk-go-v2/internal/auth/scheme.go−191 vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/bearer_token_adapter.go−43 vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/bearer_token_signer_adapter.go−35 vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/credentials_adapter.go−46 vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/smithy.go−2 vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/v4signer_adapter.go−57 vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/v4signer_adapter_eventstream.go−51 vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/CHANGELOG.md−544 vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/config.go−65 vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/endpoints.go−57 vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/internal/context/context.go−65 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/arn.go−94 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/doc.go−3 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/generate.go−7 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/host.go−51 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partition.go−76 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.go−496 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.json−267 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/endpoints.go−201 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/CHANGELOG.md−519 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/endpoints.go−302 vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/internal/rand/rand.go−33 vendor/github.com/aws/aws-sdk-go-v2/internal/sdk/interfaces.go−9 vendor/github.com/aws/aws-sdk-go-v2/internal/sdk/time.go−74 vendor/github.com/aws/aws-sdk-go-v2/internal/sdkio/byte.go−12 vendor/github.com/aws/aws-sdk-go-v2/internal/shareddefaults/shared_config.go−47 vendor/github.com/aws/aws-sdk-go-v2/internal/strings/strings.go−11 vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/LICENSE−28 vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/docs.go−7 vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/singleflight.go−210 vendor/github.com/aws/aws-sdk-go-v2/internal/timeconv/duration.go−13 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/CHANGELOG.md−486 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/credentials.go−141 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/error.go−17 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/crypto/compare.go−30 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/crypto/ecc.go−113 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/const.go−36 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/header_rules.go−82 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/headers.go−68 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/hmac.go−13 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/host.go−75 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/time.go−36 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/util.go−64 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/middleware.go−118 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/presign_middleware.go−117 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/smithy.go−92 vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/v4a.go−520 vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/CHANGELOG.md−220 vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/accept_encoding_gzip.go−176 vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/doc.go−22 vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/CHANGELOG.md−571 vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/context.go−56 vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/doc.go−3 vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/middleware.go−110 vendor/github.com/aws/aws-sdk-go-v2/service/signin/CHANGELOG.md−85 vendor/github.com/aws/aws-sdk-go-v2/service/signin/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_client.go−945 vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_CreateOAuth2Token.go−212 vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_DeleteConsoleAuthorizationConfiguration.go−168 vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_DeleteResourcePermissionStatement.go−196 vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_GetConsoleAuthorizationConfiguration.go−168 vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_GetResourcePolicy.go−155 vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_ListResourcePermissionStatements.go−261 vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_PutConsoleAuthorizationConfiguration.go−168 vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_PutResourcePermissionStatement.go−216 vendor/github.com/aws/aws-sdk-go-v2/service/signin/auth.go−361 vendor/github.com/aws/aws-sdk-go-v2/service/signin/deserializers.go−2474 vendor/github.com/aws/aws-sdk-go-v2/service/signin/doc.go−9 vendor/github.com/aws/aws-sdk-go-v2/service/signin/endpoints.go−854 vendor/github.com/aws/aws-sdk-go-v2/service/signin/generated.json−40 vendor/github.com/aws/aws-sdk-go-v2/service/signin/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/service/signin/internal/endpoints/endpoints.go−333 vendor/github.com/aws/aws-sdk-go-v2/service/signin/options.go−242 vendor/github.com/aws/aws-sdk-go-v2/service/signin/serializers.go−724 vendor/github.com/aws/aws-sdk-go-v2/service/signin/types/enums.go−46 vendor/github.com/aws/aws-sdk-go-v2/service/signin/types/errors.go−247 vendor/github.com/aws/aws-sdk-go-v2/service/signin/types/types.go−162 vendor/github.com/aws/aws-sdk-go-v2/service/signin/validators.go−111 vendor/github.com/aws/aws-sdk-go-v2/service/sso/CHANGELOG.md−792 vendor/github.com/aws/aws-sdk-go-v2/service/sso/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_client.go−929 vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_GetRoleCredentials.go−165 vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_ListAccountRoles.go−263 vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_ListAccounts.go−261 vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_Logout.go−164 vendor/github.com/aws/aws-sdk-go-v2/service/sso/auth.go−379 vendor/github.com/aws/aws-sdk-go-v2/service/sso/deserializers.go−1171 vendor/github.com/aws/aws-sdk-go-v2/service/sso/doc.go−27 vendor/github.com/aws/aws-sdk-go-v2/service/sso/endpoints.go−570 vendor/github.com/aws/aws-sdk-go-v2/service/sso/generated.json−35 vendor/github.com/aws/aws-sdk-go-v2/service/sso/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/service/sso/internal/endpoints/endpoints.go−628 vendor/github.com/aws/aws-sdk-go-v2/service/sso/options.go−238 vendor/github.com/aws/aws-sdk-go-v2/service/sso/serializers.go−309 vendor/github.com/aws/aws-sdk-go-v2/service/sso/types/errors.go−115 vendor/github.com/aws/aws-sdk-go-v2/service/sso/types/types.go−63 vendor/github.com/aws/aws-sdk-go-v2/service/sso/validators.go−175 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/CHANGELOG.md−790 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_client.go−929 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_CreateToken.go−235 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_CreateTokenWithIAM.go−282 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_RegisterClient.go−206 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_StartDeviceAuthorization.go−188 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/auth.go−373 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/deserializers.go−2244 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/doc.go−49 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/endpoints.go−570 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/generated.json−36 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/internal/endpoints/endpoints.go−628 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/options.go−238 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/serializers.go−512 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/types/enums.go−44 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/types/errors.go−430 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/types/types.go−25 vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/validators.go−184 vendor/github.com/aws/aws-sdk-go-v2/service/sts/CHANGELOG.md−832 vendor/github.com/aws/aws-sdk-go-v2/service/sts/LICENSE.txt−202 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_client.go−1115 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRole.go−544 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoleWithSAML.go−455 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoleWithWebIdentity.go−472 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoot.go−229 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_DecodeAuthorizationMessage.go−189 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetAccessKeyInfo.go−180 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetCallerIdentity.go−192 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetDelegatedAccessToken.go−169 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetFederationToken.go−393 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetSessionToken.go−239 vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetWebIdentityToken.go−192 vendor/github.com/aws/aws-sdk-go-v2/service/sts/auth.go−377 vendor/github.com/aws/aws-sdk-go-v2/service/sts/deserializers.go−3456 vendor/github.com/aws/aws-sdk-go-v2/service/sts/doc.go−13 vendor/github.com/aws/aws-sdk-go-v2/service/sts/endpoints.go−683 vendor/github.com/aws/aws-sdk-go-v2/service/sts/generated.json−45 vendor/github.com/aws/aws-sdk-go-v2/service/sts/go_module_metadata.go−6 vendor/github.com/aws/aws-sdk-go-v2/service/sts/internal/endpoints/endpoints.go−585 vendor/github.com/aws/aws-sdk-go-v2/service/sts/options.go−286 vendor/github.com/aws/aws-sdk-go-v2/service/sts/serializers.go−1198 vendor/github.com/aws/aws-sdk-go-v2/service/sts/types/errors.go−363 vendor/github.com/aws/aws-sdk-go-v2/service/sts/types/types.go−144 vendor/github.com/aws/aws-sdk-go-v2/service/sts/validators.go−433 vendor/github.com/aws/smithy-go/.gitignore−29 vendor/github.com/aws/smithy-go/.travis.yml−28 vendor/github.com/aws/smithy-go/AGENTS.md−172 vendor/github.com/aws/smithy-go/CHANGELOG.md−454 vendor/github.com/aws/smithy-go/CODE_OF_CONDUCT.md−4 vendor/github.com/aws/smithy-go/CONTRIBUTING.md−90 vendor/github.com/aws/smithy-go/LICENSE−175 vendor/github.com/aws/smithy-go/Makefile−130 vendor/github.com/aws/smithy-go/NOTICE−1 vendor/github.com/aws/smithy-go/README.md−107 vendor/github.com/aws/smithy-go/auth/auth.go−3 vendor/github.com/aws/smithy-go/auth/bearer/docs.go−3 vendor/github.com/aws/smithy-go/auth/bearer/middleware.go−104 vendor/github.com/aws/smithy-go/auth/bearer/token.go−50 vendor/github.com/aws/smithy-go/auth/bearer/token_cache.go−208 vendor/github.com/aws/smithy-go/auth/identity.go−47 vendor/github.com/aws/smithy-go/auth/option.go−25 vendor/github.com/aws/smithy-go/auth/scheme_id.go−20 vendor/github.com/aws/smithy-go/changelog-template.json−9 vendor/github.com/aws/smithy-go/context/suppress_expired.go−81 vendor/github.com/aws/smithy-go/doc.go−2 vendor/github.com/aws/smithy-go/document.go−10 vendor/github.com/aws/smithy-go/document/doc.go−12 vendor/github.com/aws/smithy-go/document/document.go−239 vendor/github.com/aws/smithy-go/document/errors.go−75 vendor/github.com/aws/smithy-go/encoding/doc.go−4 vendor/github.com/aws/smithy-go/encoding/encoding.go−40 vendor/github.com/aws/smithy-go/encoding/httpbinding/encode.go−123 vendor/github.com/aws/smithy-go/encoding/httpbinding/header.go−122 vendor/github.com/aws/smithy-go/encoding/httpbinding/path_replace.go−108 vendor/github.com/aws/smithy-go/encoding/httpbinding/query.go−107 vendor/github.com/aws/smithy-go/encoding/httpbinding/uri.go−111 vendor/github.com/aws/smithy-go/encoding/json/array.go−35 vendor/github.com/aws/smithy-go/encoding/json/constants.go−15 vendor/github.com/aws/smithy-go/encoding/json/decoder_util.go−139 vendor/github.com/aws/smithy-go/encoding/json/encoder.go−30 vendor/github.com/aws/smithy-go/encoding/json/escape.go−198 vendor/github.com/aws/smithy-go/encoding/json/object.go−40 vendor/github.com/aws/smithy-go/encoding/json/value.go−154 vendor/github.com/aws/smithy-go/encoding/xml/array.go−49 vendor/github.com/aws/smithy-go/encoding/xml/constants.go−10 vendor/github.com/aws/smithy-go/encoding/xml/doc.go−49 vendor/github.com/aws/smithy-go/encoding/xml/element.go−91 vendor/github.com/aws/smithy-go/encoding/xml/encoder.go−51 vendor/github.com/aws/smithy-go/encoding/xml/error_utils.go−51 vendor/github.com/aws/smithy-go/encoding/xml/escape.go−137 vendor/github.com/aws/smithy-go/encoding/xml/map.go−53 vendor/github.com/aws/smithy-go/encoding/xml/value.go−302 vendor/github.com/aws/smithy-go/encoding/xml/xml_decoder.go−154 vendor/github.com/aws/smithy-go/endpoints/endpoint.go−23 vendor/github.com/aws/smithy-go/endpoints/private/bdd/evaluate.go−35 vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/doc.go−4 vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/split.go−16 vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/string_slice.go−18 vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/strings.go−25 vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/uri.go−133 vendor/github.com/aws/smithy-go/errors.go−137 vendor/github.com/aws/smithy-go/eventstream/const.go−24 vendor/github.com/aws/smithy-go/eventstream/debug.go−144 vendor/github.com/aws/smithy-go/eventstream/decode.go−218 vendor/github.com/aws/smithy-go/eventstream/deserializer.go−294 vendor/github.com/aws/smithy-go/eventstream/encode.go−167 vendor/github.com/aws/smithy-go/eventstream/error.go−23 vendor/github.com/aws/smithy-go/eventstream/header.go−175 vendor/github.com/aws/smithy-go/eventstream/header_value.go−521 vendor/github.com/aws/smithy-go/eventstream/message.go−99 vendor/github.com/aws/smithy-go/eventstream/serializer.go−228 vendor/github.com/aws/smithy-go/eventstream/signer.go−82 vendor/github.com/aws/smithy-go/eventstream/types.go−26 vendor/github.com/aws/smithy-go/go_module_metadata.go−6 vendor/github.com/aws/smithy-go/internal/sync/singleflight/LICENSE−28 vendor/github.com/aws/smithy-go/internal/sync/singleflight/docs.go−8 vendor/github.com/aws/smithy-go/internal/sync/singleflight/singleflight.go−210 vendor/github.com/aws/smithy-go/io/byte.go−12 vendor/github.com/aws/smithy-go/io/doc.go−2 vendor/github.com/aws/smithy-go/io/reader.go−16 vendor/github.com/aws/smithy-go/io/ringbuffer.go−94 vendor/github.com/aws/smithy-go/local-mod-replace.sh−39 vendor/github.com/aws/smithy-go/logging/logger.go−82 vendor/github.com/aws/smithy-go/metrics/metrics.go−136 vendor/github.com/aws/smithy-go/metrics/nop.go−98 vendor/github.com/aws/smithy-go/middleware/context.go−41 vendor/github.com/aws/smithy-go/middleware/doc.go−67 vendor/github.com/aws/smithy-go/middleware/eventstream_middleware.go−21 vendor/github.com/aws/smithy-go/middleware/logging.go−46 vendor/github.com/aws/smithy-go/middleware/metadata.go−65 vendor/github.com/aws/smithy-go/middleware/middleware.go−71 vendor/github.com/aws/smithy-go/middleware/ordered_group.go−270 vendor/github.com/aws/smithy-go/middleware/stack.go−209 vendor/github.com/aws/smithy-go/middleware/stack_values.go−100 vendor/github.com/aws/smithy-go/middleware/step_build.go−298 vendor/github.com/aws/smithy-go/middleware/step_deserialize.go−300 vendor/github.com/aws/smithy-go/middleware/step_finalize.go−298 vendor/github.com/aws/smithy-go/middleware/step_initialize.go−299 vendor/github.com/aws/smithy-go/middleware/step_serialize.go−305 vendor/github.com/aws/smithy-go/modman.toml−9 vendor/github.com/aws/smithy-go/private/requestcompression/gzip.go−30 vendor/github.com/aws/smithy-go/private/requestcompression/middleware_capture_request_compression.go−52 vendor/github.com/aws/smithy-go/private/requestcompression/request_compression.go−103 vendor/github.com/aws/smithy-go/properties.go−69 vendor/github.com/aws/smithy-go/ptr/doc.go−5 vendor/github.com/aws/smithy-go/ptr/from_ptr.go−601 vendor/github.com/aws/smithy-go/ptr/gen_scalars.go−83 vendor/github.com/aws/smithy-go/ptr/to_ptr.go−499 vendor/github.com/aws/smithy-go/rand/doc.go−3 vendor/github.com/aws/smithy-go/rand/rand.go−31 vendor/github.com/aws/smithy-go/rand/uuid.go−87 vendor/github.com/aws/smithy-go/schema.go−328 vendor/github.com/aws/smithy-go/schema_ext.go−37 vendor/github.com/aws/smithy-go/serde.go−229 vendor/github.com/aws/smithy-go/sync/error.go−53 vendor/github.com/aws/smithy-go/time/time.go−134 vendor/github.com/aws/smithy-go/tracing/context.go−96 vendor/github.com/aws/smithy-go/tracing/nop.go−32 vendor/github.com/aws/smithy-go/tracing/tracing.go−95 vendor/github.com/aws/smithy-go/trait.go−21 vendor/github.com/aws/smithy-go/traits/http.go−69 vendor/github.com/aws/smithy-go/traits/index.go−107 vendor/github.com/aws/smithy-go/traits/serde.go−56 vendor/github.com/aws/smithy-go/traits/traits.go−72 vendor/github.com/aws/smithy-go/transport/http/auth.go−30 vendor/github.com/aws/smithy-go/transport/http/auth_schemes.go−45 vendor/github.com/aws/smithy-go/transport/http/checksum_middleware.go−70 vendor/github.com/aws/smithy-go/transport/http/client.go−161 vendor/github.com/aws/smithy-go/transport/http/doc.go−5 vendor/github.com/aws/smithy-go/transport/http/eventstream.go−209 vendor/github.com/aws/smithy-go/transport/http/eventstream_middleware.go−69 vendor/github.com/aws/smithy-go/transport/http/headerlist.go−163 vendor/github.com/aws/smithy-go/transport/http/host.go−89 vendor/github.com/aws/smithy-go/transport/http/interceptor.go−321 vendor/github.com/aws/smithy-go/transport/http/interceptor_middleware.go−325 vendor/github.com/aws/smithy-go/transport/http/internal/io/safe.go−75 vendor/github.com/aws/smithy-go/transport/http/md5_checksum.go−25 vendor/github.com/aws/smithy-go/transport/http/metrics.go−204 vendor/github.com/aws/smithy-go/transport/http/middleware_close_response_body.go−79 vendor/github.com/aws/smithy-go/transport/http/middleware_content_length.go−84 vendor/github.com/aws/smithy-go/transport/http/middleware_header_comment.go−81 vendor/github.com/aws/smithy-go/transport/http/middleware_headers.go−167 vendor/github.com/aws/smithy-go/transport/http/middleware_http_logging.go−75 vendor/github.com/aws/smithy-go/transport/http/middleware_metadata.go−51 vendor/github.com/aws/smithy-go/transport/http/middleware_min_proto.go−79 vendor/github.com/aws/smithy-go/transport/http/properties.go−80 vendor/github.com/aws/smithy-go/transport/http/protocol.go−27 vendor/github.com/aws/smithy-go/transport/http/request.go−188 vendor/github.com/aws/smithy-go/transport/http/response.go−34 vendor/github.com/aws/smithy-go/transport/http/time.go−13 vendor/github.com/aws/smithy-go/transport/http/url.go−44 vendor/github.com/aws/smithy-go/transport/http/user_agent.go−37 vendor/github.com/aws/smithy-go/type_registry.go−70 vendor/github.com/aws/smithy-go/validation.go−140 vendor/github.com/aymanbagabas/go-udiff/LICENSE-BSD−27 vendor/github.com/aymanbagabas/go-udiff/LICENSE-MIT−21 vendor/github.com/aymanbagabas/go-udiff/Makefile−4 vendor/github.com/aymanbagabas/go-udiff/README.md−142 vendor/github.com/aymanbagabas/go-udiff/diff.go−177 vendor/github.com/aymanbagabas/go-udiff/export.go−16 vendor/github.com/aymanbagabas/go-udiff/lcs/common.go−179 vendor/github.com/aymanbagabas/go-udiff/lcs/doc.go−156 vendor/github.com/aymanbagabas/go-udiff/lcs/export.go−11 vendor/github.com/aymanbagabas/go-udiff/lcs/git.sh−33 vendor/github.com/aymanbagabas/go-udiff/lcs/labels.go−55 vendor/github.com/aymanbagabas/go-udiff/lcs/old.go−475 vendor/github.com/aymanbagabas/go-udiff/lcs/sequence.go−70 vendor/github.com/aymanbagabas/go-udiff/merge.go−81 vendor/github.com/aymanbagabas/go-udiff/ndiff.go−118 vendor/github.com/aymanbagabas/go-udiff/unified.go−314 vendor/github.com/aymerick/douceur/LICENSE−22 vendor/github.com/aymerick/douceur/css/declaration.go−60 vendor/github.com/aymerick/douceur/css/rule.go−230 vendor/github.com/aymerick/douceur/css/stylesheet.go−25 vendor/github.com/aymerick/douceur/parser/parser.go−409 vendor/github.com/bahlo/generic-list-go/LICENSE−27 vendor/github.com/bahlo/generic-list-go/README.md−5 vendor/github.com/bahlo/generic-list-go/list.go−235 vendor/github.com/bmatcuk/doublestar/v4/.codecov.yml−10 vendor/github.com/bmatcuk/doublestar/v4/.gitignore−32 vendor/github.com/bmatcuk/doublestar/v4/LICENSE−22 vendor/github.com/bmatcuk/doublestar/v4/README.md−495 vendor/github.com/bmatcuk/doublestar/v4/UPGRADING.md−63 vendor/github.com/bmatcuk/doublestar/v4/doublestar.go−13 vendor/github.com/bmatcuk/doublestar/v4/glob.go−497 vendor/github.com/bmatcuk/doublestar/v4/globoptions.go−188 vendor/github.com/bmatcuk/doublestar/v4/globwalk.go−438 vendor/github.com/bmatcuk/doublestar/v4/match.go−419 vendor/github.com/bmatcuk/doublestar/v4/utils.go−165 vendor/github.com/bmatcuk/doublestar/v4/utils_unix.go−19 vendor/github.com/bmatcuk/doublestar/v4/utils_windows.go−43 vendor/github.com/bmatcuk/doublestar/v4/validate.go−80 vendor/github.com/buger/jsonparser/.gitignore−12 vendor/github.com/buger/jsonparser/.travis.yml−12 vendor/github.com/buger/jsonparser/Dockerfile−12 vendor/github.com/buger/jsonparser/LICENSE−21 vendor/github.com/buger/jsonparser/Makefile−36 vendor/github.com/buger/jsonparser/README.md−361 vendor/github.com/buger/jsonparser/bytes.go−47 vendor/github.com/buger/jsonparser/bytes_safe.go−25 vendor/github.com/buger/jsonparser/bytes_unsafe.go−44 vendor/github.com/buger/jsonparser/escape.go−173 vendor/github.com/buger/jsonparser/fuzz.go−117 vendor/github.com/buger/jsonparser/oss-fuzz-build.sh−47 vendor/github.com/buger/jsonparser/parser.go−1318 vendor/github.com/cespare/xxhash/v2/LICENSE.txt−22 vendor/github.com/cespare/xxhash/v2/README.md−74 vendor/github.com/cespare/xxhash/v2/testall.sh−10 vendor/github.com/cespare/xxhash/v2/xxhash.go−243 vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s−209 vendor/github.com/cespare/xxhash/v2/xxhash_arm64.s−183 vendor/github.com/cespare/xxhash/v2/xxhash_asm.go−15 vendor/github.com/cespare/xxhash/v2/xxhash_other.go−76 vendor/github.com/cespare/xxhash/v2/xxhash_safe.go−16 vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go−58 vendor/github.com/charlievieth/fastwalk/.gitignore−2 vendor/github.com/charlievieth/fastwalk/LICENSE−21 vendor/github.com/charlievieth/fastwalk/Makefile−101 vendor/github.com/charlievieth/fastwalk/README.md−193 vendor/github.com/charlievieth/fastwalk/adapters.go−102 vendor/github.com/charlievieth/fastwalk/dirent.go−73 vendor/github.com/charlievieth/fastwalk/dirent_portable.go−134 vendor/github.com/charlievieth/fastwalk/dirent_unix.go−146 vendor/github.com/charlievieth/fastwalk/entry_filter_portable.go−37 vendor/github.com/charlievieth/fastwalk/entry_filter_unix.go−59 vendor/github.com/charlievieth/fastwalk/entry_filter_windows.go−156 vendor/github.com/charlievieth/fastwalk/fastwalk.go−697 vendor/github.com/charlievieth/fastwalk/fastwalk_darwin.go−122 vendor/github.com/charlievieth/fastwalk/fastwalk_portable.go−65 vendor/github.com/charlievieth/fastwalk/fastwalk_unix.go−131 vendor/github.com/charlievieth/fastwalk/go.LICENSE−27 vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent.go−85 vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_aix.go−29 vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_dragonfly.go−54 vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_freebsd.go−46 vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_js.go−27 vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_linux.go−50 vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_netbsd.go−46 vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_openbsd.go−46 vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_solaris.go−29 vendor/github.com/charlievieth/fastwalk/internal/dirent/doc.go−2 vendor/github.com/charlievieth/fastwalk/internal/fmtdirent/fmtdirent_go120.go−31 vendor/github.com/charlievieth/fastwalk/internal/fmtdirent/fmtdirent_go121.go−15 vendor/github.com/charlievieth/fastwalk/zsyscall_darwin.go−93 vendor/github.com/charlievieth/fastwalk/zsyscall_darwin_amd64.1_13.s−22 vendor/github.com/charlievieth/fastwalk/zsyscall_darwin_arm64.1_13.s−22 vendor/github.com/charmbracelet/anthropic-sdk-go/.gitignore−4 vendor/github.com/charmbracelet/anthropic-sdk-go/.release-please-manifest.json−3 vendor/github.com/charmbracelet/anthropic-sdk-go/.stats.yml−4 vendor/github.com/charmbracelet/anthropic-sdk-go/Brewfile−1 vendor/github.com/charmbracelet/anthropic-sdk-go/CHANGELOG.md−641 vendor/github.com/charmbracelet/anthropic-sdk-go/CONTRIBUTING.md−65 vendor/github.com/charmbracelet/anthropic-sdk-go/LICENSE−8 vendor/github.com/charmbracelet/anthropic-sdk-go/README.md−999 vendor/github.com/charmbracelet/anthropic-sdk-go/SECURITY.md−27 vendor/github.com/charmbracelet/anthropic-sdk-go/aliases.go−72 vendor/github.com/charmbracelet/anthropic-sdk-go/api.md−545 vendor/github.com/charmbracelet/anthropic-sdk-go/bedrock/bedrock.go−295 vendor/github.com/charmbracelet/anthropic-sdk-go/beta.go−374 vendor/github.com/charmbracelet/anthropic-sdk-go/betafile.go−273 vendor/github.com/charmbracelet/anthropic-sdk-go/betamessage.go−11734 vendor/github.com/charmbracelet/anthropic-sdk-go/betamessagebatch.go−925 vendor/github.com/charmbracelet/anthropic-sdk-go/betamessageutil.go−459 vendor/github.com/charmbracelet/anthropic-sdk-go/betamodel.go−151 vendor/github.com/charmbracelet/anthropic-sdk-go/betaskill.go−362 vendor/github.com/charmbracelet/anthropic-sdk-go/betaskillversion.go−373 vendor/github.com/charmbracelet/anthropic-sdk-go/betatoolrunner.go−435 vendor/github.com/charmbracelet/anthropic-sdk-go/client.go−157 vendor/github.com/charmbracelet/anthropic-sdk-go/completion.go−196 vendor/github.com/charmbracelet/anthropic-sdk-go/field.go−46 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apierror/apierror.go−58 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/encoder.go−473 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/form.go−5 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/richparam.go−21 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/tag.go−51 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/decoder.go−709 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/encoder.go−392 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/enum.go−145 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/field.go−23 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/port.go−120 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/registry.go−59 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/subfield.go−68 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/tag.go−47 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/union.go−209 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/encoder.go−414 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/query.go−55 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/richparam.go−20 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/tag.go−44 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/decode.go−1325 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/encode.go−1396 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/fold.go−48 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/indent.go−182 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/scanner.go−610 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/sentinel/null.go−47 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/shims/shims.go−113 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/stream.go−512 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/tables.go−218 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/tags.go−38 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/time.go−62 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/paramutil/field.go−30 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/paramutil/union.go−49 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/requestconfig/requestconfig.go−638 vendor/github.com/charmbracelet/anthropic-sdk-go/internal/version.go−5 vendor/github.com/charmbracelet/anthropic-sdk-go/message.go−9436 vendor/github.com/charmbracelet/anthropic-sdk-go/messagebatch.go−827 vendor/github.com/charmbracelet/anthropic-sdk-go/messageutil.go−413 vendor/github.com/charmbracelet/anthropic-sdk-go/model.go−151 vendor/github.com/charmbracelet/anthropic-sdk-go/option/middleware.go−38 vendor/github.com/charmbracelet/anthropic-sdk-go/option/requestoption.go−285 vendor/github.com/charmbracelet/anthropic-sdk-go/packages/jsonl/jsonl.go−62 vendor/github.com/charmbracelet/anthropic-sdk-go/packages/pagination/pagination.go−351 vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/encoder.go−109 vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/null.go−19 vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/option.go−122 vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/param.go−189 vendor/github.com/charmbracelet/anthropic-sdk-go/packages/respjson/respjson.go−88 vendor/github.com/charmbracelet/anthropic-sdk-go/packages/ssestream/ssestream.go−198 vendor/github.com/charmbracelet/anthropic-sdk-go/release-please-config.json−68 vendor/github.com/charmbracelet/anthropic-sdk-go/schemautil.go−244 vendor/github.com/charmbracelet/anthropic-sdk-go/shared/constant/constants.go−487 vendor/github.com/charmbracelet/anthropic-sdk-go/shared/shared.go−346 vendor/github.com/charmbracelet/anthropic-sdk-go/tools.md−292 vendor/github.com/charmbracelet/anthropic-sdk-go/vertex/vertex.go−134 vendor/github.com/charmbracelet/colorprofile/.golangci.yml−47 vendor/github.com/charmbracelet/colorprofile/.goreleaser.yml−6 vendor/github.com/charmbracelet/colorprofile/LICENSE−21 vendor/github.com/charmbracelet/colorprofile/README.md−109 vendor/github.com/charmbracelet/colorprofile/doc.go−4 vendor/github.com/charmbracelet/colorprofile/env.go−294 vendor/github.com/charmbracelet/colorprofile/env_other.go−8 vendor/github.com/charmbracelet/colorprofile/env_windows.go−40 vendor/github.com/charmbracelet/colorprofile/profile.go−108 vendor/github.com/charmbracelet/colorprofile/writer.go−171 vendor/github.com/charmbracelet/openai-go/.gitignore−4 vendor/github.com/charmbracelet/openai-go/.release-please-manifest.json−3 vendor/github.com/charmbracelet/openai-go/.stats.yml−4 vendor/github.com/charmbracelet/openai-go/Brewfile−1 vendor/github.com/charmbracelet/openai-go/CHANGELOG.md−1171 vendor/github.com/charmbracelet/openai-go/CONTRIBUTING.md−65 vendor/github.com/charmbracelet/openai-go/LICENSE−201 vendor/github.com/charmbracelet/openai-go/MIGRATION.md−284 vendor/github.com/charmbracelet/openai-go/README.md−1007 vendor/github.com/charmbracelet/openai-go/SECURITY.md−29 vendor/github.com/charmbracelet/openai-go/aliases.go−585 vendor/github.com/charmbracelet/openai-go/api.md−774 vendor/github.com/charmbracelet/openai-go/audio.go−61 vendor/github.com/charmbracelet/openai-go/audiospeech.go−179 vendor/github.com/charmbracelet/openai-go/audiotranscription.go−950 vendor/github.com/charmbracelet/openai-go/audiotranslation.go−120 vendor/github.com/charmbracelet/openai-go/azure/azure.go−269 vendor/github.com/charmbracelet/openai-go/batch.go−464 vendor/github.com/charmbracelet/openai-go/beta.go−36 vendor/github.com/charmbracelet/openai-go/betaassistant.go−2284 vendor/github.com/charmbracelet/openai-go/betachatkit.go−125 vendor/github.com/charmbracelet/openai-go/betachatkitsession.go−83 vendor/github.com/charmbracelet/openai-go/betachatkitthread.go−1564 vendor/github.com/charmbracelet/openai-go/betathread.go−1574 vendor/github.com/charmbracelet/openai-go/betathreadmessage.go−1717 vendor/github.com/charmbracelet/openai-go/betathreadrun.go−974 vendor/github.com/charmbracelet/openai-go/betathreadrunstep.go−1396 vendor/github.com/charmbracelet/openai-go/chat.go−30 vendor/github.com/charmbracelet/openai-go/chatcompletion.go−3521 vendor/github.com/charmbracelet/openai-go/chatcompletionmessage.go−100 vendor/github.com/charmbracelet/openai-go/client.go−185 vendor/github.com/charmbracelet/openai-go/completion.go−436 vendor/github.com/charmbracelet/openai-go/container.go−648 vendor/github.com/charmbracelet/openai-go/containerfile.go−287 vendor/github.com/charmbracelet/openai-go/containerfilecontent.go−50 vendor/github.com/charmbracelet/openai-go/conversations/aliases.go−585 vendor/github.com/charmbracelet/openai-go/conversations/api.md−31 vendor/github.com/charmbracelet/openai-go/conversations/conversation.go−493 vendor/github.com/charmbracelet/openai-go/conversations/item.go−1082 vendor/github.com/charmbracelet/openai-go/embedding.go−207 vendor/github.com/charmbracelet/openai-go/field.go−45 vendor/github.com/charmbracelet/openai-go/file.go−352 vendor/github.com/charmbracelet/openai-go/finetuning.go−35 vendor/github.com/charmbracelet/openai-go/finetuningalpha.go−29 vendor/github.com/charmbracelet/openai-go/finetuningalphagrader.go−675 vendor/github.com/charmbracelet/openai-go/finetuningcheckpoint.go−29 vendor/github.com/charmbracelet/openai-go/finetuningcheckpointpermission.go−352 vendor/github.com/charmbracelet/openai-go/finetuningjob.go−884 vendor/github.com/charmbracelet/openai-go/finetuningjobcheckpoint.go−152 vendor/github.com/charmbracelet/openai-go/finetuningmethod.go−1487 vendor/github.com/charmbracelet/openai-go/grader.go−28 vendor/github.com/charmbracelet/openai-go/gradergradermodel.go−1753 vendor/github.com/charmbracelet/openai-go/image.go−1337 vendor/github.com/charmbracelet/openai-go/internal/apierror/apierror.go−58 vendor/github.com/charmbracelet/openai-go/internal/apiform/encoder.go−473 vendor/github.com/charmbracelet/openai-go/internal/apiform/form.go−5 vendor/github.com/charmbracelet/openai-go/internal/apiform/richparam.go−20 vendor/github.com/charmbracelet/openai-go/internal/apiform/tag.go−72 vendor/github.com/charmbracelet/openai-go/internal/apijson/decoder.go−688 vendor/github.com/charmbracelet/openai-go/internal/apijson/encoder.go−371 vendor/github.com/charmbracelet/openai-go/internal/apijson/enum.go−140 vendor/github.com/charmbracelet/openai-go/internal/apijson/field.go−23 vendor/github.com/charmbracelet/openai-go/internal/apijson/port.go−120 vendor/github.com/charmbracelet/openai-go/internal/apijson/registry.go−51 vendor/github.com/charmbracelet/openai-go/internal/apijson/subfield.go−67 vendor/github.com/charmbracelet/openai-go/internal/apijson/tag.go−69 vendor/github.com/charmbracelet/openai-go/internal/apijson/union.go−208 vendor/github.com/charmbracelet/openai-go/internal/apiquery/encoder.go−394 vendor/github.com/charmbracelet/openai-go/internal/apiquery/query.go−55 vendor/github.com/charmbracelet/openai-go/internal/apiquery/richparam.go−20 vendor/github.com/charmbracelet/openai-go/internal/apiquery/tag.go−44 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/decode.go−1324 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/encode.go−1396 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/fold.go−48 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/indent.go−182 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/scanner.go−610 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/sentinel/null.go−46 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/shims/shims.go−113 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/stream.go−512 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/tables.go−218 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/tags.go−38 vendor/github.com/charmbracelet/openai-go/internal/encoding/json/time.go−61 vendor/github.com/charmbracelet/openai-go/internal/paramutil/field.go−30 vendor/github.com/charmbracelet/openai-go/internal/paramutil/union.go−48 vendor/github.com/charmbracelet/openai-go/internal/requestconfig/requestconfig.go−644 vendor/github.com/charmbracelet/openai-go/internal/version.go−5 vendor/github.com/charmbracelet/openai-go/model.go−137 vendor/github.com/charmbracelet/openai-go/moderation.go−489 vendor/github.com/charmbracelet/openai-go/option/middleware.go−38 vendor/github.com/charmbracelet/openai-go/option/requestoption.go−299 vendor/github.com/charmbracelet/openai-go/packages/pagination/pagination.go−329 vendor/github.com/charmbracelet/openai-go/packages/param/encoder.go−109 vendor/github.com/charmbracelet/openai-go/packages/param/null.go−19 vendor/github.com/charmbracelet/openai-go/packages/param/option.go−122 vendor/github.com/charmbracelet/openai-go/packages/param/param.go−186 vendor/github.com/charmbracelet/openai-go/packages/respjson/respjson.go−88 vendor/github.com/charmbracelet/openai-go/packages/ssestream/ssestream.go−247 vendor/github.com/charmbracelet/openai-go/polling.go−129 vendor/github.com/charmbracelet/openai-go/realtime/aliases.go−585 vendor/github.com/charmbracelet/openai-go/realtime/api.md−55 vendor/github.com/charmbracelet/openai-go/realtime/call.go−133 vendor/github.com/charmbracelet/openai-go/realtime/clientsecret.go−1826 vendor/github.com/charmbracelet/openai-go/realtime/realtime.go−1979 vendor/github.com/charmbracelet/openai-go/release-please-config.json−68 vendor/github.com/charmbracelet/openai-go/responses/aliases.go−585 vendor/github.com/charmbracelet/openai-go/responses/api.md−240 vendor/github.com/charmbracelet/openai-go/responses/inputitem.go−135 vendor/github.com/charmbracelet/openai-go/responses/inputtoken.go−336 vendor/github.com/charmbracelet/openai-go/responses/response.go−21786 vendor/github.com/charmbracelet/openai-go/shared/constant/constants.go−1143 vendor/github.com/charmbracelet/openai-go/shared/shared.go−1183 vendor/github.com/charmbracelet/openai-go/skill.go−292 vendor/github.com/charmbracelet/openai-go/skillcontent.go−46 vendor/github.com/charmbracelet/openai-go/skillversion.go−283 vendor/github.com/charmbracelet/openai-go/skillversioncontent.go−50 vendor/github.com/charmbracelet/openai-go/streamaccumulator.go−215 vendor/github.com/charmbracelet/openai-go/upload.go−238 vendor/github.com/charmbracelet/openai-go/uploadpart.go−115 vendor/github.com/charmbracelet/openai-go/vectorstore.go−911 vendor/github.com/charmbracelet/openai-go/vectorstorefile.go−535 vendor/github.com/charmbracelet/openai-go/vectorstorefilebatch.go−427 vendor/github.com/charmbracelet/openai-go/video.go−677 vendor/github.com/charmbracelet/openai-go/webhooks/aliases.go−585 vendor/github.com/charmbracelet/openai-go/webhooks/api.md−20 vendor/github.com/charmbracelet/openai-go/webhooks/webhook.go−1306 vendor/github.com/charmbracelet/ultraviolet/.gitattributes−1 vendor/github.com/charmbracelet/ultraviolet/.golangci.yml−48 vendor/github.com/charmbracelet/ultraviolet/.goreleaser.yml−5 vendor/github.com/charmbracelet/ultraviolet/LICENSE−21 vendor/github.com/charmbracelet/ultraviolet/README.md−161 vendor/github.com/charmbracelet/ultraviolet/TUTORIAL.md−175 vendor/github.com/charmbracelet/ultraviolet/border.go−231 vendor/github.com/charmbracelet/ultraviolet/buffer.go−831 vendor/github.com/charmbracelet/ultraviolet/cancelreader_other.go−16 vendor/github.com/charmbracelet/ultraviolet/cancelreader_windows.go−139 vendor/github.com/charmbracelet/ultraviolet/cell.go−465 vendor/github.com/charmbracelet/ultraviolet/console.go−219 vendor/github.com/charmbracelet/ultraviolet/console_unix.go−13 vendor/github.com/charmbracelet/ultraviolet/console_windows.go−13 vendor/github.com/charmbracelet/ultraviolet/cursor.go−22 vendor/github.com/charmbracelet/ultraviolet/decoder.go−2102 vendor/github.com/charmbracelet/ultraviolet/doc.go−46 vendor/github.com/charmbracelet/ultraviolet/environ.go−32 vendor/github.com/charmbracelet/ultraviolet/event.go−567 vendor/github.com/charmbracelet/ultraviolet/internal/casso/math.go−172 vendor/github.com/charmbracelet/ultraviolet/internal/casso/solver.go−275 vendor/github.com/charmbracelet/ultraviolet/internal/lru/lru.go−69 vendor/github.com/charmbracelet/ultraviolet/key.go−762 vendor/github.com/charmbracelet/ultraviolet/key_table.go−664 vendor/github.com/charmbracelet/ultraviolet/layout/cache.go−29 vendor/github.com/charmbracelet/ultraviolet/layout/constraint.go−174 vendor/github.com/charmbracelet/ultraviolet/layout/flex.go−210 vendor/github.com/charmbracelet/ultraviolet/layout/layout.go−973 vendor/github.com/charmbracelet/ultraviolet/layout/padding.go−66 vendor/github.com/charmbracelet/ultraviolet/logger.go−6 vendor/github.com/charmbracelet/ultraviolet/mouse.go−150 vendor/github.com/charmbracelet/ultraviolet/poll.go−38 vendor/github.com/charmbracelet/ultraviolet/poll_bsd.go−165 vendor/github.com/charmbracelet/ultraviolet/poll_default.go−12 vendor/github.com/charmbracelet/ultraviolet/poll_fallback.go−158 vendor/github.com/charmbracelet/ultraviolet/poll_linux.go−175 vendor/github.com/charmbracelet/ultraviolet/poll_select.go−156 vendor/github.com/charmbracelet/ultraviolet/poll_solaris.go−12 vendor/github.com/charmbracelet/ultraviolet/poll_windows.go−217 vendor/github.com/charmbracelet/ultraviolet/screen/context.go−379 vendor/github.com/charmbracelet/ultraviolet/screen/screen.go−117 vendor/github.com/charmbracelet/ultraviolet/styled.go−337 vendor/github.com/charmbracelet/ultraviolet/tabstop.go−142 vendor/github.com/charmbracelet/ultraviolet/terminal.go−394 vendor/github.com/charmbracelet/ultraviolet/terminal_bsdly.go−10 vendor/github.com/charmbracelet/ultraviolet/terminal_bsdly_other.go−8 vendor/github.com/charmbracelet/ultraviolet/terminal_other.go−22 vendor/github.com/charmbracelet/ultraviolet/terminal_reader.go−503 vendor/github.com/charmbracelet/ultraviolet/terminal_reader_other.go−13 vendor/github.com/charmbracelet/ultraviolet/terminal_reader_windows.go−336 vendor/github.com/charmbracelet/ultraviolet/terminal_renderer.go−1639 vendor/github.com/charmbracelet/ultraviolet/terminal_renderer_hardscroll.go−243 vendor/github.com/charmbracelet/ultraviolet/terminal_renderer_hashmap.go−298 vendor/github.com/charmbracelet/ultraviolet/terminal_screen.go−837 vendor/github.com/charmbracelet/ultraviolet/terminal_tabdly.go−10 vendor/github.com/charmbracelet/ultraviolet/terminal_tabdly_other.go−8 vendor/github.com/charmbracelet/ultraviolet/terminal_unix.go−56 vendor/github.com/charmbracelet/ultraviolet/terminal_windows.go−77 vendor/github.com/charmbracelet/ultraviolet/tty.go−42 vendor/github.com/charmbracelet/ultraviolet/tty_other.go−26 vendor/github.com/charmbracelet/ultraviolet/tty_unix.go−39 vendor/github.com/charmbracelet/ultraviolet/tty_windows.go−39 vendor/github.com/charmbracelet/ultraviolet/utils.go−15 vendor/github.com/charmbracelet/ultraviolet/uv.go−406 vendor/github.com/charmbracelet/ultraviolet/winch.go−62 vendor/github.com/charmbracelet/ultraviolet/winch_other.go−17 vendor/github.com/charmbracelet/ultraviolet/winch_unix.go−50 vendor/github.com/charmbracelet/ultraviolet/window.go−147 vendor/github.com/charmbracelet/x/ansi/LICENSE−21 vendor/github.com/charmbracelet/x/ansi/ansi.go−11 vendor/github.com/charmbracelet/x/ansi/ascii.go−8 vendor/github.com/charmbracelet/x/ansi/background.go−178 vendor/github.com/charmbracelet/x/ansi/c0.go−79 vendor/github.com/charmbracelet/x/ansi/c1.go−72 vendor/github.com/charmbracelet/x/ansi/charset.go−55 vendor/github.com/charmbracelet/x/ansi/clipboard.go−75 vendor/github.com/charmbracelet/x/ansi/color.go−784 vendor/github.com/charmbracelet/x/ansi/ctrl.go−156 vendor/github.com/charmbracelet/x/ansi/cursor.go−637 vendor/github.com/charmbracelet/x/ansi/cwd.go−26 vendor/github.com/charmbracelet/x/ansi/doc.go−7 vendor/github.com/charmbracelet/x/ansi/finalterm.go−67 vendor/github.com/charmbracelet/x/ansi/focus.go−9 vendor/github.com/charmbracelet/x/ansi/graphics.go−62 vendor/github.com/charmbracelet/x/ansi/hyperlink.go−28 vendor/github.com/charmbracelet/x/ansi/inband.go−24 vendor/github.com/charmbracelet/x/ansi/iterm2.go−18 vendor/github.com/charmbracelet/x/ansi/keypad.go−28 vendor/github.com/charmbracelet/x/ansi/kitty.go−90 vendor/github.com/charmbracelet/x/ansi/kitty/decoder.go−86 vendor/github.com/charmbracelet/x/ansi/kitty/encoder.go−64 vendor/github.com/charmbracelet/x/ansi/kitty/graphics.go−414 vendor/github.com/charmbracelet/x/ansi/kitty/options.go−373 vendor/github.com/charmbracelet/x/ansi/kitty/writer.go−187 vendor/github.com/charmbracelet/x/ansi/method.go−196 vendor/github.com/charmbracelet/x/ansi/mode.go−690 vendor/github.com/charmbracelet/x/ansi/mode_deprecated.go−495 vendor/github.com/charmbracelet/x/ansi/modes.go−65 vendor/github.com/charmbracelet/x/ansi/mouse.go−172 vendor/github.com/charmbracelet/x/ansi/notification.go−32 vendor/github.com/charmbracelet/x/ansi/palette.go−34 vendor/github.com/charmbracelet/x/ansi/parser.go−417 vendor/github.com/charmbracelet/x/ansi/parser/const.go−79 vendor/github.com/charmbracelet/x/ansi/parser/seq.go−136 vendor/github.com/charmbracelet/x/ansi/parser/transition_table.go−273 vendor/github.com/charmbracelet/x/ansi/parser_decode.go−525 vendor/github.com/charmbracelet/x/ansi/parser_handler.go−60 vendor/github.com/charmbracelet/x/ansi/parser_sync.go−29 vendor/github.com/charmbracelet/x/ansi/passthrough.go−60 vendor/github.com/charmbracelet/x/ansi/paste.go−7 vendor/github.com/charmbracelet/x/ansi/progress.go−49 vendor/github.com/charmbracelet/x/ansi/reset.go−11 vendor/github.com/charmbracelet/x/ansi/screen.go−410 vendor/github.com/charmbracelet/x/ansi/sgr.go−79 vendor/github.com/charmbracelet/x/ansi/status.go−168 vendor/github.com/charmbracelet/x/ansi/style.go−819 vendor/github.com/charmbracelet/x/ansi/termcap.go−41 vendor/github.com/charmbracelet/x/ansi/title.go−48 vendor/github.com/charmbracelet/x/ansi/truncate.go−290 vendor/github.com/charmbracelet/x/ansi/urxvt.go−17 vendor/github.com/charmbracelet/x/ansi/util.go−92 vendor/github.com/charmbracelet/x/ansi/width.go−107 vendor/github.com/charmbracelet/x/ansi/winop.go−59 vendor/github.com/charmbracelet/x/ansi/wrap.go−472 vendor/github.com/charmbracelet/x/ansi/xterm.go−138 vendor/github.com/charmbracelet/x/editor/LICENSE−21 vendor/github.com/charmbracelet/x/editor/editor.go−140 vendor/github.com/charmbracelet/x/etag/LICENSE−21 vendor/github.com/charmbracelet/x/etag/etag.go−48 vendor/github.com/charmbracelet/x/exp/charmtone/LICENSE−21 vendor/github.com/charmbracelet/x/exp/charmtone/charmtone.go−443 vendor/github.com/charmbracelet/x/exp/golden/LICENSE−21 vendor/github.com/charmbracelet/x/exp/golden/golden.go−83 vendor/github.com/charmbracelet/x/exp/ordered/LICENSE−21 vendor/github.com/charmbracelet/x/exp/ordered/ordered.go−42 vendor/github.com/charmbracelet/x/exp/slice/LICENSE−21 vendor/github.com/charmbracelet/x/exp/slice/slice.go−148 vendor/github.com/charmbracelet/x/exp/strings/LICENSE−21 vendor/github.com/charmbracelet/x/exp/strings/contains.go−16 vendor/github.com/charmbracelet/x/exp/strings/join.go−134 vendor/github.com/charmbracelet/x/powernap/LICENSE−21 vendor/github.com/charmbracelet/x/powernap/pkg/config/config.go−118 vendor/github.com/charmbracelet/x/powernap/pkg/config/lsps.json−367 vendor/github.com/charmbracelet/x/powernap/pkg/config/overrides.go−85 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/client.go−875 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/language.go−158 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol.go−50 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/LICENSE−27 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/interface.go−132 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/pattern_interfaces.go−79 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tables.go−31 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tsdocument-changes.go−83 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tsjson.go−3072 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tsprotocol.go−6963 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/uri.go−192 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/sync.go−240 vendor/github.com/charmbracelet/x/powernap/pkg/lsp/types.go−93 vendor/github.com/charmbracelet/x/powernap/pkg/transport/connection.go−130 vendor/github.com/charmbracelet/x/powernap/pkg/transport/router.go−107 vendor/github.com/charmbracelet/x/powernap/pkg/transport/transport.go−214 vendor/github.com/charmbracelet/x/term/LICENSE−21 vendor/github.com/charmbracelet/x/term/term.go−51 vendor/github.com/charmbracelet/x/term/term_other.go−39 vendor/github.com/charmbracelet/x/term/term_plan9.go−118 vendor/github.com/charmbracelet/x/term/term_unix.go−96 vendor/github.com/charmbracelet/x/term/term_unix_bsd.go−11 vendor/github.com/charmbracelet/x/term/term_unix_other.go−11 vendor/github.com/charmbracelet/x/term/term_windows.go−87 vendor/github.com/charmbracelet/x/term/terminal.go−12 vendor/github.com/charmbracelet/x/term/util.go−47 vendor/github.com/charmbracelet/x/termios/LICENSE−21 vendor/github.com/charmbracelet/x/termios/bit_bsd.go−7 vendor/github.com/charmbracelet/x/termios/bit_darwin.go−7 vendor/github.com/charmbracelet/x/termios/bit_other.go−7 vendor/github.com/charmbracelet/x/termios/syscalls_bsd.go−11 vendor/github.com/charmbracelet/x/termios/syscalls_darwin.go−10 vendor/github.com/charmbracelet/x/termios/syscalls_linux.go−14 vendor/github.com/charmbracelet/x/termios/termios.go−249 vendor/github.com/charmbracelet/x/termios/termios_bsd.go−13 vendor/github.com/charmbracelet/x/termios/termios_linux.go−13 vendor/github.com/charmbracelet/x/termios/termios_other.go−15 vendor/github.com/charmbracelet/x/termios/termios_solaris.go−26 vendor/github.com/charmbracelet/x/windows/LICENSE−21 vendor/github.com/charmbracelet/x/windows/doc.go−4 vendor/github.com/charmbracelet/x/windows/syscall_windows.go−14 vendor/github.com/charmbracelet/x/windows/types.go−221 vendor/github.com/charmbracelet/x/windows/types_windows.go−142 vendor/github.com/charmbracelet/x/windows/zsyscall_windows.go−77 vendor/github.com/clipperhouse/displaywidth/.gitignore−3 vendor/github.com/clipperhouse/displaywidth/AGENTS.md−51 vendor/github.com/clipperhouse/displaywidth/CHANGELOG.md−129 vendor/github.com/clipperhouse/displaywidth/LICENSE−21 vendor/github.com/clipperhouse/displaywidth/README.md−190 vendor/github.com/clipperhouse/displaywidth/gen.go−3 vendor/github.com/clipperhouse/displaywidth/graphemes.go−73 vendor/github.com/clipperhouse/displaywidth/options.go−30 vendor/github.com/clipperhouse/displaywidth/trie.go−1699 vendor/github.com/clipperhouse/displaywidth/truncate.go−149 vendor/github.com/clipperhouse/displaywidth/width.go−239 vendor/github.com/clipperhouse/uax29/v2/LICENSE−21 vendor/github.com/clipperhouse/uax29/v2/graphemes/README.md−120 vendor/github.com/clipperhouse/uax29/v2/graphemes/ansi.go−138 vendor/github.com/clipperhouse/uax29/v2/graphemes/ansi8.go−79 vendor/github.com/clipperhouse/uax29/v2/graphemes/iterator.go−144 vendor/github.com/clipperhouse/uax29/v2/graphemes/reader.go−25 vendor/github.com/clipperhouse/uax29/v2/graphemes/splitfunc.go−205 vendor/github.com/clipperhouse/uax29/v2/graphemes/trie.go−1717 vendor/github.com/clipperhouse/uax29/v2/words/README.md−121 vendor/github.com/clipperhouse/uax29/v2/words/bleve_compat.go−104 vendor/github.com/clipperhouse/uax29/v2/words/iterator.go−126 vendor/github.com/clipperhouse/uax29/v2/words/joiners.go−41 vendor/github.com/clipperhouse/uax29/v2/words/reader.go−34 vendor/github.com/clipperhouse/uax29/v2/words/seek.go−43 vendor/github.com/clipperhouse/uax29/v2/words/splitfunc.go−269 vendor/github.com/clipperhouse/uax29/v2/words/trie.go−3774 vendor/github.com/cyphar/filepath-securejoin/.golangci.yml−60 vendor/github.com/cyphar/filepath-securejoin/CHANGELOG.md−453 vendor/github.com/cyphar/filepath-securejoin/COPYING.md−447 vendor/github.com/cyphar/filepath-securejoin/LICENSE.BSD−28 vendor/github.com/cyphar/filepath-securejoin/LICENSE.MPL-2.0−373 vendor/github.com/cyphar/filepath-securejoin/README.md−184 vendor/github.com/cyphar/filepath-securejoin/VERSION−1 vendor/github.com/cyphar/filepath-securejoin/codecov.yml−29 vendor/github.com/cyphar/filepath-securejoin/doc.go−47 vendor/github.com/cyphar/filepath-securejoin/internal/consts/consts.go−15 vendor/github.com/cyphar/filepath-securejoin/join.go−169 vendor/github.com/cyphar/filepath-securejoin/vfs.go−37 vendor/github.com/davecgh/go-spew/LICENSE−15 vendor/github.com/davecgh/go-spew/spew/bypass.go−145 vendor/github.com/davecgh/go-spew/spew/bypasssafe.go−38 vendor/github.com/davecgh/go-spew/spew/common.go−341 vendor/github.com/davecgh/go-spew/spew/config.go−306 vendor/github.com/davecgh/go-spew/spew/doc.go−211 vendor/github.com/davecgh/go-spew/spew/dump.go−509 vendor/github.com/davecgh/go-spew/spew/format.go−419 vendor/github.com/davecgh/go-spew/spew/spew.go−148 vendor/github.com/denisbrodbeck/machineid/.gitignore−29 vendor/github.com/denisbrodbeck/machineid/LICENSE.md−22 vendor/github.com/denisbrodbeck/machineid/README.md−182 vendor/github.com/denisbrodbeck/machineid/helper.go−36 vendor/github.com/denisbrodbeck/machineid/id.go−45 vendor/github.com/denisbrodbeck/machineid/id_bsd.go−42 vendor/github.com/denisbrodbeck/machineid/id_darwin.go−37 vendor/github.com/denisbrodbeck/machineid/id_linux.go−27 vendor/github.com/denisbrodbeck/machineid/id_windows.go−23 vendor/github.com/denisbrodbeck/machineid/logo.png vendor/github.com/denisbrodbeck/machineid/makefile−12 vendor/github.com/disintegration/imaging/.travis.yml−12 vendor/github.com/disintegration/imaging/LICENSE−21 vendor/github.com/disintegration/imaging/README.md−226 vendor/github.com/disintegration/imaging/adjust.go−253 vendor/github.com/disintegration/imaging/convolution.go−148 vendor/github.com/disintegration/imaging/doc.go−7 vendor/github.com/disintegration/imaging/effects.go−169 vendor/github.com/disintegration/imaging/histogram.go−52 vendor/github.com/disintegration/imaging/io.go−444 vendor/github.com/disintegration/imaging/resize.go−595 vendor/github.com/disintegration/imaging/scanner.go−285 vendor/github.com/disintegration/imaging/tools.go−249 vendor/github.com/disintegration/imaging/transform.go−268 vendor/github.com/disintegration/imaging/utils.go−167 vendor/github.com/dlclark/regexp2/v2/.gitignore−29 vendor/github.com/dlclark/regexp2/v2/ATTRIB−133 vendor/github.com/dlclark/regexp2/v2/LICENSE−21 vendor/github.com/dlclark/regexp2/v2/README.md−283 vendor/github.com/dlclark/regexp2/v2/Taskfile.yml−64 vendor/github.com/dlclark/regexp2/v2/bufferpool.go−76 vendor/github.com/dlclark/regexp2/v2/fastclock.go−141 vendor/github.com/dlclark/regexp2/v2/helpers/indexof.go−394 vendor/github.com/dlclark/regexp2/v2/helpers/math.go−15 vendor/github.com/dlclark/regexp2/v2/helpers/runes.go−58 vendor/github.com/dlclark/regexp2/v2/helpers/searchvalues.go−180 vendor/github.com/dlclark/regexp2/v2/match.go−455 vendor/github.com/dlclark/regexp2/v2/options.go−157 vendor/github.com/dlclark/regexp2/v2/regexp.go−717 vendor/github.com/dlclark/regexp2/v2/regexp_codegen.go−70 vendor/github.com/dlclark/regexp2/v2/replace.go−357 vendor/github.com/dlclark/regexp2/v2/runner.go−2197 vendor/github.com/dlclark/regexp2/v2/split.go−67 vendor/github.com/dlclark/regexp2/v2/stringprefixfilter.go−375 vendor/github.com/dlclark/regexp2/v2/syntax/charclass.go−1507 vendor/github.com/dlclark/regexp2/v2/syntax/code.go−316 vendor/github.com/dlclark/regexp2/v2/syntax/escape.go−94 vendor/github.com/dlclark/regexp2/v2/syntax/fuzz.go−21 vendor/github.com/dlclark/regexp2/v2/syntax/optimizations.go−672 vendor/github.com/dlclark/regexp2/v2/syntax/parser.go−2529 vendor/github.com/dlclark/regexp2/v2/syntax/prefix.go−943 vendor/github.com/dlclark/regexp2/v2/syntax/prefixanalyzer.go−1491 vendor/github.com/dlclark/regexp2/v2/syntax/replacerdata.go−87 vendor/github.com/dlclark/regexp2/v2/syntax/tree.go−2362 vendor/github.com/dlclark/regexp2/v2/syntax/unicode_alias_tables.go−6058 vendor/github.com/dlclark/regexp2/v2/syntax/writer.go−500 vendor/github.com/dustin/go-humanize/.travis.yml−21 vendor/github.com/dustin/go-humanize/LICENSE−21 vendor/github.com/dustin/go-humanize/README.markdown−124 vendor/github.com/dustin/go-humanize/big.go−31 vendor/github.com/dustin/go-humanize/bigbytes.go−189 vendor/github.com/dustin/go-humanize/bytes.go−143 vendor/github.com/dustin/go-humanize/comma.go−116 vendor/github.com/dustin/go-humanize/commaf.go−41 vendor/github.com/dustin/go-humanize/ftoa.go−49 vendor/github.com/dustin/go-humanize/humanize.go−8 vendor/github.com/dustin/go-humanize/number.go−192 vendor/github.com/dustin/go-humanize/ordinals.go−25 vendor/github.com/dustin/go-humanize/si.go−127 vendor/github.com/dustin/go-humanize/times.go−117 vendor/github.com/ebitengine/purego/.gitignore−1 vendor/github.com/ebitengine/purego/LICENSE−201 vendor/github.com/ebitengine/purego/README.md−119 vendor/github.com/ebitengine/purego/abi_amd64.h−99 vendor/github.com/ebitengine/purego/abi_arm64.h−39 vendor/github.com/ebitengine/purego/abi_loong64.h−60 vendor/github.com/ebitengine/purego/cgo.go−19 vendor/github.com/ebitengine/purego/dlerror.go−17 vendor/github.com/ebitengine/purego/dlfcn.go−99 vendor/github.com/ebitengine/purego/dlfcn_android.go−34 vendor/github.com/ebitengine/purego/dlfcn_darwin.go−20 vendor/github.com/ebitengine/purego/dlfcn_freebsd.go−14 vendor/github.com/ebitengine/purego/dlfcn_linux.go−16 vendor/github.com/ebitengine/purego/dlfcn_netbsd.go−15 vendor/github.com/ebitengine/purego/dlfcn_nocgo_freebsd.go−11 vendor/github.com/ebitengine/purego/dlfcn_nocgo_linux.go−19 vendor/github.com/ebitengine/purego/dlfcn_nocgo_netbsd.go−9 vendor/github.com/ebitengine/purego/dlfcn_playground.go−24 vendor/github.com/ebitengine/purego/dlfcn_stubs.s−22 vendor/github.com/ebitengine/purego/func.go−564 vendor/github.com/ebitengine/purego/gen.go−6 vendor/github.com/ebitengine/purego/go_runtime.go−13 vendor/github.com/ebitengine/purego/internal/cgo/dlfcn_cgo_unix.go−56 vendor/github.com/ebitengine/purego/internal/cgo/empty.go−6 vendor/github.com/ebitengine/purego/internal/cgo/syscall_cgo_unix.go−55 vendor/github.com/ebitengine/purego/internal/fakecgo/abi_amd64.h−99 vendor/github.com/ebitengine/purego/internal/fakecgo/abi_arm64.h−39 vendor/github.com/ebitengine/purego/internal/fakecgo/abi_loong64.h−60 vendor/github.com/ebitengine/purego/internal/fakecgo/abi_ppc64x.h−195 vendor/github.com/ebitengine/purego/internal/fakecgo/asm_386.s−29 vendor/github.com/ebitengine/purego/internal/fakecgo/asm_amd64.s−39 vendor/github.com/ebitengine/purego/internal/fakecgo/asm_arm.s−52 vendor/github.com/ebitengine/purego/internal/fakecgo/asm_arm64.s−36 vendor/github.com/ebitengine/purego/internal/fakecgo/asm_loong64.s−40 vendor/github.com/ebitengine/purego/internal/fakecgo/asm_ppc64le.s−82 vendor/github.com/ebitengine/purego/internal/fakecgo/asm_riscv64.s−78 vendor/github.com/ebitengine/purego/internal/fakecgo/asm_s390x.s−55 vendor/github.com/ebitengine/purego/internal/fakecgo/callbacks.go−93 vendor/github.com/ebitengine/purego/internal/fakecgo/doc.go−32 vendor/github.com/ebitengine/purego/internal/fakecgo/fakecgo.go−14 vendor/github.com/ebitengine/purego/internal/fakecgo/freebsd.go−27 vendor/github.com/ebitengine/purego/internal/fakecgo/go_darwin.go−88 vendor/github.com/ebitengine/purego/internal/fakecgo/go_freebsd.go−100 vendor/github.com/ebitengine/purego/internal/fakecgo/go_libinit.go−72 vendor/github.com/ebitengine/purego/internal/fakecgo/go_linux.go−100 vendor/github.com/ebitengine/purego/internal/fakecgo/go_netbsd.go−106 vendor/github.com/ebitengine/purego/internal/fakecgo/go_setenv.go−18 vendor/github.com/ebitengine/purego/internal/fakecgo/go_util.go−38 vendor/github.com/ebitengine/purego/internal/fakecgo/iscgo.go−19 vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo.go−39 vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_darwin.go−26 vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_freebsd.go−20 vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_linux.go−20 vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_netbsd.go−26 vendor/github.com/ebitengine/purego/internal/fakecgo/netbsd.go−23 vendor/github.com/ebitengine/purego/internal/fakecgo/setenv.go−19 vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_386.s−107 vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_amd64.s−107 vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_arm.s−81 vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_arm64.s−84 vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_loong64.s−88 vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_ppc64le.s−227 vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_riscv64.s−72 vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols.go−165 vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_darwin.go−59 vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_freebsd.go−48 vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_linux.go−48 vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_netbsd.go−59 vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_darwin.s−19 vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_freebsd.s−16 vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_linux.s−16 vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_netbsd.s−19 vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_stubs.s−55 vendor/github.com/ebitengine/purego/internal/strings/strings.go−40 vendor/github.com/ebitengine/purego/internal/xreflect/reflect_go124.go−15 vendor/github.com/ebitengine/purego/internal/xreflect/reflect_go125.go−12 vendor/github.com/ebitengine/purego/is_ios.go−13 vendor/github.com/ebitengine/purego/nocgo.go−25 vendor/github.com/ebitengine/purego/objc/objc_block_darwin.go−272 vendor/github.com/ebitengine/purego/objc/objc_runtime_darwin.go−709 vendor/github.com/ebitengine/purego/struct_386.go−41 vendor/github.com/ebitengine/purego/struct_amd64.go−286 vendor/github.com/ebitengine/purego/struct_arm.go−85 vendor/github.com/ebitengine/purego/struct_arm64.go−549 vendor/github.com/ebitengine/purego/struct_loong64.go−213 vendor/github.com/ebitengine/purego/struct_ppc64le.go−143 vendor/github.com/ebitengine/purego/struct_riscv64.go−143 vendor/github.com/ebitengine/purego/struct_s390x.go−143 vendor/github.com/ebitengine/purego/sys_386.s−147 vendor/github.com/ebitengine/purego/sys_amd64.s−170 vendor/github.com/ebitengine/purego/sys_arm.s−142 vendor/github.com/ebitengine/purego/sys_arm64.s−97 vendor/github.com/ebitengine/purego/sys_loong64.s−96 vendor/github.com/ebitengine/purego/sys_ppc64le.s−120 vendor/github.com/ebitengine/purego/sys_riscv64.s−101 vendor/github.com/ebitengine/purego/sys_s390x.s−114 vendor/github.com/ebitengine/purego/sys_unix_386.s−226 vendor/github.com/ebitengine/purego/sys_unix_arm.s−89 vendor/github.com/ebitengine/purego/sys_unix_arm64.s−70 vendor/github.com/ebitengine/purego/sys_unix_loong64.s−75 vendor/github.com/ebitengine/purego/sys_unix_ppc64le.s−114 vendor/github.com/ebitengine/purego/sys_unix_riscv64.s−79 vendor/github.com/ebitengine/purego/sys_unix_s390x.s−109 vendor/github.com/ebitengine/purego/syscall.go−83 vendor/github.com/ebitengine/purego/syscall_32bit.go−109 vendor/github.com/ebitengine/purego/syscall_cgo_linux.go−21 vendor/github.com/ebitengine/purego/syscall_sysv.go−317 vendor/github.com/ebitengine/purego/syscall_sysv_others.go−28 vendor/github.com/ebitengine/purego/syscall_sysv_stackargs.go−33 vendor/github.com/ebitengine/purego/syscall_windows.go−46 vendor/github.com/ebitengine/purego/zcallback_386.s−4014 vendor/github.com/ebitengine/purego/zcallback_amd64.s−2014 vendor/github.com/ebitengine/purego/zcallback_arm.s−4014 vendor/github.com/ebitengine/purego/zcallback_arm64.s−4014 vendor/github.com/ebitengine/purego/zcallback_loong64.s−4014 vendor/github.com/ebitengine/purego/zcallback_ppc64le.s−4014 vendor/github.com/ebitengine/purego/zcallback_riscv64.s−4051 vendor/github.com/ebitengine/purego/zcallback_s390x.s−4015 vendor/github.com/esiqveland/notify/.gitignore−1 vendor/github.com/esiqveland/notify/LICENSE.txt−27 vendor/github.com/esiqveland/notify/README.md−54 vendor/github.com/esiqveland/notify/doc.go−18 vendor/github.com/esiqveland/notify/notification.go−547 vendor/github.com/felixge/httpsnoop/.gitignore vendor/github.com/felixge/httpsnoop/LICENSE.txt−19 vendor/github.com/felixge/httpsnoop/Makefile−10 vendor/github.com/felixge/httpsnoop/README.md−95 vendor/github.com/felixge/httpsnoop/capture_metrics.go−121 vendor/github.com/felixge/httpsnoop/docs.go−10 vendor/github.com/felixge/httpsnoop/wrap_generated.go−16179 vendor/github.com/fsnotify/fsnotify/.cirrus.yml−14 vendor/github.com/fsnotify/fsnotify/.gitignore−10 vendor/github.com/fsnotify/fsnotify/.mailmap−2 vendor/github.com/fsnotify/fsnotify/CHANGELOG.md−602 vendor/github.com/fsnotify/fsnotify/CONTRIBUTING.md−145 vendor/github.com/fsnotify/fsnotify/LICENSE−25 vendor/github.com/fsnotify/fsnotify/README.md−182 vendor/github.com/fsnotify/fsnotify/backend_fen.go−467 vendor/github.com/fsnotify/fsnotify/backend_inotify.go−583 vendor/github.com/fsnotify/fsnotify/backend_kqueue.go−705 vendor/github.com/fsnotify/fsnotify/backend_other.go−22 vendor/github.com/fsnotify/fsnotify/backend_windows.go−680 vendor/github.com/fsnotify/fsnotify/fsnotify.go−496 vendor/github.com/fsnotify/fsnotify/internal/darwin.go−39 vendor/github.com/fsnotify/fsnotify/internal/debug_darwin.go−57 vendor/github.com/fsnotify/fsnotify/internal/debug_dragonfly.go−33 vendor/github.com/fsnotify/fsnotify/internal/debug_freebsd.go−42 vendor/github.com/fsnotify/fsnotify/internal/debug_kqueue.go−32 vendor/github.com/fsnotify/fsnotify/internal/debug_linux.go−56 vendor/github.com/fsnotify/fsnotify/internal/debug_netbsd.go−25 vendor/github.com/fsnotify/fsnotify/internal/debug_openbsd.go−28 vendor/github.com/fsnotify/fsnotify/internal/debug_solaris.go−45 vendor/github.com/fsnotify/fsnotify/internal/debug_windows.go−40 vendor/github.com/fsnotify/fsnotify/internal/freebsd.go−31 vendor/github.com/fsnotify/fsnotify/internal/internal.go−2 vendor/github.com/fsnotify/fsnotify/internal/unix.go−31 vendor/github.com/fsnotify/fsnotify/internal/unix2.go−7 vendor/github.com/fsnotify/fsnotify/internal/windows.go−41 vendor/github.com/fsnotify/fsnotify/shared.go−64 vendor/github.com/fsnotify/fsnotify/staticcheck.conf−3 vendor/github.com/fsnotify/fsnotify/system_bsd.go−7 vendor/github.com/fsnotify/fsnotify/system_darwin.go−8 vendor/github.com/gen2brain/beeep/LICENSE−23 vendor/github.com/gen2brain/beeep/README.md−41 vendor/github.com/gen2brain/beeep/alert_darwin.go−8 vendor/github.com/gen2brain/beeep/alert_js.go−12 vendor/github.com/gen2brain/beeep/alert_unix.go−17 vendor/github.com/gen2brain/beeep/alert_unsupported.go−8 vendor/github.com/gen2brain/beeep/alert_windows.go−43 vendor/github.com/gen2brain/beeep/beeep.go−55 vendor/github.com/gen2brain/beeep/beep_darwin.go−32 vendor/github.com/gen2brain/beeep/beep_js.go−39 vendor/github.com/gen2brain/beeep/beep_unix.go−100 vendor/github.com/gen2brain/beeep/beep_unsupported.go−15 vendor/github.com/gen2brain/beeep/beep_windows.go−52 vendor/github.com/gen2brain/beeep/notify_darwin.go−131 vendor/github.com/gen2brain/beeep/notify_js.go−63 vendor/github.com/gen2brain/beeep/notify_unix.go−181 vendor/github.com/gen2brain/beeep/notify_unix_nodbus.go−78 vendor/github.com/gen2brain/beeep/notify_unsupported.go−8 vendor/github.com/gen2brain/beeep/notify_windows.go−157 vendor/github.com/gen2brain/beeep/notify_windows_compat.go−109 vendor/github.com/go-git/gcfg/.gitignore−1 vendor/github.com/go-git/gcfg/LICENSE−28 vendor/github.com/go-git/gcfg/Makefile−17 vendor/github.com/go-git/gcfg/README−4 vendor/github.com/go-git/gcfg/doc.go−145 vendor/github.com/go-git/gcfg/errors.go−41 vendor/github.com/go-git/gcfg/read.go−273 vendor/github.com/go-git/gcfg/scanner/errors.go−121 vendor/github.com/go-git/gcfg/scanner/scanner.go−334 vendor/github.com/go-git/gcfg/set.go−334 vendor/github.com/go-git/gcfg/token/position.go−435 vendor/github.com/go-git/gcfg/token/serialize.go−56 vendor/github.com/go-git/gcfg/token/token.go−83 vendor/github.com/go-git/gcfg/types/bool.go−23 vendor/github.com/go-git/gcfg/types/doc.go−4 vendor/github.com/go-git/gcfg/types/enum.go−44 vendor/github.com/go-git/gcfg/types/int.go−86 vendor/github.com/go-git/gcfg/types/scan.go−23 vendor/github.com/go-git/go-billy/v5/.gitignore−4 vendor/github.com/go-git/go-billy/v5/LICENSE−201 vendor/github.com/go-git/go-billy/v5/Makefile−18 vendor/github.com/go-git/go-billy/v5/README.md−77 vendor/github.com/go-git/go-billy/v5/fs.go−210 vendor/github.com/go-git/go-billy/v5/helper/chroot/chroot.go−444 vendor/github.com/go-git/go-billy/v5/helper/polyfill/polyfill.go−114 vendor/github.com/go-git/go-billy/v5/memfs/memory.go−428 vendor/github.com/go-git/go-billy/v5/memfs/storage.go−251 vendor/github.com/go-git/go-billy/v5/osfs/os.go−132 vendor/github.com/go-git/go-billy/v5/osfs/os_bound.go−351 vendor/github.com/go-git/go-billy/v5/osfs/os_chroot.go−126 vendor/github.com/go-git/go-billy/v5/osfs/os_js.go−25 vendor/github.com/go-git/go-billy/v5/osfs/os_options.go−3 vendor/github.com/go-git/go-billy/v5/osfs/os_plan9.go−91 vendor/github.com/go-git/go-billy/v5/osfs/os_posix.go−38 vendor/github.com/go-git/go-billy/v5/osfs/os_wasip1.go−34 vendor/github.com/go-git/go-billy/v5/osfs/os_windows.go−58 vendor/github.com/go-git/go-billy/v5/util/glob.go−111 vendor/github.com/go-git/go-billy/v5/util/util.go−282 vendor/github.com/go-git/go-billy/v5/util/walk.go−72 vendor/github.com/go-git/go-git/v5/LICENSE−201 vendor/github.com/go-git/go-git/v5/config/branch.go−123 vendor/github.com/go-git/go-git/v5/config/config.go−727 vendor/github.com/go-git/go-git/v5/config/modules.go−191 vendor/github.com/go-git/go-git/v5/config/optbool.go−82 vendor/github.com/go-git/go-git/v5/config/refspec.go−155 vendor/github.com/go-git/go-git/v5/config/url.go−81 vendor/github.com/go-git/go-git/v5/internal/path_util/path_util.go−29 vendor/github.com/go-git/go-git/v5/internal/pathutil/dotgit.go−21 vendor/github.com/go-git/go-git/v5/internal/pathutil/hfs.go−99 vendor/github.com/go-git/go-git/v5/internal/pathutil/ntfs.go−187 vendor/github.com/go-git/go-git/v5/internal/pathutil/tree.go−66 vendor/github.com/go-git/go-git/v5/internal/url/url.go−72 vendor/github.com/go-git/go-git/v5/plumbing/error.go−35 vendor/github.com/go-git/go-git/v5/plumbing/format/config/common.go−109 vendor/github.com/go-git/go-git/v5/plumbing/format/config/decoder.go−37 vendor/github.com/go-git/go-git/v5/plumbing/format/config/doc.go−122 vendor/github.com/go-git/go-git/v5/plumbing/format/config/encoder.go−82 vendor/github.com/go-git/go-git/v5/plumbing/format/config/format.go−53 vendor/github.com/go-git/go-git/v5/plumbing/format/config/option.go−127 vendor/github.com/go-git/go-git/v5/plumbing/format/config/section.go−181 vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore/dir.go−148 vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore/doc.go−70 vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore/matcher.go−30 vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore/pattern.go−155 vendor/github.com/go-git/go-git/v5/plumbing/hash.go−84 vendor/github.com/go-git/go-git/v5/plumbing/hash/hash.go−60 vendor/github.com/go-git/go-git/v5/plumbing/hash/hash_sha1.go−15 vendor/github.com/go-git/go-git/v5/plumbing/hash/hash_sha256.go−15 vendor/github.com/go-git/go-git/v5/plumbing/memory.go−72 vendor/github.com/go-git/go-git/v5/plumbing/object.go−111 vendor/github.com/go-git/go-git/v5/plumbing/reference.go−315 vendor/github.com/go-git/go-git/v5/plumbing/revision.go−11 vendor/github.com/go-git/go-git/v5/utils/ioutil/common.go−210 vendor/github.com/go-json-experiment/json/AUTHORS−3 vendor/github.com/go-json-experiment/json/CONTRIBUTORS−3 vendor/github.com/go-json-experiment/json/LICENSE−27 vendor/github.com/go-json-experiment/json/README.md−176 vendor/github.com/go-json-experiment/json/alias.go−943 vendor/github.com/go-json-experiment/json/api.png vendor/github.com/go-json-experiment/json/arshal.go−569 vendor/github.com/go-json-experiment/json/arshal_any.go−289 vendor/github.com/go-json-experiment/json/arshal_default.go−2043 vendor/github.com/go-json-experiment/json/arshal_embedded.go−230 vendor/github.com/go-json-experiment/json/arshal_funcs.go−428 vendor/github.com/go-json-experiment/json/arshal_methods.go−378 vendor/github.com/go-json-experiment/json/arshal_time.go−795 vendor/github.com/go-json-experiment/json/doc.go−247 vendor/github.com/go-json-experiment/json/errors.go−465 vendor/github.com/go-json-experiment/json/fields.go−656 vendor/github.com/go-json-experiment/json/fold.go−58 vendor/github.com/go-json-experiment/json/intern.go−88 vendor/github.com/go-json-experiment/json/internal/internal.go−42 vendor/github.com/go-json-experiment/json/internal/jsonflags/flags.go−223 vendor/github.com/go-json-experiment/json/internal/jsonopts/options.go−217 vendor/github.com/go-json-experiment/json/internal/jsonopts/options_format.go−124 vendor/github.com/go-json-experiment/json/internal/jsonwire/decode.go−606 vendor/github.com/go-json-experiment/json/internal/jsonwire/encode.go−290 vendor/github.com/go-json-experiment/json/internal/jsonwire/wire.go−209 vendor/github.com/go-json-experiment/json/jsontext/alias.go−555 vendor/github.com/go-json-experiment/json/jsontext/decode.go−1218 vendor/github.com/go-json-experiment/json/jsontext/doc.go−111 vendor/github.com/go-json-experiment/json/jsontext/encode.go−993 vendor/github.com/go-json-experiment/json/jsontext/errors.go−213 vendor/github.com/go-json-experiment/json/jsontext/export.go−91 vendor/github.com/go-json-experiment/json/jsontext/options.go−304 vendor/github.com/go-json-experiment/json/jsontext/pools.go−164 vendor/github.com/go-json-experiment/json/jsontext/quote.go−41 vendor/github.com/go-json-experiment/json/jsontext/state.go−828 vendor/github.com/go-json-experiment/json/jsontext/token.go−697 vendor/github.com/go-json-experiment/json/jsontext/value.go−414 vendor/github.com/go-json-experiment/json/migrate.sh−60 vendor/github.com/go-json-experiment/json/options.go−290 vendor/github.com/go-json-experiment/json/options_format.go−122 vendor/github.com/go-json-experiment/json/options_format_global.go−30 vendor/github.com/go-logfmt/logfmt/.gitignore−1 vendor/github.com/go-logfmt/logfmt/CHANGELOG.md−82 vendor/github.com/go-logfmt/logfmt/LICENSE−22 vendor/github.com/go-logfmt/logfmt/README.md−41 vendor/github.com/go-logfmt/logfmt/decode.go−254 vendor/github.com/go-logfmt/logfmt/doc.go−6 vendor/github.com/go-logfmt/logfmt/encode.go−322 vendor/github.com/go-logfmt/logfmt/jsonstring.go−277 vendor/github.com/go-logr/logr/.golangci.yaml−28 vendor/github.com/go-logr/logr/CHANGELOG.md−6 vendor/github.com/go-logr/logr/CONTRIBUTING.md−17 vendor/github.com/go-logr/logr/LICENSE−201 vendor/github.com/go-logr/logr/README.md−407 vendor/github.com/go-logr/logr/SECURITY.md−18 vendor/github.com/go-logr/logr/context.go−33 vendor/github.com/go-logr/logr/context_noslog.go−49 vendor/github.com/go-logr/logr/context_slog.go−83 vendor/github.com/go-logr/logr/discard.go−24 vendor/github.com/go-logr/logr/funcr/funcr.go−914 vendor/github.com/go-logr/logr/funcr/slogsink.go−105 vendor/github.com/go-logr/logr/logr.go−520 vendor/github.com/go-logr/logr/sloghandler.go−192 vendor/github.com/go-logr/logr/slogr.go−100 vendor/github.com/go-logr/logr/slogsink.go−120 vendor/github.com/go-logr/stdr/LICENSE−201 vendor/github.com/go-logr/stdr/README.md−6 vendor/github.com/go-logr/stdr/stdr.go−170 vendor/github.com/go-ole/go-ole/.travis.yml−8 vendor/github.com/go-ole/go-ole/ChangeLog.md−49 vendor/github.com/go-ole/go-ole/LICENSE−21 vendor/github.com/go-ole/go-ole/README.md−46 vendor/github.com/go-ole/go-ole/SECURITY.md−13 vendor/github.com/go-ole/go-ole/appveyor.yml−68 vendor/github.com/go-ole/go-ole/com.go−386 vendor/github.com/go-ole/go-ole/com_func.go−174 vendor/github.com/go-ole/go-ole/connect.go−192 vendor/github.com/go-ole/go-ole/constants.go−153 vendor/github.com/go-ole/go-ole/error.go−51 vendor/github.com/go-ole/go-ole/error_func.go−8 vendor/github.com/go-ole/go-ole/error_windows.go−24 vendor/github.com/go-ole/go-ole/guid.go−284 vendor/github.com/go-ole/go-ole/iconnectionpoint.go−20 vendor/github.com/go-ole/go-ole/iconnectionpoint_func.go−21 vendor/github.com/go-ole/go-ole/iconnectionpoint_windows.go−43 vendor/github.com/go-ole/go-ole/iconnectionpointcontainer.go−17 vendor/github.com/go-ole/go-ole/iconnectionpointcontainer_func.go−11 vendor/github.com/go-ole/go-ole/iconnectionpointcontainer_windows.go−25 vendor/github.com/go-ole/go-ole/idispatch.go−94 vendor/github.com/go-ole/go-ole/idispatch_func.go−19 vendor/github.com/go-ole/go-ole/idispatch_windows.go−203 vendor/github.com/go-ole/go-ole/ienumvariant.go−19 vendor/github.com/go-ole/go-ole/ienumvariant_func.go−19 vendor/github.com/go-ole/go-ole/ienumvariant_windows.go−63 vendor/github.com/go-ole/go-ole/iinspectable.go−18 vendor/github.com/go-ole/go-ole/iinspectable_func.go−15 vendor/github.com/go-ole/go-ole/iinspectable_windows.go−72 vendor/github.com/go-ole/go-ole/iprovideclassinfo.go−21 vendor/github.com/go-ole/go-ole/iprovideclassinfo_func.go−7 vendor/github.com/go-ole/go-ole/iprovideclassinfo_windows.go−21 vendor/github.com/go-ole/go-ole/itypeinfo.go−34 vendor/github.com/go-ole/go-ole/itypeinfo_func.go−7 vendor/github.com/go-ole/go-ole/itypeinfo_windows.go−21 vendor/github.com/go-ole/go-ole/iunknown.go−57 vendor/github.com/go-ole/go-ole/iunknown_func.go−19 vendor/github.com/go-ole/go-ole/iunknown_windows.go−58 vendor/github.com/go-ole/go-ole/ole.go−190 vendor/github.com/go-ole/go-ole/safearray.go−27 vendor/github.com/go-ole/go-ole/safearray_func.go−211 vendor/github.com/go-ole/go-ole/safearray_windows.go−337 vendor/github.com/go-ole/go-ole/safearrayconversion.go−140 vendor/github.com/go-ole/go-ole/safearrayslices.go−33 vendor/github.com/go-ole/go-ole/utility.go−101 vendor/github.com/go-ole/go-ole/variables.go−15 vendor/github.com/go-ole/go-ole/variant.go−105 vendor/github.com/go-ole/go-ole/variant_386.go−11 vendor/github.com/go-ole/go-ole/variant_amd64.go−12 vendor/github.com/go-ole/go-ole/variant_arm.go−11 vendor/github.com/go-ole/go-ole/variant_arm64.go−13 vendor/github.com/go-ole/go-ole/variant_date_386.go−22 vendor/github.com/go-ole/go-ole/variant_date_amd64.go−20 vendor/github.com/go-ole/go-ole/variant_date_arm.go−22 vendor/github.com/go-ole/go-ole/variant_date_arm64.go−23 vendor/github.com/go-ole/go-ole/variant_ppc64le.go−12 vendor/github.com/go-ole/go-ole/variant_s390x.go−12 vendor/github.com/go-ole/go-ole/vt_string.go−58 vendor/github.com/go-ole/go-ole/winrt.go−99 vendor/github.com/go-ole/go-ole/winrt_doc.go−36 vendor/github.com/go-openapi/jsonpointer/.editorconfig−26 vendor/github.com/go-openapi/jsonpointer/.gitignore−1 vendor/github.com/go-openapi/jsonpointer/.travis.yml−15 vendor/github.com/go-openapi/jsonpointer/CODE_OF_CONDUCT.md−74 vendor/github.com/go-openapi/jsonpointer/LICENSE−202 vendor/github.com/go-openapi/jsonpointer/README.md−15 vendor/github.com/go-openapi/jsonpointer/pointer.go−390 vendor/github.com/go-openapi/jsonreference/.gitignore−1 vendor/github.com/go-openapi/jsonreference/.golangci.yml−41 vendor/github.com/go-openapi/jsonreference/.travis.yml−24 vendor/github.com/go-openapi/jsonreference/CODE_OF_CONDUCT.md−74 vendor/github.com/go-openapi/jsonreference/LICENSE−202 vendor/github.com/go-openapi/jsonreference/README.md−15 vendor/github.com/go-openapi/jsonreference/internal/normalize_url.go−63 vendor/github.com/go-openapi/jsonreference/reference.go−158 vendor/github.com/go-openapi/spec/.editorconfig−26 vendor/github.com/go-openapi/spec/.gitignore−2 vendor/github.com/go-openapi/spec/.golangci.yml−42 vendor/github.com/go-openapi/spec/.travis.yml−31 vendor/github.com/go-openapi/spec/CODE_OF_CONDUCT.md−74 vendor/github.com/go-openapi/spec/LICENSE−202 vendor/github.com/go-openapi/spec/README.md−34 vendor/github.com/go-openapi/spec/bindata.go−297 vendor/github.com/go-openapi/spec/cache.go−98 vendor/github.com/go-openapi/spec/contact_info.go−57 vendor/github.com/go-openapi/spec/debug.go−49 vendor/github.com/go-openapi/spec/errors.go−19 vendor/github.com/go-openapi/spec/expander.go−594 vendor/github.com/go-openapi/spec/external_docs.go−24 vendor/github.com/go-openapi/spec/header.go−203 vendor/github.com/go-openapi/spec/info.go−165 vendor/github.com/go-openapi/spec/items.go−234 vendor/github.com/go-openapi/spec/license.go−56 vendor/github.com/go-openapi/spec/normalizer.go−203 vendor/github.com/go-openapi/spec/normalizer_nonwindows.go−43 vendor/github.com/go-openapi/spec/normalizer_windows.go−154 vendor/github.com/go-openapi/spec/operation.go−397 vendor/github.com/go-openapi/spec/parameter.go−326 vendor/github.com/go-openapi/spec/path_item.go−87 vendor/github.com/go-openapi/spec/paths.go−97 vendor/github.com/go-openapi/spec/properties.go−91 vendor/github.com/go-openapi/spec/ref.go−193 vendor/github.com/go-openapi/spec/resolver.go−127 vendor/github.com/go-openapi/spec/response.go−152 vendor/github.com/go-openapi/spec/responses.go−127 vendor/github.com/go-openapi/spec/schema.go−646 vendor/github.com/go-openapi/spec/schema_loader.go−338 vendor/github.com/go-openapi/spec/security_scheme.go−170 vendor/github.com/go-openapi/spec/spec.go−78 vendor/github.com/go-openapi/spec/swagger.go−448 vendor/github.com/go-openapi/spec/tag.go−75 vendor/github.com/go-openapi/spec/validations.go−215 vendor/github.com/go-openapi/spec/xml_object.go−68 vendor/github.com/go-openapi/swag/.editorconfig−26 vendor/github.com/go-openapi/swag/.gitignore−4 vendor/github.com/go-openapi/swag/.golangci.yml−41 vendor/github.com/go-openapi/swag/.travis.yml−37 vendor/github.com/go-openapi/swag/CODE_OF_CONDUCT.md−74 vendor/github.com/go-openapi/swag/LICENSE−202 vendor/github.com/go-openapi/swag/README.md−21 vendor/github.com/go-openapi/swag/convert.go−208 vendor/github.com/go-openapi/swag/convert_types.go−730 vendor/github.com/go-openapi/swag/doc.go−32 vendor/github.com/go-openapi/swag/json.go−312 vendor/github.com/go-openapi/swag/loading.go−120 vendor/github.com/go-openapi/swag/name_lexem.go−87 vendor/github.com/go-openapi/swag/net.go−38 vendor/github.com/go-openapi/swag/path.go−59 vendor/github.com/go-openapi/swag/post_go18.go−23 vendor/github.com/go-openapi/swag/post_go19.go−67 vendor/github.com/go-openapi/swag/pre_go18.go−23 vendor/github.com/go-openapi/swag/pre_go19.go−69 vendor/github.com/go-openapi/swag/split.go−262 vendor/github.com/go-openapi/swag/util.go−385 vendor/github.com/go-openapi/swag/yaml.go−246 vendor/github.com/go-viper/mapstructure/v2/.editorconfig−24 vendor/github.com/go-viper/mapstructure/v2/.envrc−7 vendor/github.com/go-viper/mapstructure/v2/.gitignore−10 vendor/github.com/go-viper/mapstructure/v2/.golangci.yaml−48 vendor/github.com/go-viper/mapstructure/v2/CHANGELOG.md−104 vendor/github.com/go-viper/mapstructure/v2/LICENSE−21 vendor/github.com/go-viper/mapstructure/v2/README.md−81 vendor/github.com/go-viper/mapstructure/v2/decode_hooks.go−714 vendor/github.com/go-viper/mapstructure/v2/devenv.lock−103 vendor/github.com/go-viper/mapstructure/v2/devenv.nix−14 vendor/github.com/go-viper/mapstructure/v2/devenv.yaml−4 vendor/github.com/go-viper/mapstructure/v2/errors.go−244 vendor/github.com/go-viper/mapstructure/v2/internal/errors/errors.go−11 vendor/github.com/go-viper/mapstructure/v2/internal/errors/join.go−9 vendor/github.com/go-viper/mapstructure/v2/internal/errors/join_go1_19.go−61 vendor/github.com/go-viper/mapstructure/v2/mapstructure.go−1948 vendor/github.com/go-viper/mapstructure/v2/reflect_go1_19.go−44 vendor/github.com/go-viper/mapstructure/v2/reflect_go1_20.go−10 vendor/github.com/goccy/go-json/.codecov.yml−32 vendor/github.com/goccy/go-json/.gitignore−2 vendor/github.com/goccy/go-json/.golangci.yml−86 vendor/github.com/goccy/go-json/CHANGELOG.md−425 vendor/github.com/goccy/go-json/LICENSE−21 vendor/github.com/goccy/go-json/Makefile−39 vendor/github.com/goccy/go-json/README.md−529 vendor/github.com/goccy/go-json/color.go−68 vendor/github.com/goccy/go-json/decode.go−263 vendor/github.com/goccy/go-json/docker-compose.yml−13 vendor/github.com/goccy/go-json/encode.go−326 vendor/github.com/goccy/go-json/error.go−41 vendor/github.com/goccy/go-json/internal/decoder/anonymous_field.go−41 vendor/github.com/goccy/go-json/internal/decoder/array.go−176 vendor/github.com/goccy/go-json/internal/decoder/assign.go−438 vendor/github.com/goccy/go-json/internal/decoder/bool.go−83 vendor/github.com/goccy/go-json/internal/decoder/bytes.go−118 vendor/github.com/goccy/go-json/internal/decoder/compile.go−493 vendor/github.com/goccy/go-json/internal/decoder/compile_norace.go−30 vendor/github.com/goccy/go-json/internal/decoder/compile_race.go−38 vendor/github.com/goccy/go-json/internal/decoder/context.go−254 vendor/github.com/goccy/go-json/internal/decoder/float.go−170 vendor/github.com/goccy/go-json/internal/decoder/func.go−146 vendor/github.com/goccy/go-json/internal/decoder/int.go−246 vendor/github.com/goccy/go-json/internal/decoder/interface.go−528 vendor/github.com/goccy/go-json/internal/decoder/invalid.go−55 vendor/github.com/goccy/go-json/internal/decoder/map.go−280 vendor/github.com/goccy/go-json/internal/decoder/number.go−123 vendor/github.com/goccy/go-json/internal/decoder/option.go−17 vendor/github.com/goccy/go-json/internal/decoder/path.go−670 vendor/github.com/goccy/go-json/internal/decoder/ptr.go−97 vendor/github.com/goccy/go-json/internal/decoder/slice.go−380 vendor/github.com/goccy/go-json/internal/decoder/stream.go−556 vendor/github.com/goccy/go-json/internal/decoder/string.go−452 vendor/github.com/goccy/go-json/internal/decoder/struct.go−845 vendor/github.com/goccy/go-json/internal/decoder/type.go−30 vendor/github.com/goccy/go-json/internal/decoder/uint.go−194 vendor/github.com/goccy/go-json/internal/decoder/unmarshal_json.go−104 vendor/github.com/goccy/go-json/internal/decoder/unmarshal_text.go−285 vendor/github.com/goccy/go-json/internal/decoder/wrapped_string.go−73 vendor/github.com/goccy/go-json/internal/encoder/code.go−1023 vendor/github.com/goccy/go-json/internal/encoder/compact.go−286 vendor/github.com/goccy/go-json/internal/encoder/compiler.go−939 vendor/github.com/goccy/go-json/internal/encoder/compiler_norace.go−33 vendor/github.com/goccy/go-json/internal/encoder/compiler_race.go−46 vendor/github.com/goccy/go-json/internal/encoder/context.go−105 vendor/github.com/goccy/go-json/internal/encoder/decode_rune.go−126 vendor/github.com/goccy/go-json/internal/encoder/encoder.go−601 vendor/github.com/goccy/go-json/internal/encoder/indent.go−211 vendor/github.com/goccy/go-json/internal/encoder/int.go−176 vendor/github.com/goccy/go-json/internal/encoder/map112.go−9 vendor/github.com/goccy/go-json/internal/encoder/map113.go−9 vendor/github.com/goccy/go-json/internal/encoder/opcode.go−752 vendor/github.com/goccy/go-json/internal/encoder/option.go−48 vendor/github.com/goccy/go-json/internal/encoder/optype.go−932 vendor/github.com/goccy/go-json/internal/encoder/query.go−135 vendor/github.com/goccy/go-json/internal/encoder/string.go−483 vendor/github.com/goccy/go-json/internal/encoder/string_table.go−415 vendor/github.com/goccy/go-json/internal/encoder/vm/debug_vm.go−41 vendor/github.com/goccy/go-json/internal/encoder/vm/hack.go−9 vendor/github.com/goccy/go-json/internal/encoder/vm/util.go−207 vendor/github.com/goccy/go-json/internal/encoder/vm/vm.go−4859 vendor/github.com/goccy/go-json/internal/encoder/vm_color/debug_vm.go−35 vendor/github.com/goccy/go-json/internal/encoder/vm_color/hack.go−9 vendor/github.com/goccy/go-json/internal/encoder/vm_color/util.go−274 vendor/github.com/goccy/go-json/internal/encoder/vm_color/vm.go−4859 vendor/github.com/goccy/go-json/internal/encoder/vm_color_indent/debug_vm.go−35 vendor/github.com/goccy/go-json/internal/encoder/vm_color_indent/util.go−297 vendor/github.com/goccy/go-json/internal/encoder/vm_color_indent/vm.go−4859 vendor/github.com/goccy/go-json/internal/encoder/vm_indent/debug_vm.go−35 vendor/github.com/goccy/go-json/internal/encoder/vm_indent/hack.go−9 vendor/github.com/goccy/go-json/internal/encoder/vm_indent/util.go−230 vendor/github.com/goccy/go-json/internal/encoder/vm_indent/vm.go−4859 vendor/github.com/goccy/go-json/internal/errors/error.go−183 vendor/github.com/goccy/go-json/internal/runtime/rtype.go−262 vendor/github.com/goccy/go-json/internal/runtime/struct_field.go−91 vendor/github.com/goccy/go-json/internal/runtime/type.go−98 vendor/github.com/goccy/go-json/json.go−368 vendor/github.com/goccy/go-json/option.go−79 vendor/github.com/goccy/go-json/path.go−84 vendor/github.com/goccy/go-json/query.go−47 vendor/github.com/goccy/go-yaml/.codecov.yml−31 vendor/github.com/goccy/go-yaml/.gitignore−3 vendor/github.com/goccy/go-yaml/.golangci.yml−65 vendor/github.com/goccy/go-yaml/CHANGELOG.md−186 vendor/github.com/goccy/go-yaml/LICENSE−21 vendor/github.com/goccy/go-yaml/Makefile−55 vendor/github.com/goccy/go-yaml/README.md−420 vendor/github.com/goccy/go-yaml/ast/ast.go−2381 vendor/github.com/goccy/go-yaml/context.go−37 vendor/github.com/goccy/go-yaml/decode.go−2037 vendor/github.com/goccy/go-yaml/encode.go−1074 vendor/github.com/goccy/go-yaml/error.go−77 vendor/github.com/goccy/go-yaml/internal/errors/error.go−246 vendor/github.com/goccy/go-yaml/internal/format/format.go−541 vendor/github.com/goccy/go-yaml/lexer/lexer.go−23 vendor/github.com/goccy/go-yaml/option.go−352 vendor/github.com/goccy/go-yaml/parser/color.go−28 vendor/github.com/goccy/go-yaml/parser/context.go−187 vendor/github.com/goccy/go-yaml/parser/node.go−257 vendor/github.com/goccy/go-yaml/parser/option.go−12 vendor/github.com/goccy/go-yaml/parser/parser.go−1330 vendor/github.com/goccy/go-yaml/parser/token.go−746 vendor/github.com/goccy/go-yaml/path.go−835 vendor/github.com/goccy/go-yaml/printer/color.go−83 vendor/github.com/goccy/go-yaml/printer/printer.go−353 vendor/github.com/goccy/go-yaml/scanner/context.go−452 vendor/github.com/goccy/go-yaml/scanner/error.go−17 vendor/github.com/goccy/go-yaml/scanner/scanner.go−1536 vendor/github.com/goccy/go-yaml/stdlib_quote.go−113 vendor/github.com/goccy/go-yaml/struct.go−128 vendor/github.com/goccy/go-yaml/token/token.go−1177 vendor/github.com/goccy/go-yaml/validate.go−13 vendor/github.com/goccy/go-yaml/yaml.go−357 vendor/github.com/godbus/dbus/v5/.cirrus.yml−11 vendor/github.com/godbus/dbus/v5/.golangci.yml−13 vendor/github.com/godbus/dbus/v5/CONTRIBUTING.md−50 vendor/github.com/godbus/dbus/v5/LICENSE−25 vendor/github.com/godbus/dbus/v5/MAINTAINERS−3 vendor/github.com/godbus/dbus/v5/README.md−47 vendor/github.com/godbus/dbus/v5/SECURITY.md−13 vendor/github.com/godbus/dbus/v5/auth.go−257 vendor/github.com/godbus/dbus/v5/auth_anonymous.go−16 vendor/github.com/godbus/dbus/v5/auth_default_other.go−7 vendor/github.com/godbus/dbus/v5/auth_default_windows.go−5 vendor/github.com/godbus/dbus/v5/auth_external.go−26 vendor/github.com/godbus/dbus/v5/auth_sha1_windows.go−109 vendor/github.com/godbus/dbus/v5/call.go−66 vendor/github.com/godbus/dbus/v5/conn.go−1009 vendor/github.com/godbus/dbus/v5/conn_darwin.go−36 vendor/github.com/godbus/dbus/v5/conn_other.go−83 vendor/github.com/godbus/dbus/v5/conn_unix.go−40 vendor/github.com/godbus/dbus/v5/conn_windows.go−13 vendor/github.com/godbus/dbus/v5/dbus.go−427 vendor/github.com/godbus/dbus/v5/decoder.go−376 vendor/github.com/godbus/dbus/v5/default_handler.go−338 vendor/github.com/godbus/dbus/v5/doc.go−70 vendor/github.com/godbus/dbus/v5/encoder.go−235 vendor/github.com/godbus/dbus/v5/escape.go−84 vendor/github.com/godbus/dbus/v5/export.go−484 vendor/github.com/godbus/dbus/v5/match.go−89 vendor/github.com/godbus/dbus/v5/message.go−393 vendor/github.com/godbus/dbus/v5/object.go−181 vendor/github.com/godbus/dbus/v5/sequence.go−24 vendor/github.com/godbus/dbus/v5/sequential_handler.go−125 vendor/github.com/godbus/dbus/v5/server_interfaces.go−107 vendor/github.com/godbus/dbus/v5/sig.go−298 vendor/github.com/godbus/dbus/v5/transport_darwin.go−6 vendor/github.com/godbus/dbus/v5/transport_generic.go−52 vendor/github.com/godbus/dbus/v5/transport_nonce_tcp.go−41 vendor/github.com/godbus/dbus/v5/transport_tcp.go−41 vendor/github.com/godbus/dbus/v5/transport_unix.go−291 vendor/github.com/godbus/dbus/v5/transport_unixcred_dragonfly.go−95 vendor/github.com/godbus/dbus/v5/transport_unixcred_freebsd.go−94 vendor/github.com/godbus/dbus/v5/transport_unixcred_linux.go−25 vendor/github.com/godbus/dbus/v5/transport_unixcred_netbsd.go−14 vendor/github.com/godbus/dbus/v5/transport_unixcred_openbsd.go−14 vendor/github.com/godbus/dbus/v5/transport_zos.go−6 vendor/github.com/godbus/dbus/v5/variant.go−169 vendor/github.com/godbus/dbus/v5/variant_lexer.go−284 vendor/github.com/godbus/dbus/v5/variant_parser.go−815 vendor/github.com/golang/freetype/AUTHORS−20 vendor/github.com/golang/freetype/CONTRIBUTORS−38 vendor/github.com/golang/freetype/LICENSE−12 vendor/github.com/golang/freetype/raster/geom.go−245 vendor/github.com/golang/freetype/raster/paint.go−287 vendor/github.com/golang/freetype/raster/raster.go−601 vendor/github.com/golang/freetype/raster/stroke.go−483 vendor/github.com/golang/freetype/truetype/face.go−507 vendor/github.com/golang/freetype/truetype/glyph.go−522 vendor/github.com/golang/freetype/truetype/hint.go−1770 vendor/github.com/golang/freetype/truetype/opcodes.go−289 vendor/github.com/golang/freetype/truetype/truetype.go−653 vendor/github.com/google/go-cmp/LICENSE−27 vendor/github.com/google/go-cmp/cmp/compare.go−671 vendor/github.com/google/go-cmp/cmp/export.go−31 vendor/github.com/google/go-cmp/cmp/internal/diff/debug_disable.go−18 vendor/github.com/google/go-cmp/cmp/internal/diff/debug_enable.go−123 vendor/github.com/google/go-cmp/cmp/internal/diff/diff.go−402 vendor/github.com/google/go-cmp/cmp/internal/flags/flags.go−9 vendor/github.com/google/go-cmp/cmp/internal/function/func.go−106 vendor/github.com/google/go-cmp/cmp/internal/value/name.go−164 vendor/github.com/google/go-cmp/cmp/internal/value/pointer.go−34 vendor/github.com/google/go-cmp/cmp/internal/value/sort.go−106 vendor/github.com/google/go-cmp/cmp/options.go−562 vendor/github.com/google/go-cmp/cmp/path.go−390 vendor/github.com/google/go-cmp/cmp/report.go−54 vendor/github.com/google/go-cmp/cmp/report_compare.go−433 vendor/github.com/google/go-cmp/cmp/report_references.go−264 vendor/github.com/google/go-cmp/cmp/report_reflect.go−414 vendor/github.com/google/go-cmp/cmp/report_slices.go−614 vendor/github.com/google/go-cmp/cmp/report_text.go−432 vendor/github.com/google/go-cmp/cmp/report_value.go−121 vendor/github.com/google/jsonschema-go/LICENSE−21 vendor/github.com/google/jsonschema-go/jsonschema/annotations.go−76 vendor/github.com/google/jsonschema-go/jsonschema/doc.go−115 vendor/github.com/google/jsonschema-go/jsonschema/infer.go−399 vendor/github.com/google/jsonschema-go/jsonschema/json_pointer.go−160 vendor/github.com/google/jsonschema-go/jsonschema/resolve.go−589 vendor/github.com/google/jsonschema-go/jsonschema/schema.go−642 vendor/github.com/google/jsonschema-go/jsonschema/util.go−463 vendor/github.com/google/jsonschema-go/jsonschema/validate.go−906 vendor/github.com/google/s2a-go/.gitignore−6 vendor/github.com/google/s2a-go/CODE_OF_CONDUCT.md−93 vendor/github.com/google/s2a-go/CONTRIBUTING.md−29 vendor/github.com/google/s2a-go/LICENSE.md−202 vendor/github.com/google/s2a-go/README.md−14 vendor/github.com/google/s2a-go/fallback/s2a_fallback.go−167 vendor/github.com/google/s2a-go/internal/authinfo/authinfo.go−119 vendor/github.com/google/s2a-go/internal/handshaker/handshaker.go−438 vendor/github.com/google/s2a-go/internal/handshaker/service/service.go−66 vendor/github.com/google/s2a-go/internal/proto/common_go_proto/common.pb.go−388 vendor/github.com/google/s2a-go/internal/proto/s2a_context_go_proto/s2a_context.pb.go−267 vendor/github.com/google/s2a-go/internal/proto/s2a_go_proto/s2a.pb.go−1377 vendor/github.com/google/s2a-go/internal/proto/s2a_go_proto/s2a_grpc.pb.go−174 vendor/github.com/google/s2a-go/internal/proto/v2/common_go_proto/common.pb.go−549 vendor/github.com/google/s2a-go/internal/proto/v2/s2a_context_go_proto/s2a_context.pb.go−249 vendor/github.com/google/s2a-go/internal/proto/v2/s2a_go_proto/s2a.pb.go−2518 vendor/github.com/google/s2a-go/internal/proto/v2/s2a_go_proto/s2a_grpc.pb.go−160 vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/aeadcrypter.go−34 vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/aesgcm.go−70 vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/chachapoly.go−67 vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/common.go−92 vendor/github.com/google/s2a-go/internal/record/internal/halfconn/ciphersuite.go−98 vendor/github.com/google/s2a-go/internal/record/internal/halfconn/counter.go−60 vendor/github.com/google/s2a-go/internal/record/internal/halfconn/expander.go−59 vendor/github.com/google/s2a-go/internal/record/internal/halfconn/halfconn.go−193 vendor/github.com/google/s2a-go/internal/record/record.go−729 vendor/github.com/google/s2a-go/internal/record/ticketsender.go−178 vendor/github.com/google/s2a-go/internal/tokenmanager/tokenmanager.go−79 vendor/github.com/google/s2a-go/internal/v2/README.md−1 vendor/github.com/google/s2a-go/internal/v2/certverifier/certverifier.go−122 vendor/github.com/google/s2a-go/internal/v2/remotesigner/remotesigner.go−186 vendor/github.com/google/s2a-go/internal/v2/s2av2.go−380 vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/tlsconfigstore.go−403 vendor/github.com/google/s2a-go/retry/retry.go−144 vendor/github.com/google/s2a-go/s2a.go−448 vendor/github.com/google/s2a-go/s2a_options.go−272 vendor/github.com/google/s2a-go/s2a_utils.go−79 vendor/github.com/google/s2a-go/stream/s2a_stream.go−39 vendor/github.com/google/uuid/CHANGELOG.md−41 vendor/github.com/google/uuid/CONTRIBUTING.md−26 vendor/github.com/google/uuid/CONTRIBUTORS−9 vendor/github.com/google/uuid/LICENSE−27 vendor/github.com/google/uuid/README.md−21 vendor/github.com/google/uuid/dce.go−80 vendor/github.com/google/uuid/doc.go−12 vendor/github.com/google/uuid/hash.go−59 vendor/github.com/google/uuid/marshal.go−38 vendor/github.com/google/uuid/node.go−90 vendor/github.com/google/uuid/node_js.go−12 vendor/github.com/google/uuid/node_net.go−33 vendor/github.com/google/uuid/null.go−118 vendor/github.com/google/uuid/sql.go−59 vendor/github.com/google/uuid/time.go−134 vendor/github.com/google/uuid/util.go−43 vendor/github.com/google/uuid/uuid.go−365 vendor/github.com/google/uuid/version1.go−44 vendor/github.com/google/uuid/version4.go−76 vendor/github.com/google/uuid/version6.go−56 vendor/github.com/google/uuid/version7.go−104 vendor/github.com/googleapis/enterprise-certificate-proxy/LICENSE−202 vendor/github.com/googleapis/enterprise-certificate-proxy/client/client.go−219 vendor/github.com/googleapis/enterprise-certificate-proxy/client/util/util.go−100 vendor/github.com/googleapis/gax-go/v2/.release-please-manifest.json−3 vendor/github.com/googleapis/gax-go/v2/CHANGES.md−231 vendor/github.com/googleapis/gax-go/v2/LICENSE−27 vendor/github.com/googleapis/gax-go/v2/apierror/apierror.go−413 vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/README.md−30 vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/custom_error.pb.go−226 vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/custom_error.proto−50 vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/error.pb.go−232 vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/error.proto−46 vendor/github.com/googleapis/gax-go/v2/call_option.go−288 vendor/github.com/googleapis/gax-go/v2/callctx/callctx.go−146 vendor/github.com/googleapis/gax-go/v2/content_type.go−112 vendor/github.com/googleapis/gax-go/v2/feature.go−81 vendor/github.com/googleapis/gax-go/v2/gax.go−41 vendor/github.com/googleapis/gax-go/v2/header.go−200 vendor/github.com/googleapis/gax-go/v2/internal/version.go−20 vendor/github.com/googleapis/gax-go/v2/internallog/internal/internal.go−134 vendor/github.com/googleapis/gax-go/v2/internallog/internallog.go−154 vendor/github.com/googleapis/gax-go/v2/invoke.go−141 vendor/github.com/googleapis/gax-go/v2/proto_json_stream.go−127 vendor/github.com/googleapis/gax-go/v2/release-please-config.json−10 vendor/github.com/googleapis/gax-go/v2/telemetry.go−469 vendor/github.com/gorilla/css/LICENSE−28 vendor/github.com/gorilla/css/scanner/doc.go−33 vendor/github.com/gorilla/css/scanner/scanner.go−360 vendor/github.com/gorilla/websocket/.gitignore−25 vendor/github.com/gorilla/websocket/AUTHORS−9 vendor/github.com/gorilla/websocket/LICENSE−22 vendor/github.com/gorilla/websocket/README.md−33 vendor/github.com/gorilla/websocket/client.go−434 vendor/github.com/gorilla/websocket/compression.go−148 vendor/github.com/gorilla/websocket/conn.go−1238 vendor/github.com/gorilla/websocket/doc.go−227 vendor/github.com/gorilla/websocket/join.go−42 vendor/github.com/gorilla/websocket/json.go−60 vendor/github.com/gorilla/websocket/mask.go−55 vendor/github.com/gorilla/websocket/mask_safe.go−16 vendor/github.com/gorilla/websocket/prepared.go−102 vendor/github.com/gorilla/websocket/proxy.go−77 vendor/github.com/gorilla/websocket/server.go−365 vendor/github.com/gorilla/websocket/tls_handshake.go−21 vendor/github.com/gorilla/websocket/tls_handshake_116.go−21 vendor/github.com/gorilla/websocket/util.go−298 vendor/github.com/gorilla/websocket/x_net_proxy.go−473 vendor/github.com/hashicorp/golang-lru/v2/.gitignore−23 vendor/github.com/hashicorp/golang-lru/v2/.golangci.yml−46 vendor/github.com/hashicorp/golang-lru/v2/2q.go−267 vendor/github.com/hashicorp/golang-lru/v2/LICENSE−364 vendor/github.com/hashicorp/golang-lru/v2/README.md−79 vendor/github.com/hashicorp/golang-lru/v2/doc.go−24 vendor/github.com/hashicorp/golang-lru/v2/internal/list.go−142 vendor/github.com/hashicorp/golang-lru/v2/lru.go−250 vendor/github.com/hashicorp/golang-lru/v2/simplelru/LICENSE_list−29 vendor/github.com/hashicorp/golang-lru/v2/simplelru/lru.go−177 vendor/github.com/hashicorp/golang-lru/v2/simplelru/lru_interface.go−46 vendor/github.com/inconshreveable/mousetrap/LICENSE−201 vendor/github.com/inconshreveable/mousetrap/README.md−23 vendor/github.com/inconshreveable/mousetrap/trap_others.go−16 vendor/github.com/inconshreveable/mousetrap/trap_windows.go−42 vendor/github.com/invopop/jsonschema/.gitignore−2 vendor/github.com/invopop/jsonschema/.golangci.yml−80 vendor/github.com/invopop/jsonschema/COPYING−19 vendor/github.com/invopop/jsonschema/README.md−374 vendor/github.com/invopop/jsonschema/id.go−76 vendor/github.com/invopop/jsonschema/reflect.go−1178 vendor/github.com/invopop/jsonschema/reflect_comments.go−160 vendor/github.com/invopop/jsonschema/schema.go−94 vendor/github.com/invopop/jsonschema/utils.go−26 vendor/github.com/itchyny/gojq/.dockerignore−16 vendor/github.com/itchyny/gojq/.gitattributes−3 vendor/github.com/itchyny/gojq/.gitignore−7 vendor/github.com/itchyny/gojq/CHANGELOG.md−418 vendor/github.com/itchyny/gojq/Dockerfile−14 vendor/github.com/itchyny/gojq/LICENSE−21 vendor/github.com/itchyny/gojq/Makefile−102 vendor/github.com/itchyny/gojq/README.md−164 vendor/github.com/itchyny/gojq/_gojq−43 vendor/github.com/itchyny/gojq/builtin.go−73 vendor/github.com/itchyny/gojq/builtin.jq−188 vendor/github.com/itchyny/gojq/code.go−108 vendor/github.com/itchyny/gojq/compare.go−76 vendor/github.com/itchyny/gojq/compiler.go−1715 vendor/github.com/itchyny/gojq/debug.go−208 vendor/github.com/itchyny/gojq/encoder.go−192 vendor/github.com/itchyny/gojq/env.go−49 vendor/github.com/itchyny/gojq/error.go−383 vendor/github.com/itchyny/gojq/execute.go−443 vendor/github.com/itchyny/gojq/func.go−2190 vendor/github.com/itchyny/gojq/go.dev.mod−8 vendor/github.com/itchyny/gojq/go.dev.sum−4 vendor/github.com/itchyny/gojq/gojq.go−5 vendor/github.com/itchyny/gojq/iter.go−49 vendor/github.com/itchyny/gojq/lexer.go−578 vendor/github.com/itchyny/gojq/module_loader.go−184 vendor/github.com/itchyny/gojq/operator.go−557 vendor/github.com/itchyny/gojq/option.go−96 vendor/github.com/itchyny/gojq/parser.go−1506 vendor/github.com/itchyny/gojq/parser.go.y−669 vendor/github.com/itchyny/gojq/preview.go−77 vendor/github.com/itchyny/gojq/query.go−942 vendor/github.com/itchyny/gojq/release.go−15 vendor/github.com/itchyny/gojq/scope_stack.go−48 vendor/github.com/itchyny/gojq/stack.go−52 vendor/github.com/itchyny/gojq/term_type.go−77 vendor/github.com/itchyny/gojq/type.go−31 vendor/github.com/itchyny/timefmt-go/CHANGELOG.md−37 vendor/github.com/itchyny/timefmt-go/LICENSE−21 vendor/github.com/itchyny/timefmt-go/Makefile−20 vendor/github.com/itchyny/timefmt-go/README.md−69 vendor/github.com/itchyny/timefmt-go/format.go−462 vendor/github.com/itchyny/timefmt-go/parse.go−474 vendor/github.com/itchyny/timefmt-go/timefmt.go−2 vendor/github.com/jackmordaunt/icns/v3/.gitignore−3 vendor/github.com/jackmordaunt/icns/v3/.goreleaser.yml−38 vendor/github.com/jackmordaunt/icns/v3/LICENSE−21 vendor/github.com/jackmordaunt/icns/v3/doc.go−20 vendor/github.com/jackmordaunt/icns/v3/error.go−18 vendor/github.com/jackmordaunt/icns/v3/icns.go−220 vendor/github.com/jackmordaunt/icns/v3/interpolation.go−24 vendor/github.com/jackmordaunt/icns/v3/reader.go−143 vendor/github.com/jackmordaunt/icns/v3/readme.md−134 vendor/github.com/jackmordaunt/icns/v3/release.sh−15

4321 more files changed are not listed.

flake.nix+1−1
@@ -22,7 +22,7 @@
2222
2323 src = ./.;
2424
25− vendorHash = null;
25+ vendorHash = "sha256-4gHvyEqiFhEvZ90lJbXeI/1fMMo6L19P/PD5Eu5YUmI=";
2626
2727 # Match the Go toolchain used in the dev shell.
2828 go = pkgs.go_1_26;
internal/agent/tools/download.go+3−3
@@ -67,7 +67,7 @@ func NewDownloadTool(permissions permission.Service, workingDir string, client *
6767 downloadDescription(),
6868 func(ctx context.Context, params DownloadParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
6969 if params.URL == "" {
70− return fantasy.NewTextErrorResponse("url parameter is required"), nil
70+ return fantasy.NewTextErrorResponse("URL parameter is required"), nil
7171 }
7272
7373 if params.FilePath == "" {
@@ -75,7 +75,7 @@ func NewDownloadTool(permissions permission.Service, workingDir string, client *
7575 }
7676
7777 if !strings.HasPrefix(params.URL, "http://") && !strings.HasPrefix(params.URL, "https://") {
78− return fantasy.NewTextErrorResponse("url must start with http:// or https://"), nil
78+ return fantasy.NewTextErrorResponse("URL must start with http:// or https://"), nil
7979 }
8080
8181 filePath := filepathext.SmartJoin(workingDir, params.FilePath)
@@ -131,7 +131,7 @@ func NewDownloadTool(permissions permission.Service, workingDir string, client *
131131 defer resp.Body.Close()
132132
133133 if resp.StatusCode != http.StatusOK {
134− return fantasy.NewTextErrorResponse(fmt.Sprintf("request failed with status code: %d", resp.StatusCode)), nil
134+ return fantasy.NewTextErrorResponse(fmt.Sprintf("Request failed with status code: %d", resp.StatusCode)), nil
135135 }
136136
137137 // Create parent directories if they don't exist
internal/agent/tools/fetch.go+11−11
@@ -60,16 +60,16 @@ func NewFetchTool(permissions permission.Service, workingDir string, client *htt
6060 fetchDescription(),
6161 func(ctx context.Context, params FetchParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
6262 if params.URL == "" {
63− return fantasy.NewTextErrorResponse("url parameter is required"), nil
63+ return fantasy.NewTextErrorResponse("URL parameter is required"), nil
6464 }
6565
6666 format := strings.ToLower(params.Format)
6767 if format != "text" && format != "markdown" && format != "html" {
68− return fantasy.NewTextErrorResponse("format must be one of: text, markdown, html"), nil
68+ return fantasy.NewTextErrorResponse("Format must be one of: text, markdown, html"), nil
6969 }
7070
7171 if !strings.HasPrefix(params.URL, "http://") && !strings.HasPrefix(params.URL, "https://") {
72− return fantasy.NewTextErrorResponse("url must start with http:// or https://"), nil
72+ return fantasy.NewTextErrorResponse("URL must start with http:// or https://"), nil
7373 }
7474
7575 sessionID := GetSessionFromContext(ctx)
@@ -124,19 +124,19 @@ func NewFetchTool(permissions permission.Service, workingDir string, client *htt
124124 defer resp.Body.Close()
125125
126126 if resp.StatusCode != http.StatusOK {
127− return fantasy.NewTextErrorResponse(fmt.Sprintf("request failed with status code: %d", resp.StatusCode)), nil
127+ return fantasy.NewTextErrorResponse(fmt.Sprintf("Request failed with status code: %d", resp.StatusCode)), nil
128128 }
129129
130130 body, err := io.ReadAll(io.LimitReader(resp.Body, MaxFetchSize))
131131 if err != nil {
132− return fantasy.NewTextErrorResponse("failed to read response body: " + err.Error()), nil
132+ return fantasy.NewTextErrorResponse("Failed to read response body: " + err.Error()), nil
133133 }
134134
135135 content := string(body)
136136
137137 validUTF8 := utf8.ValidString(content)
138138 if !validUTF8 {
139− return fantasy.NewTextErrorResponse("response content is not valid UTF-8"), nil
139+ return fantasy.NewTextErrorResponse("Response content is not valid UTF-8"), nil
140140 }
141141 contentType := resp.Header.Get("Content-Type")
142142
@@ -145,7 +145,7 @@ func NewFetchTool(permissions permission.Service, workingDir string, client *htt
145145 if strings.Contains(contentType, "text/html") {
146146 text, err := extractTextFromHTML(content)
147147 if err != nil {
148− return fantasy.NewTextErrorResponse("failed to extract text from HTML: " + err.Error()), nil
148+ return fantasy.NewTextErrorResponse("Failed to extract text from HTML: " + err.Error()), nil
149149 }
150150 content = text
151151 }
@@ -154,7 +154,7 @@ func NewFetchTool(permissions permission.Service, workingDir string, client *htt
154154 if strings.Contains(contentType, "text/html") {
155155 markdown, err := convertHTMLToMarkdown(content)
156156 if err != nil {
157− return fantasy.NewTextErrorResponse("failed to convert HTML to Markdown: " + err.Error()), nil
157+ return fantasy.NewTextErrorResponse("Failed to convert HTML to Markdown: " + err.Error()), nil
158158 }
159159 content = markdown
160160 }
@@ -166,14 +166,14 @@ func NewFetchTool(permissions permission.Service, workingDir string, client *htt
166166 if strings.Contains(contentType, "text/html") {
167167 doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
168168 if err != nil {
169− return fantasy.NewTextErrorResponse("failed to parse HTML: " + err.Error()), nil
169+ return fantasy.NewTextErrorResponse("Failed to parse HTML: " + err.Error()), nil
170170 }
171171 body, err := doc.Find("body").Html()
172172 if err != nil {
173− return fantasy.NewTextErrorResponse("failed to extract body from HTML: " + err.Error()), nil
173+ return fantasy.NewTextErrorResponse("Failed to extract body from HTML: " + err.Error()), nil
174174 }
175175 if body == "" {
176− return fantasy.NewTextErrorResponse("no body content found in HTML"), nil
176+ return fantasy.NewTextErrorResponse("No body content found in HTML"), nil
177177 }
178178 content = "<html>\n<body>\n" + body + "\n</body>\n</html>"
179179 }
internal/agent/tools/mcp-tools.go+1−1
@@ -134,7 +134,7 @@ func (m *Tool) Run(ctx context.Context, params fantasy.ToolCall) (fantasy.ToolRe
134134 case "image", "media":
135135 if !GetSupportsImagesFromContext(ctx) {
136136 modelName := GetModelNameFromContext(ctx)
137− return fantasy.NewTextErrorResponse(fmt.Sprintf("this model (%s) does not support image data.", modelName)), nil
137+ return fantasy.NewTextErrorResponse(fmt.Sprintf("This model (%s) does not support image data.", modelName)), nil
138138 }
139139
140140 var response fantasy.ToolResponse
internal/agent/tools/sourcegraph.go+4−4
@@ -64,7 +64,7 @@ func NewSourcegraphTool(client *http.Client) fantasy.AgentTool {
6464 sourcegraphDescription(),
6565 func(ctx context.Context, params SourcegraphParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
6666 if params.Query == "" {
67− return fantasy.NewTextErrorResponse("query parameter is required"), nil
67+ return fantasy.NewTextErrorResponse("Query parameter is required"), nil
6868 }
6969
7070 if params.Count <= 0 {
@@ -129,10 +129,10 @@ func NewSourcegraphTool(client *http.Client) fantasy.AgentTool {
129129 if resp.StatusCode != http.StatusOK {
130130 body, _ := io.ReadAll(resp.Body)
131131 if len(body) > 0 {
132− return fantasy.NewTextErrorResponse(fmt.Sprintf("request failed with status code: %d, response: %s", resp.StatusCode, string(body))), nil
132+ return fantasy.NewTextErrorResponse(fmt.Sprintf("Request failed with status code: %d, response: %s", resp.StatusCode, string(body))), nil
133133 }
134134
135− return fantasy.NewTextErrorResponse(fmt.Sprintf("request failed with status code: %d", resp.StatusCode)), nil
135+ return fantasy.NewTextErrorResponse(fmt.Sprintf("Request failed with status code: %d", resp.StatusCode)), nil
136136 }
137137 body, err := io.ReadAll(resp.Body)
138138 if err != nil {
@@ -146,7 +146,7 @@ func NewSourcegraphTool(client *http.Client) fantasy.AgentTool {
146146
147147 formattedResults, err := formatSourcegraphResults(result, params.ContextWindow)
148148 if err != nil {
149− return fantasy.NewTextErrorResponse("failed to format results: " + err.Error()), nil
149+ return fantasy.NewTextErrorResponse("Failed to format results: " + err.Error()), nil
150150 }
151151
152152 return fantasy.NewTextResponse(formattedResults), nil
internal/agent/tools/view.go+9−9
@@ -177,19 +177,19 @@ func NewViewTool(
177177 }
178178
179179 if len(suggestions) > 0 {
180− return fantasy.NewTextErrorResponse(fmt.Sprintf("file not found: %s\n\nDid you mean one of these?\n%s",
180+ return fantasy.NewTextErrorResponse(fmt.Sprintf("File not found: %s\n\nDid you mean one of these?\n%s",
181181 filePath, strings.Join(suggestions, "\n"))), nil
182182 }
183183 }
184184
185− return fantasy.NewTextErrorResponse(fmt.Sprintf("file not found: %s", filePath)), nil
185+ return fantasy.NewTextErrorResponse(fmt.Sprintf("File not found: %s", filePath)), nil
186186 }
187187 return fantasy.ToolResponse{}, fmt.Errorf("error accessing file: %w", err)
188188 }
189189
190190 // Check if it's a directory
191191 if fileInfo.IsDir() {
192− return fantasy.NewTextErrorResponse(fmt.Sprintf("path is a directory, not a file: %s", filePath)), nil
192+ return fantasy.NewTextErrorResponse(fmt.Sprintf("Path is a directory, not a file: %s", filePath)), nil
193193 }
194194
195195 // Set default limit if not provided (no limit for SKILL.md files)
@@ -204,12 +204,12 @@ func NewViewTool(
204204 isSupportedImage, mimeType := getImageMimeType(filePath)
205205 if isSupportedImage {
206206 if fileInfo.Size() > MaxViewSize {
207− return fantasy.NewTextErrorResponse(fmt.Sprintf("image file is too large (%d bytes). Maximum size is %d bytes",
207+ return fantasy.NewTextErrorResponse(fmt.Sprintf("Image file is too large (%d bytes). Maximum size is %d bytes",
208208 fileInfo.Size(), MaxViewSize)), nil
209209 }
210210 if !GetSupportsImagesFromContext(ctx) {
211211 modelName := GetModelNameFromContext(ctx)
212− return fantasy.NewTextErrorResponse(fmt.Sprintf("this model (%s) does not support image data.", modelName)), nil
212+ return fantasy.NewTextErrorResponse(fmt.Sprintf("This model (%s) does not support image data.", modelName)), nil
213213 }
214214
215215 imageData, readErr := os.ReadFile(filePath)
@@ -237,13 +237,13 @@ func NewViewTool(
237237 if err != nil {
238238 var tooLarge contentTooLargeError
239239 if errors.As(err, &tooLarge) {
240− return fantasy.NewTextErrorResponse(fmt.Sprintf("content section is too large (%d bytes). Maximum size is %d bytes",
240+ return fantasy.NewTextErrorResponse(fmt.Sprintf("Content section is too large (%d bytes). Maximum size is %d bytes",
241241 tooLarge.Size, tooLarge.Max)), nil
242242 }
243243 return fantasy.ToolResponse{}, fmt.Errorf("error reading file: %w", err)
244244 }
245245 if !utf8.ValidString(content) {
246− return fantasy.NewTextErrorResponse("file content is not valid UTF-8"), nil
246+ return fantasy.NewTextErrorResponse("File content is not valid UTF-8"), nil
247247 }
248248
249249 openInLSPs(ctx, lspManager, filePath)
@@ -448,12 +448,12 @@ func readBuiltinFile(params ViewParams, skillTracker *skills.Tracker) (fantasy.T
448448
449449 data, err := fs.ReadFile(builtinFS, embeddedPath)
450450 if err != nil {
451− return fantasy.NewTextErrorResponse(fmt.Sprintf("builtin file not found: %s", params.FilePath)), nil
451+ return fantasy.NewTextErrorResponse(fmt.Sprintf("Builtin file not found: %s", params.FilePath)), nil
452452 }
453453
454454 content := string(data)
455455 if !utf8.ValidString(content) {
456− return fantasy.NewTextErrorResponse("file content is not valid UTF-8"), nil
456+ return fantasy.NewTextErrorResponse("File content is not valid UTF-8"), nil
457457 }
458458
459459 limit := params.Limit
internal/agent/tools/view_test.go+2−2
@@ -151,7 +151,7 @@ func TestViewToolBlocksOversizedReturnedSections(t *testing.T) {
151151 })
152152
153153 require.True(t, resp.IsError)
154− require.Contains(t, resp.Content, "content section is too large")
154+ require.Contains(t, resp.Content, "Content section is too large")
155155}
156156
157157func TestViewToolBlocksOversizedImages(t *testing.T) {
@@ -169,7 +169,7 @@ func TestViewToolBlocksOversizedImages(t *testing.T) {
169169 })
170170
171171 require.True(t, resp.IsError)
172− require.Contains(t, resp.Content, "image file is too large")
172+ require.Contains(t, resp.Content, "Image file is too large")
173173}
174174
175175func TestReadTextFileEnforcesMaxContentSize(t *testing.T) {
internal/agent/tools/web_fetch.go+4−4
@@ -45,7 +45,7 @@ func NewWebFetchTool(workingDir string, client *http.Client) fantasy.AgentTool {
4545
4646 content, err := FetchURLAndConvert(ctx, client, params.URL)
4747 if err != nil {
48− return fantasy.NewTextErrorResponse(fmt.Sprintf("failed to fetch URL: %s", err)), nil
48+ return fantasy.NewTextErrorResponse(fmt.Sprintf("Failed to fetch URL: %s", err)), nil
4949 }
5050
5151 hasLargeContent := len(content) > LargeContentThreshold
@@ -54,16 +54,16 @@ func NewWebFetchTool(workingDir string, client *http.Client) fantasy.AgentTool {
5454 if hasLargeContent {
5555 tempFile, err := os.CreateTemp(workingDir, "page-*.md")
5656 if err != nil {
57− return fantasy.NewTextErrorResponse(fmt.Sprintf("failed to create temporary file: %s", err)), nil
57+ return fantasy.NewTextErrorResponse(fmt.Sprintf("Failed to create temporary file: %s", err)), nil
5858 }
5959 tempFilePath := tempFile.Name()
6060
6161 if _, err := tempFile.WriteString(content); err != nil {
6262 _ = tempFile.Close() // Best effort close
63− return fantasy.NewTextErrorResponse(fmt.Sprintf("failed to write content to file: %s", err)), nil
63+ return fantasy.NewTextErrorResponse(fmt.Sprintf("Failed to write content to file: %s", err)), nil
6464 }
6565 if err := tempFile.Close(); err != nil {
66− return fantasy.NewTextErrorResponse(fmt.Sprintf("failed to close temporary file: %s", err)), nil
66+ return fantasy.NewTextErrorResponse(fmt.Sprintf("Failed to close temporary file: %s", err)), nil
6767 }
6868
6969 fmt.Fprintf(&result, "Fetched content from %s (large page)\n\n", params.URL)
internal/agent/tools/web_search.go+1−1
@@ -53,7 +53,7 @@ func NewWebSearchTool(client *http.Client) fantasy.AgentTool {
5353 results, err := searchDuckDuckGo(ctx, client, params.Query, maxResults)
5454 slog.Debug("Web search completed", "query", params.Query, "results", len(results), "err", err)
5555 if err != nil {
56− return fantasy.NewTextErrorResponse("failed to search: " + err.Error()), nil
56+ return fantasy.NewTextErrorResponse("Failed to search: " + err.Error()), nil
5757 }
5858
5959 return fantasy.NewTextResponse(formatSearchResults(results)), nil
internal/agent/tools/write.go+3−3
@@ -69,13 +69,13 @@ func NewWriteTool(
6969 oldContent := ""
7070 if err == nil {
7171 if fileInfo.IsDir() {
72− return fantasy.NewTextErrorResponse(fmt.Sprintf("path is a directory, not a file: %s", filePath)), nil
72+ return fantasy.NewTextErrorResponse(fmt.Sprintf("Path is a directory, not a file: %s", filePath)), nil
7373 }
7474
7575 modTime := fileInfo.ModTime().Truncate(time.Second)
7676 lastRead := filetracker.LastReadTime(ctx, sessionID, filePath)
7777 if modTime.After(lastRead) {
78− return fantasy.NewTextErrorResponse(fmt.Sprintf("file %s has been modified since it was last read.\nLast modification: %s\nLast read: %s\n\nPlease read the file again before modifying it.",
78+ return fantasy.NewTextErrorResponse(fmt.Sprintf("File %s has been modified since it was last read.\nLast modification: %s\nLast read: %s\n\nPlease read the file again before modifying it.",
7979 filePath, modTime.Format(time.RFC3339), lastRead.Format(time.RFC3339))), nil
8080 }
8181
@@ -83,7 +83,7 @@ func NewWriteTool(
8383 if readErr == nil {
8484 oldContent = string(oldBytes)
8585 if oldContent == params.Content {
86− return fantasy.NewTextErrorResponse(fmt.Sprintf("file %s already contains the exact content. No changes made.", filePath)), nil
86+ return fantasy.NewTextErrorResponse(fmt.Sprintf("File %s already contains the exact content. No changes made.", filePath)), nil
8787 }
8888 }
8989 } else if !os.IsNotExist(err) {
internal/cmd/session.go+1−1
@@ -485,7 +485,7 @@ func outputSessionHuman(ctx context.Context, cfg *config.ConfigStore, sess sessi
485485
486486 first := true
487487 for _, msg := range msgs {
488− items := chat.ExtractMessageItems(&styles, msg, toolResults, "")
488+ items := chat.ExtractMessageItems(&styles, msg, toolResults)
489489 for _, item := range items {
490490 if !first {
491491 fmt.Fprintln(&buf)
internal/config/config.go−1
@@ -221,7 +221,6 @@ type LSPConfig struct {
221221type TUIOptions struct {
222222 CompactMode bool `json:"compact_mode,omitempty" jsonschema:"description=Enable compact mode for the TUI interface,default=false"`
223223 DiffMode string `json:"diff_mode,omitempty" jsonschema:"description=Diff mode for the TUI interface,enum=unified,enum=split"`
224− DiffTool string `json:"diff_tool,omitempty" jsonschema:"description=External diff tool for edit diffs in the TUI,enum=builtin,enum=difftastic,default=builtin"`
225224 // Theme selects the TUI color scheme. "auto" (the default) picks light
226225 // or dark based on the detected terminal background; "dark"/"light"
227226 // force a specific scheme.
internal/ui/attachments/attachments.go+2−2
@@ -132,8 +132,8 @@ func (r *Renderer) Render(attachments []message.Attachment, deleting bool, width
132132 )
133133 }
134134
135− if i == fits && len(attachments) > i+1 {
136− chips = append(chips, lipgloss.NewStyle().Width(maxItemWidth).Render(fmt.Sprintf("%d more…", len(attachments)-fits-1)))
135+ if i == fits && len(attachments) > i {
136+ chips = append(chips, lipgloss.NewStyle().Width(maxItemWidth).Render(fmt.Sprintf("%d more…", len(attachments)-fits)))
137137 break
138138 }
139139 }
internal/ui/chat/agent.go+2−2
@@ -57,7 +57,7 @@ func NewAgentToolMessageItem(
5757 canceled bool,
5858) *AgentToolMessageItem {
5959 t := &AgentToolMessageItem{}
60− t.baseToolMessageItem = newBaseToolMessageItem(sty, toolCall, result, &AgentToolRenderContext{agent: t}, canceled, "")
60+ t.baseToolMessageItem = newBaseToolMessageItem(sty, toolCall, result, &AgentToolRenderContext{agent: t}, canceled)
6161 // For the agent tool we keep spinning until the tool call is finished.
6262 t.spinningFunc = func(state SpinningState) bool {
6363 return !state.HasResult() && !state.IsCanceled()
@@ -238,7 +238,7 @@ func NewAgenticFetchToolMessageItem(
238238 canceled bool,
239239) *AgenticFetchToolMessageItem {
240240 t := &AgenticFetchToolMessageItem{}
241− t.baseToolMessageItem = newBaseToolMessageItem(sty, toolCall, result, &AgenticFetchToolRenderContext{fetch: t}, canceled, "")
241+ t.baseToolMessageItem = newBaseToolMessageItem(sty, toolCall, result, &AgenticFetchToolRenderContext{fetch: t}, canceled)
242242 // For the agentic fetch tool we keep spinning until the tool call is finished.
243243 t.spinningFunc = func(state SpinningState) bool {
244244 return !state.HasResult() && !state.IsCanceled()
internal/ui/chat/bash.go+3−3
@@ -31,7 +31,7 @@ func NewBashToolMessageItem(
3131 result *message.ToolResult,
3232 canceled bool,
3333) ToolMessageItem {
34− return newBaseToolMessageItem(sty, toolCall, result, &BashToolRenderContext{}, canceled, "")
34+ return newBaseToolMessageItem(sty, toolCall, result, &BashToolRenderContext{}, canceled)
3535}
3636
3737// BashToolRenderContext renders bash tool messages.
@@ -116,7 +116,7 @@ func NewJobOutputToolMessageItem(
116116 result *message.ToolResult,
117117 canceled bool,
118118) ToolMessageItem {
119− return newBaseToolMessageItem(sty, toolCall, result, &JobOutputToolRenderContext{}, canceled, "")
119+ return newBaseToolMessageItem(sty, toolCall, result, &JobOutputToolRenderContext{}, canceled)
120120}
121121
122122// JobOutputToolRenderContext renders job_output tool messages.
@@ -167,7 +167,7 @@ func NewJobKillToolMessageItem(
167167 result *message.ToolResult,
168168 canceled bool,
169169) ToolMessageItem {
170− return newBaseToolMessageItem(sty, toolCall, result, &JobKillToolRenderContext{}, canceled, "")
170+ return newBaseToolMessageItem(sty, toolCall, result, &JobKillToolRenderContext{}, canceled)
171171}
172172
173173// JobKillToolRenderContext renders job_kill tool messages.
internal/ui/chat/diagnostics.go+1−1
@@ -27,7 +27,7 @@ func NewDiagnosticsToolMessageItem(
2727 result *message.ToolResult,
2828 canceled bool,
2929) ToolMessageItem {
30− return newBaseToolMessageItem(sty, toolCall, result, &DiagnosticsToolRenderContext{}, canceled, "")
30+ return newBaseToolMessageItem(sty, toolCall, result, &DiagnosticsToolRenderContext{}, canceled)
3131}
3232
3333// DiagnosticsToolRenderContext renders diagnostics tool messages.
internal/ui/chat/docker_mcp.go+2−2
@@ -28,7 +28,7 @@ func NewDockerMCPToolMessageItem(
2828 result *message.ToolResult,
2929 canceled bool,
3030) ToolMessageItem {
31− return newBaseToolMessageItem(sty, toolCall, result, &DockerMCPToolRenderContext{}, canceled, "")
31+ return newBaseToolMessageItem(sty, toolCall, result, &DockerMCPToolRenderContext{}, canceled)
3232}
3333
3434// DockerMCPToolRenderContext renders Docker MCP tool messages.
@@ -138,7 +138,7 @@ func (d *DockerMCPToolRenderContext) RenderTool(sty *styles.Styles, width int, o
138138
139139 // Handle text content.
140140 if opts.Result.Content != "" {
141− body := renderToolResultTextContent(sty, opts.Result.Content, toolResultContentWidths{Body: bodyWidth, Diff: cappedWidth}, opts.ExpandedContent, opts.DiffTool)
141+ body := renderToolResultTextContent(sty, opts.Result.Content, toolResultContentWidths{Body: bodyWidth, Diff: cappedWidth}, opts.ExpandedContent)
142142 parts = append(parts, body)
143143 }
144144
internal/ui/chat/fetch.go+3−3
@@ -26,7 +26,7 @@ func NewFetchToolMessageItem(
2626 result *message.ToolResult,
2727 canceled bool,
2828) ToolMessageItem {
29− return newBaseToolMessageItem(sty, toolCall, result, &FetchToolRenderContext{}, canceled, "")
29+ return newBaseToolMessageItem(sty, toolCall, result, &FetchToolRenderContext{}, canceled)
3030}
3131
3232// FetchToolRenderContext renders fetch tool messages.
@@ -101,7 +101,7 @@ func NewWebFetchToolMessageItem(
101101 result *message.ToolResult,
102102 canceled bool,
103103) ToolMessageItem {
104− return newBaseToolMessageItem(sty, toolCall, result, &WebFetchToolRenderContext{}, canceled, "")
104+ return newBaseToolMessageItem(sty, toolCall, result, &WebFetchToolRenderContext{}, canceled)
105105}
106106
107107// WebFetchToolRenderContext renders web_fetch tool messages.
@@ -155,7 +155,7 @@ func NewWebSearchToolMessageItem(
155155 result *message.ToolResult,
156156 canceled bool,
157157) ToolMessageItem {
158− return newBaseToolMessageItem(sty, toolCall, result, &WebSearchToolRenderContext{}, canceled, "")
158+ return newBaseToolMessageItem(sty, toolCall, result, &WebSearchToolRenderContext{}, canceled)
159159}
160160
161161// WebSearchToolRenderContext renders web_search tool messages.
internal/ui/chat/file.go+8−8
@@ -29,7 +29,7 @@ func NewViewToolMessageItem(
2929 result *message.ToolResult,
3030 canceled bool,
3131) ToolMessageItem {
32− return newBaseToolMessageItem(sty, toolCall, result, &ViewToolRenderContext{}, canceled, "")
32+ return newBaseToolMessageItem(sty, toolCall, result, &ViewToolRenderContext{}, canceled)
3333}
3434
3535// ViewToolRenderContext renders view tool messages.
@@ -115,7 +115,7 @@ func NewWriteToolMessageItem(
115115 result *message.ToolResult,
116116 canceled bool,
117117) ToolMessageItem {
118− return newBaseToolMessageItem(sty, toolCall, result, &WriteToolRenderContext{}, canceled, "")
118+ return newBaseToolMessageItem(sty, toolCall, result, &WriteToolRenderContext{}, canceled)
119119}
120120
121121// WriteToolRenderContext renders write tool messages.
@@ -151,7 +151,7 @@ func (w *WriteToolRenderContext) RenderTool(sty *styles.Styles, width int, opts
151151 var meta tools.WriteResponseMetadata
152152 if err := json.Unmarshal([]byte(opts.Result.Metadata), &meta); err == nil && meta.Diff != "" {
153153 errLine := toolErrorContent(sty, opts.Result, cappedWidth, opts.ExpandedContent)
154− diff := toolOutputDiffContentFromUnified(sty, meta.Diff, cappedWidth, opts.ExpandedContent, opts.DiffTool)
154+ diff := toolOutputDiffContentFromUnified(sty, meta.Diff, cappedWidth, opts.ExpandedContent)
155155 return strings.Join([]string{header, "", errLine, "", diff}, "\n")
156156 }
157157 return joinToolParts(header, toolErrorContent(sty, opts.Result, cappedWidth, opts.ExpandedContent))
@@ -184,7 +184,7 @@ func NewEditToolMessageItem(
184184 result *message.ToolResult,
185185 canceled bool,
186186) ToolMessageItem {
187− return newBaseToolMessageItem(sty, toolCall, result, &EditToolRenderContext{}, canceled, "")
187+ return newBaseToolMessageItem(sty, toolCall, result, &EditToolRenderContext{}, canceled)
188188}
189189
190190// EditToolRenderContext renders edit tool messages.
@@ -223,7 +223,7 @@ func (e *EditToolRenderContext) RenderTool(sty *styles.Styles, width int, opts *
223223 return joinToolParts(header, body)
224224 }
225225
226− diff := toolOutputDiffContent(sty, file, meta.OldContent, meta.NewContent, width, opts.ExpandedContent, opts.DiffTool)
226+ diff := toolOutputDiffContent(sty, file, meta.OldContent, meta.NewContent, width, opts.ExpandedContent)
227227
228228 // On error (e.g. denied permission), show error above the diff.
229229 if opts.Result.IsError {
@@ -252,7 +252,7 @@ func NewMultiEditToolMessageItem(
252252 result *message.ToolResult,
253253 canceled bool,
254254) ToolMessageItem {
255− return newBaseToolMessageItem(sty, toolCall, result, &MultiEditToolRenderContext{}, canceled, "")
255+ return newBaseToolMessageItem(sty, toolCall, result, &MultiEditToolRenderContext{}, canceled)
256256}
257257
258258// MultiEditToolRenderContext renders multi-edit tool messages.
@@ -297,7 +297,7 @@ func (m *MultiEditToolRenderContext) RenderTool(sty *styles.Styles, width int, o
297297 }
298298
299299 // Render diff with optional failed edits note.
300− diff := toolOutputMultiEditDiffContent(sty, file, meta, len(params.Edits), width, opts.ExpandedContent, opts.DiffTool)
300+ diff := toolOutputMultiEditDiffContent(sty, file, meta, len(params.Edits), width, opts.ExpandedContent)
301301
302302 // On error (e.g. denied permission), show error above the diff.
303303 if opts.Result.IsError {
@@ -326,7 +326,7 @@ func NewDownloadToolMessageItem(
326326 result *message.ToolResult,
327327 canceled bool,
328328) ToolMessageItem {
329− return newBaseToolMessageItem(sty, toolCall, result, &DownloadToolRenderContext{}, canceled, "")
329+ return newBaseToolMessageItem(sty, toolCall, result, &DownloadToolRenderContext{}, canceled)
330330}
331331
332332// DownloadToolRenderContext renders download tool messages.
internal/ui/chat/generic.go+2−2
@@ -22,7 +22,7 @@ func NewGenericToolMessageItem(
2222 result *message.ToolResult,
2323 canceled bool,
2424) ToolMessageItem {
25− return newBaseToolMessageItem(sty, toolCall, result, &GenericToolRenderContext{}, canceled, "")
25+ return newBaseToolMessageItem(sty, toolCall, result, &GenericToolRenderContext{}, canceled)
2626}
2727
2828// GenericToolRenderContext renders unknown/generic tool messages.
@@ -68,6 +68,6 @@ func (g *GenericToolRenderContext) RenderTool(sty *styles.Styles, width int, opt
6868 return joinToolParts(header, body)
6969 }
7070
71− body := renderToolResultTextContent(sty, opts.Result.Content, toolResultContentWidths{Body: bodyWidth, Diff: cappedWidth}, opts.ExpandedContent, opts.DiffTool)
71+ body := renderToolResultTextContent(sty, opts.Result.Content, toolResultContentWidths{Body: bodyWidth, Diff: cappedWidth}, opts.ExpandedContent)
7272 return joinToolParts(header, body)
7373}
internal/ui/chat/lsp_restart.go+1−1
@@ -22,7 +22,7 @@ func NewLSPRestartToolMessageItem(
2222 result *message.ToolResult,
2323 canceled bool,
2424) ToolMessageItem {
25− return newBaseToolMessageItem(sty, toolCall, result, &LSPRestartToolRenderContext{}, canceled, "")
25+ return newBaseToolMessageItem(sty, toolCall, result, &LSPRestartToolRenderContext{}, canceled)
2626}
2727
2828// LSPRestartToolRenderContext renders lsprestart tool messages.
internal/ui/chat/mcp.go+2−2
@@ -23,7 +23,7 @@ func NewMCPToolMessageItem(
2323 result *message.ToolResult,
2424 canceled bool,
2525) ToolMessageItem {
26− return newBaseToolMessageItem(sty, toolCall, result, &MCPToolRenderContext{}, canceled, "")
26+ return newBaseToolMessageItem(sty, toolCall, result, &MCPToolRenderContext{}, canceled)
2727}
2828
2929// MCPToolRenderContext renders bash tool messages.
@@ -73,6 +73,6 @@ func (b *MCPToolRenderContext) RenderTool(sty *styles.Styles, width int, opts *T
7373 }
7474
7575 bodyWidth := cappedWidth - toolBodyLeftPaddingTotal
76− body := renderToolResultTextContent(sty, opts.Result.Content, toolResultContentWidths{Body: bodyWidth, Diff: cappedWidth}, opts.ExpandedContent, opts.DiffTool)
76+ body := renderToolResultTextContent(sty, opts.Result.Content, toolResultContentWidths{Body: bodyWidth, Diff: cappedWidth}, opts.ExpandedContent)
7777 return joinToolParts(header, body)
7878}
internal/ui/chat/messages.go+1−2
@@ -364,7 +364,7 @@ func cappedMessageWidth(availableWidth int) int {
364364//
365365// For assistant messages with tool calls, pass a toolResults map to link results.
366366// Use BuildToolResultMap to create this map from all messages in a session.
367−func ExtractMessageItems(sty *styles.Styles, msg *message.Message, toolResults map[string]message.ToolResult, diffTool string) []MessageItem {
367+func ExtractMessageItems(sty *styles.Styles, msg *message.Message, toolResults map[string]message.ToolResult) []MessageItem {
368368 switch msg.Role {
369369 case message.User:
370370 // Reconstruct shell command items from ShellCommand parts.
@@ -401,7 +401,6 @@ func ExtractMessageItems(sty *styles.Styles, msg *message.Message, toolResults m
401401 tc,
402402 result,
403403 msg.FinishReason() == message.FinishReasonCanceled,
404− diffTool,
405404 ))
406405 }
407406 return items
internal/ui/chat/references.go+1−1
@@ -23,7 +23,7 @@ func NewReferencesToolMessageItem(
2323 result *message.ToolResult,
2424 canceled bool,
2525) ToolMessageItem {
26− return newBaseToolMessageItem(sty, toolCall, result, &ReferencesToolRenderContext{}, canceled, "")
26+ return newBaseToolMessageItem(sty, toolCall, result, &ReferencesToolRenderContext{}, canceled)
2727}
2828
2929// ReferencesToolRenderContext renders references tool messages.
internal/ui/chat/search.go+4−4
@@ -27,7 +27,7 @@ func NewGlobToolMessageItem(
2727 result *message.ToolResult,
2828 canceled bool,
2929) ToolMessageItem {
30− return newBaseToolMessageItem(sty, toolCall, result, &GlobToolRenderContext{}, canceled, "")
30+ return newBaseToolMessageItem(sty, toolCall, result, &GlobToolRenderContext{}, canceled)
3131}
3232
3333// GlobToolRenderContext renders glob tool messages.
@@ -86,7 +86,7 @@ func NewGrepToolMessageItem(
8686 result *message.ToolResult,
8787 canceled bool,
8888) ToolMessageItem {
89− return newBaseToolMessageItem(sty, toolCall, result, &GrepToolRenderContext{}, canceled, "")
89+ return newBaseToolMessageItem(sty, toolCall, result, &GrepToolRenderContext{}, canceled)
9090}
9191
9292// GrepToolRenderContext renders grep tool messages.
@@ -151,7 +151,7 @@ func NewLSToolMessageItem(
151151 result *message.ToolResult,
152152 canceled bool,
153153) ToolMessageItem {
154− return newBaseToolMessageItem(sty, toolCall, result, &LSToolRenderContext{}, canceled, "")
154+ return newBaseToolMessageItem(sty, toolCall, result, &LSToolRenderContext{}, canceled)
155155}
156156
157157// LSToolRenderContext renders ls tool messages.
@@ -211,7 +211,7 @@ func NewSourcegraphToolMessageItem(
211211 result *message.ToolResult,
212212 canceled bool,
213213) ToolMessageItem {
214− return newBaseToolMessageItem(sty, toolCall, result, &SourcegraphToolRenderContext{}, canceled, "")
214+ return newBaseToolMessageItem(sty, toolCall, result, &SourcegraphToolRenderContext{}, canceled)
215215}
216216
217217// SourcegraphToolRenderContext renders sourcegraph tool messages.
internal/ui/chat/todos.go+1−1
@@ -31,7 +31,7 @@ func NewTodosToolMessageItem(
3131 result *message.ToolResult,
3232 canceled bool,
3333) ToolMessageItem {
34− return newBaseToolMessageItem(sty, toolCall, result, &TodosToolRenderContext{}, canceled, "")
34+ return newBaseToolMessageItem(sty, toolCall, result, &TodosToolRenderContext{}, canceled)
3535}
3636
3737// TodosToolRenderContext renders todos tool messages.
internal/ui/chat/tool_result_content.go+2−2
@@ -41,7 +41,7 @@ func looksLikeMarkdown(content string) bool {
4141 return false
4242}
4343
44−func renderToolResultTextContent(sty *styles.Styles, content string, widths toolResultContentWidths, expanded bool, diffTool string) string {
44+func renderToolResultTextContent(sty *styles.Styles, content string, widths toolResultContentWidths, expanded bool) string {
4545 var result json.RawMessage
4646 if err := json.Unmarshal([]byte(content), &result); err == nil {
4747 prettyResult, err := json.MarshalIndent(result, "", " ")
@@ -51,7 +51,7 @@ func renderToolResultTextContent(sty *styles.Styles, content string, widths tool
5151 return sty.Tool.Body.Render(toolOutputPlainContent(sty, content, widths.Body, expanded))
5252 }
5353 if diffdetect.IsUnifiedDiff(content) {
54− return toolOutputDiffContentFromUnified(sty, content, widths.Diff, expanded, diffTool)
54+ return toolOutputDiffContentFromUnified(sty, content, widths.Diff, expanded)
5555 }
5656 if looksLikeMarkdown(content) {
5757 return sty.Tool.Body.Render(toolOutputCodeContent(sty, "result.md", content, 0, widths.Body, expanded))
internal/ui/chat/tool_result_content_test.go+5−5
@@ -72,7 +72,7 @@ func TestRenderToolResultTextContent(t *testing.T) {
7272 t.Fatalf("json.MarshalIndent() error = %v", err)
7373 }
7474 expected := styPtr.Tool.Body.Render(toolOutputCodeContent(styPtr, "result.json", string(prettyResult), 0, widths.Body, false))
75− got := renderToolResultTextContent(styPtr, content, widths, false, "")
75+ got := renderToolResultTextContent(styPtr, content, widths, false)
7676 if got != expected {
7777 t.Fatal("renderToolResultTextContent() did not choose JSON rendering")
7878 }
@@ -87,8 +87,8 @@ func TestRenderToolResultTextContent(t *testing.T) {
8787-# Old
8888+# New
8989`
90− expected := toolOutputDiffContentFromUnified(styPtr, content, widths.Diff, false, "")
91− got := renderToolResultTextContent(styPtr, content, widths, false, "")
90+ expected := toolOutputDiffContentFromUnified(styPtr, content, widths.Diff, false)
91+ got := renderToolResultTextContent(styPtr, content, widths, false)
9292 if got != expected {
9393 t.Fatal("renderToolResultTextContent() did not choose diff rendering")
9494 }
@@ -98,7 +98,7 @@ func TestRenderToolResultTextContent(t *testing.T) {
9898 t.Parallel()
9999 content := "# Title\n\nBody"
100100 expected := styPtr.Tool.Body.Render(toolOutputCodeContent(styPtr, "result.md", content, 0, widths.Body, false))
101− got := renderToolResultTextContent(styPtr, content, widths, false, "")
101+ got := renderToolResultTextContent(styPtr, content, widths, false)
102102 if got != expected {
103103 t.Fatal("renderToolResultTextContent() did not choose markdown rendering")
104104 }
@@ -108,7 +108,7 @@ func TestRenderToolResultTextContent(t *testing.T) {
108108 t.Parallel()
109109 content := "plain text"
110110 expected := styPtr.Tool.Body.Render(toolOutputPlainContent(styPtr, content, widths.Body, false))
111− got := renderToolResultTextContent(styPtr, content, widths, false, "")
111+ got := renderToolResultTextContent(styPtr, content, widths, false)
112112 if got != expected {
113113 t.Fatal("renderToolResultTextContent() did not choose plain rendering")
114114 }
internal/ui/chat/tools.go+32−65
@@ -19,7 +19,6 @@ import (
1919 "github.com/charmbracelet/crush/internal/stringext"
2020 "github.com/charmbracelet/crush/internal/ui/anim"
2121 "github.com/charmbracelet/crush/internal/ui/common"
22− "github.com/charmbracelet/crush/internal/ui/difftastic"
2322 "github.com/charmbracelet/crush/internal/ui/list"
2423 "github.com/charmbracelet/crush/internal/ui/styles"
2524 "github.com/charmbracelet/x/ansi"
@@ -58,7 +57,6 @@ type ToolMessageItem interface {
5857 SetMessageID(id string)
5958 SetStatus(status ToolStatus)
6059 Status() ToolStatus
61− SetDiffTool(tool string)
6260}
6361
6462// Compactable is an interface for tool items that can render in a compacted mode.
@@ -105,10 +103,6 @@ type ToolRenderOpts struct {
105103 Compact bool
106104 IsSpinning bool
107105 Status ToolStatus
108− // DiffTool selects the external diff renderer for edit/multi-edit diffs.
109− // "builtin" (the default) uses the in-process renderer; "difftastic"
110− // shells out to the difft binary.
111− DiffTool string
112106}
113107
114108// IsPending returns true if the tool call is still pending (not finished and
@@ -169,8 +163,6 @@ type baseToolMessageItem struct {
169163 sty *styles.Styles
170164 anim *anim.Anim
171165 expandedContent bool
172− // diffTool selects the external diff renderer for edit/multi-edit diffs.
173− diffTool string
174166}
175167
176168var _ Expandable = (*baseToolMessageItem)(nil)
@@ -182,7 +174,6 @@ func newBaseToolMessageItem(
182174 result *message.ToolResult,
183175 toolRenderer ToolRenderer,
184176 canceled bool,
185− diffTool string,
186177) *baseToolMessageItem {
187178 // we only do full width for diffs (as far as I know)
188179 hasCappedWidth := toolCall.Name != tools.EditToolName && toolCall.Name != tools.MultiEditToolName
@@ -204,7 +195,6 @@ func newBaseToolMessageItem(
204195 result: result,
205196 status: status,
206197 hasCappedWidth: hasCappedWidth,
207− diffTool: diffTool,
208198 }
209199 t.anim = anim.New(anim.Settings{
210200 ID: toolCall.ID,
@@ -229,7 +219,6 @@ func NewToolMessageItem(
229219 toolCall message.ToolCall,
230220 result *message.ToolResult,
231221 canceled bool,
232− diffTool string,
233222) ToolMessageItem {
234223 var item ToolMessageItem
235224 switch toolCall.Name {
@@ -284,7 +273,6 @@ func NewToolMessageItem(
284273 item = NewGenericToolMessageItem(sty, toolCall, result, canceled)
285274 }
286275 }
287− item.SetDiffTool(diffTool)
288276 item.SetMessageID(messageID)
289277 return item
290278}
@@ -299,16 +287,6 @@ func (t *baseToolMessageItem) SetCompact(compact bool) {
299287 t.Bump()
300288}
301289
302−// SetDiffTool sets the external diff tool preference and invalidates the cache.
303−func (t *baseToolMessageItem) SetDiffTool(tool string) {
304− if t.diffTool == tool {
305− return
306− }
307− t.diffTool = tool
308− t.clearCache()
309− t.Bump()
310−}
311−
312290// ID returns the unique identifier for this tool message item.
313291func (t *baseToolMessageItem) ID() string {
314292 return t.toolCall.ID
@@ -360,7 +338,6 @@ func (t *baseToolMessageItem) RawRender(width int) string {
360338 Compact: t.isCompact,
361339 IsSpinning: t.isSpinning(),
362340 Status: t.computeStatus(),
363− DiffTool: t.diffTool,
364341 })
365342
366343 // Prepend hook indicator if hooks ran for this tool call.
@@ -1008,16 +985,9 @@ func formatSize(bytes int) string {
1008985}
1009986
1010987// toolOutputDiffContent renders a diff between old and new content.
1011−func toolOutputDiffContent(sty *styles.Styles, file, oldContent, newContent string, width int, expanded bool, diffTool string) string {
988+func toolOutputDiffContent(sty *styles.Styles, file, oldContent, newContent string, width int, expanded bool) string {
1012989 bodyWidth := width - toolBodyLeftPaddingTotal
1013990
1014− // Try difftastic if enabled. Fall back to builtin on any failure.
1015− if diffTool == "difftastic" {
1016− if out, err := difftastic.RenderDiff(file, oldContent, newContent, bodyWidth); err == nil && out != "" {
1017− return sty.Tool.Body.Render(truncateDiff(sty, out, bodyWidth, expanded))
1018− }
1019− }
1020−
1021991 formatter := common.DiffFormatter(sty).
1022992 Before(file, oldContent).
1023993 After(file, newContent).
@@ -1029,7 +999,22 @@ func toolOutputDiffContent(sty *styles.Styles, file, oldContent, newContent stri
1029999 }
10301000
10311001 formatted := formatter.String()
1032− return sty.Tool.Body.Render(truncateDiff(sty, formatted, bodyWidth, expanded))
1002+ lines := strings.Split(formatted, "\n")
1003+
1004+ // Truncate if needed.
1005+ maxLines := diffContextHeight
1006+ if expanded {
1007+ maxLines = len(lines)
1008+ }
1009+
1010+ if len(lines) > maxLines && !expanded {
1011+ truncMsg := sty.Tool.DiffTruncation.
1012+ Width(bodyWidth).
1013+ Render(fmt.Sprintf(assistantMessageTruncateFormat, len(lines)-maxLines))
1014+ formatted = strings.Join(lines[:maxLines], "\n") + "\n" + truncMsg
1015+ }
1016+
1017+ return sty.Tool.Body.Render(formatted)
10331018}
10341019
10351020// formatTimeout converts timeout seconds to a duration string (e.g., "30s").
@@ -1050,24 +1035,9 @@ func formatNonZero(value int) string {
10501035}
10511036
10521037// toolOutputMultiEditDiffContent renders a diff with optional failed edits note.
1053−func toolOutputMultiEditDiffContent(sty *styles.Styles, file string, meta tools.MultiEditResponseMetadata, totalEdits, width int, expanded bool, diffTool string) string {
1038+func toolOutputMultiEditDiffContent(sty *styles.Styles, file string, meta tools.MultiEditResponseMetadata, totalEdits, width int, expanded bool) string {
10541039 bodyWidth := width - toolBodyLeftPaddingTotal
10551040
1056− // Try difftastic if enabled. Fall back to builtin on any failure.
1057− if diffTool == "difftastic" {
1058− if out, err := difftastic.RenderDiff(file, meta.OldContent, meta.NewContent, bodyWidth); err == nil && out != "" {
1059− formatted := truncateDiff(sty, out, bodyWidth, expanded)
1060− // Add failed edits note if any exist.
1061− if len(meta.EditsFailed) > 0 {
1062− noteTag := sty.Tool.NoteTag.Render("Note")
1063− noteMsg := fmt.Sprintf("%d of %d edits succeeded", meta.EditsApplied, totalEdits)
1064− note := fmt.Sprintf("%s %s", noteTag, sty.Tool.NoteMessage.Render(noteMsg))
1065− formatted = formatted + "\n\n" + note
1066− }
1067− return sty.Tool.Body.Render(formatted)
1068− }
1069− }
1070−
10711041 formatter := common.DiffFormatter(sty).
10721042 Before(file, meta.OldContent).
10731043 After(file, meta.NewContent).
@@ -1079,33 +1049,30 @@ func toolOutputMultiEditDiffContent(sty *styles.Styles, file string, meta tools.
10791049 }
10801050
10811051 formatted := formatter.String()
1082− formatted = truncateDiff(sty, formatted, bodyWidth, expanded)
1052+ lines := strings.Split(formatted, "\n")
10831053
1084− // Add failed edits note if any exist.
1085− if len(meta.EditsFailed) > 0 {
1086− noteTag := sty.Tool.NoteTag.Render("Note")
1087− noteMsg := fmt.Sprintf("%d of %d edits succeeded", meta.EditsApplied, totalEdits)
1088− note := fmt.Sprintf("%s %s", noteTag, sty.Tool.NoteMessage.Render(noteMsg))
1089− formatted = formatted + "\n\n" + note
1090− }
1091−
1092− return sty.Tool.Body.Render(formatted)
1093−}
1094−
1095−// truncateDiff truncates diff output to diffContextHeight lines unless expanded.
1096−func truncateDiff(sty *styles.Styles, content string, bodyWidth int, expanded bool) string {
1097− lines := strings.Split(content, "\n")
1054+ // Truncate if needed.
10981055 maxLines := diffContextHeight
10991056 if expanded {
11001057 maxLines = len(lines)
11011058 }
1059+
11021060 if len(lines) > maxLines && !expanded {
11031061 truncMsg := sty.Tool.DiffTruncation.
11041062 Width(bodyWidth).
11051063 Render(fmt.Sprintf(assistantMessageTruncateFormat, len(lines)-maxLines))
1106− return strings.Join(lines[:maxLines], "\n") + "\n" + truncMsg
1064+ formatted = strings.Join(lines[:maxLines], "\n") + "\n" + truncMsg
1065+ }
1066+
1067+ // Add failed edits note if any exist.
1068+ if len(meta.EditsFailed) > 0 {
1069+ noteTag := sty.Tool.NoteTag.Render("Note")
1070+ noteMsg := fmt.Sprintf("%d of %d edits succeeded", meta.EditsApplied, totalEdits)
1071+ note := fmt.Sprintf("%s %s", noteTag, sty.Tool.NoteMessage.Render(noteMsg))
1072+ formatted = formatted + "\n\n" + note
11071073 }
1108− return content
1074+
1075+ return sty.Tool.Body.Render(formatted)
11091076}
11101077
11111078// roundedEnumerator creates a tree enumerator with rounded corners.
internal/ui/chat/unified_diff.go+14−13
@@ -1,11 +1,11 @@
11package chat
22
33import (
4+ "fmt"
45 "strings"
56
67 "github.com/charmbracelet/crush/internal/diffdetect"
78 "github.com/charmbracelet/crush/internal/ui/common"
8− "github.com/charmbracelet/crush/internal/ui/difftastic"
99 "github.com/charmbracelet/crush/internal/ui/styles"
1010)
1111
@@ -130,23 +130,13 @@ func parseUnifiedDiff(content string) []parsedDiffFile {
130130 return result
131131}
132132
133−func toolOutputDiffContentFromUnified(sty *styles.Styles, content string, width int, expanded bool, diffTool string) string {
133+func toolOutputDiffContentFromUnified(sty *styles.Styles, content string, width int, expanded bool) string {
134134 files := parseUnifiedDiff(content)
135135 if len(files) == 0 {
136136 bodyWidth := width - toolBodyLeftPaddingTotal
137137 return sty.Tool.Body.Render(toolOutputCodeContent(sty, "result.diff", content, 0, bodyWidth, expanded))
138138 }
139139 bodyWidth := width - toolBodyLeftPaddingTotal
140−
141− // Try difftastic if enabled and there's a single file diff. Fall back to
142− // builtin on any failure or when multiple files are involved.
143− if diffTool == "difftastic" && len(files) == 1 {
144− f := files[0]
145− if out, err := difftastic.RenderDiff(f.path, f.before, f.after, bodyWidth); err == nil && out != "" {
146− return sty.Tool.Body.Render(truncateDiff(sty, out, bodyWidth, expanded))
147− }
148− }
149−
150140 var blocks []string
151141 for i, f := range files {
152142 formatter := common.DiffFormatter(sty).
@@ -166,5 +156,16 @@ func toolOutputDiffContentFromUnified(sty *styles.Styles, content string, width
166156 blocks = append(blocks, formatted)
167157 }
168158 combined := strings.Join(blocks, "\n")
169− return sty.Tool.Body.Render(truncateDiff(sty, combined, bodyWidth, expanded))
159+ lines := strings.Split(combined, "\n")
160+ maxLines := diffContextHeight
161+ if expanded {
162+ maxLines = len(lines)
163+ }
164+ if len(lines) > maxLines && !expanded {
165+ truncMsg := sty.Tool.DiffTruncation.
166+ Width(bodyWidth).
167+ Render(fmt.Sprintf(assistantMessageTruncateFormat, len(lines)-maxLines))
168+ combined = strings.Join(lines[:maxLines], "\n") + "\n" + truncMsg
169+ }
170+ return sty.Tool.Body.Render(combined)
170171}
internal/ui/chat/version_bump_test.go+10−10
@@ -131,7 +131,7 @@ func TestBaseToolMessageItem_MutatorsBumpVersion(t *testing.T) {
131131
132132 sty := styles.CharmtonePantera()
133133 tc := message.ToolCall{ID: "tc1", Name: "bash", Input: "{}", Finished: false}
134− item := NewToolMessageItem(&sty, "msg", tc, nil, false, "")
134+ item := NewToolMessageItem(&sty, "msg", tc, nil, false)
135135
136136 v := item.(versionedItem)
137137
@@ -283,7 +283,7 @@ func TestAgentToolMessageItem_NestedToolMutatorsBumpVersion(t *testing.T) {
283283
284284 mkChild := func(id string) ToolMessageItem {
285285 tc := message.ToolCall{ID: id, Name: "bash", Input: `{}`, Finished: false}
286− return NewToolMessageItem(&sty, "msg", tc, nil, false, "")
286+ return NewToolMessageItem(&sty, "msg", tc, nil, false)
287287 }
288288
289289 // AddNestedTool always bumps.
@@ -320,7 +320,7 @@ func TestAgenticFetchToolMessageItem_NestedToolMutatorsBumpVersion(t *testing.T)
320320
321321 mkChild := func(id string) ToolMessageItem {
322322 tc := message.ToolCall{ID: id, Name: "fetch", Input: `{}`, Finished: false}
323− return NewToolMessageItem(&sty, "msg", tc, nil, false, "")
323+ return NewToolMessageItem(&sty, "msg", tc, nil, false)
324324 }
325325
326326 requireBump(t, "AddNestedTool", item, func() {
@@ -357,7 +357,7 @@ func TestAgentToolMessageItem_NestedChildInPlaceMutationBumpsParent(t *testing.T
357357 item := NewAgentToolMessageItem(&sty, parent, nil, false)
358358
359359 childTC := message.ToolCall{ID: "c1", Name: "bash", Input: `{}`, Finished: false}
360− child := NewToolMessageItem(&sty, "msg", childTC, nil, false, "")
360+ child := NewToolMessageItem(&sty, "msg", childTC, nil, false)
361361 item.AddNestedTool(child)
362362
363363 v0 := item.Version()
@@ -386,7 +386,7 @@ func TestAgenticFetchToolMessageItem_NestedChildInPlaceMutationBumpsParent(t *te
386386 item := NewAgenticFetchToolMessageItem(&sty, parent, nil, false)
387387
388388 childTC := message.ToolCall{ID: "c1", Name: "fetch", Input: `{}`, Finished: false}
389− child := NewToolMessageItem(&sty, "msg", childTC, nil, false, "")
389+ child := NewToolMessageItem(&sty, "msg", childTC, nil, false)
390390 item.AddNestedTool(child)
391391
392392 v0 := item.Version()
@@ -427,7 +427,7 @@ func TestBaseToolMessageItem_AnimateBumpsVersion(t *testing.T) {
427427
428428 sty := styles.CharmtonePantera()
429429 tc := message.ToolCall{ID: "tc-spin", Name: "bash", Input: "{}", Finished: false}
430− item := NewToolMessageItem(&sty, "msg", tc, nil, false, "")
430+ item := NewToolMessageItem(&sty, "msg", tc, nil, false)
431431 v := item.(versionedItem)
432432 a, ok := item.(Animatable)
433433 require.True(t, ok, "base tool message item must implement Animatable")
@@ -475,7 +475,7 @@ func TestAgentToolMessageItem_AnimateBumpsVersion(t *testing.T) {
475475 parent := NewAgentToolMessageItem(&sty, parentTC, nil, false)
476476
477477 childTC := message.ToolCall{ID: "agent-child", Name: "bash", Input: `{}`, Finished: false}
478− child := NewToolMessageItem(&sty, "msg", childTC, nil, false, "")
478+ child := NewToolMessageItem(&sty, "msg", childTC, nil, false)
479479 parent.AddNestedTool(child)
480480
481481 // Spinning + parent's own ID → parent bumps.
@@ -520,7 +520,7 @@ func TestAgenticFetchToolMessageItem_AnimateBumpsVersion(t *testing.T) {
520520 parent := NewAgenticFetchToolMessageItem(&sty, parentTC, nil, false)
521521
522522 childTC := message.ToolCall{ID: "fetch-child", Name: "fetch", Input: `{}`, Finished: false}
523− child := NewToolMessageItem(&sty, "msg", childTC, nil, false, "")
523+ child := NewToolMessageItem(&sty, "msg", childTC, nil, false)
524524 parent.AddNestedTool(child)
525525
526526 requireBump(t, "Animate[spinning,parent ID]", parent, func() {
@@ -551,7 +551,7 @@ func TestBaseToolMessageItem_FinishedTransition(t *testing.T) {
551551
552552 sty := styles.CharmtonePantera()
553553 tc := message.ToolCall{ID: "tc-fin", Name: "bash", Input: "{}", Finished: false}
554− item := NewToolMessageItem(&sty, "msg", tc, nil, false, "")
554+ item := NewToolMessageItem(&sty, "msg", tc, nil, false)
555555 require.False(t, item.Finished(), "running tool must not be Finished()")
556556
557557 tcFinished := tc
@@ -562,6 +562,6 @@ func TestBaseToolMessageItem_FinishedTransition(t *testing.T) {
562562
563563 // Canceled tool with no result is also Finished.
564564 tcCanceled := message.ToolCall{ID: "tc-cancel", Name: "bash", Input: "{}", Finished: false}
565− canceled := NewToolMessageItem(&sty, "msg", tcCanceled, nil, true, "")
565+ canceled := NewToolMessageItem(&sty, "msg", tcCanceled, nil, true)
566566 require.True(t, canceled.Finished(), "canceled tool must be Finished()")
567567}
internal/ui/difftastic/difftastic.godeleted−60
@@ -1,60 +0,0 @@
1−// Package difftastic provides a syntax-aware structural diff renderer by
2−// shelling out to the difftastic binary (https://github.com/Wilfred/difftastic).
3−package difftastic
4−
5−import (
6− "context"
7− "fmt"
8− "os"
9− "os/exec"
10− "path/filepath"
11− "strconv"
12− "strings"
13−)
14−
15−// RenderDiff runs difftastic on before/after content and returns ANSI-colored
16−// output. Returns empty string and a nil error if difft is not available so
17−// callers can fall back to the builtin renderer.
18−func RenderDiff(filePath, before, after string, width int) (string, error) {
19− if _, err := exec.LookPath("difft"); err != nil {
20− return "", nil
21− }
22−
23− dir, err := os.MkdirTemp("", "crush-difftastic-*")
24− if err != nil {
25− return "", fmt.Errorf("failed to create temp directory: %w", err)
26− }
27− defer os.RemoveAll(dir)
28−
29− ext := filepath.Ext(filePath)
30− oldPath := filepath.Join(dir, "old"+ext)
31− newPath := filepath.Join(dir, "new"+ext)
32−
33− if err := os.WriteFile(oldPath, []byte(before), 0o644); err != nil {
34− return "", fmt.Errorf("failed to write before content: %w", err)
35− }
36− if err := os.WriteFile(newPath, []byte(after), 0o644); err != nil {
37− return "", fmt.Errorf("failed to write after content: %w", err)
38− }
39−
40− args := []string{
41− "--color=always",
42− "--display=inline",
43− "--width=" + strconv.Itoa(width),
44− oldPath,
45− newPath,
46− }
47−
48− cmd := exec.CommandContext(context.Background(), "difft", args...)
49− output, err := cmd.CombinedOutput()
50− if err != nil {
51− // difftastic returns non-zero exit code when differences are found.
52− // The output is still valid, so return it rather than the error.
53− if len(output) > 0 {
54− return string(output), nil
55− }
56− return "", fmt.Errorf("failed to run difftastic: %w", err)
57− }
58−
59− return strings.TrimRight(string(output), "\n"), nil
60−}
internal/ui/model/chat.go−18
@@ -673,18 +673,6 @@ func (m *Chat) RemoveMessage(id string) {
673673 return
674674 }
675675
676− // Clean up nested tool IDs that point to this item's index before
677− // removing it, so they don't end up pointing to a wrong item after
678− // the rebuild.
679− if item, ok := m.list.ItemAt(idx).(chat.MessageItem); ok {
680− if container, ok := item.(chat.NestedToolContainer); ok {
681− for _, nested := range container.NestedTools() {
682− delete(m.idInxMap, nested.ID())
683− delete(m.pausedAnimations, nested.ID())
684− }
685− }
686− }
687−
688676 // Remove from list
689677 m.list.RemoveItem(idx)
690678
@@ -695,12 +683,6 @@ func (m *Chat) RemoveMessage(id string) {
695683 for i := idx; i < m.list.Len(); i++ {
696684 if item, ok := m.list.ItemAt(i).(chat.MessageItem); ok {
697685 m.idInxMap[item.ID()] = i
698− // Also update nested tool IDs for containers.
699− if container, ok := item.(chat.NestedToolContainer); ok {
700− for _, nested := range container.NestedTools() {
701− m.idInxMap[nested.ID()] = i
702− }
703− }
704686 }
705687 }
706688
internal/ui/model/ui.go+13−35
@@ -456,8 +456,7 @@ func New(ctx context.Context, com *common.Common, initialSessionID string, conti
456456 // reconcileTheme applies the light palette on the first frame when
457457 // the terminal reports a light background or "light" is forced.
458458 ui.themeKey = styles.ThemeKeyForProviderMode(
459− cfg.Models[config.SelectedModelTypeLarge].Provider, true,
460− )
459+ cfg.Models[config.SelectedModelTypeLarge].Provider, true)
461460 }
462461
463462 ui.setEditorPrompt(com.Workspace.PermissionSkipRequests())
@@ -609,32 +608,14 @@ func (m *UI) updateNotificationBackend() {
609608}
610609
611610// shouldSendNotification returns true if notifications should be sent based on
612−// current state. The window must not be focused and notifications must not be
613−// disabled in config. Focus reporting is only required in auto-detection mode:
614−// when the user explicitly chooses a notification style, we honor it even on
615−// terminals that don't support focus events (e.g. SSH sessions).
611+// current state. Focus reporting must be supported, window must not be
612+// focused, and notifications must not be disabled in config.
616613func (m *UI) shouldSendNotification() bool {
617614 cfg := m.com.Config()
618− var style string
619− if cfg != nil && cfg.Options != nil {
620− style = cfg.Options.NotificationStyle
621− }
622− if style == "disabled" {
623− return false
624− }
625− // Never notify while the window is focused. On terminals without focus
626− // reporting, notifyWindowFocused stays false, so this doesn't suppress.
627− if m.notifyWindowFocused {
615+ if cfg != nil && cfg.Options != nil && cfg.Options.NotificationStyle == "disabled" {
628616 return false
629617 }
630− // An explicit style (anything other than auto/empty) is honored regardless
631− // of focus event support.
632− if style != "" && style != "auto" {
633− return true
634− }
635− // Auto-detection mode: without focus events we can't suppress notifications
636− // while focused, so we disable them entirely to avoid spamming the user.
637− return m.caps.ReportFocusEvents
618+ return m.caps.ReportFocusEvents && !m.notifyWindowFocused
638619}
639620
640621// setState changes the UI state and focus.
@@ -1230,21 +1211,20 @@ func (m *UI) setSessionMessages(msgs []message.Message) tea.Cmd {
12301211 toolResultMap := chat.BuildToolResultMap(msgPtrs)
12311212
12321213 // Add messages to chat with linked tool results
1233− diffTool := m.com.Config().Options.TUI.DiffTool
12341214 items := make([]chat.MessageItem, 0, len(msgs)*2)
12351215 for _, msg := range msgPtrs {
12361216 switch msg.Role {
12371217 case message.User:
12381218 m.lastUserMessageTime = msg.CreatedAt
1239− items = append(items, chat.ExtractMessageItems(m.com.Styles, msg, toolResultMap, diffTool)...)
1219+ items = append(items, chat.ExtractMessageItems(m.com.Styles, msg, toolResultMap)...)
12401220 case message.Assistant:
1241− items = append(items, chat.ExtractMessageItems(m.com.Styles, msg, toolResultMap, diffTool)...)
1221+ items = append(items, chat.ExtractMessageItems(m.com.Styles, msg, toolResultMap)...)
12421222 if msg.FinishPart() != nil && msg.FinishPart().Reason == message.FinishReasonEndTurn {
12431223 infoItem := chat.NewAssistantInfoItem(m.com.Styles, msg, m.com.Config(), time.Unix(m.lastUserMessageTime, 0))
12441224 items = append(items, infoItem)
12451225 }
12461226 default:
1247− items = append(items, chat.ExtractMessageItems(m.com.Styles, msg, toolResultMap, diffTool)...)
1227+ items = append(items, chat.ExtractMessageItems(m.com.Styles, msg, toolResultMap)...)
12481228 }
12491229 }
12501230
@@ -1305,7 +1285,7 @@ func (m *UI) loadNestedToolCalls(items []chat.MessageItem) {
13051285 // Extract nested tool items.
13061286 var nestedTools []chat.ToolMessageItem
13071287 for _, nestedMsg := range nestedMsgPtrs {
1308− nestedItems := chat.ExtractMessageItems(m.com.Styles, nestedMsg, nestedToolResultMap, m.com.Config().Options.TUI.DiffTool)
1288+ nestedItems := chat.ExtractMessageItems(m.com.Styles, nestedMsg, nestedToolResultMap)
13091289 for _, nestedItem := range nestedItems {
13101290 if nestedToolItem, ok := nestedItem.(chat.ToolMessageItem); ok {
13111291 // Mark nested tools as simple (compact) rendering.
@@ -1355,7 +1335,7 @@ func (m *UI) appendSessionMessage(msg message.Message) tea.Cmd {
13551335 return nil
13561336 }
13571337 m.lastUserMessageTime = msg.CreatedAt
1358− items := chat.ExtractMessageItems(m.com.Styles, &msg, nil, m.com.Config().Options.TUI.DiffTool)
1338+ items := chat.ExtractMessageItems(m.com.Styles, &msg, nil)
13591339 for _, item := range items {
13601340 if animatable, ok := item.(chat.Animatable); ok {
13611341 if cmd := animatable.StartAnimation(); cmd != nil {
@@ -1368,7 +1348,7 @@ func (m *UI) appendSessionMessage(msg message.Message) tea.Cmd {
13681348 cmds = append(cmds, cmd)
13691349 }
13701350 case message.Assistant:
1371− items := chat.ExtractMessageItems(m.com.Styles, &msg, nil, m.com.Config().Options.TUI.DiffTool)
1351+ items := chat.ExtractMessageItems(m.com.Styles, &msg, nil)
13721352 for _, item := range items {
13731353 if animatable, ok := item.(chat.Animatable); ok {
13741354 if cmd := animatable.StartAnimation(); cmd != nil {
@@ -1477,7 +1457,7 @@ func (m *UI) updateSessionMessage(msg message.Message) tea.Cmd {
14771457 }
14781458 }
14791459 if existingToolItem == nil {
1480− items = append(items, chat.NewToolMessageItem(m.com.Styles, msg.ID, tc, nil, false, m.com.Config().Options.TUI.DiffTool))
1460+ items = append(items, chat.NewToolMessageItem(m.com.Styles, msg.ID, tc, nil, false))
14811461 }
14821462 }
14831463
@@ -1549,7 +1529,7 @@ func (m *UI) handleChildSessionMessage(event pubsub.Event[message.Message]) tea.
15491529 }
15501530 if !found {
15511531 // Create a new nested tool item.
1552− nestedItem := chat.NewToolMessageItem(m.com.Styles, event.Payload.ID, tc, nil, false, m.com.Config().Options.TUI.DiffTool)
1532+ nestedItem := chat.NewToolMessageItem(m.com.Styles, event.Payload.ID, tc, nil, false)
15531533 if simplifiable, ok := nestedItem.(chat.Compactable); ok {
15541534 simplifiable.SetCompact(true)
15551535 }
@@ -3309,7 +3289,6 @@ func (m *UI) openEditor(value string) tea.Cmd {
33093289 tmpPath := tmpfile.Name()
33103290 defer tmpfile.Close()
33113291 if _, err := tmpfile.WriteString(value); err != nil {
3312− _ = os.Remove(tmpPath)
33133292 return util.ReportError(err)
33143293 }
33153294 cmd, err := editor.Command(
@@ -3321,7 +3300,6 @@ func (m *UI) openEditor(value string) tea.Cmd {
33213300 ),
33223301 )
33233302 if err != nil {
3324− _ = os.Remove(tmpPath)
33253303 return util.ReportError(err)
33263304 }
33273305 return tea.ExecProcess(cmd, func(err error) tea.Msg {
vendor/charm.land/bubbles/v2/LICENSEdeleted−21
@@ -1,21 +0,0 @@
1−MIT License
2−
3−Copyright (c) 2020-2026 Charmbracelet, Inc.
4−
5−Permission is hereby granted, free of charge, to any person obtaining a copy
6−of this software and associated documentation files (the "Software"), to deal
7−in the Software without restriction, including without limitation the rights
8−to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9−copies of the Software, and to permit persons to whom the Software is
10−furnished to do so, subject to the following conditions:
11−
12−The above copyright notice and this permission notice shall be included in all
13−copies or substantial portions of the Software.
14−
15−THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16−IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17−FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18−AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19−LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20−OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21−SOFTWARE.
vendor/charm.land/bubbles/v2/cursor/cursor.godeleted−241
@@ -1,241 +0,0 @@
1−// Package cursor provides a virtual cursor to support the textinput and
2−// textarea elements.
3−package cursor
4−
5−import (
6− "context"
7− "sync/atomic"
8− "time"
9−
10− tea "charm.land/bubbletea/v2"
11− "charm.land/lipgloss/v2"
12−)
13−
14−const defaultBlinkSpeed = time.Millisecond * 530
15−
16−// Internal ID management. Used during animating to ensure that frame messages
17−// are received only by spinner components that sent them.
18−var lastID int64
19−
20−func nextID() int {
21− return int(atomic.AddInt64(&lastID, 1))
22−}
23−
24−// initialBlinkMsg initializes cursor blinking.
25−type initialBlinkMsg struct{}
26−
27−// BlinkMsg signals that the cursor should blink. It contains metadata that
28−// allows us to tell if the blink message is the one we're expecting.
29−type BlinkMsg struct {
30− id int
31− tag int
32−}
33−
34−// blinkCanceled is sent when a blink operation is canceled.
35−type blinkCanceled struct{}
36−
37−// blinkCtx manages cursor blinking.
38−type blinkCtx struct {
39− ctx context.Context
40− cancel context.CancelFunc
41−}
42−
43−// Mode describes the behavior of the cursor.
44−type Mode int
45−
46−// Available cursor modes.
47−const (
48− CursorBlink Mode = iota
49− CursorStatic
50− CursorHide
51−)
52−
53−// String returns the cursor mode in a human-readable format. This method is
54−// provisional and for informational purposes only.
55−func (c Mode) String() string {
56− return [...]string{
57− "blink",
58− "static",
59− "hidden",
60− }[c]
61−}
62−
63−// Model is the Bubble Tea model for this cursor element.
64−type Model struct {
65− // Style styles the cursor block.
66− Style lipgloss.Style
67−
68− // TextStyle is the style used for the cursor when it is blinking
69− // (hidden), i.e. displaying normal text.
70− TextStyle lipgloss.Style
71−
72− // BlinkSpeed is the speed at which the cursor blinks. This has no effect
73− // unless [CursorMode] is not set to [CursorBlink].
74− BlinkSpeed time.Duration
75−
76− // IsBlinked is the state of the cursor blink. When true, the cursor is
77− // hidden.
78− IsBlinked bool
79−
80− // char is the character under the cursor
81− char string
82−
83− // The ID of this Model as it relates to other cursors
84− id int
85−
86− // focus indicates whether the containing input is focused
87− focus bool
88−
89− // Used to manage cursor blink
90− blinkCtx *blinkCtx
91−
92− // The ID of the blink message we're expecting to receive.
93− blinkTag int
94−
95− // mode determines the behavior of the cursor
96− mode Mode
97−}
98−
99−// New creates a new model with default settings.
100−func New() Model {
101− return Model{
102− id: nextID(),
103− BlinkSpeed: defaultBlinkSpeed,
104− IsBlinked: true,
105− mode: CursorBlink,
106−
107− blinkCtx: &blinkCtx{
108− ctx: context.Background(),
109− },
110− }
111−}
112−
113−// Update updates the cursor.
114−func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
115− switch msg := msg.(type) {
116− case initialBlinkMsg:
117− // We accept all initialBlinkMsgs generated by the Blink command.
118−
119− if m.mode != CursorBlink || !m.focus {
120− return m, nil
121− }
122−
123− cmd := m.Blink()
124− return m, cmd
125−
126− case tea.FocusMsg:
127− return m, m.Focus()
128−
129− case tea.BlurMsg:
130− m.Blur()
131− return m, nil
132−
133− case BlinkMsg:
134− // We're choosy about whether to accept blinkMsgs so that our cursor
135− // only exactly when it should.
136−
137− // Is this model blink-able?
138− if m.mode != CursorBlink || !m.focus {
139− return m, nil
140− }
141−
142− // Were we expecting this blink message?
143− if msg.id != m.id || msg.tag != m.blinkTag {
144− return m, nil
145− }
146−
147− var cmd tea.Cmd
148− if m.mode == CursorBlink {
149− m.IsBlinked = !m.IsBlinked
150− cmd = m.Blink()
151− }
152− return m, cmd
153−
154− case blinkCanceled: // no-op
155− return m, nil
156− }
157− return m, nil
158−}
159−
160−// Mode returns the model's cursor mode. For available cursor modes, see
161−// type Mode.
162−func (m Model) Mode() Mode {
163− return m.mode
164−}
165−
166−// SetMode sets the model's cursor mode. This method returns a command.
167−//
168−// For available cursor modes, see type CursorMode.
169−func (m *Model) SetMode(mode Mode) tea.Cmd {
170− // Adjust the mode value if it's value is out of range
171− if mode < CursorBlink || mode > CursorHide {
172− return nil
173− }
174− m.mode = mode
175− m.IsBlinked = m.mode == CursorHide || !m.focus
176− if mode == CursorBlink {
177− return Blink
178− }
179− return nil
180−}
181−
182−// Blink is a command used to manage cursor blinking.
183−func (m *Model) Blink() tea.Cmd {
184− if m.mode != CursorBlink {
185− return nil
186− }
187−
188− if m.blinkCtx != nil && m.blinkCtx.cancel != nil {
189− m.blinkCtx.cancel()
190− }
191−
192− ctx, cancel := context.WithTimeout(m.blinkCtx.ctx, m.BlinkSpeed)
193− m.blinkCtx.cancel = cancel
194−
195− m.blinkTag++
196− blinkMsg := BlinkMsg{id: m.id, tag: m.blinkTag}
197−
198− return func() tea.Msg {
199− defer cancel()
200− <-ctx.Done()
201− if ctx.Err() == context.DeadlineExceeded {
202− return blinkMsg
203− }
204− return blinkCanceled{}
205− }
206−}
207−
208−// Blink is a command used to initialize cursor blinking.
209−func Blink() tea.Msg {
210− return initialBlinkMsg{}
211−}
212−
213−// Focus focuses the cursor to allow it to blink if desired.
214−func (m *Model) Focus() tea.Cmd {
215− m.focus = true
216− m.IsBlinked = m.mode == CursorHide // show the cursor unless we've explicitly hidden it
217−
218− if m.mode == CursorBlink && m.focus {
219− return m.Blink()
220− }
221− return nil
222−}
223−
224−// Blur blurs the cursor.
225−func (m *Model) Blur() {
226− m.focus = false
227− m.IsBlinked = true
228−}
229−
230−// SetChar sets the character under the cursor.
231−func (m *Model) SetChar(char string) {
232− m.char = char
233−}
234−
235−// View displays the cursor.
236−func (m Model) View() string {
237− if m.IsBlinked {
238− return m.TextStyle.Inline(true).Render(m.char)
239− }
240− return m.Style.Inline(true).Reverse(true).Render(m.char)
241−}
vendor/charm.land/bubbles/v2/filepicker/filepicker.godeleted−529
@@ -1,529 +0,0 @@
1−// Package filepicker provides a file picker component for Bubble Tea
2−// applications.
3−package filepicker
4−
5−import (
6− "fmt"
7− "os"
8− "path/filepath"
9− "sort"
10− "strconv"
11− "strings"
12− "sync/atomic"
13−
14− "charm.land/bubbles/v2/key"
15− tea "charm.land/bubbletea/v2"
16− "charm.land/lipgloss/v2"
17− "github.com/dustin/go-humanize"
18−)
19−
20−var lastID int64
21−
22−func nextID() int {
23− return int(atomic.AddInt64(&lastID, 1))
24−}
25−
26−// New returns a new filepicker model with default styling and key bindings.
27−func New() Model {
28− return Model{
29− id: nextID(),
30− CurrentDirectory: ".",
31− Cursor: ">",
32− AllowedTypes: []string{},
33− selected: 0,
34− ShowPermissions: true,
35− ShowSize: true,
36− ShowHidden: false,
37− DirAllowed: false,
38− FileAllowed: true,
39− AutoHeight: true,
40− height: 0,
41− maxIdx: 0,
42− minIdx: 0,
43− selectedStack: newStack(),
44− minStack: newStack(),
45− maxStack: newStack(),
46− KeyMap: DefaultKeyMap(),
47− Styles: DefaultStyles(),
48− }
49−}
50−
51−type errorMsg struct {
52− err error
53−}
54−
55−type readDirMsg struct {
56− id int
57− entries []os.DirEntry
58−}
59−
60−const (
61− marginBottom = 5
62− fileSizeWidth = 7
63− paddingLeft = 2
64−)
65−
66−// KeyMap defines key bindings for each user action.
67−type KeyMap struct {
68− GoToTop key.Binding
69− GoToLast key.Binding
70− Down key.Binding
71− Up key.Binding
72− PageUp key.Binding
73− PageDown key.Binding
74− Back key.Binding
75− Open key.Binding
76− Select key.Binding
77−}
78−
79−// DefaultKeyMap defines the default keybindings.
80−func DefaultKeyMap() KeyMap {
81− return KeyMap{
82− GoToTop: key.NewBinding(key.WithKeys("g"), key.WithHelp("g", "first")),
83− GoToLast: key.NewBinding(key.WithKeys("G"), key.WithHelp("G", "last")),
84− Down: key.NewBinding(key.WithKeys("j", "down", "ctrl+n"), key.WithHelp("j", "down")),
85− Up: key.NewBinding(key.WithKeys("k", "up", "ctrl+p"), key.WithHelp("k", "up")),
86− PageUp: key.NewBinding(key.WithKeys("K", "pgup"), key.WithHelp("pgup", "page up")),
87− PageDown: key.NewBinding(key.WithKeys("J", "pgdown"), key.WithHelp("pgdown", "page down")),
88− Back: key.NewBinding(key.WithKeys("h", "backspace", "left", "esc"), key.WithHelp("h", "back")),
89− Open: key.NewBinding(key.WithKeys("l", "right", "enter"), key.WithHelp("l", "open")),
90− Select: key.NewBinding(key.WithKeys("enter"), key.WithHelp("enter", "select")),
91− }
92−}
93−
94−// Styles defines the possible customizations for styles in the file picker.
95−type Styles struct {
96− DisabledCursor lipgloss.Style
97− Cursor lipgloss.Style
98− Symlink lipgloss.Style
99− Directory lipgloss.Style
100− File lipgloss.Style
101− DisabledFile lipgloss.Style
102− Permission lipgloss.Style
103− Selected lipgloss.Style
104− DisabledSelected lipgloss.Style
105− FileSize lipgloss.Style
106− EmptyDirectory lipgloss.Style
107−}
108−
109−// DefaultStyles defines the default styling for the file picker.
110−func DefaultStyles() Styles {
111− return Styles{
112− DisabledCursor: lipgloss.NewStyle().Foreground(lipgloss.Color("247")),
113− Cursor: lipgloss.NewStyle().Foreground(lipgloss.Color("212")),
114− Symlink: lipgloss.NewStyle().Foreground(lipgloss.Color("36")),
115− Directory: lipgloss.NewStyle().Foreground(lipgloss.Color("99")),
116− File: lipgloss.NewStyle(),
117− DisabledFile: lipgloss.NewStyle().Foreground(lipgloss.Color("243")),
118− DisabledSelected: lipgloss.NewStyle().Foreground(lipgloss.Color("247")),
119− Permission: lipgloss.NewStyle().Foreground(lipgloss.Color("244")),
120− Selected: lipgloss.NewStyle().Foreground(lipgloss.Color("212")).Bold(true),
121− FileSize: lipgloss.NewStyle().Foreground(lipgloss.Color("240")).Width(fileSizeWidth).Align(lipgloss.Right),
122− EmptyDirectory: lipgloss.NewStyle().Foreground(lipgloss.Color("240")).PaddingLeft(paddingLeft).SetString("Bummer. No Files Found."),
123− }
124−}
125−
126−// Model represents a file picker.
127−type Model struct {
128− id int
129−
130− // Path is the path which the user has selected with the file picker.
131− Path string
132−
133− // CurrentDirectory is the directory that the user is currently in.
134− CurrentDirectory string
135−
136− // AllowedTypes specifies which file types the user may select.
137− // If empty the user may select any file.
138− AllowedTypes []string
139−
140− KeyMap KeyMap
141− files []os.DirEntry
142− ShowPermissions bool
143− ShowSize bool
144− ShowHidden bool
145− DirAllowed bool
146− FileAllowed bool
147−
148− FileSelected string
149− selected int
150− selectedStack stack
151−
152− minIdx int
153− maxIdx int
154− maxStack stack
155− minStack stack
156−
157− height int
158− AutoHeight bool
159−
160− Cursor string
161− Styles Styles
162−}
163−
164−type stack struct {
165− Push func(int)
166− Pop func() int
167− Length func() int
168−}
169−
170−func newStack() stack {
171− slice := make([]int, 0)
172− return stack{
173− Push: func(i int) {
174− slice = append(slice, i)
175− },
176− Pop: func() int {
177− res := slice[len(slice)-1]
178− slice = slice[:len(slice)-1]
179− return res
180− },
181− Length: func() int {
182− return len(slice)
183− },
184− }
185−}
186−
187−func (m *Model) pushView(selected, minimum, maximum int) {
188− m.selectedStack.Push(selected)
189− m.minStack.Push(minimum)
190− m.maxStack.Push(maximum)
191−}
192−
193−func (m *Model) popView() (int, int, int) {
194− return m.selectedStack.Pop(), m.minStack.Pop(), m.maxStack.Pop()
195−}
196−
197−func (m Model) readDir(path string, showHidden bool) tea.Cmd {
198− return func() tea.Msg {
199− dirEntries, err := os.ReadDir(path)
200− if err != nil {
201− return errorMsg{err}
202− }
203−
204− sort.Slice(dirEntries, func(i, j int) bool {
205− if dirEntries[i].IsDir() == dirEntries[j].IsDir() {
206− return dirEntries[i].Name() < dirEntries[j].Name()
207− }
208− return dirEntries[i].IsDir()
209− })
210−
211− if showHidden {
212− return readDirMsg{id: m.id, entries: dirEntries}
213− }
214−
215− var sanitizedDirEntries []os.DirEntry
216− for _, dirEntry := range dirEntries {
217− isHidden, _ := IsHidden(dirEntry.Name())
218− if isHidden {
219− continue
220− }
221− sanitizedDirEntries = append(sanitizedDirEntries, dirEntry)
222− }
223− return readDirMsg{id: m.id, entries: sanitizedDirEntries}
224− }
225−}
226−
227−// SetHeight sets the height of the file picker.
228−func (m *Model) SetHeight(h int) {
229− m.height = h
230− if m.maxIdx > m.height-1 {
231− m.maxIdx = m.minIdx + m.height - 1
232− }
233−}
234−
235−// Height returns the height of the file picker.
236−func (m Model) Height() int {
237− return m.height
238−}
239−
240−// Init initializes the file picker model.
241−func (m Model) Init() tea.Cmd {
242− return m.readDir(m.CurrentDirectory, m.ShowHidden)
243−}
244−
245−// Update handles user interactions within the file picker model.
246−func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
247− switch msg := msg.(type) {
248− case readDirMsg:
249− if msg.id != m.id {
250− break
251− }
252− m.files = msg.entries
253− m.maxIdx = max(m.maxIdx, m.Height()-1)
254− case tea.WindowSizeMsg:
255− if m.AutoHeight {
256− m.SetHeight(msg.Height - marginBottom)
257− }
258− m.maxIdx = m.Height() - 1
259− case tea.KeyPressMsg:
260− switch {
261− case key.Matches(msg, m.KeyMap.GoToTop):
262− m.selected = 0
263− m.minIdx = 0
264− m.maxIdx = m.Height() - 1
265− case key.Matches(msg, m.KeyMap.GoToLast):
266− m.selected = len(m.files) - 1
267− m.minIdx = len(m.files) - m.Height()
268− m.maxIdx = len(m.files) - 1
269− case key.Matches(msg, m.KeyMap.Down):
270− m.selected++
271− if m.selected >= len(m.files) {
272− m.selected = len(m.files) - 1
273− }
274− if m.selected > m.maxIdx {
275− m.minIdx++
276− m.maxIdx++
277− }
278− case key.Matches(msg, m.KeyMap.Up):
279− m.selected--
280− if m.selected < 0 {
281− m.selected = 0
282− }
283− if m.selected < m.minIdx {
284− m.minIdx--
285− m.maxIdx--
286− }
287− case key.Matches(msg, m.KeyMap.PageDown):
288− m.selected += m.Height()
289− if m.selected >= len(m.files) {
290− m.selected = len(m.files) - 1
291− }
292− m.minIdx += m.Height()
293− m.maxIdx += m.Height()
294−
295− if m.maxIdx >= len(m.files) {
296− m.maxIdx = len(m.files) - 1
297− m.minIdx = m.maxIdx - m.Height()
298− }
299− case key.Matches(msg, m.KeyMap.PageUp):
300− m.selected -= m.Height()
301− if m.selected < 0 {
302− m.selected = 0
303− }
304− m.minIdx -= m.Height()
305− m.maxIdx -= m.Height()
306−
307− if m.minIdx < 0 {
308− m.minIdx = 0
309− m.maxIdx = m.minIdx + m.Height()
310− }
311− case key.Matches(msg, m.KeyMap.Back):
312− m.CurrentDirectory = filepath.Dir(m.CurrentDirectory)
313− if m.selectedStack.Length() > 0 {
314− m.selected, m.minIdx, m.maxIdx = m.popView()
315− } else {
316− m.selected = 0
317− m.minIdx = 0
318− m.maxIdx = m.Height() - 1
319− }
320− return m, m.readDir(m.CurrentDirectory, m.ShowHidden)
321− case key.Matches(msg, m.KeyMap.Open):
322− if len(m.files) == 0 {
323− break
324− }
325−
326− f := m.files[m.selected]
327− info, err := f.Info()
328− if err != nil {
329− break
330− }
331− isSymlink := info.Mode()&os.ModeSymlink != 0
332− isDir := f.IsDir()
333−
334− if isSymlink {
335− symlinkPath, _ := filepath.EvalSymlinks(filepath.Join(m.CurrentDirectory, f.Name()))
336− info, err := os.Stat(symlinkPath)
337− if err != nil {
338− break
339− }
340− if info.IsDir() {
341− isDir = true
342− }
343− }
344−
345− if (!isDir && m.FileAllowed) || (isDir && m.DirAllowed) {
346− if key.Matches(msg, m.KeyMap.Select) {
347− // Select the current path as the selection
348− m.Path = filepath.Join(m.CurrentDirectory, f.Name())
349− }
350− }
351−
352− if !isDir {
353− break
354− }
355−
356− m.CurrentDirectory = filepath.Join(m.CurrentDirectory, f.Name())
357− m.pushView(m.selected, m.minIdx, m.maxIdx)
358− m.selected = 0
359− m.minIdx = 0
360− m.maxIdx = m.Height() - 1
361− return m, m.readDir(m.CurrentDirectory, m.ShowHidden)
362− }
363− }
364− return m, nil
365−}
366−
367−// View returns the view of the file picker.
368−func (m Model) View() string {
369− if len(m.files) == 0 {
370− return m.Styles.EmptyDirectory.Height(m.Height()).MaxHeight(m.Height()).String()
371− }
372− var s strings.Builder
373−
374− for i, f := range m.files {
375− if i < m.minIdx || i > m.maxIdx {
376− continue
377− }
378−
379− var symlinkPath string
380− info, err := f.Info()
381− if err != nil {
382− continue
383− }
384− isSymlink := info.Mode()&os.ModeSymlink != 0
385− size := strings.Replace(humanize.Bytes(uint64(info.Size())), " ", "", 1) //nolint:gosec
386− name := f.Name()
387−
388− if isSymlink {
389− symlinkPath, _ = filepath.EvalSymlinks(filepath.Join(m.CurrentDirectory, name))
390− }
391−
392− disabled := !m.canSelect(name) && !f.IsDir()
393−
394− if m.selected == i { //nolint:nestif
395− selected := ""
396− if m.ShowPermissions {
397− selected += " " + info.Mode().String()
398− }
399− if m.ShowSize {
400− selected += fmt.Sprintf("%"+strconv.Itoa(m.Styles.FileSize.GetWidth())+"s", size)
401− }
402− selected += " " + name
403− if isSymlink {
404− selected += " → " + symlinkPath
405− }
406− if disabled {
407− s.WriteString(m.Styles.DisabledCursor.Render(m.Cursor) + m.Styles.DisabledSelected.Render(selected))
408− } else {
409− s.WriteString(m.Styles.Cursor.Render(m.Cursor) + m.Styles.Selected.Render(selected))
410− }
411− s.WriteRune('\n')
412− continue
413− }
414−
415− style := m.Styles.File
416− if f.IsDir() {
417− style = m.Styles.Directory
418− } else if isSymlink {
419− style = m.Styles.Symlink
420− } else if disabled {
421− style = m.Styles.DisabledFile
422− }
423−
424− fileName := style.Render(name)
425− s.WriteString(m.Styles.Cursor.Render(" "))
426− if isSymlink {
427− fileName += " → " + symlinkPath
428− }
429− if m.ShowPermissions {
430− s.WriteString(" " + m.Styles.Permission.Render(info.Mode().String()))
431− }
432− if m.ShowSize {
433− s.WriteString(m.Styles.FileSize.Render(size))
434− }
435− s.WriteString(" " + fileName)
436− s.WriteRune('\n')
437− }
438−
439− for i := lipgloss.Height(s.String()); i <= m.Height(); i++ {
440− s.WriteRune('\n')
441− }
442−
443− return s.String()
444−}
445−
446−// DidSelectFile returns whether a user has selected a file (on this msg).
447−func (m Model) DidSelectFile(msg tea.Msg) (bool, string) {
448− didSelect, path := m.didSelectFile(msg)
449− if didSelect && m.canSelect(path) {
450− return true, path
451− }
452− return false, ""
453−}
454−
455−// DidSelectDisabledFile returns whether a user tried to select a disabled file
456−// (on this msg). This is necessary only if you would like to warn the user that
457−// they tried to select a disabled file.
458−func (m Model) DidSelectDisabledFile(msg tea.Msg) (bool, string) {
459− didSelect, path := m.didSelectFile(msg)
460− if didSelect && !m.canSelect(path) {
461− return true, path
462− }
463− return false, ""
464−}
465−
466−func (m Model) didSelectFile(msg tea.Msg) (bool, string) {
467− if len(m.files) == 0 {
468− return false, ""
469− }
470− switch msg := msg.(type) {
471− case tea.KeyPressMsg:
472− // If the msg does not match the Select keymap then this could not have been a selection.
473− if !key.Matches(msg, m.KeyMap.Select) {
474− return false, ""
475− }
476−
477− // The key press was a selection, let's confirm whether the current file could
478− // be selected or used for navigating deeper into the stack.
479− f := m.files[m.selected]
480− info, err := f.Info()
481− if err != nil {
482− return false, ""
483− }
484− isSymlink := info.Mode()&os.ModeSymlink != 0
485− isDir := f.IsDir()
486−
487− if isSymlink {
488− symlinkPath, _ := filepath.EvalSymlinks(filepath.Join(m.CurrentDirectory, f.Name()))
489− info, err := os.Stat(symlinkPath)
490− if err != nil {
491− break
492− }
493− if info.IsDir() {
494− isDir = true
495− }
496− }
497−
498− if (!isDir && m.FileAllowed) || (isDir && m.DirAllowed) && m.Path != "" {
499− return true, m.Path
500− }
501−
502− // If the msg was not a KeyPressMsg, then the file could not have been selected this iteration.
503− // Only a KeyPressMsg can select a file.
504− default:
505− return false, ""
506− }
507− return false, ""
508−}
509−
510−func (m Model) canSelect(file string) bool {
511− if len(m.AllowedTypes) <= 0 {
512− return true
513− }
514−
515− for _, ext := range m.AllowedTypes {
516− if strings.HasSuffix(file, ext) {
517− return true
518− }
519− }
520− return false
521−}
522−
523−// HighlightedPath returns the path of the currently highlighted file or directory.
524−func (m Model) HighlightedPath() string {
525− if len(m.files) == 0 || m.selected < 0 || m.selected >= len(m.files) {
526− return ""
527− }
528− return filepath.Join(m.CurrentDirectory, m.files[m.selected].Name())
529−}
vendor/charm.land/bubbles/v2/filepicker/hidden_unix.godeleted−11
@@ -1,11 +0,0 @@
1−//go:build !windows
2−// +build !windows
3−
4−package filepicker
5−
6−import "strings"
7−
8−// IsHidden reports whether a file is hidden or not.
9−func IsHidden(file string) (bool, error) {
10− return strings.HasPrefix(file, "."), nil
11−}
vendor/charm.land/bubbles/v2/filepicker/hidden_windows.godeleted−21
@@ -1,21 +0,0 @@
1−//go:build windows
2−// +build windows
3−
4−package filepicker
5−
6−import (
7− "syscall"
8−)
9−
10−// IsHidden reports whether a file is hidden or not.
11−func IsHidden(file string) (bool, error) {
12− pointer, err := syscall.UTF16PtrFromString(file)
13− if err != nil {
14− return false, err //nolint:wrapcheck
15− }
16− attributes, err := syscall.GetFileAttributes(pointer)
17− if err != nil {
18− return false, err //nolint:wrapcheck
19− }
20− return attributes&syscall.FILE_ATTRIBUTE_HIDDEN != 0, nil
21−}
vendor/charm.land/bubbles/v2/help/help.godeleted−253
@@ -1,253 +0,0 @@
1−// Package help provides a simple help view for Bubble Tea applications.
2−package help
3−
4−import (
5− "strings"
6−
7− "charm.land/bubbles/v2/key"
8− tea "charm.land/bubbletea/v2"
9− "charm.land/lipgloss/v2"
10−)
11−
12−// KeyMap is a map of keybindings used to generate help. Since it's an
13−// interface it can be any type, though struct or a map[string][]key.Binding
14−// are likely candidates.
15−//
16−// Note that if a key is disabled (via key.Binding.SetEnabled) it will not be
17−// rendered in the help view, so in theory generated help should self-manage.
18−type KeyMap interface {
19− // ShortHelp returns a slice of bindings to be displayed in the short
20− // version of the help. The help bubble will render help in the order in
21− // which the help items are returned here.
22− ShortHelp() []key.Binding
23−
24− // FullHelp returns an extended group of help items, grouped by columns.
25− // The help bubble will render the help in the order in which the help
26− // items are returned here.
27− FullHelp() [][]key.Binding
28−}
29−
30−// Styles is a set of available style definitions for the Help bubble.
31−type Styles struct {
32− Ellipsis lipgloss.Style
33−
34− // Styling for the short help
35− ShortKey lipgloss.Style
36− ShortDesc lipgloss.Style
37− ShortSeparator lipgloss.Style
38−
39− // Styling for the full help
40− FullKey lipgloss.Style
41− FullDesc lipgloss.Style
42− FullSeparator lipgloss.Style
43−}
44−
45−// DefaultStyles returns a set of default styles for the help bubble. Light or
46−// dark styles can be selected by passing true or false to the isDark
47−// parameter.
48−func DefaultStyles(isDark bool) Styles {
49− lightDark := lipgloss.LightDark(isDark)
50−
51− keyStyle := lipgloss.NewStyle().Foreground(lightDark(lipgloss.Color("#909090"), lipgloss.Color("#626262")))
52− descStyle := lipgloss.NewStyle().Foreground(lightDark(lipgloss.Color("#B2B2B2"), lipgloss.Color("#4A4A4A")))
53− sepStyle := lipgloss.NewStyle().Foreground(lightDark(lipgloss.Color("#DADADA"), lipgloss.Color("#3C3C3C")))
54−
55− return Styles{
56− ShortKey: keyStyle,
57− ShortDesc: descStyle,
58− ShortSeparator: sepStyle,
59− Ellipsis: sepStyle,
60− FullKey: keyStyle,
61− FullDesc: descStyle,
62− FullSeparator: sepStyle,
63− }
64−}
65−
66−// DefaultDarkStyles returns a set of default styles for dark backgrounds.
67−func DefaultDarkStyles() Styles {
68− return DefaultStyles(true)
69−}
70−
71−// DefaultLightStyles returns a set of default styles for light backgrounds.
72−func DefaultLightStyles() Styles {
73− return DefaultStyles(false)
74−}
75−
76−// Model contains the state of the help view.
77−type Model struct {
78− ShowAll bool // if true, render the "full" help menu
79−
80− ShortSeparator string
81− FullSeparator string
82−
83− // The symbol we use in the short help when help items have been truncated
84− // due to width. Periods of ellipsis by default.
85− Ellipsis string
86−
87− Styles Styles
88−
89− width int
90−}
91−
92−// New creates a new help view with some useful defaults.
93−func New() Model {
94− return Model{
95− ShortSeparator: " • ",
96− FullSeparator: " ",
97− Ellipsis: "…",
98− Styles: DefaultDarkStyles(),
99− }
100−}
101−
102−// Update helps satisfy the Bubble Tea Model interface. It's a no-op.
103−func (m Model) Update(_ tea.Msg) (Model, tea.Cmd) {
104− return m, nil
105−}
106−
107−// View renders the help view's current state.
108−func (m Model) View(k KeyMap) string {
109− if m.ShowAll {
110− return m.FullHelpView(k.FullHelp())
111− }
112− return m.ShortHelpView(k.ShortHelp())
113−}
114−
115−// SetWidth sets the maximum width for the help view.
116−func (m *Model) SetWidth(w int) {
117− m.width = w
118−}
119−
120−// Width returns the maximum width for the help view.
121−func (m Model) Width() int {
122− return m.width
123−}
124−
125−// ShortHelpView renders a single line help view from a slice of keybindings.
126−// If the line is longer than the maximum width it will be gracefully
127−// truncated, showing only as many help items as possible.
128−func (m Model) ShortHelpView(bindings []key.Binding) string {
129− if len(bindings) == 0 {
130− return ""
131− }
132−
133− var b strings.Builder
134− var totalWidth int
135− separator := m.Styles.ShortSeparator.Inline(true).Render(m.ShortSeparator)
136−
137− for i, kb := range bindings {
138− if !kb.Enabled() {
139− continue
140− }
141−
142− // Sep
143− var sep string
144− if totalWidth > 0 && i < len(bindings) {
145− sep = separator
146− }
147−
148− // Item
149− str := sep +
150− m.Styles.ShortKey.Inline(true).Render(kb.Help().Key) + " " +
151− m.Styles.ShortDesc.Inline(true).Render(kb.Help().Desc)
152− w := lipgloss.Width(str)
153−
154− // Tail
155− if tail, ok := m.shouldAddItem(totalWidth, w); !ok {
156− if tail != "" {
157− b.WriteString(tail)
158− }
159− break
160− }
161−
162− totalWidth += w
163− b.WriteString(str)
164− }
165−
166− return b.String()
167−}
168−
169−// FullHelpView renders help columns from a slice of key binding slices. Each
170−// top level slice entry renders into a column.
171−func (m Model) FullHelpView(groups [][]key.Binding) string {
172− if len(groups) == 0 {
173− return ""
174− }
175−
176− // Linter note: at this time we don't think it's worth the additional
177− // code complexity involved in preallocating this slice.
178− var (
179− out []string
180−
181− totalWidth int
182− separator = m.Styles.FullSeparator.Inline(true).Render(m.FullSeparator)
183− )
184−
185− // Iterate over groups to build columns
186− for i, group := range groups {
187− if group == nil || !shouldRenderColumn(group) {
188− continue
189− }
190− var (
191− sep string
192− keys []string
193− descriptions []string
194− )
195−
196− // Sep
197− if totalWidth > 0 && i < len(groups) {
198− sep = separator
199− }
200−
201− // Separate keys and descriptions into different slices
202− for _, kb := range group {
203− if !kb.Enabled() {
204− continue
205− }
206− keys = append(keys, kb.Help().Key)
207− descriptions = append(descriptions, kb.Help().Desc)
208− }
209−
210− // Column
211− col := lipgloss.JoinHorizontal(lipgloss.Top,
212− sep,
213− m.Styles.FullKey.Render(strings.Join(keys, "\n")),
214− " ",
215− m.Styles.FullDesc.Render(strings.Join(descriptions, "\n")),
216− )
217− w := lipgloss.Width(col)
218−
219− // Tail
220− if tail, ok := m.shouldAddItem(totalWidth, w); !ok {
221− if tail != "" {
222− out = append(out, tail)
223− }
224− break
225− }
226−
227− totalWidth += w
228− out = append(out, col)
229− }
230−
231− return lipgloss.JoinHorizontal(lipgloss.Top, out...)
232−}
233−
234−func (m Model) shouldAddItem(totalWidth, width int) (tail string, ok bool) {
235− // If there's room for an ellipsis, print that.
236− if m.width > 0 && totalWidth+width > m.width {
237− tail = " " + m.Styles.Ellipsis.Inline(true).Render(m.Ellipsis)
238−
239− if totalWidth+lipgloss.Width(tail) < m.width {
240− return tail, false
241− }
242− }
243− return "", true
244−}
245−
246−func shouldRenderColumn(b []key.Binding) (ok bool) {
247− for _, v := range b {
248− if v.Enabled() {
249− return true
250− }
251− }
252− return false
253−}
vendor/charm.land/bubbles/v2/internal/memoization/memoization.godeleted−125
@@ -1,125 +0,0 @@
1−// Package memoization implement a simple memoization cache. It's designed to
2−// improve performance in textarea.
3−package memoization
4−
5−import (
6− "container/list"
7− "crypto/sha256"
8− "fmt"
9− "sync"
10−)
11−
12−// Hasher is an interface that requires a Hash method. The Hash method is
13−// expected to return a string representation of the hash of the object.
14−type Hasher interface {
15− Hash() string
16−}
17−
18−// entry is a struct that holds a key-value pair. It is used as an element
19−// in the evictionList of the MemoCache.
20−type entry[T any] struct {
21− key string
22− value T
23−}
24−
25−// MemoCache is a struct that represents a cache with a set capacity. It
26−// uses an LRU (Least Recently Used) eviction policy. It is safe for
27−// concurrent use.
28−type MemoCache[H Hasher, T any] struct {
29− capacity int
30− mutex sync.Mutex
31− cache map[string]*list.Element // The cache holding the results
32− evictionList *list.List // A list to keep track of the order for LRU
33− hashableItems map[string]T // This map keeps track of the original hashable items (optional)
34−}
35−
36−// NewMemoCache is a function that creates a new MemoCache with a given
37−// capacity. It returns a pointer to the created MemoCache.
38−func NewMemoCache[H Hasher, T any](capacity int) *MemoCache[H, T] {
39− return &MemoCache[H, T]{
40− capacity: capacity,
41− cache: make(map[string]*list.Element),
42− evictionList: list.New(),
43− hashableItems: make(map[string]T),
44− }
45−}
46−
47−// Capacity is a method that returns the capacity of the MemoCache.
48−func (m *MemoCache[H, T]) Capacity() int {
49− return m.capacity
50−}
51−
52−// Size is a method that returns the current size of the MemoCache. It is
53−// the number of items currently stored in the cache.
54−func (m *MemoCache[H, T]) Size() int {
55− m.mutex.Lock()
56− defer m.mutex.Unlock()
57− return m.evictionList.Len()
58−}
59−
60−// Get is a method that returns the value associated with the given
61−// hashable item in the MemoCache. If there is no corresponding value, the
62−// method returns nil.
63−func (m *MemoCache[H, T]) Get(h H) (T, bool) {
64− m.mutex.Lock()
65− defer m.mutex.Unlock()
66−
67− hashedKey := h.Hash()
68− if element, found := m.cache[hashedKey]; found {
69− m.evictionList.MoveToFront(element)
70− return element.Value.(*entry[T]).value, true
71− }
72− var result T
73− return result, false
74−}
75−
76−// Set is a method that sets the value for the given hashable item in the
77−// MemoCache. If the cache is at capacity, it evicts the least recently
78−// used item before adding the new item.
79−func (m *MemoCache[H, T]) Set(h H, value T) {
80− m.mutex.Lock()
81− defer m.mutex.Unlock()
82−
83− hashedKey := h.Hash()
84− if element, found := m.cache[hashedKey]; found {
85− m.evictionList.MoveToFront(element)
86− element.Value.(*entry[T]).value = value
87− return
88− }
89−
90− // Check if the cache is at capacity
91− if m.evictionList.Len() >= m.capacity {
92− // Evict the least recently used item from the cache
93− toEvict := m.evictionList.Back()
94− if toEvict != nil {
95− evictedEntry := m.evictionList.Remove(toEvict).(*entry[T])
96− delete(m.cache, evictedEntry.key)
97− delete(m.hashableItems, evictedEntry.key) // if you're keeping track of original items
98− }
99− }
100−
101− // Add the value to the cache and the evictionList
102− newEntry := &entry[T]{
103− key: hashedKey,
104− value: value,
105− }
106− element := m.evictionList.PushFront(newEntry)
107− m.cache[hashedKey] = element
108− m.hashableItems[hashedKey] = value // if you're keeping track of original items
109−}
110−
111−// HString is a type that implements the Hasher interface for strings.
112−type HString string
113−
114−// Hash is a method that returns the hash of the string.
115−func (h HString) Hash() string {
116− return fmt.Sprintf("%x", sha256.Sum256([]byte(h)))
117−}
118−
119−// HInt is a type that implements the Hasher interface for integers.
120−type HInt int
121−
122−// Hash is a method that returns the hash of the integer.
123−func (h HInt) Hash() string {
124− return fmt.Sprintf("%x", sha256.Sum256(fmt.Appendf(nil, "%d", h)))
125−}
vendor/charm.land/bubbles/v2/internal/runeutil/runeutil.godeleted−102
@@ -1,102 +0,0 @@
1−// Package runeutil provides utility functions for tidying up incoming runes
2−// from Key messages.
3−package runeutil
4−
5−import (
6− "unicode"
7− "unicode/utf8"
8−)
9−
10−// Sanitizer is a helper for bubble widgets that want to process
11−// Runes from input key messages.
12−type Sanitizer interface {
13− // Sanitize removes control characters from runes in a KeyRunes
14− // message, and optionally replaces newline/carriage return/tabs by a
15− // specified character.
16− //
17− // The rune array is modified in-place if possible. In that case, the
18− // returned slice is the original slice shortened after the control
19− // characters have been removed/translated.
20− Sanitize(runes []rune) []rune
21−}
22−
23−// NewSanitizer constructs a rune sanitizer.
24−func NewSanitizer(opts ...Option) Sanitizer {
25− s := sanitizer{
26− replaceNewLine: []rune("\n"),
27− replaceTab: []rune(" "),
28− }
29− for _, o := range opts {
30− s = o(s)
31− }
32− return &s
33−}
34−
35−// Option is the type of option that can be passed to Sanitize().
36−type Option func(sanitizer) sanitizer
37−
38−// ReplaceTabs replaces tabs by the specified string.
39−func ReplaceTabs(tabRepl string) Option {
40− return func(s sanitizer) sanitizer {
41− s.replaceTab = []rune(tabRepl)
42− return s
43− }
44−}
45−
46−// ReplaceNewlines replaces newline characters by the specified string.
47−func ReplaceNewlines(nlRepl string) Option {
48− return func(s sanitizer) sanitizer {
49− s.replaceNewLine = []rune(nlRepl)
50− return s
51− }
52−}
53−
54−func (s *sanitizer) Sanitize(runes []rune) []rune {
55− // dstrunes are where we are storing the result.
56− dstrunes := runes[:0:len(runes)]
57− // copied indicates whether dstrunes is an alias of runes
58− // or a copy. We need a copy when dst moves past src.
59− // We use this as an optimization to avoid allocating
60− // a new rune slice in the common case where the output
61− // is smaller or equal to the input.
62− copied := false
63−
64− for src := range runes {
65− r := runes[src]
66− switch {
67− case r == utf8.RuneError:
68− // skip
69−
70− case r == '\r' || r == '\n':
71− if len(dstrunes)+len(s.replaceNewLine) > src && !copied {
72− dst := len(dstrunes)
73− dstrunes = make([]rune, dst, len(runes)+len(s.replaceNewLine))
74− copy(dstrunes, runes[:dst])
75− copied = true
76− }
77− dstrunes = append(dstrunes, s.replaceNewLine...)
78−
79− case r == '\t':
80− if len(dstrunes)+len(s.replaceTab) > src && !copied {
81− dst := len(dstrunes)
82− dstrunes = make([]rune, dst, len(runes)+len(s.replaceTab))
83− copy(dstrunes, runes[:dst])
84− copied = true
85− }
86− dstrunes = append(dstrunes, s.replaceTab...)
87−
88− case unicode.IsControl(r):
89− // Other control characters: skip.
90−
91− default:
92− // Keep the character.
93− dstrunes = append(dstrunes, runes[src])
94− }
95− }
96− return dstrunes
97−}
98−
99−type sanitizer struct {
100− replaceNewLine []rune
101− replaceTab []rune
102−}
vendor/charm.land/bubbles/v2/key/key.godeleted−140
@@ -1,140 +0,0 @@
1−// Package key provides some types and functions for generating user-definable
2−// keymappings useful in Bubble Tea components. There are a few different ways
3−// you can define a keymapping with this package. Here's one example:
4−//
5−// type KeyMap struct {
6−// Up key.Binding
7−// Down key.Binding
8−// }
9−//
10−// var DefaultKeyMap = KeyMap{
11−// Up: key.NewBinding(
12−// key.WithKeys("k", "up"), // actual keybindings
13−// key.WithHelp("↑/k", "move up"), // corresponding help text
14−// ),
15−// Down: key.NewBinding(
16−// key.WithKeys("j", "down"),
17−// key.WithHelp("↓/j", "move down"),
18−// ),
19−// }
20−//
21−// func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
22−// switch msg := msg.(type) {
23−// case tea.KeyPressMsg:
24−// switch {
25−// case key.Matches(msg, DefaultKeyMap.Up):
26−// // The user pressed up
27−// case key.Matches(msg, DefaultKeyMap.Down):
28−// // The user pressed down
29−// }
30−// }
31−//
32−// // ...
33−// }
34−//
35−// The help information, which is not used in the example above, can be used
36−// to render help text for keystrokes in your views.
37−package key
38−
39−import "fmt"
40−
41−// Binding describes a set of keybindings and, optionally, their associated
42−// help text.
43−type Binding struct {
44− keys []string
45− help Help
46− disabled bool
47−}
48−
49−// BindingOpt is an initialization option for a keybinding. It's used as an
50−// argument to NewBinding.
51−type BindingOpt func(*Binding)
52−
53−// NewBinding returns a new keybinding from a set of BindingOpt options.
54−func NewBinding(opts ...BindingOpt) Binding {
55− b := &Binding{}
56− for _, opt := range opts {
57− opt(b)
58− }
59− return *b
60−}
61−
62−// WithKeys initializes a keybinding with the given keystrokes.
63−func WithKeys(keys ...string) BindingOpt {
64− return func(b *Binding) {
65− b.keys = keys
66− }
67−}
68−
69−// WithHelp initializes a keybinding with the given help text.
70−func WithHelp(key, desc string) BindingOpt {
71− return func(b *Binding) {
72− b.help = Help{Key: key, Desc: desc}
73− }
74−}
75−
76−// WithDisabled initializes a disabled keybinding.
77−func WithDisabled() BindingOpt {
78− return func(b *Binding) {
79− b.disabled = true
80− }
81−}
82−
83−// SetKeys sets the keys for the keybinding.
84−func (b *Binding) SetKeys(keys ...string) {
85− b.keys = keys
86−}
87−
88−// Keys returns the keys for the keybinding.
89−func (b Binding) Keys() []string {
90− return b.keys
91−}
92−
93−// SetHelp sets the help text for the keybinding.
94−func (b *Binding) SetHelp(key, desc string) {
95− b.help = Help{Key: key, Desc: desc}
96−}
97−
98−// Help returns the Help information for the keybinding.
99−func (b Binding) Help() Help {
100− return b.help
101−}
102−
103−// Enabled returns whether or not the keybinding is enabled. Disabled
104−// keybindings won't be activated and won't show up in help. Keybindings are
105−// enabled by default.
106−func (b Binding) Enabled() bool {
107− return !b.disabled && b.keys != nil
108−}
109−
110−// SetEnabled enables or disables the keybinding.
111−func (b *Binding) SetEnabled(v bool) {
112− b.disabled = !v
113−}
114−
115−// Unbind removes the keys and help from this binding, effectively nullifying
116−// it. This is a step beyond disabling it, since applications can enable
117−// or disable key bindings based on application state.
118−func (b *Binding) Unbind() {
119− b.keys = nil
120− b.help = Help{}
121−}
122−
123−// Help is help information for a given keybinding.
124−type Help struct {
125− Key string
126− Desc string
127−}
128−
129−// Matches checks if the given key matches the given bindings.
130−func Matches[Key fmt.Stringer](k Key, b ...Binding) bool {
131− keys := k.String()
132− for _, binding := range b {
133− for _, v := range binding.keys {
134− if keys == v && binding.Enabled() {
135− return true
136− }
137− }
138− }
139− return false
140−}
vendor/charm.land/bubbles/v2/spinner/spinner.godeleted−211
@@ -1,211 +0,0 @@
1−// Package spinner provides a spinner component for Bubble Tea applications.
2−package spinner
3−
4−import (
5− "sync/atomic"
6− "time"
7−
8− tea "charm.land/bubbletea/v2"
9− "charm.land/lipgloss/v2"
10−)
11−
12−// Internal ID management. Used during animating to ensure that frame messages
13−// are received only by spinner components that sent them.
14−var lastID int64
15−
16−func nextID() int {
17− return int(atomic.AddInt64(&lastID, 1))
18−}
19−
20−// Spinner is a set of frames used in animating the spinner.
21−type Spinner struct {
22− Frames []string
23− FPS time.Duration
24−}
25−
26−// Some spinners to choose from. You could also make your own.
27−var (
28− Line = Spinner{
29− Frames: []string{"|", "/", "-", "\\"},
30− FPS: time.Second / 10, //nolint:mnd
31− }
32− Dot = Spinner{
33− Frames: []string{"⣾ ", "⣽ ", "⣻ ", "⢿ ", "⡿ ", "⣟ ", "⣯ ", "⣷ "},
34− FPS: time.Second / 10, //nolint:mnd
35− }
36− MiniDot = Spinner{
37− Frames: []string{"⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"},
38− FPS: time.Second / 12, //nolint:mnd
39− }
40− Jump = Spinner{
41− Frames: []string{"⢄", "⢂", "⢁", "⡁", "⡈", "⡐", "⡠"},
42− FPS: time.Second / 10, //nolint:mnd
43− }
44− Pulse = Spinner{
45− Frames: []string{"█", "▓", "▒", "░"},
46− FPS: time.Second / 8, //nolint:mnd
47− }
48− Points = Spinner{
49− Frames: []string{"∙∙∙", "●∙∙", "∙●∙", "∙∙●"},
50− FPS: time.Second / 7, //nolint:mnd
51− }
52− Globe = Spinner{
53− Frames: []string{"🌍", "🌎", "🌏"},
54− FPS: time.Second / 4, //nolint:mnd
55− }
56− Moon = Spinner{
57− Frames: []string{"🌑", "🌒", "🌓", "🌔", "🌕", "🌖", "🌗", "🌘"},
58− FPS: time.Second / 8, //nolint:mnd
59− }
60− Monkey = Spinner{
61− Frames: []string{"🙈", "🙉", "🙊"},
62− FPS: time.Second / 3, //nolint:mnd
63− }
64− Meter = Spinner{
65− Frames: []string{
66− "▱▱▱",
67− "▰▱▱",
68− "▰▰▱",
69− "▰▰▰",
70− "▰▰▱",
71− "▰▱▱",
72− "▱▱▱",
73− },
74− FPS: time.Second / 7, //nolint:mnd
75− }
76− Hamburger = Spinner{
77− Frames: []string{"☱", "☲", "☴", "☲"},
78− FPS: time.Second / 3, //nolint:mnd
79− }
80− Ellipsis = Spinner{
81− Frames: []string{"", ".", "..", "..."},
82− FPS: time.Second / 3, //nolint:mnd
83− }
84−)
85−
86−// Model contains the state for the spinner. Use New to create new models
87−// rather than using Model as a struct literal.
88−type Model struct {
89− // Spinner settings to use. See type Spinner.
90− Spinner Spinner
91−
92− // Style sets the styling for the spinner. Most of the time you'll just
93− // want foreground and background coloring, and potentially some padding.
94− //
95− // For an introduction to styling with Lip Gloss see:
96− // https://github.com/charmbracelet/lipgloss
97− Style lipgloss.Style
98−
99− frame int
100− id int
101− tag int
102−}
103−
104−// ID returns the spinner's unique ID.
105−func (m Model) ID() int {
106− return m.id
107−}
108−
109−// New returns a model with default values.
110−func New(opts ...Option) Model {
111− m := Model{
112− Spinner: Line,
113− id: nextID(),
114− }
115−
116− for _, opt := range opts {
117− opt(&m)
118− }
119−
120− return m
121−}
122−
123−// TickMsg indicates that the timer has ticked and we should render a frame.
124−type TickMsg struct {
125− Time time.Time
126− tag int
127− ID int
128−}
129−
130−// Update is the Tea update function.
131−func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
132− switch msg := msg.(type) {
133− case TickMsg:
134− // If an ID is set, and the ID doesn't belong to this spinner, reject
135− // the message.
136− if msg.ID > 0 && msg.ID != m.id {
137− return m, nil
138− }
139−
140− // If a tag is set, and it's not the one we expect, reject the message.
141− // This prevents the spinner from receiving too many messages and
142− // thus spinning too fast.
143− if msg.tag > 0 && msg.tag != m.tag {
144− return m, nil
145− }
146−
147− m.frame++
148− if m.frame >= len(m.Spinner.Frames) {
149− m.frame = 0
150− }
151−
152− m.tag++
153− return m, m.tick(m.id, m.tag)
154− default:
155− return m, nil
156− }
157−}
158−
159−// View renders the model's view.
160−func (m Model) View() string {
161− if m.frame >= len(m.Spinner.Frames) {
162− return "(error)"
163− }
164−
165− return m.Style.Render(m.Spinner.Frames[m.frame])
166−}
167−
168−// Tick is the command used to advance the spinner one frame. Use this command
169−// to effectively start the spinner.
170−func (m Model) Tick() tea.Msg {
171− return TickMsg{
172− // The time at which the tick occurred.
173− Time: time.Now(),
174−
175− // The ID of the spinner that this message belongs to. This can be
176− // helpful when routing messages, however bear in mind that spinners
177− // will ignore messages that don't contain ID by default.
178− ID: m.id,
179−
180− tag: m.tag,
181− }
182−}
183−
184−func (m Model) tick(id, tag int) tea.Cmd {
185− return tea.Tick(m.Spinner.FPS, func(t time.Time) tea.Msg {
186− return TickMsg{
187− Time: t,
188− ID: id,
189− tag: tag,
190− }
191− })
192−}
193−
194−// Option is used to set options in New. For example:
195−//
196−// spinner := New(WithSpinner(Dot))
197−type Option func(*Model)
198−
199−// WithSpinner is an option to set the spinner. Pass this to [Spinner.New].
200−func WithSpinner(spinner Spinner) Option {
201− return func(m *Model) {
202− m.Spinner = spinner
203− }
204−}
205−
206−// WithStyle is an option to set the spinner style. Pass this to [Spinner.New].
207−func WithStyle(style lipgloss.Style) Option {
208− return func(m *Model) {
209− m.Style = style
210− }
211−}
vendor/charm.land/bubbles/v2/textarea/textarea.godeleted−1897
@@ -1,1897 +0,0 @@
1−// Package textarea provides a multi-line text input component for Bubble Tea
2−// applications.
3−package textarea
4−
5−import (
6− "crypto/sha256"
7− "fmt"
8− "image/color"
9− "slices"
10− "strconv"
11− "strings"
12− "time"
13− "unicode"
14−
15− "charm.land/bubbles/v2/cursor"
16− "charm.land/bubbles/v2/internal/memoization"
17− "charm.land/bubbles/v2/internal/runeutil"
18− "charm.land/bubbles/v2/key"
19− "charm.land/bubbles/v2/viewport"
20− tea "charm.land/bubbletea/v2"
21− "charm.land/lipgloss/v2"
22− "github.com/atotto/clipboard"
23− "github.com/charmbracelet/x/ansi"
24− rw "github.com/mattn/go-runewidth"
25− "github.com/rivo/uniseg"
26−)
27−
28−const (
29− minHeight = 1
30− defaultHeight = 6
31− defaultWidth = 40
32− defaultCharLimit = 0 // no limit
33− defaultMaxHeight = 99
34− defaultMaxWidth = 500
35−
36− // XXX: in v2, make max lines dynamic and default max lines configurable.
37− maxLines = 10000
38−)
39−
40−// Internal messages for clipboard operations.
41−type (
42− pasteMsg string
43− pasteErrMsg struct{ error }
44−)
45−
46−// KeyMap is the key bindings for different actions within the textarea.
47−type KeyMap struct {
48− CharacterBackward key.Binding
49− CharacterForward key.Binding
50− DeleteAfterCursor key.Binding
51− DeleteBeforeCursor key.Binding
52− DeleteCharacterBackward key.Binding
53− DeleteCharacterForward key.Binding
54− DeleteWordBackward key.Binding
55− DeleteWordForward key.Binding
56− InsertNewline key.Binding
57− LineEnd key.Binding
58− LineNext key.Binding
59− LinePrevious key.Binding
60− LineStart key.Binding
61− PageUp key.Binding
62− PageDown key.Binding
63− Paste key.Binding
64− WordBackward key.Binding
65− WordForward key.Binding
66− InputBegin key.Binding
67− InputEnd key.Binding
68−
69− UppercaseWordForward key.Binding
70− LowercaseWordForward key.Binding
71− CapitalizeWordForward key.Binding
72−
73− TransposeCharacterBackward key.Binding
74−}
75−
76−// DefaultKeyMap returns the default set of key bindings for navigating and acting
77−// upon the textarea.
78−func DefaultKeyMap() KeyMap {
79− return KeyMap{
80− CharacterForward: key.NewBinding(key.WithKeys("right", "ctrl+f"), key.WithHelp("right", "character forward")),
81− CharacterBackward: key.NewBinding(key.WithKeys("left", "ctrl+b"), key.WithHelp("left", "character backward")),
82− WordForward: key.NewBinding(key.WithKeys("alt+right", "alt+f"), key.WithHelp("alt+right", "word forward")),
83− WordBackward: key.NewBinding(key.WithKeys("alt+left", "alt+b"), key.WithHelp("alt+left", "word backward")),
84− LineNext: key.NewBinding(key.WithKeys("down", "ctrl+n"), key.WithHelp("down", "next line")),
85− LinePrevious: key.NewBinding(key.WithKeys("up", "ctrl+p"), key.WithHelp("up", "previous line")),
86− DeleteWordBackward: key.NewBinding(key.WithKeys("alt+backspace", "ctrl+w"), key.WithHelp("alt+backspace", "delete word backward")),
87− DeleteWordForward: key.NewBinding(key.WithKeys("alt+delete", "alt+d"), key.WithHelp("alt+delete", "delete word forward")),
88− DeleteAfterCursor: key.NewBinding(key.WithKeys("ctrl+k"), key.WithHelp("ctrl+k", "delete after cursor")),
89− DeleteBeforeCursor: key.NewBinding(key.WithKeys("ctrl+u"), key.WithHelp("ctrl+u", "delete before cursor")),
90− InsertNewline: key.NewBinding(key.WithKeys("enter", "ctrl+m"), key.WithHelp("enter", "insert newline")),
91− DeleteCharacterBackward: key.NewBinding(key.WithKeys("backspace", "ctrl+h"), key.WithHelp("backspace", "delete character backward")),
92− DeleteCharacterForward: key.NewBinding(key.WithKeys("delete", "ctrl+d"), key.WithHelp("delete", "delete character forward")),
93− LineStart: key.NewBinding(key.WithKeys("home", "ctrl+a"), key.WithHelp("home", "line start")),
94− LineEnd: key.NewBinding(key.WithKeys("end", "ctrl+e"), key.WithHelp("end", "line end")),
95− PageUp: key.NewBinding(key.WithKeys("pgup"), key.WithHelp("pgup", "page up")),
96− PageDown: key.NewBinding(key.WithKeys("pgdown"), key.WithHelp("pgdown", "page down")),
97− Paste: key.NewBinding(key.WithKeys("ctrl+v"), key.WithHelp("ctrl+v", "paste")),
98− InputBegin: key.NewBinding(key.WithKeys("alt+<", "ctrl+home"), key.WithHelp("alt+<", "input begin")),
99− InputEnd: key.NewBinding(key.WithKeys("alt+>", "ctrl+end"), key.WithHelp("alt+>", "input end")),
100−
101− CapitalizeWordForward: key.NewBinding(key.WithKeys("alt+c"), key.WithHelp("alt+c", "capitalize word forward")),
102− LowercaseWordForward: key.NewBinding(key.WithKeys("alt+l"), key.WithHelp("alt+l", "lowercase word forward")),
103− UppercaseWordForward: key.NewBinding(key.WithKeys("alt+u"), key.WithHelp("alt+u", "uppercase word forward")),
104−
105− TransposeCharacterBackward: key.NewBinding(key.WithKeys("ctrl+t"), key.WithHelp("ctrl+t", "transpose character backward")),
106− }
107−}
108−
109−// LineInfo is a helper for keeping track of line information regarding
110−// soft-wrapped lines.
111−type LineInfo struct {
112− // Width is the number of columns in the line.
113− Width int
114−
115− // CharWidth is the number of characters in the line to account for
116− // double-width runes.
117− CharWidth int
118−
119− // Height is the number of rows in the line.
120− Height int
121−
122− // StartColumn is the index of the first column of the line.
123− StartColumn int
124−
125− // ColumnOffset is the number of columns that the cursor is offset from the
126− // start of the line.
127− ColumnOffset int
128−
129− // RowOffset is the number of rows that the cursor is offset from the start
130− // of the line.
131− RowOffset int
132−
133− // CharOffset is the number of characters that the cursor is offset
134− // from the start of the line. This will generally be equivalent to
135− // ColumnOffset, but will be different there are double-width runes before
136− // the cursor.
137− CharOffset int
138−}
139−
140−// PromptInfo is a struct that can be used to store information about the
141−// prompt.
142−type PromptInfo struct {
143− LineNumber int
144− Focused bool
145−}
146−
147−// CursorStyle is the style for real and virtual cursors.
148−type CursorStyle struct {
149− // Style styles the cursor block.
150− //
151− // For real cursors, the foreground color set here will be used as the
152− // cursor color.
153− Color color.Color
154−
155− // Shape is the cursor shape. The following shapes are available:
156− //
157− // - tea.CursorBlock
158− // - tea.CursorUnderline
159− // - tea.CursorBar
160− //
161− // This is only used for real cursors.
162− Shape tea.CursorShape
163−
164− // CursorBlink determines whether or not the cursor should blink.
165− Blink bool
166−
167− // BlinkSpeed is the speed at which the virtual cursor blinks. This has no
168− // effect on real cursors as well as no effect if the cursor is set not to
169− // [CursorBlink].
170− //
171− // By default, the blink speed is set to about 500ms.
172− BlinkSpeed time.Duration
173−}
174−
175−// Styles are the styles for the textarea, separated into focused and blurred
176−// states. The appropriate styles will be chosen based on the focus state of
177−// the textarea.
178−type Styles struct {
179− Focused StyleState
180− Blurred StyleState
181− Cursor CursorStyle
182−}
183−
184−// StyleState that will be applied to the text area.
185−//
186−// StyleState can be applied to focused and unfocused states to change the styles
187−// depending on the focus state.
188−//
189−// For an introduction to styling with Lip Gloss see:
190−// https://github.com/charmbracelet/lipgloss
191−type StyleState struct {
192− Base lipgloss.Style
193− Text lipgloss.Style
194− LineNumber lipgloss.Style
195− CursorLineNumber lipgloss.Style
196− CursorLine lipgloss.Style
197− EndOfBuffer lipgloss.Style
198− Placeholder lipgloss.Style
199− Prompt lipgloss.Style
200−}
201−
202−func (s StyleState) computedCursorLine() lipgloss.Style {
203− return s.CursorLine.Inherit(s.Base).Inline(true)
204−}
205−
206−func (s StyleState) computedCursorLineNumber() lipgloss.Style {
207− return s.CursorLineNumber.
208− Inherit(s.CursorLine).
209− Inherit(s.Base).
210− Inline(true)
211−}
212−
213−func (s StyleState) computedEndOfBuffer() lipgloss.Style {
214− return s.EndOfBuffer.Inherit(s.Base).Inline(true)
215−}
216−
217−func (s StyleState) computedLineNumber() lipgloss.Style {
218− return s.LineNumber.Inherit(s.Base).Inline(true)
219−}
220−
221−func (s StyleState) computedPlaceholder() lipgloss.Style {
222− return s.Placeholder.Inherit(s.Base).Inline(true)
223−}
224−
225−func (s StyleState) computedPrompt() lipgloss.Style {
226− return s.Prompt.Inherit(s.Base).Inline(true)
227−}
228−
229−func (s StyleState) computedText() lipgloss.Style {
230− return s.Text.Inherit(s.Base).Inline(true)
231−}
232−
233−// line is the input to the text wrapping function. This is stored in a struct
234−// so that it can be hashed and memoized.
235−type line struct {
236− runes []rune
237− width int
238−}
239−
240−// Hash returns a hash of the line.
241−func (w line) Hash() string {
242− v := fmt.Sprintf("%s:%d", string(w.runes), w.width)
243− return fmt.Sprintf("%x", sha256.Sum256([]byte(v)))
244−}
245−
246−// Model is the Bubble Tea model for this text area element.
247−type Model struct {
248− Err error
249−
250− // General settings.
251− cache *memoization.MemoCache[line, [][]rune]
252−
253− // Prompt is printed at the beginning of each line.
254− //
255− // When changing the value of Prompt after the model has been
256− // initialized, ensure that SetWidth() gets called afterwards.
257− //
258− // See also [SetPromptFunc] for a dynamic prompt.
259− Prompt string
260−
261− // Placeholder is the text displayed when the user
262− // hasn't entered anything yet.
263− Placeholder string
264−
265− // ShowLineNumbers, if enabled, causes line numbers to be printed
266− // after the prompt.
267− ShowLineNumbers bool
268−
269− // EndOfBufferCharacter is displayed at the end of the input.
270− EndOfBufferCharacter rune
271−
272− // KeyMap encodes the keybindings recognized by the widget.
273− KeyMap KeyMap
274−
275− // virtualCursor manages the virtual cursor.
276− virtualCursor cursor.Model
277−
278− // CharLimit is the maximum number of characters this input element will
279− // accept. If 0 or less, there's no limit.
280− CharLimit int
281−
282− // MaxHeight is the maximum height of the text area in rows. If 0 or less,
283− // there's no limit.
284− MaxHeight int
285−
286− // MaxWidth is the maximum width of the text area in columns. If 0 or less,
287− // there's no limit.
288− MaxWidth int
289−
290− // DynamicHeight, when true, causes the textarea to automatically grow
291− // and shrink its height to fit the content. The height is clamped between
292− // MinHeight and MaxHeight.
293− DynamicHeight bool
294−
295− // MinHeight is the minimum height of the text area in rows when
296− // DynamicHeight is enabled. If 0 or less, defaults to 1.
297− MinHeight int
298−
299− // MaxContentHeight is the maximum content height in visual rows
300− // (accounting for soft wraps). When set (> 0), input is blocked once
301− // the total visual lines reach this limit, while MaxHeight controls
302− // only the visible viewport height. When 0, the content guard falls
303− // back to the legacy MaxHeight behavior (blocking at MaxHeight
304− // logical lines) for backward compatibility.
305− MaxContentHeight int
306−
307− // Styling. Styles are defined in [Styles]. Use [SetStyles] and [GetStyles]
308− // to work with this value publicly.
309− styles Styles
310−
311− // useVirtualCursor determines whether or not to use the virtual cursor.
312− // Use [SetVirtualCursor] and [VirtualCursor] to work with this this
313− // value publicly.
314− useVirtualCursor bool
315−
316− // If promptFunc is set, it replaces Prompt as a generator for
317− // prompt strings at the beginning of each line.
318− promptFunc func(PromptInfo) string
319−
320− // promptWidth is the width of the prompt.
321− promptWidth int
322−
323− // width is the maximum number of characters that can be displayed at once.
324− // If 0 or less this setting is ignored.
325− width int
326−
327− // height is the maximum number of lines that can be displayed at once. It
328− // essentially treats the text field like a vertically scrolling viewport
329− // if there are more lines than the permitted height.
330− height int
331−
332− // Underlying text value.
333− value [][]rune
334−
335− // focus indicates whether user input focus should be on this input
336− // component. When false, ignore keyboard input and hide the cursor.
337− focus bool
338−
339− // Cursor column.
340− col int
341−
342− // Cursor row.
343− row int
344−
345− // Last character offset, used to maintain state when the cursor is moved
346− // vertically such that we can maintain the same navigating position.
347− lastCharOffset int
348−
349− // viewport is the vertically-scrollable viewport of the multi-line text
350− // input.
351− viewport *viewport.Model
352−
353− // rune sanitizer for input.
354− rsan runeutil.Sanitizer
355−}
356−
357−// New creates a new model with default settings.
358−func New() Model {
359− vp := viewport.New()
360− vp.KeyMap = viewport.KeyMap{}
361− cur := cursor.New()
362−
363− styles := DefaultDarkStyles()
364−
365− m := Model{
366− CharLimit: defaultCharLimit,
367− MaxHeight: defaultMaxHeight,
368− MaxWidth: defaultMaxWidth,
369− Prompt: lipgloss.ThickBorder().Left + " ",
370− styles: styles,
371− cache: memoization.NewMemoCache[line, [][]rune](maxLines),
372− EndOfBufferCharacter: ' ',
373− ShowLineNumbers: true,
374− useVirtualCursor: true,
375− virtualCursor: cur,
376− KeyMap: DefaultKeyMap(),
377−
378− value: make([][]rune, minHeight, maxLines),
379− focus: false,
380− col: 0,
381− row: 0,
382−
383− viewport: &vp,
384− }
385−
386− m.SetHeight(defaultHeight)
387− m.SetWidth(defaultWidth)
388−
389− return m
390−}
391−
392−// DefaultStyles returns the default styles for focused and blurred states for
393−// the textarea.
394−func DefaultStyles(isDark bool) Styles {
395− lightDark := lipgloss.LightDark(isDark)
396−
397− var s Styles
398− s.Focused = StyleState{
399− Base: lipgloss.NewStyle(),
400− CursorLine: lipgloss.NewStyle().Background(lightDark(lipgloss.Color("255"), lipgloss.Color("0"))),
401− CursorLineNumber: lipgloss.NewStyle().Foreground(lightDark(lipgloss.Color("240"), lipgloss.Color("240"))),
402− EndOfBuffer: lipgloss.NewStyle().Foreground(lightDark(lipgloss.Color("254"), lipgloss.Color("0"))),
403− LineNumber: lipgloss.NewStyle().Foreground(lightDark(lipgloss.Color("249"), lipgloss.Color("7"))),
404− Placeholder: lipgloss.NewStyle().Foreground(lipgloss.Color("240")),
405− Prompt: lipgloss.NewStyle().Foreground(lipgloss.Color("7")),
406− Text: lipgloss.NewStyle(),
407− }
408− s.Blurred = StyleState{
409− Base: lipgloss.NewStyle(),
410− CursorLine: lipgloss.NewStyle().Foreground(lightDark(lipgloss.Color("245"), lipgloss.Color("7"))),
411− CursorLineNumber: lipgloss.NewStyle().Foreground(lightDark(lipgloss.Color("249"), lipgloss.Color("7"))),
412− EndOfBuffer: lipgloss.NewStyle().Foreground(lightDark(lipgloss.Color("254"), lipgloss.Color("0"))),
413− LineNumber: lipgloss.NewStyle().Foreground(lightDark(lipgloss.Color("249"), lipgloss.Color("7"))),
414− Placeholder: lipgloss.NewStyle().Foreground(lipgloss.Color("240")),
415− Prompt: lipgloss.NewStyle().Foreground(lipgloss.Color("7")),
416− Text: lipgloss.NewStyle().Foreground(lightDark(lipgloss.Color("245"), lipgloss.Color("7"))),
417− }
418− s.Cursor = CursorStyle{
419− Color: lipgloss.Color("7"),
420− Shape: tea.CursorBlock,
421− Blink: true,
422− }
423− return s
424−}
425−
426−// DefaultLightStyles returns the default styles for a light background.
427−func DefaultLightStyles() Styles {
428− return DefaultStyles(false)
429−}
430−
431−// DefaultDarkStyles returns the default styles for a dark background.
432−func DefaultDarkStyles() Styles {
433− return DefaultStyles(true)
434−}
435−
436−// Styles returns the current styles for the textarea.
437−func (m Model) Styles() Styles {
438− return m.styles
439−}
440−
441−// SetStyles updates styling for the textarea.
442−func (m *Model) SetStyles(s Styles) {
443− m.styles = s
444− m.updateVirtualCursorStyle()
445−}
446−
447−// VirtualCursor returns whether or not the virtual cursor is enabled.
448−func (m Model) VirtualCursor() bool {
449− return m.useVirtualCursor
450−}
451−
452−// SetVirtualCursor sets whether or not to use the virtual cursor.
453−func (m *Model) SetVirtualCursor(v bool) {
454− m.useVirtualCursor = v
455− m.updateVirtualCursorStyle()
456−}
457−
458−// updateVirtualCursorStyle sets styling on the virtual cursor based on the
459−// textarea's style settings.
460−func (m *Model) updateVirtualCursorStyle() {
461− if !m.useVirtualCursor {
462− m.virtualCursor.SetMode(cursor.CursorHide)
463− return
464− }
465−
466− m.virtualCursor.Style = lipgloss.NewStyle().Foreground(m.styles.Cursor.Color)
467−
468− // By default, the blink speed of the cursor is set to a default
469− // internally.
470− if m.styles.Cursor.Blink {
471− if m.styles.Cursor.BlinkSpeed > 0 {
472− m.virtualCursor.BlinkSpeed = m.styles.Cursor.BlinkSpeed
473− }
474− m.virtualCursor.SetMode(cursor.CursorBlink)
475− return
476− }
477− m.virtualCursor.SetMode(cursor.CursorStatic)
478−}
479−
480−// SetValue sets the value of the text input.
481−func (m *Model) SetValue(s string) {
482− m.Reset()
483− m.InsertString(s)
484− m.recalculateHeight()
485−}
486−
487−// InsertString inserts a string at the cursor position.
488−func (m *Model) InsertString(s string) {
489− m.insertRunesFromUserInput([]rune(s))
490− m.recalculateHeight()
491−}
492−
493−// InsertRune inserts a rune at the cursor position.
494−func (m *Model) InsertRune(r rune) {
495− m.insertRunesFromUserInput([]rune{r})
496− m.recalculateHeight()
497−}
498−
499−// insertRunesFromUserInput inserts runes at the current cursor position.
500−func (m *Model) insertRunesFromUserInput(runes []rune) {
501− // Clean up any special characters in the input provided by the
502− // clipboard. This avoids bugs due to e.g. tab characters and
503− // whatnot.
504− runes = m.san().Sanitize(runes)
505−
506− if m.CharLimit > 0 {
507− availSpace := m.CharLimit - m.Length()
508− // If the char limit's been reached, cancel.
509− if availSpace <= 0 {
510− return
511− }
512− // If there's not enough space to paste the whole thing cut the pasted
513− // runes down so they'll fit.
514− if availSpace < len(runes) {
515− runes = runes[:availSpace]
516− }
517− }
518−
519− // Split the input into lines.
520− var lines [][]rune
521− lstart := 0
522− for i := range runes {
523− if runes[i] == '\n' {
524− // Queue a line to become a new row in the text area below.
525− // Beware to clamp the max capacity of the slice, to ensure no
526− // data from different rows get overwritten when later edits
527− // will modify this line.
528− lines = append(lines, runes[lstart:i:i])
529− lstart = i + 1
530− }
531− }
532− if lstart <= len(runes) {
533− // The last line did not end with a newline character.
534− // Take it now.
535− lines = append(lines, runes[lstart:])
536− }
537−
538− // Obey the maximum line limit.
539− if maxLines > 0 && len(m.value)+len(lines)-1 > maxLines {
540− allowedHeight := max(0, maxLines-len(m.value)+1)
541− lines = lines[:allowedHeight]
542− }
543−
544− // Obey MaxContentHeight in visual rows when set.
545− if m.MaxContentHeight > 0 {
546− budget := m.MaxContentHeight - m.totalVisualLines()
547− // Trim lines from the end until we fit within the budget.
548− for len(lines) > 1 && m.visualLinesForInsert(lines) > budget {
549− lines = lines[:len(lines)-1]
550− }
551− if m.visualLinesForInsert(lines) > budget {
552− return
553− }
554− }
555−
556− if len(lines) == 0 {
557− // Nothing left to insert.
558− return
559− }
560−
561− // Save the remainder of the original line at the current
562− // cursor position.
563− tail := make([]rune, len(m.value[m.row][m.col:]))
564− copy(tail, m.value[m.row][m.col:])
565−
566− // Paste the first line at the current cursor position.
567− m.value[m.row] = append(m.value[m.row][:m.col], lines[0]...)
568− m.col += len(lines[0])
569−
570− if numExtraLines := len(lines) - 1; numExtraLines > 0 {
571− // Add the new lines.
572− // We try to reuse the slice if there's already space.
573− var newGrid [][]rune
574− if cap(m.value) >= len(m.value)+numExtraLines {
575− // Can reuse the extra space.
576− newGrid = m.value[:len(m.value)+numExtraLines]
577− } else {
578− // No space left; need a new slice.
579− newGrid = make([][]rune, len(m.value)+numExtraLines)
580− copy(newGrid, m.value[:m.row+1])
581− }
582− // Add all the rows that were after the cursor in the original
583− // grid at the end of the new grid.
584− copy(newGrid[m.row+1+numExtraLines:], m.value[m.row+1:])
585− m.value = newGrid
586− // Insert all the new lines in the middle.
587− for _, l := range lines[1:] {
588− m.row++
589− m.value[m.row] = l
590− m.col = len(l)
591− }
592− }
593−
594− // Finally add the tail at the end of the last line inserted.
595− m.value[m.row] = append(m.value[m.row], tail...)
596−
597− m.SetCursorColumn(m.col)
598−}
599−
600−// Value returns the value of the text input.
601−func (m Model) Value() string {
602− if m.value == nil {
603− return ""
604− }
605−
606− var v strings.Builder
607− for _, l := range m.value {
608− v.WriteString(string(l))
609− v.WriteByte('\n')
610− }
611−
612− return strings.TrimSuffix(v.String(), "\n")
613−}
614−
615−// Length returns the number of characters currently in the text input.
616−func (m *Model) Length() int {
617− var l int
618− for _, row := range m.value {
619− l += uniseg.StringWidth(string(row))
620− }
621− // We add len(m.value) to include the newline characters.
622− return l + len(m.value) - 1
623−}
624−
625−// LineCount returns the number of lines that are currently in the text input.
626−func (m *Model) LineCount() int {
627− return len(m.value)
628−}
629−
630−// Line returns the 0-indexed row position of the cursor.
631−func (m Model) Line() int {
632− return m.row
633−}
634−
635−// Column returns the 0-indexed column position of the cursor.
636−func (m Model) Column() int {
637− return m.col
638−}
639−
640−// ScrollYOffset returns the Y offset (top row) index of the current view, which
641−// can be used to calculate the current scroll position.
642−func (m Model) ScrollYOffset() int {
643− return m.viewport.YOffset()
644−}
645−
646−// ScrollPercent returns the amount of the textarea that is currently scrolled
647−// through, clamped between 0 and 1.
648−func (m Model) ScrollPercent() float64 {
649− return m.viewport.ScrollPercent()
650−}
651−
652−// setCursorLineRelative moves the cursor by the given number of lines. Negative
653−// values move the cursor up, positive values move the cursor down.
654−func (m *Model) setCursorLineRelative(delta int) {
655− if delta == 0 {
656− return
657− }
658−
659− li := m.LineInfo()
660− charOffset := max(m.lastCharOffset, li.CharOffset)
661− m.lastCharOffset = charOffset
662−
663− // 2 columns to account for the trailing space wrapping.
664− const trailingSpace = 2
665−
666− if delta > 0 { //nolint:nestif
667− // Moving down.
668− for range delta {
669− if li.RowOffset+1 >= li.Height && m.row < len(m.value)-1 {
670− m.row++
671− m.col = 0
672− } else {
673− // Move the cursor to the start of the next virtual line.
674− m.col = min(li.StartColumn+li.Width+trailingSpace, len(m.value[m.row])-1)
675− }
676− li = m.LineInfo()
677− }
678− } else {
679− // Moving up.
680− for range -delta {
681− if li.RowOffset <= 0 && m.row > 0 {
682− m.row--
683− m.col = len(m.value[m.row])
684− } else {
685− // Move the cursor to the end of the previous line.
686− m.col = li.StartColumn - trailingSpace
687− }
688− li = m.LineInfo()
689− }
690− }
691−
692− nli := m.LineInfo()
693− m.col = nli.StartColumn
694−
695− if nli.Width <= 0 {
696− m.repositionView()
697− return
698− }
699−
700− offset := 0
701− for offset < charOffset {
702− if m.row >= len(m.value) || m.col >= len(m.value[m.row]) || offset >= nli.CharWidth-1 {
703− break
704− }
705− offset += rw.RuneWidth(m.value[m.row][m.col])
706− m.col++
707− }
708− m.repositionView()
709−}
710−
711−// CursorDown moves the cursor down by one line.
712−func (m *Model) CursorDown() {
713− m.setCursorLineRelative(1)
714−}
715−
716−// CursorUp moves the cursor up by one line.
717−func (m *Model) CursorUp() {
718− m.setCursorLineRelative(-1)
719−}
720−
721−// SetCursorColumn moves the cursor to the given position. If the position is
722−// out of bounds the cursor will be moved to the start or end accordingly.
723−func (m *Model) SetCursorColumn(col int) {
724− m.col = clamp(col, 0, len(m.value[m.row]))
725− // Any time that we move the cursor horizontally we need to reset the last
726− // offset so that the horizontal position when navigating is adjusted.
727− m.lastCharOffset = 0
728−}
729−
730−// CursorStart moves the cursor to the start of the input field.
731−func (m *Model) CursorStart() {
732− m.SetCursorColumn(0)
733−}
734−
735−// CursorEnd moves the cursor to the end of the input field.
736−func (m *Model) CursorEnd() {
737− m.SetCursorColumn(len(m.value[m.row]))
738−}
739−
740−// Focused returns the focus state on the model.
741−func (m Model) Focused() bool {
742− return m.focus
743−}
744−
745−// activeStyle returns the appropriate set of styles to use depending on
746−// whether the textarea is focused or blurred.
747−func (m Model) activeStyle() *StyleState {
748− if m.focus {
749− return &m.styles.Focused
750− }
751− return &m.styles.Blurred
752−}
753−
754−// Focus sets the focus state on the model. When the model is in focus it can
755−// receive keyboard input and the cursor will be hidden.
756−func (m *Model) Focus() tea.Cmd {
757− m.focus = true
758− return m.virtualCursor.Focus()
759−}
760−
761−// Blur removes the focus state on the model. When the model is blurred it can
762−// not receive keyboard input and the cursor will be hidden.
763−func (m *Model) Blur() {
764− m.focus = false
765− m.virtualCursor.Blur()
766−}
767−
768−// Reset sets the input to its default state with no input.
769−func (m *Model) Reset() {
770− m.value = make([][]rune, minHeight, maxLines)
771− m.col = 0
772− m.row = 0
773− m.viewport.GotoTop()
774− m.SetCursorColumn(0)
775− m.recalculateHeight()
776−}
777−
778−// Word returns the word at the cursor position.
779−// A word is delimited by spaces or line-breaks.
780−func (m *Model) Word() string {
781− line := m.value[m.row]
782− col := m.col - 1
783−
784− if col < 0 {
785− return ""
786− }
787−
788− // If cursor is beyond the line, return empty string
789− if col >= len(line) {
790− return ""
791− }
792−
793− // If cursor is on a space, return empty string
794− if unicode.IsSpace(line[col]) {
795− return ""
796− }
797−
798− // Find the start of the word by moving left
799− start := col
800− for start > 0 && !unicode.IsSpace(line[start-1]) {
801− start--
802− }
803−
804− // Find the end of the word by moving right
805− end := col
806− for end < len(line) && !unicode.IsSpace(line[end]) {
807− end++
808− }
809−
810− return string(line[start:end])
811−}
812−
813−// san initializes or retrieves the rune sanitizer.
814−func (m *Model) san() runeutil.Sanitizer {
815− if m.rsan == nil {
816− // Textinput has all its input on a single line so collapse
817− // newlines/tabs to single spaces.
818− m.rsan = runeutil.NewSanitizer()
819− }
820− return m.rsan
821−}
822−
823−// deleteBeforeCursor deletes all text before the cursor. Returns whether or
824−// not the cursor blink should be reset.
825−func (m *Model) deleteBeforeCursor() {
826− m.value[m.row] = m.value[m.row][m.col:]
827− m.SetCursorColumn(0)
828−}
829−
830−// deleteAfterCursor deletes all text after the cursor. Returns whether or not
831−// the cursor blink should be reset. If input is masked delete everything after
832−// the cursor so as not to reveal word breaks in the masked input.
833−func (m *Model) deleteAfterCursor() {
834− m.value[m.row] = m.value[m.row][:m.col]
835− m.SetCursorColumn(len(m.value[m.row]))
836−}
837−
838−// transposeLeft exchanges the runes at the cursor and immediately
839−// before. No-op if the cursor is at the beginning of the line. If
840−// the cursor is not at the end of the line yet, moves the cursor to
841−// the right.
842−func (m *Model) transposeLeft() {
843− if m.col == 0 || len(m.value[m.row]) < 2 {
844− return
845− }
846− if m.col >= len(m.value[m.row]) {
847− m.SetCursorColumn(m.col - 1)
848− }
849− m.value[m.row][m.col-1], m.value[m.row][m.col] = m.value[m.row][m.col], m.value[m.row][m.col-1]
850− if m.col < len(m.value[m.row]) {
851− m.SetCursorColumn(m.col + 1)
852− }
853−}
854−
855−// deleteWordLeft deletes the word left to the cursor. Returns whether or not
856−// the cursor blink should be reset.
857−func (m *Model) deleteWordLeft() {
858− if m.col == 0 || len(m.value[m.row]) == 0 {
859− return
860− }
861−
862− // Linter note: it's critical that we acquire the initial cursor position
863− // here prior to altering it via SetCursor() below. As such, moving this
864− // call into the corresponding if clause does not apply here.
865− oldCol := m.col
866−
867− m.SetCursorColumn(m.col - 1)
868− for unicode.IsSpace(m.value[m.row][m.col]) {
869− if m.col <= 0 {
870− break
871− }
872− // ignore series of whitespace before cursor
873− m.SetCursorColumn(m.col - 1)
874− }
875−
876− for m.col > 0 {
877− if !unicode.IsSpace(m.value[m.row][m.col]) {
878− m.SetCursorColumn(m.col - 1)
879− } else {
880− if m.col > 0 {
881− // keep the previous space
882− m.SetCursorColumn(m.col + 1)
883− }
884− break
885− }
886− }
887−
888− if oldCol > len(m.value[m.row]) {
889− m.value[m.row] = m.value[m.row][:m.col]
890− } else {
891− m.value[m.row] = append(m.value[m.row][:m.col], m.value[m.row][oldCol:]...)
892− }
893−}
894−
895−// deleteWordRight deletes the word right to the cursor.
896−func (m *Model) deleteWordRight() {
897− if m.col >= len(m.value[m.row]) || len(m.value[m.row]) == 0 {
898− return
899− }
900−
901− oldCol := m.col
902−
903− for m.col < len(m.value[m.row]) && unicode.IsSpace(m.value[m.row][m.col]) {
904− // ignore series of whitespace after cursor
905− m.SetCursorColumn(m.col + 1)
906− }
907−
908− for m.col < len(m.value[m.row]) {
909− if !unicode.IsSpace(m.value[m.row][m.col]) {
910− m.SetCursorColumn(m.col + 1)
911− } else {
912− break
913− }
914− }
915−
916− if m.col > len(m.value[m.row]) {
917− m.value[m.row] = m.value[m.row][:oldCol]
918− } else {
919− m.value[m.row] = append(m.value[m.row][:oldCol], m.value[m.row][m.col:]...)
920− }
921−
922− m.SetCursorColumn(oldCol)
923−}
924−
925−// characterRight moves the cursor one character to the right.
926−func (m *Model) characterRight() {
927− if m.col < len(m.value[m.row]) {
928− m.SetCursorColumn(m.col + 1)
929− } else {
930− if m.row < len(m.value)-1 {
931− m.row++
932− m.CursorStart()
933− }
934− }
935−}
936−
937−// characterLeft moves the cursor one character to the left.
938−// If insideLine is set, the cursor is moved to the last
939−// character in the previous line, instead of one past that.
940−func (m *Model) characterLeft(insideLine bool) {
941− if m.col == 0 && m.row != 0 {
942− m.row--
943− m.CursorEnd()
944− if !insideLine {
945− return
946− }
947− }
948− if m.col > 0 {
949− m.SetCursorColumn(m.col - 1)
950− }
951−}
952−
953−// wordLeft moves the cursor one word to the left. Returns whether or not the
954−// cursor blink should be reset. If input is masked, move input to the start
955−// so as not to reveal word breaks in the masked input.
956−func (m *Model) wordLeft() {
957− for {
958− m.characterLeft(true /* insideLine */)
959− if m.col < len(m.value[m.row]) && !unicode.IsSpace(m.value[m.row][m.col]) {
960− break
961− }
962− }
963−
964− for m.col > 0 {
965− if unicode.IsSpace(m.value[m.row][m.col-1]) {
966− break
967− }
968− m.SetCursorColumn(m.col - 1)
969− }
970−}
971−
972−// wordRight moves the cursor one word to the right. Returns whether or not the
973−// cursor blink should be reset. If the input is masked, move input to the end
974−// so as not to reveal word breaks in the masked input.
975−func (m *Model) wordRight() {
976− m.doWordRight(func(int, int) { /* nothing */ })
977−}
978−
979−func (m *Model) doWordRight(fn func(charIdx int, pos int)) {
980− // Skip spaces forward.
981− for m.col >= len(m.value[m.row]) || unicode.IsSpace(m.value[m.row][m.col]) {
982− if m.row == len(m.value)-1 && m.col == len(m.value[m.row]) {
983− // End of text.
984− break
985− }
986− m.characterRight()
987− }
988−
989− charIdx := 0
990− for m.col < len(m.value[m.row]) {
991− if unicode.IsSpace(m.value[m.row][m.col]) {
992− break
993− }
994− fn(charIdx, m.col)
995− m.SetCursorColumn(m.col + 1)
996− charIdx++
997− }
998−}
999−
1000−// uppercaseRight changes the word to the right to uppercase.
1001−func (m *Model) uppercaseRight() {
1002− m.doWordRight(func(_ int, i int) {
1003− m.value[m.row][i] = unicode.ToUpper(m.value[m.row][i])
1004− })
1005−}
1006−
1007−// lowercaseRight changes the word to the right to lowercase.
1008−func (m *Model) lowercaseRight() {
1009− m.doWordRight(func(_ int, i int) {
1010− m.value[m.row][i] = unicode.ToLower(m.value[m.row][i])
1011− })
1012−}
1013−
1014−// capitalizeRight changes the word to the right to title case.
1015−func (m *Model) capitalizeRight() {
1016− m.doWordRight(func(charIdx int, i int) {
1017− if charIdx == 0 {
1018− m.value[m.row][i] = unicode.ToTitle(m.value[m.row][i])
1019− }
1020− })
1021−}
1022−
1023−// LineInfo returns the number of characters from the start of the
1024−// (soft-wrapped) line and the (soft-wrapped) line width.
1025−func (m Model) LineInfo() LineInfo {
1026− grid := m.memoizedWrap(m.value[m.row], m.width)
1027−
1028− // Find out which line we are currently on. This can be determined by the
1029− // m.col and counting the number of runes that we need to skip.
1030− var counter int
1031− for i, line := range grid {
1032− // We've found the line that we are on
1033− if counter+len(line) == m.col && i+1 < len(grid) {
1034− // We wrap around to the next line if we are at the end of the
1035− // previous line so that we can be at the very beginning of the row
1036− return LineInfo{
1037− CharOffset: 0,
1038− ColumnOffset: 0,
1039− Height: len(grid),
1040− RowOffset: i + 1,
1041− StartColumn: m.col,
1042− Width: len(grid[i+1]),
1043− CharWidth: uniseg.StringWidth(string(line)),
1044− }
1045− }
1046−
1047− if counter+len(line) >= m.col {
1048− return LineInfo{
1049− CharOffset: uniseg.StringWidth(string(line[:max(0, m.col-counter)])),
1050− ColumnOffset: m.col - counter,
1051− Height: len(grid),
1052− RowOffset: i,
1053− StartColumn: counter,
1054− Width: len(line),
1055− CharWidth: uniseg.StringWidth(string(line)),
1056− }
1057− }
1058−
1059− counter += len(line)
1060− }
1061− return LineInfo{}
1062−}
1063−
1064−// repositionView repositions the view of the viewport based on the defined
1065−// scrolling behavior.
1066−func (m *Model) repositionView() {
1067− minimum := m.viewport.YOffset()
1068− maximum := minimum + m.viewport.Height() - 1
1069− if row := m.cursorLineNumber(); row < minimum {
1070− m.viewport.ScrollUp(minimum - row)
1071− } else if row > maximum {
1072− m.viewport.ScrollDown(row - maximum)
1073− }
1074−}
1075−
1076−// Width returns the width of the textarea.
1077−func (m Model) Width() int {
1078− return m.width
1079−}
1080−
1081−// MoveToBegin moves the cursor to the beginning of the input.
1082−func (m *Model) MoveToBegin() {
1083− m.row = 0
1084− m.SetCursorColumn(0)
1085− m.repositionView()
1086−}
1087−
1088−// MoveToEnd moves the cursor to the end of the input.
1089−func (m *Model) MoveToEnd() {
1090− m.row = len(m.value) - 1
1091− m.SetCursorColumn(len(m.value[m.row]))
1092− m.repositionView()
1093−}
1094−
1095−// PageUp moves the cursor up by one page. First call snaps to the first visible
1096−// line, subsequent calls move up by a full page.
1097−func (m *Model) PageUp() {
1098− // If not on the first visible line, snap to it.
1099− if offset := m.viewport.YOffset() - m.cursorLineNumber(); offset < 0 {
1100− m.setCursorLineRelative(offset)
1101− return
1102− }
1103−
1104− // Already on first visible line, move up by a full page.
1105− m.setCursorLineRelative(-m.height)
1106−}
1107−
1108−// PageDown moves the cursor down by one page. First call snaps to the last
1109−// visible line, subsequent calls move down by a full page.
1110−func (m *Model) PageDown() {
1111− // If not on the last visible line, snap to it.
1112− if offset := m.cursorLineNumber() - m.viewport.YOffset(); offset < m.height-1 {
1113− m.setCursorLineRelative(m.height - 1 - offset)
1114− return
1115− }
1116−
1117− // Already on last visible line, move down by a full page.
1118− m.setCursorLineRelative(m.height)
1119−}
1120−
1121−// SetWidth sets the width of the textarea to fit exactly within the given width.
1122−// This means that the textarea will account for the width of the prompt and
1123−// whether or not line numbers are being shown.
1124−//
1125−// Ensure that SetWidth is called after setting the Prompt and ShowLineNumbers,
1126−// It is important that the width of the textarea be exactly the given width
1127−// and no more.
1128−func (m *Model) SetWidth(w int) {
1129− // Update prompt width only if there is no prompt function as
1130− // [SetPromptFunc] updates the prompt width when it is called.
1131− if m.promptFunc == nil {
1132− // XXX: Do we even need this or can we calculate the prompt width
1133− // at render time?
1134− m.promptWidth = uniseg.StringWidth(m.Prompt)
1135− }
1136−
1137− // Add base style borders and padding to reserved outer width.
1138− reservedOuter := m.activeStyle().Base.GetHorizontalFrameSize()
1139−
1140− // Add prompt width to reserved inner width.
1141− reservedInner := m.promptWidth
1142−
1143− // Add line number width to reserved inner width.
1144− if m.ShowLineNumbers {
1145− // XXX: this was originally documented as needing "1 cell" but was,
1146− // in practice, effectively hardcoded to 2 cells. We can, and should,
1147− // reduce this to one gap and update the tests accordingly.
1148− const gap = 2
1149−
1150− // Number of digits plus 1 cell for the margin.
1151− reservedInner += numDigits(m.MaxHeight) + gap
1152− }
1153−
1154− // Input width must be at least one more than the reserved inner and outer
1155− // width. This gives us a minimum input width of 1.
1156− minWidth := reservedInner + reservedOuter + 1
1157− inputWidth := max(w, minWidth)
1158−
1159− // Input width must be no more than maximum width.
1160− if m.MaxWidth > 0 {
1161− inputWidth = min(inputWidth, m.MaxWidth)
1162− }
1163−
1164− // Since the width of the viewport and input area is dependent on the width of
1165− // borders, prompt and line numbers, we need to calculate it by subtracting
1166− // the reserved width from them.
1167−
1168− m.viewport.SetWidth(inputWidth - reservedOuter)
1169− m.width = inputWidth - reservedOuter - reservedInner
1170− m.recalculateHeight()
1171−}
1172−
1173−// SetPromptFunc supersedes the Prompt field and sets a dynamic prompt instead.
1174−//
1175−// If the function returns a prompt that is shorter than the specified
1176−// promptWidth, it will be padded to the left. If it returns a prompt that is
1177−// longer, display artifacts may occur; the caller is responsible for computing
1178−// an adequate promptWidth.
1179−func (m *Model) SetPromptFunc(promptWidth int, fn func(PromptInfo) string) {
1180− m.promptFunc = fn
1181− m.promptWidth = promptWidth
1182−}
1183−
1184−// Height returns the current height of the textarea.
1185−func (m Model) Height() int {
1186− return m.height
1187−}
1188−
1189−// SetHeight sets the height of the textarea.
1190−func (m *Model) SetHeight(h int) {
1191− if m.MaxHeight > 0 {
1192− m.height = clamp(h, minHeight, m.MaxHeight)
1193− m.viewport.SetHeight(clamp(h, minHeight, m.MaxHeight))
1194− } else {
1195− m.height = max(h, minHeight)
1196− m.viewport.SetHeight(max(h, minHeight))
1197− }
1198−
1199− m.repositionView()
1200−}
1201−
1202−// Update is the Bubble Tea update loop.
1203−func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
1204− if !m.focus {
1205− m.virtualCursor.Blur()
1206− return m, nil
1207− }
1208−
1209− // Used to determine if the cursor should blink.
1210− oldRow, oldCol := m.cursorLineNumber(), m.col
1211−
1212− var cmds []tea.Cmd
1213−
1214− if m.value[m.row] == nil {
1215− m.value[m.row] = make([]rune, 0)
1216− }
1217−
1218− if m.MaxHeight > 0 && m.MaxHeight != m.cache.Capacity() {
1219− m.cache = memoization.NewMemoCache[line, [][]rune](m.MaxHeight)
1220− }
1221−
1222− switch msg := msg.(type) {
1223− case tea.PasteMsg:
1224− m.insertRunesFromUserInput([]rune(msg.Content))
1225− case tea.KeyPressMsg:
1226− switch {
1227− case key.Matches(msg, m.KeyMap.DeleteAfterCursor):
1228− m.col = clamp(m.col, 0, len(m.value[m.row]))
1229− if m.col >= len(m.value[m.row]) {
1230− m.mergeLineBelow(m.row)
1231− break
1232− }
1233− m.deleteAfterCursor()
1234− case key.Matches(msg, m.KeyMap.DeleteBeforeCursor):
1235− m.col = clamp(m.col, 0, len(m.value[m.row]))
1236− if m.col <= 0 {
1237− m.mergeLineAbove(m.row)
1238− break
1239− }
1240− m.deleteBeforeCursor()
1241− case key.Matches(msg, m.KeyMap.DeleteCharacterBackward):
1242− m.col = clamp(m.col, 0, len(m.value[m.row]))
1243− if m.col <= 0 {
1244− m.mergeLineAbove(m.row)
1245− break
1246− }
1247− if len(m.value[m.row]) > 0 {
1248− m.value[m.row] = append(m.value[m.row][:max(0, m.col-1)], m.value[m.row][m.col:]...)
1249− if m.col > 0 {
1250− m.SetCursorColumn(m.col - 1)
1251− }
1252− }
1253− case key.Matches(msg, m.KeyMap.DeleteCharacterForward):
1254− if len(m.value[m.row]) > 0 && m.col < len(m.value[m.row]) {
1255− m.value[m.row] = slices.Delete(m.value[m.row], m.col, m.col+1)
1256− }
1257− if m.col >= len(m.value[m.row]) {
1258− m.mergeLineBelow(m.row)
1259− break
1260− }
1261− case key.Matches(msg, m.KeyMap.DeleteWordBackward):
1262− if m.col <= 0 {
1263− m.mergeLineAbove(m.row)
1264− break
1265− }
1266− m.deleteWordLeft()
1267− case key.Matches(msg, m.KeyMap.DeleteWordForward):
1268− m.col = clamp(m.col, 0, len(m.value[m.row]))
1269− if m.col >= len(m.value[m.row]) {
1270− m.mergeLineBelow(m.row)
1271− break
1272− }
1273− m.deleteWordRight()
1274− case key.Matches(msg, m.KeyMap.InsertNewline):
1275− if m.atContentLimit() {
1276− return m, nil
1277− }
1278− m.col = clamp(m.col, 0, len(m.value[m.row]))
1279− m.splitLine(m.row, m.col)
1280− case key.Matches(msg, m.KeyMap.LineEnd):
1281− m.CursorEnd()
1282− case key.Matches(msg, m.KeyMap.LineStart):
1283− m.CursorStart()
1284− case key.Matches(msg, m.KeyMap.CharacterForward):
1285− m.characterRight()
1286− case key.Matches(msg, m.KeyMap.LineNext):
1287− m.CursorDown()
1288− case key.Matches(msg, m.KeyMap.WordForward):
1289− m.wordRight()
1290− case key.Matches(msg, m.KeyMap.Paste):
1291− return m, Paste
1292− case key.Matches(msg, m.KeyMap.CharacterBackward):
1293− m.characterLeft(false /* insideLine */)
1294− case key.Matches(msg, m.KeyMap.LinePrevious):
1295− m.CursorUp()
1296− case key.Matches(msg, m.KeyMap.WordBackward):
1297− m.wordLeft()
1298− case key.Matches(msg, m.KeyMap.InputBegin):
1299− m.MoveToBegin()
1300− case key.Matches(msg, m.KeyMap.InputEnd):
1301− m.MoveToEnd()
1302− case key.Matches(msg, m.KeyMap.PageUp):
1303− m.PageUp()
1304− case key.Matches(msg, m.KeyMap.PageDown):
1305− m.PageDown()
1306− case key.Matches(msg, m.KeyMap.LowercaseWordForward):
1307− m.lowercaseRight()
1308− case key.Matches(msg, m.KeyMap.UppercaseWordForward):
1309− m.uppercaseRight()
1310− case key.Matches(msg, m.KeyMap.CapitalizeWordForward):
1311− m.capitalizeRight()
1312− case key.Matches(msg, m.KeyMap.TransposeCharacterBackward):
1313− m.transposeLeft()
1314−
1315− default:
1316− m.insertRunesFromUserInput([]rune(msg.Text))
1317− }
1318−
1319− case pasteMsg:
1320− m.insertRunesFromUserInput([]rune(msg))
1321−
1322− case pasteErrMsg:
1323− m.Err = msg
1324− }
1325−
1326− m.recalculateHeight()
1327−
1328− // Make sure we set the content of the viewport before updating it.
1329− view := m.view()
1330− m.viewport.SetContent(view)
1331− vp, cmd := m.viewport.Update(msg)
1332− m.viewport = &vp
1333− cmds = append(cmds, cmd)
1334−
1335− if m.useVirtualCursor {
1336− m.virtualCursor, cmd = m.virtualCursor.Update(msg)
1337−
1338− // If the cursor has moved, reset the blink state. This is a small UX
1339− // nuance that makes cursor movement obvious and feel snappy.
1340− newRow, newCol := m.cursorLineNumber(), m.col
1341− if (newRow != oldRow || newCol != oldCol) && m.virtualCursor.Mode() == cursor.CursorBlink {
1342− m.virtualCursor.IsBlinked = false
1343− cmd = m.virtualCursor.Blink()
1344− }
1345− cmds = append(cmds, cmd)
1346− }
1347−
1348− m.repositionView()
1349−
1350− return m, tea.Batch(cmds...)
1351−}
1352−
1353−func (m *Model) view() string {
1354− if len(m.Value()) == 0 && m.row == 0 && m.col == 0 && m.Placeholder != "" {
1355− return m.placeholderView()
1356− }
1357− m.virtualCursor.TextStyle = m.activeStyle().computedCursorLine()
1358−
1359− var (
1360− s strings.Builder
1361− style lipgloss.Style
1362− newLines int
1363− widestLineNumber int
1364− lineInfo = m.LineInfo()
1365− styles = m.activeStyle()
1366− )
1367−
1368− displayLine := 0
1369− for l, line := range m.value {
1370− wrappedLines := m.memoizedWrap(line, m.width)
1371−
1372− if m.row == l {
1373− style = styles.computedCursorLine()
1374− } else {
1375− style = styles.computedText()
1376− }
1377−
1378− for wl, wrappedLine := range wrappedLines {
1379− prompt := m.promptView(displayLine)
1380− s.WriteString(style.Render(prompt))
1381− displayLine++
1382−
1383− var ln string
1384− if m.ShowLineNumbers {
1385− if wl == 0 { // normal line
1386− isCursorLine := m.row == l
1387− s.WriteString(m.lineNumberView(l+1, isCursorLine))
1388− } else { // soft wrapped line
1389− isCursorLine := m.row == l
1390− s.WriteString(m.lineNumberView(-1, isCursorLine))
1391− }
1392− }
1393−
1394− // Note the widest line number for padding purposes later.
1395− lnw := uniseg.StringWidth(ln)
1396− if lnw > widestLineNumber {
1397− widestLineNumber = lnw
1398− }
1399−
1400− strwidth := uniseg.StringWidth(string(wrappedLine))
1401− padding := m.width - strwidth
1402− // If the trailing space causes the line to be wider than the
1403− // width, we should not draw it to the screen since it will result
1404− // in an extra space at the end of the line which can look off when
1405− // the cursor line is showing.
1406− if strwidth > m.width {
1407− // The character causing the line to be wider than the width is
1408− // guaranteed to be a space since any other character would
1409− // have been wrapped.
1410− wrappedLine = []rune(strings.TrimSuffix(string(wrappedLine), " "))
1411− padding -= m.width - strwidth
1412− }
1413− if m.row == l && lineInfo.RowOffset == wl {
1414− s.WriteString(style.Render(string(wrappedLine[:lineInfo.ColumnOffset])))
1415− if m.col >= len(line) && lineInfo.CharOffset >= m.width {
1416− m.virtualCursor.SetChar(" ")
1417− s.WriteString(m.virtualCursor.View())
1418− } else {
1419− m.virtualCursor.SetChar(string(wrappedLine[lineInfo.ColumnOffset]))
1420− s.WriteString(style.Render(m.virtualCursor.View()))
1421− s.WriteString(style.Render(string(wrappedLine[lineInfo.ColumnOffset+1:])))
1422− }
1423− } else {
1424− s.WriteString(style.Render(string(wrappedLine)))
1425− }
1426− s.WriteString(style.Render(strings.Repeat(" ", max(0, padding))))
1427− s.WriteRune('\n')
1428− newLines++
1429− }
1430− }
1431−
1432− // Always show at least `m.Height` lines at all times.
1433− // To do this we can simply pad out a few extra new lines in the view.
1434− for range m.height {
1435− s.WriteString(m.promptView(displayLine))
1436− displayLine++
1437−
1438− // Write end of buffer content
1439− leftGutter := string(m.EndOfBufferCharacter)
1440− rightGapWidth := m.Width() - uniseg.StringWidth(leftGutter) + widestLineNumber
1441− rightGap := strings.Repeat(" ", max(0, rightGapWidth))
1442− s.WriteString(styles.computedEndOfBuffer().Render(leftGutter + rightGap))
1443− s.WriteRune('\n')
1444− }
1445−
1446− return s.String()
1447−}
1448−
1449−// View renders the text area in its current state.
1450−func (m Model) View() string {
1451− // XXX: This is a workaround for the case where the viewport hasn't
1452− // been initialized yet like during the initial render. In that case,
1453− // we need to render the view again because Update hasn't been called
1454− // yet to set the content of the viewport.
1455− m.viewport.SetContent(m.view())
1456− view := m.viewport.View()
1457− styles := m.activeStyle()
1458− return styles.Base.Render(view)
1459−}
1460−
1461−// promptView renders a single line of the prompt.
1462−func (m Model) promptView(displayLine int) (prompt string) {
1463− prompt = m.Prompt
1464− if m.promptFunc != nil {
1465− prompt = m.promptFunc(PromptInfo{
1466− LineNumber: displayLine,
1467− Focused: m.focus,
1468− })
1469− width := lipgloss.Width(prompt)
1470− if width < m.promptWidth {
1471− prompt = fmt.Sprintf("%*s%s", m.promptWidth-width, "", prompt)
1472− }
1473− }
1474−
1475− return m.activeStyle().computedPrompt().Render(prompt)
1476−}
1477−
1478−// lineNumberView renders the line number.
1479−//
1480−// If the argument is less than 0, a space styled as a line number is returned
1481−// instead. Such cases are used for soft-wrapped lines.
1482−//
1483−// The second argument indicates whether this line number is for a 'cursorline'
1484−// line number.
1485−func (m Model) lineNumberView(n int, isCursorLine bool) (str string) {
1486− if !m.ShowLineNumbers {
1487− return ""
1488− }
1489−
1490− if n <= 0 {
1491− str = " "
1492− } else {
1493− str = strconv.Itoa(n)
1494− }
1495−
1496− // XXX: is textStyle really necessary here?
1497− textStyle := m.activeStyle().computedText()
1498− lineNumberStyle := m.activeStyle().computedLineNumber()
1499− if isCursorLine {
1500− textStyle = m.activeStyle().computedCursorLine()
1501− lineNumberStyle = m.activeStyle().computedCursorLineNumber()
1502− }
1503−
1504− // Format line number dynamically based on the maximum number of lines.
1505− digits := len(strconv.Itoa(m.MaxHeight))
1506− str = fmt.Sprintf(" %*v ", digits, str)
1507−
1508− return textStyle.Render(lineNumberStyle.Render(str))
1509−}
1510−
1511−// placeholderView returns the prompt and placeholder, if any.
1512−func (m Model) placeholderView() string {
1513− var (
1514− s strings.Builder
1515− p = m.Placeholder
1516− styles = m.activeStyle()
1517− )
1518− // word wrap lines
1519− pwordwrap := ansi.Wordwrap(p, m.width, "")
1520− // hard wrap lines (handles lines that could not be word wrapped)
1521− pwrap := ansi.Hardwrap(pwordwrap, m.width, true)
1522− // split string by new lines
1523− plines := strings.Split(strings.TrimSpace(pwrap), "\n")
1524−
1525− for i := range m.height {
1526− isLineNumber := len(plines) > i
1527−
1528− lineStyle := styles.computedPlaceholder()
1529− if len(plines) > i {
1530− lineStyle = styles.computedCursorLine()
1531− }
1532−
1533− // render prompt
1534− prompt := m.promptView(i)
1535− s.WriteString(lineStyle.Render(prompt))
1536−
1537− // when show line numbers enabled:
1538− // - render line number for only the cursor line
1539− // - indent other placeholder lines
1540− // this is consistent with vim with line numbers enabled
1541− if m.ShowLineNumbers {
1542− var ln int
1543−
1544− switch {
1545− case i == 0:
1546− ln = i + 1
1547− fallthrough
1548− case len(plines) > i:
1549− s.WriteString(m.lineNumberView(ln, isLineNumber))
1550− default:
1551− }
1552− }
1553−
1554− switch {
1555− // first line
1556− case i == 0:
1557− // first character of first line as cursor with character
1558− m.virtualCursor.TextStyle = styles.computedPlaceholder()
1559−
1560− ch, rest, _, _ := uniseg.FirstGraphemeClusterInString(plines[0], 0)
1561− m.virtualCursor.SetChar(ch)
1562− s.WriteString(lineStyle.Render(m.virtualCursor.View()))
1563−
1564− // the rest of the first line
1565− s.WriteString(lineStyle.Render(styles.computedPlaceholder().Render(rest)))
1566−
1567− // extend the first line with spaces to fill the width, so that
1568− // the entire line is filled when cursorline is enabled.
1569− gap := strings.Repeat(" ", max(0, m.width-lipgloss.Width(plines[0])))
1570− s.WriteString(lineStyle.Render(gap))
1571− // remaining lines
1572− case len(plines) > i:
1573− // current line placeholder text
1574− if len(plines) > i {
1575− placeholderLine := plines[i]
1576− gap := strings.Repeat(" ", max(0, m.width-uniseg.StringWidth(plines[i])))
1577− s.WriteString(lineStyle.Render(placeholderLine + gap))
1578− }
1579− default:
1580− // end of line buffer character
1581− eob := styles.computedEndOfBuffer().Render(string(m.EndOfBufferCharacter))
1582− s.WriteString(eob)
1583− }
1584−
1585− // terminate with new line
1586− s.WriteRune('\n')
1587− }
1588−
1589− m.viewport.SetContent(s.String())
1590− return styles.Base.Render(m.viewport.View())
1591−}
1592−
1593−// Blink returns the blink command for the virtual cursor.
1594−func Blink() tea.Msg {
1595− return cursor.Blink()
1596−}
1597−
1598−// Cursor returns a [tea.Cursor] for rendering a real cursor in a Bubble Tea
1599−// program. This requires that [Model.VirtualCursor] is set to false.
1600−//
1601−// Note that you will almost certainly also need to adjust the offset cursor
1602−// position per the textarea's per the textarea's position in the terminal.
1603−//
1604−// Example:
1605−//
1606−// // In your top-level View function:
1607−// f := tea.NewFrame(m.textarea.View())
1608−// f.Cursor = m.textarea.Cursor()
1609−// f.Cursor.Position.X += offsetX
1610−// f.Cursor.Position.Y += offsetY
1611−func (m Model) Cursor() *tea.Cursor {
1612− if m.useVirtualCursor || !m.Focused() {
1613− return nil
1614− }
1615−
1616− lineInfo := m.LineInfo()
1617− w := lipgloss.Width
1618− baseStyle := m.activeStyle().Base
1619−
1620− xOffset := lineInfo.CharOffset +
1621− w(m.promptView(0)) +
1622− w(m.lineNumberView(0, false)) +
1623− baseStyle.GetMarginLeft() +
1624− baseStyle.GetPaddingLeft() +
1625− baseStyle.GetBorderLeftSize()
1626−
1627− yOffset := m.cursorLineNumber() -
1628− m.viewport.YOffset() +
1629− baseStyle.GetMarginTop() +
1630− baseStyle.GetPaddingTop() +
1631− baseStyle.GetBorderTopSize()
1632−
1633− c := tea.NewCursor(xOffset, yOffset)
1634− c.Blink = m.styles.Cursor.Blink
1635− c.Color = m.styles.Cursor.Color
1636− c.Shape = m.styles.Cursor.Shape
1637− return c
1638−}
1639−
1640−func (m Model) memoizedWrap(runes []rune, width int) [][]rune {
1641− input := line{runes: runes, width: width}
1642− if v, ok := m.cache.Get(input); ok {
1643− return v
1644− }
1645− v := wrap(runes, width)
1646− m.cache.Set(input, v)
1647− return v
1648−}
1649−
1650−// cursorLineNumber returns the line number that the cursor is on.
1651−// This accounts for soft wrapped lines.
1652−func (m Model) cursorLineNumber() int {
1653− line := 0
1654− for i := range m.row {
1655− // Calculate the number of lines that the current line will be split
1656− // into.
1657− line += len(m.memoizedWrap(m.value[i], m.width))
1658− }
1659− line += m.LineInfo().RowOffset
1660− return line
1661−}
1662−
1663−// totalVisualLines returns the total number of display lines across all
1664−// logical lines, accounting for soft wraps.
1665−func (m *Model) totalVisualLines() int {
1666− n := 0
1667− for _, line := range m.value {
1668− n += len(m.memoizedWrap(line, m.width))
1669− }
1670− return n
1671−}
1672−
1673−// recalculateHeight recomputes and applies the textarea height based on
1674−// content when DynamicHeight is enabled. It is a no-op otherwise.
1675−func (m *Model) recalculateHeight() {
1676− if !m.DynamicHeight {
1677− return
1678− }
1679− minH := max(m.MinHeight, minHeight)
1680− total := m.totalVisualLines()
1681− h := max(total, minH)
1682− if m.MaxHeight > 0 {
1683− h = min(h, m.MaxHeight)
1684− }
1685− if maxOffset := total - h; m.viewport.YOffset() > maxOffset {
1686− m.viewport.SetYOffset(max(0, maxOffset))
1687− }
1688− m.SetHeight(h)
1689−}
1690−
1691−// atContentLimit reports whether the textarea has reached its content limit.
1692−// When MaxContentHeight is set (> 0), it checks total visual lines.
1693−// Otherwise it falls back to the legacy MaxHeight logical-line check for
1694−// backward compatibility.
1695−func (m *Model) atContentLimit() bool {
1696− if m.MaxContentHeight > 0 {
1697− return m.totalVisualLines() >= m.MaxContentHeight
1698− }
1699− return m.MaxHeight > 0 && len(m.value) >= m.MaxHeight
1700−}
1701−
1702−// visualLinesForInsert estimates how many additional visual lines would result
1703−// from inserting the given lines at the current cursor position. The first
1704−// element merges into the current line; subsequent elements become new lines.
1705−func (m *Model) visualLinesForInsert(lines [][]rune) int {
1706− if len(lines) == 0 {
1707− return 0
1708− }
1709−
1710− // The current row's visual line count before insertion.
1711− currentRowVisual := len(m.memoizedWrap(m.value[m.row], m.width))
1712−
1713− // Simulate merging the first paste line into the current row.
1714− merged := make([]rune, m.col+len(lines[0]))
1715− copy(merged, m.value[m.row][:m.col])
1716− copy(merged[m.col:], lines[0])
1717− if len(lines) == 1 {
1718− merged = append(merged, m.value[m.row][m.col:]...)
1719− }
1720− delta := len(m.memoizedWrap(merged, m.width)) - currentRowVisual
1721−
1722− // Each additional line is a new logical line.
1723− for i, content := range lines {
1724− if i == len(lines)-1 {
1725− content = append(content, m.value[m.row][m.col:]...)
1726− }
1727− delta += len(m.memoizedWrap(content, m.width))
1728− }
1729−
1730− return delta
1731−}
1732−
1733−// mergeLineBelow merges the current line the cursor is on with the line below.
1734−func (m *Model) mergeLineBelow(row int) {
1735− if row >= len(m.value)-1 {
1736− return
1737− }
1738−
1739− // To perform a merge, we will need to combine the two lines and then
1740− m.value[row] = append(m.value[row], m.value[row+1]...)
1741−
1742− // Shift all lines up by one
1743− for i := row + 1; i < len(m.value)-1; i++ {
1744− m.value[i] = m.value[i+1]
1745− }
1746−
1747− // And, remove the last line
1748− if len(m.value) > 0 {
1749− m.value = m.value[:len(m.value)-1]
1750− }
1751−}
1752−
1753−// mergeLineAbove merges the current line the cursor is on with the line above.
1754−func (m *Model) mergeLineAbove(row int) {
1755− if row <= 0 {
1756− return
1757− }
1758−
1759− m.col = len(m.value[row-1])
1760− m.row = m.row - 1
1761−
1762− // To perform a merge, we will need to combine the two lines and then
1763− m.value[row-1] = append(m.value[row-1], m.value[row]...)
1764−
1765− // Shift all lines up by one
1766− for i := row; i < len(m.value)-1; i++ {
1767− m.value[i] = m.value[i+1]
1768− }
1769−
1770− // And, remove the last line
1771− if len(m.value) > 0 {
1772− m.value = m.value[:len(m.value)-1]
1773− }
1774−}
1775−
1776−func (m *Model) splitLine(row, col int) {
1777− // To perform a split, take the current line and keep the content before
1778− // the cursor, take the content after the cursor and make it the content of
1779− // the line underneath, and shift the remaining lines down by one
1780− head, tailSrc := m.value[row][:col], m.value[row][col:]
1781− tail := make([]rune, len(tailSrc))
1782− copy(tail, tailSrc)
1783−
1784− m.value = append(m.value[:row+1], m.value[row:]...)
1785−
1786− m.value[row] = head
1787− m.value[row+1] = tail
1788−
1789− m.col = 0
1790− m.row++
1791−}
1792−
1793−// Paste is a command for pasting from the clipboard into the text input.
1794−func Paste() tea.Msg {
1795− str, err := clipboard.ReadAll()
1796− if err != nil {
1797− return pasteErrMsg{err}
1798− }
1799− return pasteMsg(str)
1800−}
1801−
1802−func wrap(runes []rune, width int) [][]rune {
1803− var (
1804− lines = [][]rune{{}}
1805− word = []rune{}
1806− row int
1807− spaces int
1808− )
1809−
1810− // Word wrap the runes
1811− for _, r := range runes {
1812− if unicode.IsSpace(r) {
1813− spaces++
1814− } else {
1815− word = append(word, r)
1816− }
1817−
1818− if spaces > 0 { //nolint:nestif
1819− if uniseg.StringWidth(string(lines[row]))+uniseg.StringWidth(string(word))+spaces > width {
1820− row++
1821− lines = append(lines, []rune{})
1822− lines[row] = append(lines[row], word...)
1823− lines[row] = append(lines[row], repeatSpaces(spaces)...)
1824− spaces = 0
1825− word = nil
1826− } else {
1827− lines[row] = append(lines[row], word...)
1828− lines[row] = append(lines[row], repeatSpaces(spaces)...)
1829− spaces = 0
1830− word = nil
1831− }
1832− } else {
1833− // If the last character is a double-width rune, then we may not be able to add it to this line
1834− // as it might cause us to go past the width.
1835− lastCharLen := rw.RuneWidth(word[len(word)-1])
1836− if uniseg.StringWidth(string(word))+lastCharLen > width {
1837− // If the current line has any content, let's move to the next
1838− // line because the current word fills up the entire line.
1839− if len(lines[row]) > 0 {
1840− row++
1841− lines = append(lines, []rune{})
1842− }
1843− lines[row] = append(lines[row], word...)
1844− word = nil
1845− }
1846− }
1847− }
1848−
1849− if uniseg.StringWidth(string(lines[row]))+uniseg.StringWidth(string(word))+spaces >= width {
1850− lines = append(lines, []rune{})
1851− lines[row+1] = append(lines[row+1], word...)
1852− // We add an extra space at the end of the line to account for the
1853− // trailing space at the end of the previous soft-wrapped lines so that
1854− // behaviour when navigating is consistent and so that we don't need to
1855− // continually add edges to handle the last line of the wrapped input.
1856− spaces++
1857− lines[row+1] = append(lines[row+1], repeatSpaces(spaces)...)
1858− } else {
1859− lines[row] = append(lines[row], word...)
1860− spaces++
1861− lines[row] = append(lines[row], repeatSpaces(spaces)...)
1862− }
1863−
1864− return lines
1865−}
1866−
1867−func repeatSpaces(n int) []rune {
1868− return []rune(strings.Repeat(string(' '), n))
1869−}
1870−
1871−// numDigits returns the number of digits in an integer.
1872−func numDigits(n int) int {
1873− if n == 0 {
1874− return 1
1875− }
1876− count := 0
1877− num := abs(n)
1878− for num > 0 {
1879− count++
1880− num /= 10
1881− }
1882− return count
1883−}
1884−
1885−func clamp(v, low, high int) int {
1886− if high < low {
1887− low, high = high, low
1888− }
1889− return min(high, max(low, v))
1890−}
1891−
1892−func abs(n int) int {
1893− if n < 0 {
1894− return -n
1895− }
1896− return n
1897−}
vendor/charm.land/bubbles/v2/textinput/styles.godeleted−96
@@ -1,96 +0,0 @@
1−package textinput
2−
3−import (
4− "image/color"
5− "time"
6−
7− tea "charm.land/bubbletea/v2"
8− "charm.land/lipgloss/v2"
9−)
10−
11−// DefaultStyles returns the default styles for focused and blurred states for
12−// the textarea.
13−func DefaultStyles(isDark bool) Styles {
14− lightDark := lipgloss.LightDark(isDark)
15−
16− var s Styles
17− s.Focused = StyleState{
18− Placeholder: lipgloss.NewStyle().Foreground(lipgloss.Color("240")),
19− Suggestion: lipgloss.NewStyle().Foreground(lipgloss.Color("240")),
20− Prompt: lipgloss.NewStyle().Foreground(lipgloss.Color("7")),
21− Text: lipgloss.NewStyle(),
22− }
23− s.Blurred = StyleState{
24− Placeholder: lipgloss.NewStyle().Foreground(lipgloss.Color("240")),
25− Suggestion: lipgloss.NewStyle().Foreground(lipgloss.Color("240")),
26− Prompt: lipgloss.NewStyle().Foreground(lipgloss.Color("7")),
27− Text: lipgloss.NewStyle().Foreground(lightDark(lipgloss.Color("245"), lipgloss.Color("7"))),
28− }
29− s.Cursor = CursorStyle{
30− Color: lipgloss.Color("7"),
31− Shape: tea.CursorBlock,
32− Blink: true,
33− }
34− return s
35−}
36−
37−// DefaultLightStyles returns the default styles for a light background.
38−func DefaultLightStyles() Styles {
39− return DefaultStyles(false)
40−}
41−
42−// DefaultDarkStyles returns the default styles for a dark background.
43−func DefaultDarkStyles() Styles {
44− return DefaultStyles(true)
45−}
46−
47−// Styles are the styles for the textarea, separated into focused and blurred
48−// states. The appropriate styles will be chosen based on the focus state of
49−// the textarea.
50−type Styles struct {
51− Focused StyleState
52− Blurred StyleState
53− Cursor CursorStyle
54−}
55−
56−// StyleState that will be applied to the text area.
57−//
58−// StyleState can be applied to focused and unfocused states to change the styles
59−// depending on the focus state.
60−//
61−// For an introduction to styling with Lip Gloss see:
62−// https://github.com/charmbracelet/lipgloss
63−type StyleState struct {
64− Text lipgloss.Style
65− Placeholder lipgloss.Style
66− Suggestion lipgloss.Style
67− Prompt lipgloss.Style
68−}
69−
70−// CursorStyle is the style for real and virtual cursors.
71−type CursorStyle struct {
72− // Style styles the cursor block.
73− //
74− // For real cursors, the foreground color set here will be used as the
75− // cursor color.
76− Color color.Color
77−
78− // Shape is the cursor shape. The following shapes are available:
79− //
80− // - tea.CursorBlock
81− // - tea.CursorUnderline
82− // - tea.CursorBar
83− //
84− // This is only used for real cursors.
85− Shape tea.CursorShape
86−
87− // CursorBlink determines whether or not the cursor should blink.
88− Blink bool
89−
90− // BlinkSpeed is the speed at which the virtual cursor blinks. This has no
91− // effect on real cursors as well as no effect if the cursor is set not to
92− // [CursorBlink].
93− //
94− // By default, the blink speed is set to about 500ms.
95− BlinkSpeed time.Duration
96−}
vendor/charm.land/bubbles/v2/textinput/textinput.godeleted−968
@@ -1,968 +0,0 @@
1−// Package textinput provides a text input component for Bubble Tea
2−// applications.
3−package textinput
4−
5−import (
6− "reflect"
7− "slices"
8− "strings"
9− "unicode"
10−
11− "charm.land/bubbles/v2/cursor"
12− "charm.land/bubbles/v2/internal/runeutil"
13− "charm.land/bubbles/v2/key"
14− tea "charm.land/bubbletea/v2"
15− "charm.land/lipgloss/v2"
16− "github.com/atotto/clipboard"
17− rw "github.com/mattn/go-runewidth"
18− "github.com/rivo/uniseg"
19−)
20−
21−// Internal messages for clipboard operations.
22−type (
23− pasteMsg string
24− pasteErrMsg struct{ error }
25−)
26−
27−// EchoMode sets the input behavior of the text input field.
28−type EchoMode int
29−
30−const (
31− // EchoNormal displays text as is. This is the default behavior.
32− EchoNormal EchoMode = iota
33−
34− // EchoPassword displays the EchoCharacter mask instead of actual
35− // characters. This is commonly used for password fields.
36− EchoPassword
37−
38− // EchoNone displays nothing as characters are entered. This is commonly
39− // seen for password fields on the command line.
40− EchoNone
41−)
42−
43−// ValidateFunc is a function that returns an error if the input is invalid.
44−type ValidateFunc func(string) error
45−
46−// KeyMap is the key bindings for different actions within the textinput.
47−type KeyMap struct {
48− CharacterForward key.Binding
49− CharacterBackward key.Binding
50− WordForward key.Binding
51− WordBackward key.Binding
52− DeleteWordBackward key.Binding
53− DeleteWordForward key.Binding
54− DeleteAfterCursor key.Binding
55− DeleteBeforeCursor key.Binding
56− DeleteCharacterBackward key.Binding
57− DeleteCharacterForward key.Binding
58− LineStart key.Binding
59− LineEnd key.Binding
60− Paste key.Binding
61− AcceptSuggestion key.Binding
62− NextSuggestion key.Binding
63− PrevSuggestion key.Binding
64−}
65−
66−// DefaultKeyMap is the default set of key bindings for navigating and acting
67−// upon the textinput.
68−func DefaultKeyMap() KeyMap {
69− return KeyMap{
70− CharacterForward: key.NewBinding(key.WithKeys("right", "ctrl+f")),
71− CharacterBackward: key.NewBinding(key.WithKeys("left", "ctrl+b")),
72− WordForward: key.NewBinding(key.WithKeys("alt+right", "ctrl+right", "alt+f")),
73− WordBackward: key.NewBinding(key.WithKeys("alt+left", "ctrl+left", "alt+b")),
74− DeleteWordBackward: key.NewBinding(key.WithKeys("alt+backspace", "ctrl+w")),
75− DeleteWordForward: key.NewBinding(key.WithKeys("alt+delete", "alt+d")),
76− DeleteAfterCursor: key.NewBinding(key.WithKeys("ctrl+k")),
77− DeleteBeforeCursor: key.NewBinding(key.WithKeys("ctrl+u")),
78− DeleteCharacterBackward: key.NewBinding(key.WithKeys("backspace", "ctrl+h")),
79− DeleteCharacterForward: key.NewBinding(key.WithKeys("delete", "ctrl+d")),
80− LineStart: key.NewBinding(key.WithKeys("home", "ctrl+a")),
81− LineEnd: key.NewBinding(key.WithKeys("end", "ctrl+e")),
82− Paste: key.NewBinding(key.WithKeys("ctrl+v")),
83− AcceptSuggestion: key.NewBinding(key.WithKeys("tab")),
84− NextSuggestion: key.NewBinding(key.WithKeys("down", "ctrl+n")),
85− PrevSuggestion: key.NewBinding(key.WithKeys("up", "ctrl+p")),
86− }
87−}
88−
89−// Model is the Bubble Tea model for this text input element.
90−type Model struct {
91− Err error
92−
93− // General settings.
94− Prompt string
95− Placeholder string
96− EchoMode EchoMode
97− EchoCharacter rune
98−
99− // useVirtualCursor determines whether or not to use the virtual cursor. If
100− // set to false, use [Model.Cursor] to return a real cursor for rendering.
101− useVirtualCursor bool
102−
103− // Virtual cursor manager.
104− virtualCursor cursor.Model
105−
106− // CharLimit is the maximum amount of characters this input element will
107− // accept. If 0 or less, there's no limit.
108− CharLimit int
109−
110− // Styling. FocusedStyle and BlurredStyle are used to style the textarea in
111− // focused and blurred states.
112− styles Styles
113−
114− // Width is the maximum number of characters that can be displayed at once.
115− // It essentially treats the text field like a horizontally scrolling
116− // viewport. If 0 or less this setting is ignored.
117− width int
118−
119− // KeyMap encodes the keybindings recognized by the widget.
120− KeyMap KeyMap
121−
122− // Underlying text value.
123− value []rune
124−
125− // focus indicates whether user input focus should be on this input
126− // component. When false, ignore keyboard input and hide the cursor.
127− focus bool
128−
129− // Cursor position.
130− pos int
131−
132− // Used to emulate a viewport when width is set and the content is
133− // overflowing.
134− offset int
135− offsetRight int
136−
137− // Validate is a function that checks whether or not the text within the
138− // input is valid. If it is not valid, the `Err` field will be set to the
139− // error returned by the function. If the function is not defined, all
140− // input is considered valid.
141− Validate ValidateFunc
142−
143− // rune sanitizer for input.
144− rsan runeutil.Sanitizer
145−
146− // Should the input suggest to complete
147− ShowSuggestions bool
148−
149− // suggestions is a list of suggestions that may be used to complete the
150− // input.
151− suggestions [][]rune
152− matchedSuggestions [][]rune
153− currentSuggestionIndex int
154−}
155−
156−// New creates a new model with default settings.
157−func New() Model {
158− m := Model{
159− Prompt: "> ",
160− EchoCharacter: '*',
161− CharLimit: 0,
162− styles: DefaultDarkStyles(),
163− ShowSuggestions: false,
164− useVirtualCursor: true,
165− virtualCursor: cursor.New(),
166− KeyMap: DefaultKeyMap(),
167− suggestions: [][]rune{},
168− value: nil,
169− focus: false,
170− pos: 0,
171− }
172− m.updateVirtualCursorStyle()
173− return m
174−}
175−
176−// VirtualCursor returns whether the model is using a virtual cursor.
177−func (m Model) VirtualCursor() bool {
178− return m.useVirtualCursor
179−}
180−
181−// SetVirtualCursor sets whether the model should use a virtual cursor. If
182−// disabled, use [Model.Cursor] to return a real cursor for rendering.
183−func (m *Model) SetVirtualCursor(v bool) {
184− m.useVirtualCursor = v
185− m.updateVirtualCursorStyle()
186−}
187−
188−// Styles returns the current set of styles.
189−func (m Model) Styles() Styles {
190− return m.styles
191−}
192−
193−// SetStyles sets the styles for the text input.
194−func (m *Model) SetStyles(s Styles) {
195− m.styles = s
196− m.updateVirtualCursorStyle()
197−}
198−
199−// Width returns the width of the text input.
200−func (m Model) Width() int {
201− return m.width
202−}
203−
204−// SetWidth sets the width of the text input.
205−func (m *Model) SetWidth(w int) {
206− m.width = w
207−}
208−
209−// SetValue sets the value of the text input.
210−func (m *Model) SetValue(s string) {
211− // Clean up any special characters in the input provided by the
212− // caller. This avoids bugs due to e.g. tab characters and whatnot.
213− runes := m.san().Sanitize([]rune(s))
214− err := m.validate(runes)
215− m.setValueInternal(runes, err)
216−}
217−
218−func (m *Model) setValueInternal(runes []rune, err error) {
219− m.Err = err
220−
221− empty := len(m.value) == 0
222−
223− if m.CharLimit > 0 && len(runes) > m.CharLimit {
224− m.value = runes[:m.CharLimit]
225− } else {
226− m.value = runes
227− }
228− if (m.pos == 0 && empty) || m.pos > len(m.value) {
229− m.SetCursor(len(m.value))
230− }
231− m.handleOverflow()
232−}
233−
234−// Value returns the value of the text input.
235−func (m Model) Value() string {
236− return string(m.value)
237−}
238−
239−// Position returns the cursor position.
240−func (m Model) Position() int {
241− return m.pos
242−}
243−
244−// SetCursor moves the cursor to the given position. If the position is
245−// out of bounds the cursor will be moved to the start or end accordingly.
246−func (m *Model) SetCursor(pos int) {
247− m.pos = clamp(pos, 0, len(m.value))
248− m.handleOverflow()
249−}
250−
251−// CursorStart moves the cursor to the start of the input field.
252−func (m *Model) CursorStart() {
253− m.SetCursor(0)
254−}
255−
256−// CursorEnd moves the cursor to the end of the input field.
257−func (m *Model) CursorEnd() {
258− m.SetCursor(len(m.value))
259−}
260−
261−// Focused returns the focus state on the model.
262−func (m Model) Focused() bool {
263− return m.focus
264−}
265−
266−// Focus sets the focus state on the model. When the model is in focus it can
267−// receive keyboard input and the cursor will be shown.
268−func (m *Model) Focus() tea.Cmd {
269− m.focus = true
270− return m.virtualCursor.Focus()
271−}
272−
273−// Blur removes the focus state on the model. When the model is blurred it can
274−// not receive keyboard input and the cursor will be hidden.
275−func (m *Model) Blur() {
276− m.focus = false
277− m.virtualCursor.Blur()
278−}
279−
280−// Reset sets the input to its default state with no input.
281−func (m *Model) Reset() {
282− m.value = nil
283− m.SetCursor(0)
284−}
285−
286−// SetSuggestions sets the suggestions for the input.
287−func (m *Model) SetSuggestions(suggestions []string) {
288− m.suggestions = make([][]rune, len(suggestions))
289− for i, s := range suggestions {
290− m.suggestions[i] = []rune(s)
291− }
292−
293− m.updateSuggestions()
294−}
295−
296−// rsan initializes or retrieves the rune sanitizer.
297−func (m *Model) san() runeutil.Sanitizer {
298− if m.rsan == nil {
299− // Textinput has all its input on a single line so collapse
300− // newlines/tabs to single spaces.
301− m.rsan = runeutil.NewSanitizer(
302− runeutil.ReplaceTabs(" "), runeutil.ReplaceNewlines(" "))
303− }
304− return m.rsan
305−}
306−
307−func (m *Model) insertRunesFromUserInput(v []rune) {
308− // Clean up any special characters in the input provided by the
309− // clipboard. This avoids bugs due to e.g. tab characters and
310− // whatnot.
311− paste := m.san().Sanitize(v)
312−
313− var availSpace int
314− if m.CharLimit > 0 {
315− availSpace = m.CharLimit - len(m.value)
316−
317− // If the char limit's been reached, cancel.
318− if availSpace <= 0 {
319− return
320− }
321−
322− // If there's not enough space to paste the whole thing cut the pasted
323− // runes down so they'll fit.
324− if availSpace < len(paste) {
325− paste = paste[:availSpace]
326− }
327− }
328−
329− // Stuff before and after the cursor
330− head := m.value[:m.pos]
331− tailSrc := m.value[m.pos:]
332− tail := make([]rune, len(tailSrc))
333− copy(tail, tailSrc)
334−
335− // Insert pasted runes
336− for _, r := range paste {
337− head = append(head, r)
338− m.pos++
339− if m.CharLimit > 0 {
340− availSpace--
341− if availSpace <= 0 {
342− break
343− }
344− }
345− }
346−
347− // Put it all back together
348− value := append(head, tail...)
349− inputErr := m.validate(value)
350− m.setValueInternal(value, inputErr)
351−}
352−
353−// If a max width is defined, perform some logic to treat the visible area
354−// as a horizontally scrolling viewport.
355−func (m *Model) handleOverflow() {
356− if m.Width() <= 0 || uniseg.StringWidth(string(m.value)) <= m.Width() {
357− m.offset = 0
358− m.offsetRight = len(m.value)
359− return
360− }
361−
362− // Correct right offset if we've deleted characters
363− m.offsetRight = min(m.offsetRight, len(m.value))
364−
365− if m.pos < m.offset {
366− m.offset = m.pos
367−
368− w := 0
369− i := 0
370− runes := m.value[m.offset:]
371−
372− for i < len(runes) && w <= m.Width() {
373− w += rw.RuneWidth(runes[i])
374− if w <= m.Width()+1 {
375− i++
376− }
377− }
378−
379− m.offsetRight = m.offset + i
380− } else if m.pos >= m.offsetRight {
381− m.offsetRight = m.pos
382−
383− w := 0
384− runes := m.value[:m.offsetRight]
385− i := len(runes) - 1
386−
387− for i > 0 && w < m.Width() {
388− w += rw.RuneWidth(runes[i])
389− if w <= m.Width() {
390− i--
391− }
392− }
393−
394− m.offset = m.offsetRight - (len(runes) - 1 - i)
395− }
396−}
397−
398−// deleteBeforeCursor deletes all text before the cursor.
399−func (m *Model) deleteBeforeCursor() {
400− m.value = m.value[m.pos:]
401− m.Err = m.validate(m.value)
402− m.offset = 0
403− m.SetCursor(0)
404−}
405−
406−// deleteAfterCursor deletes all text after the cursor. If input is masked
407−// delete everything after the cursor so as not to reveal word breaks in the
408−// masked input.
409−func (m *Model) deleteAfterCursor() {
410− m.value = m.value[:m.pos]
411− m.Err = m.validate(m.value)
412− m.SetCursor(len(m.value))
413−}
414−
415−// deleteWordBackward deletes the word left to the cursor.
416−func (m *Model) deleteWordBackward() {
417− if m.pos == 0 || len(m.value) == 0 {
418− return
419− }
420−
421− if m.EchoMode != EchoNormal {
422− m.deleteBeforeCursor()
423− return
424− }
425−
426− // Linter note: it's critical that we acquire the initial cursor position
427− // here prior to altering it via SetCursor() below. As such, moving this
428− // call into the corresponding if clause does not apply here.
429− oldPos := m.pos
430−
431− m.SetCursor(m.pos - 1)
432− for unicode.IsSpace(m.value[m.pos]) {
433− if m.pos <= 0 {
434− break
435− }
436− // ignore series of whitespace before cursor
437− m.SetCursor(m.pos - 1)
438− }
439−
440− for m.pos > 0 {
441− if !unicode.IsSpace(m.value[m.pos]) {
442− m.SetCursor(m.pos - 1)
443− } else {
444− if m.pos > 0 {
445− // keep the previous space
446− m.SetCursor(m.pos + 1)
447− }
448− break
449− }
450− }
451−
452− if oldPos > len(m.value) {
453− m.value = m.value[:m.pos]
454− } else {
455− m.value = append(m.value[:m.pos], m.value[oldPos:]...)
456− }
457− m.Err = m.validate(m.value)
458−}
459−
460−// deleteWordForward deletes the word right to the cursor. If input is masked
461−// delete everything after the cursor so as not to reveal word breaks in the
462−// masked input.
463−func (m *Model) deleteWordForward() {
464− if m.pos >= len(m.value) || len(m.value) == 0 {
465− return
466− }
467−
468− if m.EchoMode != EchoNormal {
469− m.deleteAfterCursor()
470− return
471− }
472−
473− oldPos := m.pos
474− m.SetCursor(m.pos + 1)
475− for unicode.IsSpace(m.value[m.pos]) {
476− // ignore series of whitespace after cursor
477− m.SetCursor(m.pos + 1)
478−
479− if m.pos >= len(m.value) {
480− break
481− }
482− }
483−
484− for m.pos < len(m.value) {
485− if !unicode.IsSpace(m.value[m.pos]) {
486− m.SetCursor(m.pos + 1)
487− } else {
488− break
489− }
490− }
491−
492− if m.pos > len(m.value) {
493− m.value = m.value[:oldPos]
494− } else {
495− m.value = append(m.value[:oldPos], m.value[m.pos:]...)
496− }
497− m.Err = m.validate(m.value)
498−
499− m.SetCursor(oldPos)
500−}
501−
502−// wordBackward moves the cursor one word to the left. If input is masked, move
503−// input to the start so as not to reveal word breaks in the masked input.
504−func (m *Model) wordBackward() {
505− if m.pos == 0 || len(m.value) == 0 {
506− return
507− }
508−
509− if m.EchoMode != EchoNormal {
510− m.CursorStart()
511− return
512− }
513−
514− i := m.pos - 1
515− for i >= 0 {
516− if unicode.IsSpace(m.value[i]) {
517− m.SetCursor(m.pos - 1)
518− i--
519− } else {
520− break
521− }
522− }
523−
524− for i >= 0 {
525− if !unicode.IsSpace(m.value[i]) {
526− m.SetCursor(m.pos - 1)
527− i--
528− } else {
529− break
530− }
531− }
532−}
533−
534−// wordForward moves the cursor one word to the right. If the input is masked,
535−// move input to the end so as not to reveal word breaks in the masked input.
536−func (m *Model) wordForward() {
537− if m.pos >= len(m.value) || len(m.value) == 0 {
538− return
539− }
540−
541− if m.EchoMode != EchoNormal {
542− m.CursorEnd()
543− return
544− }
545−
546− i := m.pos
547− for i < len(m.value) {
548− if unicode.IsSpace(m.value[i]) {
549− m.SetCursor(m.pos + 1)
550− i++
551− } else {
552− break
553− }
554− }
555−
556− for i < len(m.value) {
557− if !unicode.IsSpace(m.value[i]) {
558− m.SetCursor(m.pos + 1)
559− i++
560− } else {
561− break
562− }
563− }
564−}
565−
566−func (m Model) echoTransform(v string) string {
567− switch m.EchoMode {
568− case EchoPassword:
569− return strings.Repeat(string(m.EchoCharacter), uniseg.StringWidth(v))
570− case EchoNone:
571− return ""
572− case EchoNormal:
573− return v
574− default:
575− return v
576− }
577−}
578−
579−// Update is the Bubble Tea update loop.
580−func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
581− if !m.focus {
582− return m, nil
583− }
584−
585− // Need to check for completion before, because key is configurable and might be double assigned
586− keyMsg, ok := msg.(tea.KeyPressMsg)
587− if ok && key.Matches(keyMsg, m.KeyMap.AcceptSuggestion) {
588− if m.canAcceptSuggestion() {
589− m.value = append(m.value, m.matchedSuggestions[m.currentSuggestionIndex][len(m.value):]...)
590− m.CursorEnd()
591− }
592− }
593−
594− // Let's remember where the position of the cursor currently is so that if
595− // the cursor position changes, we can reset the blink.
596− oldPos := m.pos
597−
598− switch msg := msg.(type) {
599− case tea.KeyPressMsg:
600− switch {
601− case key.Matches(msg, m.KeyMap.DeleteWordBackward):
602− m.deleteWordBackward()
603− case key.Matches(msg, m.KeyMap.DeleteCharacterBackward):
604− m.Err = nil
605− if len(m.value) > 0 {
606− m.value = append(m.value[:max(0, m.pos-1)], m.value[m.pos:]...)
607− m.Err = m.validate(m.value)
608− if m.pos > 0 {
609− m.SetCursor(m.pos - 1)
610− }
611− }
612− case key.Matches(msg, m.KeyMap.WordBackward):
613− m.wordBackward()
614− case key.Matches(msg, m.KeyMap.CharacterBackward):
615− if m.pos > 0 {
616− m.SetCursor(m.pos - 1)
617− }
618− case key.Matches(msg, m.KeyMap.WordForward):
619− m.wordForward()
620− case key.Matches(msg, m.KeyMap.CharacterForward):
621− if m.pos < len(m.value) {
622− m.SetCursor(m.pos + 1)
623− }
624− case key.Matches(msg, m.KeyMap.LineStart):
625− m.CursorStart()
626− case key.Matches(msg, m.KeyMap.DeleteCharacterForward):
627− if len(m.value) > 0 && m.pos < len(m.value) {
628− m.value = slices.Delete(m.value, m.pos, m.pos+1)
629− m.Err = m.validate(m.value)
630− }
631− case key.Matches(msg, m.KeyMap.LineEnd):
632− m.CursorEnd()
633− case key.Matches(msg, m.KeyMap.DeleteAfterCursor):
634− m.deleteAfterCursor()
635− case key.Matches(msg, m.KeyMap.DeleteBeforeCursor):
636− m.deleteBeforeCursor()
637− case key.Matches(msg, m.KeyMap.Paste):
638− return m, Paste
639− case key.Matches(msg, m.KeyMap.DeleteWordForward):
640− m.deleteWordForward()
641− case key.Matches(msg, m.KeyMap.NextSuggestion):
642− m.nextSuggestion()
643− case key.Matches(msg, m.KeyMap.PrevSuggestion):
644− m.previousSuggestion()
645− default:
646− // Input one or more regular characters.
647− m.insertRunesFromUserInput([]rune(msg.Text))
648− }
649−
650− // Check again if can be completed
651− // because value might be something that does not match the completion prefix
652− m.updateSuggestions()
653−
654− case tea.PasteMsg:
655− m.insertRunesFromUserInput([]rune(msg.Content))
656−
657− case pasteMsg:
658− m.insertRunesFromUserInput([]rune(msg))
659−
660− case pasteErrMsg:
661− m.Err = msg
662− }
663−
664− var cmds []tea.Cmd
665− var cmd tea.Cmd
666−
667− if m.useVirtualCursor {
668− m.virtualCursor, cmd = m.virtualCursor.Update(msg)
669− cmds = append(cmds, cmd)
670−
671− // If the cursor position changed, reset the blink state. This is a
672− // small UX nuance that makes cursor movement obvious and feel snappy.
673− if oldPos != m.pos && m.virtualCursor.Mode() == cursor.CursorBlink {
674− m.virtualCursor.IsBlinked = false
675− cmds = append(cmds, m.virtualCursor.Blink())
676− }
677− }
678−
679− m.handleOverflow()
680− return m, tea.Batch(cmds...)
681−}
682−
683−// View renders the textinput in its current state.
684−func (m Model) View() string {
685− // Placeholder text
686− if len(m.value) == 0 && m.Placeholder != "" {
687− return m.placeholderView()
688− }
689−
690− styles := m.activeStyle()
691−
692− styleText := styles.Text.Inline(true).Render
693−
694− value := m.value[m.offset:m.offsetRight]
695− pos := max(0, m.pos-m.offset)
696− v := styleText(m.echoTransform(string(value[:pos])))
697−
698− if pos < len(value) { //nolint:nestif
699− char := m.echoTransform(string(value[pos]))
700− m.virtualCursor.SetChar(char)
701− v += m.virtualCursor.View() // cursor and text under it
702− v += styleText(m.echoTransform(string(value[pos+1:]))) // text after cursor
703− v += m.completionView(0) // suggested completion
704− } else {
705− if m.focus && m.canAcceptSuggestion() {
706− suggestion := m.matchedSuggestions[m.currentSuggestionIndex]
707− if len(value) < len(suggestion) {
708− m.virtualCursor.TextStyle = styles.Suggestion
709− m.virtualCursor.SetChar(m.echoTransform(string(suggestion[pos])))
710− v += m.virtualCursor.View()
711− v += m.completionView(1)
712− } else {
713− m.virtualCursor.SetChar(" ")
714− v += m.virtualCursor.View()
715− }
716− } else {
717− m.virtualCursor.SetChar(" ")
718− v += m.virtualCursor.View()
719− }
720− }
721−
722− // If a max width and background color were set fill the empty spaces with
723− // the background color.
724− valWidth := uniseg.StringWidth(string(value))
725− if m.Width() > 0 && valWidth <= m.Width() {
726− padding := max(0, m.Width()-valWidth)
727− if valWidth+padding <= m.Width() && pos < len(value) {
728− padding++
729− }
730− v += styleText(strings.Repeat(" ", padding))
731− }
732−
733− return m.promptView() + v
734−}
735−
736−func (m Model) promptView() string {
737− return m.activeStyle().Prompt.Render(m.Prompt)
738−}
739−
740−// placeholderView returns the prompt and placeholder view, if any.
741−func (m Model) placeholderView() string {
742− var (
743− v string
744− styles = m.activeStyle()
745− render = styles.Placeholder.Render
746− )
747−
748− p := make([]rune, m.Width()+1)
749− copy(p, []rune(m.Placeholder))
750−
751− m.virtualCursor.TextStyle = styles.Placeholder
752− m.virtualCursor.SetChar(string(p[:1]))
753− v += m.virtualCursor.View()
754−
755− // If the entire placeholder is already set and no padding is needed, finish
756− if m.Width() < 1 && len(p) <= 1 {
757− return styles.Prompt.Render(m.Prompt) + v
758− }
759−
760− // If Width is set then size placeholder accordingly
761− if m.Width() > 0 {
762− // available width is width - len + cursor offset of 1
763− minWidth := lipgloss.Width(m.Placeholder)
764− availWidth := m.Width() - minWidth + 1
765−
766− // if width < len, 'subtract'(add) number to len and dont add padding
767− if availWidth < 0 {
768− minWidth += availWidth
769− availWidth = 0
770− }
771− // append placeholder[len] - cursor, append padding
772− v += render(string(p[1:minWidth]))
773− v += render(strings.Repeat(" ", availWidth))
774− } else {
775− // if there is no width, the placeholder can be any length
776− v += render(string(p[1:]))
777− }
778−
779− return styles.Prompt.Render(m.Prompt) + v
780−}
781−
782−// Blink is a command used to initialize cursor blinking.
783−func Blink() tea.Msg {
784− return cursor.Blink()
785−}
786−
787−// Paste is a command for pasting from the clipboard into the text input.
788−func Paste() tea.Msg {
789− str, err := clipboard.ReadAll()
790− if err != nil {
791− return pasteErrMsg{err}
792− }
793− return pasteMsg(str)
794−}
795−
796−func clamp(v, low, high int) int {
797− if high < low {
798− low, high = high, low
799− }
800− return min(high, max(low, v))
801−}
802−
803−func (m Model) completionView(offset int) string {
804− if !m.canAcceptSuggestion() {
805− return ""
806− }
807− value := m.value
808− suggestion := m.matchedSuggestions[m.currentSuggestionIndex]
809− if len(value) < len(suggestion) {
810− return m.activeStyle().Suggestion.Inline(true).
811− Render(string(suggestion[len(value)+offset:]))
812− }
813− return ""
814−}
815−
816−func (m *Model) getSuggestions(sugs [][]rune) []string {
817− suggestions := make([]string, len(sugs))
818− for i, s := range sugs {
819− suggestions[i] = string(s)
820− }
821− return suggestions
822−}
823−
824−// AvailableSuggestions returns the list of available suggestions.
825−func (m *Model) AvailableSuggestions() []string {
826− return m.getSuggestions(m.suggestions)
827−}
828−
829−// MatchedSuggestions returns the list of matched suggestions.
830−func (m *Model) MatchedSuggestions() []string {
831− return m.getSuggestions(m.matchedSuggestions)
832−}
833−
834−// CurrentSuggestionIndex returns the currently selected suggestion index.
835−func (m *Model) CurrentSuggestionIndex() int {
836− return m.currentSuggestionIndex
837−}
838−
839−// CurrentSuggestion returns the currently selected suggestion.
840−func (m *Model) CurrentSuggestion() string {
841− if m.currentSuggestionIndex >= len(m.matchedSuggestions) {
842− return ""
843− }
844−
845− return string(m.matchedSuggestions[m.currentSuggestionIndex])
846−}
847−
848−// canAcceptSuggestion returns whether there is an acceptable suggestion to
849−// autocomplete the current value.
850−func (m *Model) canAcceptSuggestion() bool {
851− return len(m.matchedSuggestions) > 0
852−}
853−
854−// updateSuggestions refreshes the list of matching suggestions.
855−func (m *Model) updateSuggestions() {
856− if !m.ShowSuggestions {
857− return
858− }
859−
860− if len(m.value) <= 0 || len(m.suggestions) <= 0 {
861− m.matchedSuggestions = [][]rune{}
862− return
863− }
864−
865− matches := [][]rune{}
866− for _, s := range m.suggestions {
867− suggestion := string(s)
868−
869− if strings.HasPrefix(strings.ToLower(suggestion), strings.ToLower(string(m.value))) {
870− matches = append(matches, []rune(suggestion))
871− }
872− }
873− if !reflect.DeepEqual(matches, m.matchedSuggestions) {
874− m.currentSuggestionIndex = 0
875− }
876−
877− m.matchedSuggestions = matches
878−}
879−
880−// nextSuggestion selects the next suggestion.
881−func (m *Model) nextSuggestion() {
882− m.currentSuggestionIndex = (m.currentSuggestionIndex + 1)
883− if m.currentSuggestionIndex >= len(m.matchedSuggestions) {
884− m.currentSuggestionIndex = 0
885− }
886−}
887−
888−// previousSuggestion selects the previous suggestion.
889−func (m *Model) previousSuggestion() {
890− m.currentSuggestionIndex = (m.currentSuggestionIndex - 1)
891− if m.currentSuggestionIndex < 0 {
892− m.currentSuggestionIndex = len(m.matchedSuggestions) - 1
893− }
894−}
895−
896−func (m Model) validate(v []rune) error {
897− if m.Validate != nil {
898− return m.Validate(string(v))
899− }
900− return nil
901−}
902−
903−// Cursor returns a [tea.Cursor] for rendering a real cursor in a Bubble Tea
904−// program. This requires that [Model.VirtualCursor] is set to false.
905−//
906−// Note that you will almost certainly also need to adjust the offset cursor
907−// position per the textarea's per the textarea's position in the terminal.
908−//
909−// Example:
910−//
911−// // In your top-level View function:
912−// f := tea.NewFrame(m.textarea.View())
913−// f.Cursor = m.textarea.Cursor()
914−// f.Cursor.Position.X += offsetX
915−// f.Cursor.Position.Y += offsetY
916−func (m Model) Cursor() *tea.Cursor {
917− if m.useVirtualCursor || !m.Focused() {
918− return nil
919− }
920−
921− w := lipgloss.Width
922−
923− promptWidth := w(m.promptView())
924− xOffset := m.Position() +
925− promptWidth
926− if m.width > 0 {
927− xOffset = min(xOffset, m.width+promptWidth)
928− }
929−
930− style := m.styles.Cursor
931− c := tea.NewCursor(xOffset, 0)
932− c.Blink = style.Blink
933− c.Color = style.Color
934− c.Shape = style.Shape
935− return c
936−}
937−
938−// updateVirtualCursorStyle sets styling on the virtual cursor based on the
939−// textarea's style settings.
940−func (m *Model) updateVirtualCursorStyle() {
941− if !m.useVirtualCursor {
942− // Hide the virtual cursor if we're using a real cursor.
943− m.virtualCursor.SetMode(cursor.CursorHide)
944− return
945− }
946−
947− m.virtualCursor.Style = lipgloss.NewStyle().Foreground(m.styles.Cursor.Color)
948−
949− // By default, the blink speed of the cursor is set to a default
950− // internally.
951− if m.styles.Cursor.Blink {
952− if m.styles.Cursor.BlinkSpeed > 0 {
953− m.virtualCursor.BlinkSpeed = m.styles.Cursor.BlinkSpeed
954− }
955− m.virtualCursor.SetMode(cursor.CursorBlink)
956− return
957− }
958− m.virtualCursor.SetMode(cursor.CursorStatic)
959−}
960−
961−// activeStyle returns the appropriate set of styles to use depending on
962−// whether the textarea is focused or blurred.
963−func (m Model) activeStyle() *StyleState {
964− if m.focus {
965− return &m.styles.Focused
966− }
967− return &m.styles.Blurred
968−}
vendor/charm.land/bubbles/v2/viewport/highlight.godeleted−141
@@ -1,141 +0,0 @@
1−package viewport
2−
3−import (
4− "charm.land/lipgloss/v2"
5− "github.com/charmbracelet/x/ansi"
6− "github.com/rivo/uniseg"
7−)
8−
9−// parseMatches converts the given matches into highlight ranges.
10−//
11−// Assumptions:
12−// - matches are measured in bytes, e.g. what [regex.FindAllStringIndex] would return
13−// - matches were made against the given content
14−// - matches are in order
15−// - matches do not overlap
16−// - content is line terminated with \n only
17−//
18−// We'll then convert the ranges into [highlightInfo]s, which hold the starting
19−// line and the grapheme positions.
20−func parseMatches(
21− content string,
22− matches [][]int,
23−) []highlightInfo {
24− if len(matches) == 0 {
25− return nil
26− }
27−
28− line := 0
29− graphemePos := 0
30− previousLinesOffset := 0
31− bytePos := 0
32−
33− highlights := make([]highlightInfo, 0, len(matches))
34− gr := uniseg.NewGraphemes(ansi.Strip(content))
35−
36− for _, match := range matches {
37− byteStart, byteEnd := match[0], match[1]
38−
39− // hilight for this match:
40− hi := highlightInfo{
41− lines: map[int][2]int{},
42− }
43−
44− // find the beginning of this byte range, setup current line and
45− // grapheme position.
46− for byteStart > bytePos {
47− if !gr.Next() {
48− break
49− }
50− if content[bytePos] == '\n' {
51− previousLinesOffset = graphemePos + 1
52− line++
53− }
54− graphemePos += max(1, gr.Width())
55− bytePos += len(gr.Str())
56− }
57−
58− hi.lineStart = line
59− hi.lineEnd = line
60−
61− graphemeStart := graphemePos
62−
63− // loop until we find the end
64− for byteEnd > bytePos {
65− if !gr.Next() {
66− break
67− }
68−
69− // if it ends with a new line, add the range, increase line, and continue
70− if content[bytePos] == '\n' {
71− colstart := max(0, graphemeStart-previousLinesOffset)
72− colend := max(graphemePos-previousLinesOffset+1, colstart) // +1 its \n itself
73−
74− if colend > colstart {
75− hi.lines[line] = [2]int{colstart, colend}
76− hi.lineEnd = line
77− }
78−
79− previousLinesOffset = graphemePos + 1
80− line++
81− }
82−
83− graphemePos += max(1, gr.Width())
84− bytePos += len(gr.Str())
85− }
86−
87− // we found it!, add highlight and continue
88− if bytePos == byteEnd {
89− colstart := max(0, graphemeStart-previousLinesOffset)
90− colend := max(graphemePos-previousLinesOffset, colstart)
91−
92− if colend > colstart {
93− hi.lines[line] = [2]int{colstart, colend}
94− hi.lineEnd = line
95− }
96− }
97−
98− highlights = append(highlights, hi)
99− }
100−
101− return highlights
102−}
103−
104−type highlightInfo struct {
105− // in which line this highlight starts and ends
106− lineStart, lineEnd int
107−
108− // the grapheme highlight ranges for each of these lines
109− lines map[int][2]int
110−}
111−
112−// coords returns the line x column of this highlight.
113−func (hi highlightInfo) coords() (int, int, int) {
114− for i := hi.lineStart; i <= hi.lineEnd; i++ {
115− hl, ok := hi.lines[i]
116− if !ok {
117− continue
118− }
119− return i, hl[0], hl[1]
120− }
121− return hi.lineStart, 0, 0
122−}
123−
124−func makeHighlightRanges(
125− highlights []highlightInfo,
126− line int,
127− style lipgloss.Style,
128−) []lipgloss.Range {
129− result := []lipgloss.Range{}
130− for _, hi := range highlights {
131− lihi, ok := hi.lines[line]
132− if !ok {
133− continue
134− }
135− if lihi == [2]int{} {
136− continue
137− }
138− result = append(result, lipgloss.NewRange(lihi[0], lihi[1], style))
139− }
140− return result
141−}
vendor/charm.land/bubbles/v2/viewport/keymap.godeleted−58
@@ -1,58 +0,0 @@
1−// Package viewport provides a component for rendering a viewport in a Bubble
2−// Tea.
3−package viewport
4−
5−import "charm.land/bubbles/v2/key"
6−
7−// KeyMap defines the keybindings for the viewport. Note that you don't
8−// necessary need to use keybindings at all; the viewport can be controlled
9−// programmatically with methods like Model.LineDown(1). See the GoDocs for
10−// details.
11−type KeyMap struct {
12− PageDown key.Binding
13− PageUp key.Binding
14− HalfPageUp key.Binding
15− HalfPageDown key.Binding
16− Down key.Binding
17− Up key.Binding
18− Left key.Binding
19− Right key.Binding
20−}
21−
22−// DefaultKeyMap returns a set of pager-like default keybindings.
23−func DefaultKeyMap() KeyMap {
24− return KeyMap{
25− PageDown: key.NewBinding(
26− key.WithKeys("pgdown", "space", "f"),
27− key.WithHelp("f/pgdn", "page down"),
28− ),
29− PageUp: key.NewBinding(
30− key.WithKeys("pgup", "b"),
31− key.WithHelp("b/pgup", "page up"),
32− ),
33− HalfPageUp: key.NewBinding(
34− key.WithKeys("u", "ctrl+u"),
35− key.WithHelp("u", "½ page up"),
36− ),
37− HalfPageDown: key.NewBinding(
38− key.WithKeys("d", "ctrl+d"),
39− key.WithHelp("d", "½ page down"),
40− ),
41− Up: key.NewBinding(
42− key.WithKeys("up", "k"),
43− key.WithHelp("↑/k", "up"),
44− ),
45− Down: key.NewBinding(
46− key.WithKeys("down", "j"),
47− key.WithHelp("↓/j", "down"),
48− ),
49− Left: key.NewBinding(
50− key.WithKeys("left", "h"),
51− key.WithHelp("←/h", "move left"),
52− ),
53− Right: key.NewBinding(
54− key.WithKeys("right", "l"),
55− key.WithHelp("→/l", "move right"),
56− ),
57− }
58−}
vendor/charm.land/bubbles/v2/viewport/viewport.godeleted−765
@@ -1,765 +0,0 @@
1−package viewport
2−
3−import (
4− "cmp"
5− "math"
6− "slices"
7− "strings"
8−
9− "charm.land/bubbles/v2/key"
10− tea "charm.land/bubbletea/v2"
11− "charm.land/lipgloss/v2"
12− "github.com/charmbracelet/x/ansi"
13−)
14−
15−const (
16− defaultHorizontalStep = 6
17−)
18−
19−// Option is a configuration option that works in conjunction with [New]. For
20−// example:
21−//
22−// timer := New(WithWidth(10, WithHeight(5)))
23−type Option func(*Model)
24−
25−// WithWidth is an initialization option that sets the width of the
26−// viewport. Pass as an argument to [New].
27−func WithWidth(w int) Option {
28− return func(m *Model) {
29− m.width = w
30− }
31−}
32−
33−// WithHeight is an initialization option that sets the height of the
34−// viewport. Pass as an argument to [New].
35−func WithHeight(h int) Option {
36− return func(m *Model) {
37− m.height = h
38− }
39−}
40−
41−// New returns a new model with the given width and height as well as default
42−// key mappings.
43−func New(opts ...Option) (m Model) {
44− for _, opt := range opts {
45− opt(&m)
46− }
47− m.setInitialValues()
48− return m
49−}
50−
51−// Model is the Bubble Tea model for this viewport element.
52−type Model struct {
53− width int
54− height int
55− KeyMap KeyMap
56−
57− // Whether or not to wrap text. If false, it'll allow horizontal scrolling
58− // instead.
59− SoftWrap bool
60−
61− // Whether or not to fill to the height of the viewport with empty lines.
62− FillHeight bool
63−
64− // Whether or not to respond to the mouse. The mouse must be enabled in
65− // Bubble Tea for this to work. For details, see the Bubble Tea docs.
66− MouseWheelEnabled bool
67−
68− // The number of lines the mouse wheel will scroll. By default, this is 3.
69− MouseWheelDelta int
70−
71− // yOffset is the vertical scroll position.
72− yOffset int
73−
74− // xOffset is the horizontal scroll position.
75− xOffset int
76−
77− // horizontalStep is the number of columns we move left or right during a
78− // default horizontal scroll.
79− horizontalStep int
80−
81− // YPosition is the position of the viewport in relation to the terminal
82− // window. It's used in high performance rendering only.
83− YPosition int
84−
85− // Style applies a lipgloss style to the viewport. Realistically, it's most
86− // useful for setting borders, margins and padding.
87− Style lipgloss.Style
88−
89− // LeftGutterFunc allows to define a [GutterFunc] that adds a column into
90− // the left of the viewport, which is kept when horizontal scrolling.
91− // This can be used for things like line numbers, selection indicators,
92− // show statuses, etc. It is expected that the real-width (as measured by
93− // [lipgloss.Width]) of the returned value is always consistent, regardless
94− // of index, soft wrapping, etc.
95− LeftGutterFunc GutterFunc
96−
97− initialized bool
98− lines []string
99− longestLineWidth int
100−
101− // HighlightStyle highlights the ranges set with [SetHighligths].
102− HighlightStyle lipgloss.Style
103−
104− // SelectedHighlightStyle highlights the highlight range focused during
105− // navigation.
106− // Use [SetHighligths] to set the highlight ranges, and [HightlightNext]
107− // and [HihglightPrevious] to navigate.
108− SelectedHighlightStyle lipgloss.Style
109−
110− // StyleLineFunc allows to return a [lipgloss.Style] for each line.
111− // The argument is the line index.
112− StyleLineFunc func(int) lipgloss.Style
113−
114− highlights []highlightInfo
115− hiIdx int
116−}
117−
118−// GutterFunc can be implemented and set into [Model.LeftGutterFunc].
119−//
120−// Example implementation showing line numbers:
121−//
122−// func(info GutterContext) string {
123−// if info.Soft {
124−// return " │ "
125−// }
126−// if info.Index >= info.TotalLines {
127−// return " ~ │ "
128−// }
129−// return fmt.Sprintf("%4d │ ", info.Index+1)
130−// }
131−type GutterFunc func(GutterContext) string
132−
133−// NoGutter is the default gutter used.
134−var NoGutter = func(GutterContext) string { return "" }
135−
136−// GutterContext provides context to a [GutterFunc].
137−type GutterContext struct {
138− // Index is the line index of the line which the gutter is being rendered for.
139− Index int
140−
141− // TotalLines is the total number of lines in the viewport.
142− TotalLines int
143−
144− // Soft is whether or not the line is soft wrapped.
145− Soft bool
146−}
147−
148−func (m *Model) setInitialValues() {
149− m.KeyMap = DefaultKeyMap()
150− m.MouseWheelEnabled = true
151− m.MouseWheelDelta = 3
152− m.horizontalStep = defaultHorizontalStep
153− m.LeftGutterFunc = NoGutter
154− m.initialized = true
155−}
156−
157−// Init exists to satisfy the tea.Model interface for composability purposes.
158−func (m Model) Init() tea.Cmd {
159− return nil
160−}
161−
162−// Height returns the height of the viewport.
163−func (m Model) Height() int {
164− return m.height
165−}
166−
167−// SetHeight sets the height of the viewport.
168−func (m *Model) SetHeight(h int) {
169− m.height = h
170−}
171−
172−// Width returns the width of the viewport.
173−func (m Model) Width() int {
174− return m.width
175−}
176−
177−// SetWidth sets the width of the viewport.
178−func (m *Model) SetWidth(w int) {
179− m.width = w
180−}
181−
182−// AtTop returns whether or not the viewport is at the very top position.
183−func (m Model) AtTop() bool {
184− return m.YOffset() <= 0
185−}
186−
187−// AtBottom returns whether or not the viewport is at or past the very bottom
188−// position.
189−func (m Model) AtBottom() bool {
190− return m.YOffset() >= m.maxYOffset()
191−}
192−
193−// PastBottom returns whether or not the viewport is scrolled beyond the last
194−// line. This can happen when adjusting the viewport height.
195−func (m Model) PastBottom() bool {
196− return m.YOffset() > m.maxYOffset()
197−}
198−
199−// ScrollPercent returns the amount scrolled as a float between 0 and 1.
200−func (m Model) ScrollPercent() float64 {
201− total, _, _ := m.calculateLine(0)
202− if m.Height() >= total {
203− return 1.0
204− }
205− y := float64(m.YOffset())
206− h := float64(m.Height())
207− t := float64(total)
208− v := y / (t - h)
209− return clamp(v, 0, 1)
210−}
211−
212−// HorizontalScrollPercent returns the amount horizontally scrolled as a float
213−// between 0 and 1.
214−func (m Model) HorizontalScrollPercent() float64 {
215− if m.xOffset >= m.longestLineWidth-m.Width() {
216− return 1.0
217− }
218− y := float64(m.xOffset)
219− h := float64(m.Width())
220− t := float64(m.longestLineWidth)
221− v := y / (t - h)
222− return clamp(v, 0, 1)
223−}
224−
225−// SetContent set the pager's text content. Line endings will be normalized to '\n'.
226−func (m *Model) SetContent(s string) {
227− m.SetContentLines(strings.Split(s, "\n"))
228−}
229−
230−// SetContentLines allows to set the lines to be shown instead of the content.
231−// If a given line has a \n in it, it will still be split into multiple lines
232−// similar to that of [Model.SetContent]. See also [Model.SetContent].
233−func (m *Model) SetContentLines(lines []string) {
234− // if there's no content, set content to actual nil instead of one empty
235− // line.
236− m.lines = lines
237− if len(m.lines) == 1 && ansi.StringWidth(m.lines[0]) == 0 {
238− m.lines = nil
239− } else {
240− // iterate in reverse, so we can safely modify the slice.
241− var subLines []string
242− for i := len(m.lines) - 1; i >= 0; i-- {
243− if !strings.ContainsAny(m.lines[i], "\r\n") {
244− continue
245− }
246−
247− m.lines[i] = strings.ReplaceAll(m.lines[i], "\r\n", "\n") // normalize line endings
248− subLines = strings.Split(m.lines[i], "\n")
249− if len(subLines) > 1 {
250− m.lines = slices.Insert(m.lines, i+1, subLines[1:]...)
251− m.lines[i] = subLines[0]
252− }
253− }
254− }
255−
256− m.longestLineWidth = maxLineWidth(m.lines)
257− m.ClearHighlights()
258−
259− if m.YOffset() > m.maxYOffset() {
260− m.GotoBottom()
261− }
262−}
263−
264−// GetContent returns the entire content as a single string.
265−// Line endings are normalized to '\n'.
266−func (m Model) GetContent() string {
267− return strings.Join(m.lines, "\n")
268−}
269−
270−// calculateLine taking soft wrapping into account, returns the total viewable
271−// lines and the real-line index for the given yoffset, as well as the virtual
272−// line offset.
273−func (m Model) calculateLine(yoffset int) (total, ridx, voffset int) {
274− if !m.SoftWrap {
275− total = len(m.lines)
276− ridx = min(yoffset, len(m.lines))
277− return total, ridx, 0
278− }
279−
280− maxWidth := float64(m.maxWidth())
281− var lineHeight int
282−
283− for i, line := range m.lines {
284− lineHeight = max(1, int(math.Ceil(float64(ansi.StringWidth(line))/maxWidth)))
285−
286− if yoffset >= total && yoffset < total+lineHeight {
287− ridx = i
288− voffset = yoffset - total
289− }
290− total += lineHeight
291− }
292−
293− if yoffset >= total {
294− ridx = len(m.lines)
295− voffset = 0
296− }
297−
298− return total, ridx, voffset
299−}
300−
301−// maxYOffset returns the maximum possible value of the y-offset based on the
302−// viewport's content and set height.
303−func (m Model) maxYOffset() int {
304− total, _, _ := m.calculateLine(0)
305− return max(0, total-m.Height()+m.Style.GetVerticalFrameSize())
306−}
307−
308−// maxXOffset returns the maximum possible value of the x-offset based on the
309−// viewport's content and set width.
310−func (m Model) maxXOffset() int {
311− return max(0, m.longestLineWidth-m.Width())
312−}
313−
314−// maxWidth returns the maximum width of the viewport. It accounts for the frame
315−// size, in addition to the gutter size.
316−func (m Model) maxWidth() int {
317− var gutterSize int
318− if m.LeftGutterFunc != nil {
319− gutterSize = ansi.StringWidth(m.LeftGutterFunc(GutterContext{}))
320− }
321− return max(0, m.Width()-m.Style.GetHorizontalFrameSize()-gutterSize)
322−}
323−
324−// maxHeight returns the maximum height of the viewport. It accounts for the frame
325−// size.
326−func (m Model) maxHeight() int {
327− return max(0, m.Height()-m.Style.GetVerticalFrameSize())
328−}
329−
330−// visibleLines returns the lines that should currently be visible in the
331−// viewport.
332−func (m Model) visibleLines() (lines []string) {
333− maxHeight := m.maxHeight()
334− maxWidth := m.maxWidth()
335−
336− if maxHeight == 0 || maxWidth == 0 {
337− return nil
338− }
339−
340− total, ridx, voffset := m.calculateLine(m.YOffset())
341− if total > 0 {
342− bottom := clamp(ridx+maxHeight, ridx, len(m.lines))
343− lines = m.styleLines(slices.Clone(m.lines[ridx:bottom]), ridx)
344− lines = m.highlightLines(lines, ridx)
345− }
346−
347− for m.FillHeight && len(lines) < maxHeight {
348− lines = append(lines, "")
349− }
350−
351− // if longest line fit within width, no need to do anything else.
352− if (m.xOffset == 0 && m.longestLineWidth <= maxWidth) || maxWidth == 0 {
353− return m.setupGutter(lines, total, ridx)
354− }
355−
356− if m.SoftWrap {
357− return m.softWrap(lines, maxWidth, maxHeight, total, ridx, voffset)
358− }
359−
360− // Cut the lines to the viewport width.
361− for i := range lines {
362− lines[i] = ansi.Cut(lines[i], m.xOffset, m.xOffset+maxWidth)
363− }
364− return m.setupGutter(lines, total, ridx)
365−}
366−
367−// styleLines styles the lines using [Model.StyleLineFunc].
368−func (m Model) styleLines(lines []string, offset int) []string {
369− if m.StyleLineFunc == nil {
370− return lines
371− }
372− for i := range lines {
373− lines[i] = m.StyleLineFunc(i + offset).Render(lines[i])
374− }
375− return lines
376−}
377−
378−// highlightLines highlights the lines with [Model.HighlightStyle] and
379−// [Model.SelectedHighlightStyle].
380−func (m Model) highlightLines(lines []string, offset int) []string {
381− if len(m.highlights) == 0 {
382− return lines
383− }
384− for i := range lines {
385− ranges := makeHighlightRanges(
386− m.highlights,
387− i+offset,
388− m.HighlightStyle,
389− )
390− lines[i] = lipgloss.StyleRanges(lines[i], ranges...)
391− if m.hiIdx < 0 {
392− continue
393− }
394− sel := m.highlights[m.hiIdx]
395− if hi, ok := sel.lines[i+offset]; ok {
396− lines[i] = lipgloss.StyleRanges(lines[i], lipgloss.NewRange(
397− hi[0],
398− hi[1],
399− m.SelectedHighlightStyle,
400− ))
401− }
402− }
403− return lines
404−}
405−
406−func (m Model) softWrap(lines []string, maxWidth, maxHeight, total, ridx, voffset int) []string {
407− wrappedLines := make([]string, 0, maxHeight)
408−
409− var idx, lineWidth int
410− var truncatedLine string
411−
412− for i, line := range lines {
413− // If the line is less than or equal to the max width, it can be added
414− // as is.
415− lineWidth = ansi.StringWidth(line)
416−
417− if lineWidth <= maxWidth {
418− if m.LeftGutterFunc != nil {
419− line = m.LeftGutterFunc(GutterContext{
420− Index: i + ridx,
421− TotalLines: total,
422− Soft: false,
423− }) + line
424− }
425− wrappedLines = append(wrappedLines, line)
426− continue
427− }
428−
429− idx = 0
430− for lineWidth > idx {
431− truncatedLine = ansi.Cut(line, idx, maxWidth+idx)
432− if m.LeftGutterFunc != nil {
433− truncatedLine = m.LeftGutterFunc(GutterContext{
434− Index: i + ridx,
435− TotalLines: total,
436− Soft: idx > 0,
437− }) + truncatedLine
438− }
439− wrappedLines = append(wrappedLines, truncatedLine)
440− idx += maxWidth
441− }
442− }
443−
444− return wrappedLines[voffset:min(voffset+maxHeight, len(wrappedLines))]
445−}
446−
447−// setupGutter sets up the left gutter using [Model.LeftGutterFunc].
448−func (m Model) setupGutter(lines []string, total, ridx int) []string {
449− if m.LeftGutterFunc == nil {
450− return lines
451− }
452−
453− for i := range lines {
454− lines[i] = m.LeftGutterFunc(GutterContext{
455− Index: i + ridx,
456− TotalLines: total,
457− Soft: false,
458− }) + lines[i]
459− }
460− return lines
461−}
462−
463−// SetYOffset sets the Y offset.
464−func (m *Model) SetYOffset(n int) {
465− m.yOffset = clamp(n, 0, m.maxYOffset())
466−}
467−
468−// YOffset returns the current Y offset - the vertical scroll position.
469−func (m *Model) YOffset() int { return m.yOffset }
470−
471−// EnsureVisible ensures that the given line and column are in the viewport.
472−func (m *Model) EnsureVisible(line, colstart, colend int) {
473− maxWidth := m.maxWidth()
474− if colend <= maxWidth {
475− m.SetXOffset(0)
476− } else {
477− m.SetXOffset(colstart - m.horizontalStep) // put one step to the left, feels more natural
478− }
479−
480− if line < m.YOffset() || line >= m.YOffset()+m.maxHeight() {
481− m.SetYOffset(line)
482− }
483−}
484−
485−// PageDown moves the view down by the number of lines in the viewport.
486−func (m *Model) PageDown() {
487− if m.AtBottom() {
488− return
489− }
490− m.ScrollDown(m.Height())
491−}
492−
493−// PageUp moves the view up by one height of the viewport.
494−func (m *Model) PageUp() {
495− if m.AtTop() {
496− return
497− }
498− m.ScrollUp(m.Height())
499−}
500−
501−// HalfPageDown moves the view down by half the height of the viewport.
502−func (m *Model) HalfPageDown() {
503− if m.AtBottom() {
504− return
505− }
506− m.ScrollDown(m.Height() / 2) //nolint:mnd
507−}
508−
509−// HalfPageUp moves the view up by half the height of the viewport.
510−func (m *Model) HalfPageUp() {
511− if m.AtTop() {
512− return
513− }
514− m.ScrollUp(m.Height() / 2) //nolint:mnd
515−}
516−
517−// ScrollDown moves the view down by the given number of lines.
518−func (m *Model) ScrollDown(n int) {
519− if m.AtBottom() || n == 0 || len(m.lines) == 0 {
520− return
521− }
522− // Make sure the number of lines by which we're going to scroll isn't
523− // greater than the number of lines we actually have left before we reach
524− // the bottom.
525− m.SetYOffset(m.YOffset() + n)
526− m.hiIdx = m.findNearestMatch()
527−}
528−
529−// ScrollUp moves the view up by the given number of lines.
530−func (m *Model) ScrollUp(n int) {
531− if m.AtTop() || n == 0 || len(m.lines) == 0 {
532− return
533− }
534− // Make sure the number of lines by which we're going to scroll isn't
535− // greater than the number of lines we are from the top.
536− m.SetYOffset(m.YOffset() - n)
537− m.hiIdx = m.findNearestMatch()
538−}
539−
540−// SetHorizontalStep sets the amount of cells that the viewport moves in the
541−// default viewport keymapping. If set to 0 or less, horizontal scrolling is
542−// disabled.
543−func (m *Model) SetHorizontalStep(n int) {
544− m.horizontalStep = max(0, n)
545−}
546−
547−// XOffset returns the current X offset - the horizontal scroll position.
548−func (m *Model) XOffset() int { return m.xOffset }
549−
550−// SetXOffset sets the X offset.
551−// No-op when soft wrap is enabled.
552−func (m *Model) SetXOffset(n int) {
553− if m.SoftWrap {
554− return
555− }
556− m.xOffset = clamp(n, 0, m.maxXOffset())
557−}
558−
559−// ScrollLeft moves the viewport to the left by the given number of columns.
560−func (m *Model) ScrollLeft(n int) {
561− m.SetXOffset(m.xOffset - n)
562−}
563−
564−// ScrollRight moves viewport to the right by the given number of columns.
565−func (m *Model) ScrollRight(n int) {
566− m.SetXOffset(m.xOffset + n)
567−}
568−
569−// TotalLineCount returns the total number of lines (both hidden and visible) within the viewport.
570−func (m Model) TotalLineCount() int {
571− total, _, _ := m.calculateLine(0)
572− return total
573−}
574−
575−// VisibleLineCount returns the number of the visible lines within the viewport.
576−func (m Model) VisibleLineCount() int {
577− return len(m.visibleLines())
578−}
579−
580−// GotoTop sets the viewport to the top position.
581−func (m *Model) GotoTop() (lines []string) {
582− if m.AtTop() {
583− return nil
584− }
585− m.SetYOffset(0)
586− m.hiIdx = m.findNearestMatch()
587− return m.visibleLines()
588−}
589−
590−// GotoBottom sets the viewport to the bottom position.
591−func (m *Model) GotoBottom() (lines []string) {
592− m.SetYOffset(m.maxYOffset())
593− m.hiIdx = m.findNearestMatch()
594− return m.visibleLines()
595−}
596−
597−// SetHighlights sets ranges of characters to highlight.
598−// For instance, `[]int{[]int{2, 10}, []int{20, 30}}` will highlight characters
599−// 2 to 10 and 20 to 30.
600−// Note that highlights are not expected to transpose each other, and are also
601−// expected to be in order.
602−// Use [Model.SetHighlights] to set the highlight ranges, and
603−// [Model.HighlightNext] and [Model.HighlightPrevious] to navigate.
604−// Use [Model.ClearHighlights] to remove all highlights.
605−func (m *Model) SetHighlights(matches [][]int) {
606− if len(matches) == 0 || len(m.lines) == 0 {
607− return
608− }
609− m.highlights = parseMatches(m.GetContent(), matches)
610− m.hiIdx = m.findNearestMatch()
611− m.showHighlight()
612−}
613−
614−// ClearHighlights clears previously set highlights.
615−func (m *Model) ClearHighlights() {
616− m.highlights = nil
617− m.hiIdx = -1
618−}
619−
620−func (m *Model) showHighlight() {
621− if m.hiIdx == -1 {
622− return
623− }
624− line, colstart, colend := m.highlights[m.hiIdx].coords()
625− m.EnsureVisible(line, colstart, colend)
626−}
627−
628−// HighlightNext highlights the next match.
629−func (m *Model) HighlightNext() {
630− if m.highlights == nil {
631− return
632− }
633− m.hiIdx = (m.hiIdx + 1) % len(m.highlights)
634− m.showHighlight()
635−}
636−
637−// HighlightPrevious highlights the previous match.
638−func (m *Model) HighlightPrevious() {
639− if m.highlights == nil {
640− return
641− }
642− m.hiIdx = (m.hiIdx - 1 + len(m.highlights)) % len(m.highlights)
643− m.showHighlight()
644−}
645−
646−func (m Model) findNearestMatch() int {
647− for i, match := range m.highlights {
648− if match.lineStart >= m.YOffset() {
649− return i
650− }
651− }
652− return -1
653−}
654−
655−// Update handles standard message-based viewport updates.
656−func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
657− m = m.updateAsModel(msg)
658− return m, nil
659−}
660−
661−// Author's note: this method has been broken out to make it easier to
662−// potentially transition Update to satisfy tea.Model.
663−func (m Model) updateAsModel(msg tea.Msg) Model {
664− if !m.initialized {
665− m.setInitialValues()
666− }
667−
668− switch msg := msg.(type) {
669− case tea.KeyPressMsg:
670− switch {
671− case key.Matches(msg, m.KeyMap.PageDown):
672− m.PageDown()
673−
674− case key.Matches(msg, m.KeyMap.PageUp):
675− m.PageUp()
676−
677− case key.Matches(msg, m.KeyMap.HalfPageDown):
678− m.HalfPageDown()
679−
680− case key.Matches(msg, m.KeyMap.HalfPageUp):
681− m.HalfPageUp()
682−
683− case key.Matches(msg, m.KeyMap.Down):
684− m.ScrollDown(1)
685−
686− case key.Matches(msg, m.KeyMap.Up):
687− m.ScrollUp(1)
688−
689− case key.Matches(msg, m.KeyMap.Left):
690− m.ScrollLeft(m.horizontalStep)
691−
692− case key.Matches(msg, m.KeyMap.Right):
693− m.ScrollRight(m.horizontalStep)
694− }
695−
696− case tea.MouseWheelMsg:
697− if !m.MouseWheelEnabled {
698− break
699− }
700− switch msg.Button {
701− case tea.MouseWheelDown:
702− // NOTE: some terminal emulators don't send the shift event for
703− // mouse actions.
704− if msg.Mod.Contains(tea.ModShift) {
705− m.ScrollRight(m.horizontalStep)
706− break
707− }
708− m.ScrollDown(m.MouseWheelDelta)
709− case tea.MouseWheelUp:
710− // NOTE: some terminal emulators don't send the shift event for
711− // mouse actions.
712− if msg.Mod.Contains(tea.ModShift) {
713− m.ScrollLeft(m.horizontalStep)
714− break
715− }
716− m.ScrollUp(m.MouseWheelDelta)
717− case tea.MouseWheelLeft:
718− m.ScrollLeft(m.horizontalStep)
719− case tea.MouseWheelRight:
720− m.ScrollRight(m.horizontalStep)
721− }
722− }
723−
724− return m
725−}
726−
727−// View renders the viewport into a string.
728−func (m Model) View() string {
729− w, h := m.Width(), m.Height()
730− if sw := m.Style.GetWidth(); sw != 0 {
731− w = min(w, sw)
732− }
733− if sh := m.Style.GetHeight(); sh != 0 {
734− h = min(h, sh)
735− }
736−
737− if w == 0 || h == 0 {
738− return ""
739− }
740−
741− contentWidth := w - m.Style.GetHorizontalFrameSize()
742− contentHeight := h - m.Style.GetVerticalFrameSize()
743− contents := lipgloss.NewStyle().
744− Width(contentWidth). // pad to width.
745− Height(contentHeight). // pad to height.
746− Render(strings.Join(m.visibleLines(), "\n"))
747− return m.Style.
748− UnsetWidth().UnsetHeight(). // Style size already applied in contents.
749− Render(contents)
750−}
751−
752−func clamp[T cmp.Ordered](v, low, high T) T {
753− if high < low {
754− low, high = high, low
755− }
756− return min(high, max(low, v))
757−}
758−
759−func maxLineWidth(lines []string) int {
760− result := 0
761− for _, line := range lines {
762− result = max(result, ansi.StringWidth(line))
763− }
764− return result
765−}
vendor/charm.land/bubbletea/v2/.gitattributesdeleted−1
@@ -1 +0,0 @@
1−*.golden -text
vendor/charm.land/bubbletea/v2/.gitignoredeleted−23
@@ -1,23 +0,0 @@
1−.DS_Store
2−.envrc
3−
4−examples/fullscreen/fullscreen
5−examples/help/help
6−examples/http/http
7−examples/list-default/list-default
8−examples/list-fancy/list-fancy
9−examples/list-simple/list-simple
10−examples/mouse/mouse
11−examples/pager/pager
12−examples/progress-download/color_vortex.blend
13−examples/progress-download/progress-download
14−examples/simple/simple
15−examples/spinner/spinner
16−examples/textinput/textinput
17−examples/textinputs/textinputs
18−examples/views/views
19−tutorials/basics/basics
20−tutorials/commands/commands
21−.idea
22−coverage.txt
23−dist/
vendor/charm.land/bubbletea/v2/.golangci.ymldeleted−47
@@ -1,47 +0,0 @@
1−version: "2"
2−run:
3− tests: false
4−linters:
5− enable:
6− - bodyclose
7− - exhaustive
8− - goconst
9− - godot
10− - gomoddirectives
11− - goprintffuncname
12− - gosec
13− - misspell
14− - nakedret
15− - nestif
16− - nilerr
17− - noctx
18− - nolintlint
19− - prealloc
20− - revive
21− - rowserrcheck
22− - sqlclosecheck
23− - tparallel
24− - unconvert
25− - unparam
26− - whitespace
27− - wrapcheck
28− exclusions:
29− rules:
30− - text: '(slog|log)\.\w+'
31− linters:
32− - noctx
33− generated: lax
34− presets:
35− - common-false-positives
36− settings:
37− exhaustive:
38− default-signifies-exhaustive: true
39−issues:
40− max-issues-per-linter: 0
41− max-same-issues: 0
42−formatters:
43− enable:
44− - gofumpt
45− - goimports
46− exclusions:
47− generated: lax
vendor/charm.land/bubbletea/v2/.goreleaser.ymldeleted−5
@@ -1,5 +0,0 @@
1−# yaml-language-server: $schema=https://goreleaser.com/static/schema-pro.json
2−version: 2
3−includes:
4− - from_url:
5− url: charmbracelet/meta/main/goreleaser-lib.yaml
vendor/charm.land/bubbletea/v2/LICENSEdeleted−21
@@ -1,21 +0,0 @@
1−MIT License
2−
3−Copyright (c) 2020-2026 Charmbracelet, Inc.
4−
5−Permission is hereby granted, free of charge, to any person obtaining a copy
6−of this software and associated documentation files (the "Software"), to deal
7−in the Software without restriction, including without limitation the rights
8−to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9−copies of the Software, and to permit persons to whom the Software is
10−furnished to do so, subject to the following conditions:
11−
12−The above copyright notice and this permission notice shall be included in all
13−copies or substantial portions of the Software.
14−
15−THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16−IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17−FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18−AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19−LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20−OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21−SOFTWARE.
vendor/charm.land/bubbletea/v2/README.mddeleted−402
@@ -1,402 +0,0 @@
1−# Bubble Tea
2−
3−<p>
4− <img src="https://github.com/user-attachments/assets/ad408275-8799-488f-9303-441e7f869535" width="350"><br>
5− <a href="https://github.com/charmbracelet/bubbletea/releases"><img src="https://img.shields.io/github/release/charmbracelet/bubbletea.svg" alt="Latest Release"></a>
6− <a href="https://pkg.go.dev/charm.land/bubbletea/v2?tab=doc"><img src="https://godoc.org/charm.land/bubbletea/v2?status.svg" alt="GoDoc"></a>
7− <a href="https://github.com/charmbracelet/bubbletea/actions"><img src="https://github.com/charmbracelet/bubbletea/actions/workflows/build.yml/badge.svg?branch=main" alt="Build Status"></a>
8−</p>
9−
10−The fun, functional and stateful way to build terminal apps. A Go framework
11−based on [The Elm Architecture][elm]. Bubble Tea is well-suited for simple and
12−complex terminal applications, either inline, full-window, or a mix of both.
13−
14−<p>
15− <img src="https://stuff.charm.sh/bubbletea/bubbletea-example.gif" width="100%" alt="Bubble Tea Example">
16−</p>
17−
18−Bubble Tea is in use in production and includes a number of features and
19−performance optimizations we’ve added along the way. Among those is
20−a high-performance cell-based renderer, built-in color downsampling,
21−declarative views, high-fidelity keyboard and mouse handling, native clipboard
22−support, and more.
23−
24−To get started, see the tutorial below, the [examples][examples], the
25−[docs][docs], and some common [resources](#libraries-we-use-with-bubble-tea).
26−
27−> [!TIP]
28−>
29−> Upgrading from v1? Check out the [upgrade guide](./UPGRADE_GUIDE_V2.md), or
30−> point your LLM at it and let it go to town.
31−
32−## By the way
33−
34−Be sure to check out [Bubbles][bubbles], a library of common UI components for Bubble Tea.
35−
36−<p>
37− <a href="https://github.com/charmbracelet/bubbles"><img src="https://github.com/user-attachments/assets/b6dc4638-b67a-4bfa-88d0-a8e8833c3ac9" width="172" alt="Bubbles Badge"></a>&nbsp;&nbsp;
38− <a href="https://github.com/charmbracelet/bubbles"><img src="https://stuff.charm.sh/bubbles-examples/textinput.gif" width="400" alt="Text Input Example from Bubbles"></a>
39−</p>
40−
41−---
42−
43−## Tutorial
44−
45−Bubble Tea is based on the functional design paradigms of [The Elm
46−Architecture][elm], which happens to work nicely with Go. It's a delightful way
47−to build applications.
48−
49−This tutorial assumes you have a working knowledge of Go.
50−
51−By the way, the non-annotated source code for this program is available
52−[on GitHub][tut-source].
53−
54−[elm]: https://guide.elm-lang.org/architecture/
55−[tut-source]: https://github.com/charmbracelet/bubbletea/tree/main/tutorials/basics
56−
57−### Enough! Let's get to it.
58−
59−For this tutorial, we're making a shopping list.
60−
61−To start we'll define our package and import some libraries. Our only external
62−import will be the Bubble Tea library, which we'll call `tea` for short.
63−
64−```go
65−package main
66−
67−// These imports will be used later in the tutorial. If you save the file
68−// now, Go might complain they are unused, but that's fine.
69−// You may also need to run `go mod tidy` to download bubbletea and its
70−// dependencies.
71−import (
72− "fmt"
73− "os"
74−
75− tea "charm.land/bubbletea/v2"
76−)
77−```
78−
79−Bubble Tea programs are comprised of a **model** that describes the application
80−state and three simple methods on that model:
81−
82−- **Init**, a function that returns an initial command for the application to run.
83−- **Update**, a function that handles incoming events and updates the model accordingly.
84−- **View**, a function that renders the UI based on the data in the model.
85−
86−### The Model
87−
88−So let's start by defining our model which will store our application's state.
89−It can be any type, but a `struct` usually makes the most sense.
90−
91−```go
92−type model struct {
93− choices []string // items on the to-do list
94− cursor int // which to-do list item our cursor is pointing at
95− selected map[int]struct{} // which to-do items are selected
96−}
97−```
98−
99−## Initialization
100−
101−Next, we’ll define our application’s initial state. `Init` can return a `Cmd`
102−that could perform some initial I/O. For now, we don’t need to do any I/O, so
103−for the command, we’ll just return `nil`, which translates to “no command.”
104−
105−```go
106−func initialModel() model {
107− return model{
108− // Our to-do list is a grocery list
109− choices: []string{"Buy carrots", "Buy celery", "Buy kohlrabi"},
110−
111− // A map which indicates which choices are selected. We're using
112− // the map like a mathematical set. The keys refer to the indexes
113− // of the `choices` slice, above.
114− selected: make(map[int]struct{}),
115− }
116−}
117−```
118−
119−After that, we’ll define our application’s initial state in the `Init` method. `Init`
120−can return a `Cmd` that could perform some initial I/O. For now, we don't need
121−to do any I/O, so for the command, we'll just return `nil`, which translates to
122−"no command."
123−
124−```go
125−func (m model) Init() tea.Cmd {
126− // Just return `nil`, which means "no I/O right now, please."
127− return nil
128−}
129−```
130−
131−### The Update Method
132−
133−Next up is the update method. The update function is called when “things
134−happen.” Its job is to look at what has happened and return an updated model in
135−response. It can also return a `Cmd` to make more things happen, but for now
136−don't worry about that part.
137−
138−In our case, when a user presses the down arrow, `Update`’s job is to notice
139−that the down arrow was pressed and move the cursor accordingly (or not).
140−
141−The “something happened” comes in the form of a `Msg`, which can be any type.
142−Messages are the result of some I/O that took place, such as a keypress, timer
143−tick, or a response from a server.
144−
145−We usually figure out which type of `Msg` we received with a type switch, but
146−you could also use a type assertion.
147−
148−For now, we'll just deal with `tea.KeyPressMsg` messages, which are
149−automatically sent to the update function when keys are pressed.
150−
151−```go
152−func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
153− switch msg := msg.(type) {
154−
155− // Is it a key press?
156− case tea.KeyPressMsg:
157−
158− // Cool, what was the actual key pressed?
159− switch msg.String() {
160−
161− // These keys should exit the program.
162− case "ctrl+c", "q":
163− return m, tea.Quit
164−
165− // The "up" and "k" keys move the cursor up
166− case "up", "k":
167− if m.cursor > 0 {
168− m.cursor--
169− }
170−
171− // The "down" and "j" keys move the cursor down
172− case "down", "j":
173− if m.cursor < len(m.choices)-1 {
174− m.cursor++
175− }
176−
177− // The "enter" key and the space bar toggle the selected state
178− // for the item that the cursor is pointing at.
179− case "enter", "space":
180− _, ok := m.selected[m.cursor]
181− if ok {
182− delete(m.selected, m.cursor)
183− } else {
184− m.selected[m.cursor] = struct{}{}
185− }
186− }
187− }
188−
189− // Return the updated model to the Bubble Tea runtime for processing.
190− // Note that we're not returning a command.
191− return m, nil
192−}
193−```
194−
195−You may have noticed that <kbd>ctrl+c</kbd> and <kbd>q</kbd> above return
196−a `tea.Quit` command with the model. That’s a special command which instructs
197−the Bubble Tea runtime to quit, exiting the program.
198−
199−### The View Method
200−
201−At last, it’s time to render our UI. Of all the methods, the view is the
202−simplest. We look at the model in its current state and use it to build a
203−`tea.View`. The view declares our UI content and, optionally, terminal features
204−like alt screen mode, mouse tracking, cursor position, and more.
205−
206−Because the view describes the entire UI of your application, you don’t have to
207−worry about redrawing logic and stuff like that. Bubble Tea takes care of it
208−for you.
209−
210−```go
211−func (m model) View() tea.View {
212− // The header
213− s := "What should we buy at the market?\n\n"
214−
215− // Iterate over our choices
216− for i, choice := range m.choices {
217−
218− // Is the cursor pointing at this choice?
219− cursor := " " // no cursor
220− if m.cursor == i {
221− cursor = ">" // cursor!
222− }
223−
224− // Is this choice selected?
225− checked := " " // not selected
226− if _, ok := m.selected[i]; ok {
227− checked = "x" // selected!
228− }
229−
230− // Render the row
231− s += fmt.Sprintf("%s [%s] %s\n", cursor, checked, choice)
232− }
233−
234− // The footer
235− s += "\nPress q to quit.\n"
236−
237− // Send the UI for rendering
238− return tea.NewView(s)
239−}
240−```
241−
242−### All Together Now
243−
244−The last step is to simply run our program. We pass our initial model to
245−`tea.NewProgram` and let it rip:
246−
247−```go
248−func main() {
249− p := tea.NewProgram(initialModel())
250− if _, err := p.Run(); err != nil {
251− fmt.Printf("Alas, there's been an error: %v", err)
252− os.Exit(1)
253− }
254−}
255−```
256−
257−## What’s Next?
258−
259−This tutorial covers the basics of building an interactive terminal UI, but
260−in the real world you'll also need to perform I/O. To learn about that have a
261−look at the [Command Tutorial][cmd]. It's pretty simple.
262−
263−There are also several [Bubble Tea examples][examples] available and, of course,
264−there are [Go Docs][docs].
265−
266−[cmd]: https://github.com/charmbracelet/bubbletea/tree/main/tutorials/commands/
267−[examples]: https://github.com/charmbracelet/bubbletea/tree/main/examples
268−[docs]: https://pkg.go.dev/charm.land/bubbletea/v2?tab=doc
269−
270−## Debugging
271−
272−### Debugging with Delve
273−
274−Since Bubble Tea apps assume control of stdin and stdout, you’ll need to run
275−delve in headless mode and then connect to it:
276−
277−```bash
278−# Start the debugger
279−$ dlv debug --headless --api-version=2 --listen=127.0.0.1:43000 .
280−API server listening at: 127.0.0.1:43000
281−
282−# Connect to it from another terminal
283−$ dlv connect 127.0.0.1:43000
284−```
285−
286−If you do not explicitly supply the `--listen` flag, the port used will vary
287−per run, so passing this in makes the debugger easier to use from a script
288−or your IDE of choice.
289−
290−Additionally, we pass in `--api-version=2` because delve defaults to version 1
291−for backwards compatibility reasons. However, delve recommends using version 2
292−for all new development and some clients may no longer work with version 1.
293−For more information, see the [Delve documentation](https://github.com/go-delve/delve/tree/master/Documentation/api).
294−
295−### Logging Stuff
296−
297−You can’t really log to stdout with Bubble Tea because your TUI is busy
298−occupying that! You can, however, log to a file by including something like
299−the following prior to starting your Bubble Tea program:
300−
301−```go
302−if len(os.Getenv("DEBUG")) > 0 {
303− f, err := tea.LogToFile("debug.log", "debug")
304− if err != nil {
305− fmt.Println("fatal:", err)
306− os.Exit(1)
307− }
308− defer f.Close()
309−}
310−```
311−
312−To see what’s being logged in real time, run `tail -f debug.log` while you run
313−your program in another window.
314−
315−## Libraries we use with Bubble Tea
316−
317−- [Bubbles][bubbles]: Common Bubble Tea components such as text inputs, viewports, spinners and so on
318−- [Lip Gloss][lipgloss]: Style, format and layout tools for terminal applications
319−- [Harmonica][harmonica]: A spring animation library for smooth, natural motion
320−- [BubbleZone][bubblezone]: Easy mouse event tracking for Bubble Tea components
321−- [ntcharts][ntcharts]: A terminal charting library built for Bubble Tea and [Lip Gloss][lipgloss]
322−
323−[bubbles]: https://github.com/charmbracelet/bubbles
324−[lipgloss]: https://github.com/charmbracelet/lipgloss
325−[harmonica]: https://github.com/charmbracelet/harmonica
326−[bubblezone]: https://github.com/lrstanley/bubblezone
327−[ntcharts]: https://github.com/NimbleMarkets/ntcharts
328−
329−## Bubble Tea in the Wild
330−
331−There are over [18,000 applications](https://github.com/charmbracelet/bubbletea/network/dependents) built with Bubble Tea! Here are a handful of ’em.
332−
333−### Staff favourites
334−
335−- [chezmoi](https://github.com/twpayne/chezmoi): securely manage your dotfiles across multiple machines
336−- [circumflex](https://github.com/bensadeh/circumflex): read Hacker News in the terminal
337−- [gh-dash](https://www.github.com/dlvhdr/gh-dash): a GitHub CLI extension for PRs and issues
338−- [Tetrigo](https://github.com/Broderick-Westrope/tetrigo): Tetris in the terminal
339−- [Signls](https://github.com/emprcl/signls): a generative midi sequencer designed for composition and live performance
340−- [Superfile](https://github.com/yorukot/superfile): a super file manager
341−
342−### In Industry
343−
344−- Microsoft Azure – [Aztify](https://github.com/Azure/aztfy): bring Microsoft Azure resources under Terraform
345−- Daytona – [Daytona](https://github.com/daytonaio/daytona): an AI infrastructure platform
346−- Cockroach Labs – [CockroachDB](https://github.com/cockroachdb/cockroach): a cloud-native, high-availability distributed SQL database
347−- Truffle Security Co. – [Trufflehog](https://github.com/trufflesecurity/trufflehog): find leaked credentials
348−- NVIDIA – [container-canary](https://github.com/NVIDIA/container-canary): a container validator
349−- AWS – [eks-node-viewer](https://github.com/awslabs/eks-node-viewer): a tool for visualizing dynamic node usage within an EKS cluster
350−- MinIO – [mc](https://github.com/minio/mc): the official [MinIO](https://min.io) client
351−- Ubuntu – [Authd](https://github.com/ubuntu/authd): an authentication daemon for cloud-based identity providers
352−
353−### Charm stuff
354−
355−- [Glow](https://github.com/charmbracelet/glow): a markdown reader, browser, and online markdown stash
356−- [Huh?](https://github.com/charmbracelet/huh): an interactive prompt and form toolkit
357−- [Mods](https://github.com/charmbracelet/mods): AI on the CLI, built for pipelines
358−- [Wishlist](https://github.com/charmbracelet/wishlist): an SSH directory (and bastion!)
359−
360−### There’s so much more where that came from
361−
362−For more applications built with Bubble Tea see [Charm & Friends][community].
363−Is there something cool you made with Bubble Tea you want to share? [PRs][community] are
364−welcome!
365−
366−## Contributing
367−
368−See [contributing][contribute].
369−
370−[contribute]: https://github.com/charmbracelet/bubbletea/contribute
371−
372−## Feedback
373−
374−We’d love to hear your thoughts on this project. Feel free to drop us a note!
375−
376−- [Twitter](https://twitter.com/charmcli)
377−- [The Fediverse](https://mastodon.social/@charmcli)
378−- [Discord](https://charm.sh/chat)
379−
380−## Acknowledgments
381−
382−Bubble Tea is based on the paradigms of [The Elm Architecture][elm] by Evan
383−Czaplicki et alia and the excellent [go-tea][gotea] by TJ Holowaychuk. It’s
384−inspired by the many great [_Zeichenorientierte Benutzerschnittstellen_][zb]
385−of days past.
386−
387−[elm]: https://guide.elm-lang.org/architecture/
388−[gotea]: https://github.com/tj/go-tea
389−[zb]: https://de.wikipedia.org/wiki/Zeichenorientierte_Benutzerschnittstelle
390−[community]: https://github.com/charm-and-friends/charm-in-the-wild
391−
392−## License
393−
394−[MIT](https://github.com/charmbracelet/bubbletea/raw/main/LICENSE)
395−
396−---
397−
398−Part of [Charm](https://charm.sh).
399−
400−<a href="https://charm.sh/"><img alt="The Charm logo" src="https://stuff.charm.sh/charm-banner-softy.jpg" width="400"></a>
401−
402−Charm热爱开源 • Charm loves open source • نحنُ نحب المصادر المفتوحة
vendor/charm.land/bubbletea/v2/Taskfile.yamldeleted−38
@@ -1,38 +0,0 @@
1−# https://taskfile.dev
2−
3−version: "3"
4−
5−tasks:
6− lint:
7− desc: Run lint
8− cmds:
9− - golangci-lint run
10−
11− test:
12− desc: Run tests
13− cmds:
14− - go test -race -count 4 -cpu 1,4 ./... {{.CLI_ARGS}}
15−
16− release:
17− desc: Create and push a new tag following semver
18− vars:
19− NEXT:
20− sh: svu next --always || go run github.com/caarlos0/svu/v3@latest next --always
21− prompt: "This will release {{.NEXT}}. Continue?"
22− preconditions:
23− - sh: '[ $(git symbolic-ref --short HEAD) = "main" ]'
24− msg: Not on main branch
25− - sh: "[ $(git status --porcelain=2 | wc -l) = 0 ]"
26− msg: "Git is dirty"
27− - sh: 'gh run list --workflow build.yml --commit $(git rev-parse HEAD) --status success --json conclusion -q ".[0].conclusion" | grep -q success'
28− msg: "Test build for this commit failed or not present"
29− cmds:
30− - task: fetch-tags
31− - git commit --allow-empty -m "{{.NEXT}}"
32− - git tag --annotate --sign -m "{{.NEXT}}" {{.NEXT}} {{.CLI_ARGS}}
33− - echo "Pushing {{.NEXT}}..."
34− - git push origin main --follow-tags
35−
36− fetch-tags:
37− cmds:
38− - git fetch --tags
vendor/charm.land/bubbletea/v2/UPGRADE_GUIDE_V2.mddeleted−573
@@ -1,573 +0,0 @@
1−# Bubble Tea v2 Upgrade Guide
2−
3−This guide covers everything you need to change when upgrading from Bubble Tea v1 to v2. For a tour of all the exciting new features, check out the [What's New](https://github.com/charmbracelet/bubbletea/releases/tag/v2.0.0) doc.
4−
5−> [!NOTE]
6−> We don't take API changes lightly and strive to make the upgrade process as simple as possible. If something feels way off, let us know.
7−
8−## Migration Checklist
9−
10−Here's the short version — a checklist you can follow top to bottom. Each item links to the relevant section below.
11−
12−- [ ] [Update import paths](#import-paths)
13−- [ ] [Change `View() string` to `View() tea.View`](#view-returns-a-teaview-now)
14−- [ ] [Replace `tea.KeyMsg` with `tea.KeyPressMsg`](#key-messages)
15−- [ ] [Update key fields: `msg.Type` / `msg.Runes` / `msg.Alt`](#key-messages)
16−- [ ] [Replace `case " ":` with `case "space":`](#key-messages)
17−- [ ] [Update mouse message usage](#mouse-messages)
18−- [ ] [Rename mouse button constants](#mouse-messages)
19−- [ ] [Remove old program options → use View fields](#removed-program-options)
20−- [ ] [Remove imperative commands → use View fields](#removed-commands)
21−- [ ] [Remove old program methods](#removed-program-methods)
22−- [ ] [Rename `tea.WindowSize()` → `tea.RequestWindowSize`](#renamed-apis)
23−- [ ] [Replace `tea.Sequentially(...)` → `tea.Sequence(...)`](#renamed-apis)
24−
25−## Import Paths
26−
27−The module path changed to a vanity domain. Lip Gloss moved too.
28−
29−```go
30−// Before
31−import tea "github.com/charmbracelet/bubbletea"
32−import "github.com/charmbracelet/lipgloss"
33−
34−// After
35−import tea "charm.land/bubbletea/v2"
36−import "charm.land/lipgloss/v2"
37−```
38−
39−## The Big Idea: Declarative Views
40−
41−The single biggest change in v2 is the shift from **imperative commands** to **declarative View fields**. In v1, you'd use program options like `tea.WithAltScreen()` and commands like `tea.EnterAltScreen` to toggle terminal features on and off. In v2, you just set fields on the `tea.View` struct in your `View()` method and Bubble Tea handles the rest.
42−
43−This means: no more startup option flags, no more toggle commands, no more fighting over state. Just declare what you want and Bubble Tea will make it so.
44−
45−```go
46−// v1: imperative — scattered across NewProgram, Init, and Update
47−p := tea.NewProgram(model{}, tea.WithAltScreen(), tea.WithMouseCellMotion())
48−
49−// v2: declarative — everything lives in View()
50−func (m model) View() tea.View {
51− v := tea.NewView("Hello!")
52− v.AltScreen = true
53− v.MouseMode = tea.MouseModeCellMotion
54− return v
55−}
56−```
57−
58−Keep this in mind as you go through the rest of the guide — most of the "removed" things simply moved into View fields.
59−
60−## View Returns a `tea.View` Now
61−
62−The `View()` method no longer returns a `string`. It returns a `tea.View` struct.
63−
64−```go
65−// Before:
66−func (m model) View() string {
67− return "Hello, world!"
68−}
69−
70−// After:
71−func (m model) View() tea.View {
72− return tea.NewView("Hello, world!")
73−}
74−```
75−
76−You can also use the longer form if you need to set additional fields:
77−
78−```go
79−func (m model) View() tea.View {
80− var v tea.View
81− v.SetContent("Hello, world!")
82− v.AltScreen = true
83− return v
84−}
85−```
86−
87−The `tea.View` struct has fields for everything that used to be controlled by options and commands:
88−
89−| View Field | What It Does |
90−|---|---|
91−| `Content` | The rendered string (set via `SetContent()` or `NewView()`) |
92−| `AltScreen` | Enter/exit the alternate screen buffer |
93−| `MouseMode` | `MouseModeNone`, `MouseModeCellMotion`, or `MouseModeAllMotion` |
94−| `ReportFocus` | Enable focus/blur event reporting |
95−| `DisableBracketedPasteMode` | Disable bracketed paste |
96−| `WindowTitle` | Set the terminal window title |
97−| `Cursor` | Control cursor position, shape, color, and blink |
98−| `ForegroundColor` | Set the terminal foreground color |
99−| `BackgroundColor` | Set the terminal background color |
100−| `ProgressBar` | Show a native terminal progress bar |
101−| `KeyboardEnhancements` | Request keyboard enhancement features |
102−| `OnMouse` | Intercept mouse messages based on view content |
103−
104−## Key Messages
105−
106−Key messages got a major overhaul. Here's the quick rundown:
107−
108−### `tea.KeyMsg` is now an interface
109−
110−In v1, `tea.KeyMsg` was a struct you'd match on for key presses. In v2, it's an **interface** that covers both key presses and releases. For most code, you want `tea.KeyPressMsg`:
111−
112−```go
113−// Before:
114−case tea.KeyMsg:
115− switch msg.String() {
116− case "q":
117− return m, tea.Quit
118− }
119−
120−// After:
121−case tea.KeyPressMsg:
122− switch msg.String() {
123− case "q":
124− return m, tea.Quit
125− }
126−```
127−
128−If you want to handle both presses and releases, use `tea.KeyMsg` and type-switch inside:
129−
130−```go
131−case tea.KeyMsg:
132− switch key := msg.(type) {
133− case tea.KeyPressMsg:
134− // key press
135− case tea.KeyReleaseMsg:
136− // key release
137− }
138−```
139−
140−### Key fields changed
141−
142−| v1 | v2 | Notes |
143−|---|---|---|
144−| `msg.Type` | `msg.Code` | A `rune` — can be `tea.KeyEnter`, `'a'`, etc. |
145−| `msg.Runes` | `msg.Text` | Now a `string`, not `[]rune` |
146−| `msg.Alt` | `msg.Mod` | `msg.Mod.Contains(tea.ModAlt)` for alt, etc. |
147−| `tea.KeyRune` | — | Check `len(msg.Text) > 0` instead |
148−| `tea.KeyCtrlC` | — | Use `msg.String() == "ctrl+c"` or check `msg.Code` + `msg.Mod` |
149−
150−### Space bar changed
151−
152−Space bar now returns `"space"` instead of `" "` when using `msg.String()`:
153−
154−```go
155−// Before:
156−case " ":
157−
158−// After:
159−case "space":
160−```
161−
162−`key.Code` is still `' '` and `key.Text` is still `" "`, but `String()` returns `"space"`.
163−
164−### Ctrl+key matching
165−
166−```go
167−// Before:
168−case tea.KeyCtrlC:
169− // ctrl+c
170−
171−// After (option A — string matching):
172−case tea.KeyPressMsg:
173− switch msg.String() {
174− case "ctrl+c":
175− // ctrl+c
176− }
177−
178−// After (option B — field matching):
179−case tea.KeyPressMsg:
180− if msg.Code == 'c' && msg.Mod == tea.ModCtrl {
181− // ctrl+c
182− }
183−```
184−
185−### New Key fields
186−
187−These are new in v2 and don't have v1 equivalents:
188−
189−- **`key.ShiftedCode`** — the shifted key code (e.g., `'B'` when pressing shift+b)
190−- **`key.BaseCode`** — the key on a US PC-101 layout (handy for international keyboards)
191−- **`key.IsRepeat`** — whether the key is auto-repeating (Kitty protocol / Windows Console only)
192−- **`key.Keystroke()`** — like `String()` but always includes modifier info
193−
194−## Paste Messages
195−
196−Paste events no longer come in as `tea.KeyMsg` with a `Paste` flag. They're now their own message types:
197−
198−```go
199−// Before:
200−case tea.KeyMsg:
201− if msg.Paste {
202− m.text += string(msg.Runes)
203− }
204−
205−// After:
206−case tea.PasteMsg:
207− m.text += msg.Content
208−case tea.PasteStartMsg:
209− // paste started
210−case tea.PasteEndMsg:
211− // paste ended
212−```
213−
214−## Mouse Messages
215−
216−### `tea.MouseMsg` is now an interface
217−
218−In v1, `tea.MouseMsg` was a struct with `X`, `Y`, `Button`, etc. In v2, it's an **interface**. You get the coordinates by calling `msg.Mouse()`:
219−
220−```go
221−// Before:
222−case tea.MouseMsg:
223− x, y := msg.X, msg.Y
224−
225−// After:
226−case tea.MouseMsg:
227− mouse := msg.Mouse()
228− x, y := mouse.X, mouse.Y
229−```
230−
231−### Mouse events are split by type
232−
233−Instead of checking `msg.Action`, match on specific message types:
234−
235−```go
236−// Before:
237−case tea.MouseMsg:
238− if msg.Action == tea.MouseActionPress && msg.Button == tea.MouseButtonLeft {
239− // left click
240− }
241−
242−// After:
243−case tea.MouseClickMsg:
244− if msg.Button == tea.MouseLeft {
245− // left click
246− }
247−case tea.MouseReleaseMsg:
248− // release
249−case tea.MouseWheelMsg:
250− // scroll
251−case tea.MouseMotionMsg:
252− // movement
253−```
254−
255−### Button constants renamed
256−
257−| v1 | v2 |
258−|---|---|
259−| `tea.MouseButtonLeft` | `tea.MouseLeft` |
260−| `tea.MouseButtonRight` | `tea.MouseRight` |
261−| `tea.MouseButtonMiddle` | `tea.MouseMiddle` |
262−| `tea.MouseButtonWheelUp` | `tea.MouseWheelUp` |
263−| `tea.MouseButtonWheelDown` | `tea.MouseWheelDown` |
264−| `tea.MouseButtonWheelLeft` | `tea.MouseWheelLeft` |
265−| `tea.MouseButtonWheelRight` | `tea.MouseWheelRight` |
266−
267−### `tea.MouseEvent` → `tea.Mouse`
268−
269−The `MouseEvent` struct is gone. The new `Mouse` struct has `X`, `Y`, `Button`, and `Mod` fields.
270−
271−### Mouse mode is now a View field
272−
273−```go
274−// Before:
275−p := tea.NewProgram(model{}, tea.WithMouseCellMotion())
276−
277−// After:
278−func (m model) View() tea.View {
279− v := tea.NewView("...")
280− v.MouseMode = tea.MouseModeCellMotion
281− return v
282−}
283−```
284−
285−## Removed Program Options
286−
287−These options no longer exist. They all moved to View fields.
288−
289−| Removed Option | Do This Instead |
290−|---|---|
291−| `tea.WithAltScreen()` | `view.AltScreen = true` |
292−| `tea.WithMouseCellMotion()` | `view.MouseMode = tea.MouseModeCellMotion` |
293−| `tea.WithMouseAllMotion()` | `view.MouseMode = tea.MouseModeAllMotion` |
294−| `tea.WithReportFocus()` | `view.ReportFocus = true` |
295−| `tea.WithoutBracketedPaste()` | `view.DisableBracketedPasteMode = true` |
296−| `tea.WithInputTTY()` | Just remove it — v2 always opens the TTY for input automatically |
297−| `tea.WithANSICompressor()` | Just remove it — the new renderer handles optimization automatically |
298−
299−## Removed Commands
300−
301−These commands no longer exist. Set the corresponding View field instead.
302−
303−| Removed Command | Do This Instead |
304−|---|---|
305−| `tea.EnterAltScreen` | `view.AltScreen = true` |
306−| `tea.ExitAltScreen` | `view.AltScreen = false` |
307−| `tea.EnableMouseCellMotion` | `view.MouseMode = tea.MouseModeCellMotion` |
308−| `tea.EnableMouseAllMotion` | `view.MouseMode = tea.MouseModeAllMotion` |
309−| `tea.DisableMouse` | `view.MouseMode = tea.MouseModeNone` |
310−| `tea.HideCursor` | `view.Cursor = nil` |
311−| `tea.ShowCursor` | `view.Cursor = &tea.Cursor{...}` or `tea.NewCursor(x, y)` |
312−| `tea.EnableBracketedPaste` | `view.DisableBracketedPasteMode = false` |
313−| `tea.DisableBracketedPaste` | `view.DisableBracketedPasteMode = true` |
314−| `tea.EnableReportFocus` | `view.ReportFocus = true` |
315−| `tea.DisableReportFocus` | `view.ReportFocus = false` |
316−| `tea.SetWindowTitle("...")` | `view.WindowTitle = "..."` |
317−
318−## Removed Program Methods
319−
320−These methods on `*Program` are gone.
321−
322−| Removed Method | Do This Instead |
323−|---|---|
324−| `p.Start()` | `p.Run()` |
325−| `p.StartReturningModel()` | `p.Run()` |
326−| `p.EnterAltScreen()` | `view.AltScreen = true` in `View()` |
327−| `p.ExitAltScreen()` | `view.AltScreen = false` in `View()` |
328−| `p.EnableMouseCellMotion()` | `view.MouseMode` in `View()` |
329−| `p.DisableMouseCellMotion()` | `view.MouseMode = tea.MouseModeNone` in `View()` |
330−| `p.EnableMouseAllMotion()` | `view.MouseMode` in `View()` |
331−| `p.DisableMouseAllMotion()` | `view.MouseMode = tea.MouseModeNone` in `View()` |
332−| `p.SetWindowTitle(...)` | `view.WindowTitle` in `View()` |
333−
334−## Renamed APIs
335−
336−| v1 | v2 | Notes |
337−|---|---|---|
338−| `tea.Sequentially(...)` | `tea.Sequence(...)` | `Sequentially` was already deprecated in v1 |
339−| `tea.WindowSize()` | `tea.RequestWindowSize` | Now returns `Msg` directly, not a `Cmd` |
340−
341−## New Program Options
342−
343−These are new in v2:
344−
345−| Option | What It Does |
346−|---|---|
347−| `tea.WithColorProfile(p)` | Force a specific color profile (great for testing) |
348−| `tea.WithWindowSize(w, h)` | Set initial terminal size (great for testing) |
349−
350−## Complete Before & After
351−
352−Here's a minimal but complete program showing the most common migration patterns side by side.
353−
354−**v1:**
355−
356−```go
357−package main
358−
359−import (
360− "fmt"
361− "os"
362−
363− tea "github.com/charmbracelet/bubbletea"
364−)
365−
366−type model struct {
367− count int
368−}
369−
370−func (m model) Init() tea.Cmd {
371− return nil
372−}
373−
374−func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
375− switch msg := msg.(type) {
376− case tea.KeyMsg:
377− switch msg.String() {
378− case "q", "ctrl+c":
379− return m, tea.Quit
380− case " ":
381− m.count++
382− }
383− case tea.MouseMsg:
384− if msg.Action == tea.MouseActionPress && msg.Button == tea.MouseButtonLeft {
385− m.count++
386− }
387− }
388− return m, nil
389−}
390−
391−func (m model) View() string {
392− return fmt.Sprintf("Count: %d\n\nSpace or click to increment. q to quit.\n", m.count)
393−}
394−
395−func main() {
396− p := tea.NewProgram(model{}, tea.WithAltScreen(), tea.WithMouseCellMotion())
397− if _, err := p.Run(); err != nil {
398− fmt.Fprintln(os.Stderr, err)
399− os.Exit(1)
400− }
401−}
402−```
403−
404−**v2:**
405−
406−```go
407−package main
408−
409−import (
410− "fmt"
411− "os"
412−
413− tea "charm.land/bubbletea/v2"
414−)
415−
416−type model struct {
417− count int
418−}
419−
420−func (m model) Init() tea.Cmd {
421− return nil
422−}
423−
424−func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
425− switch msg := msg.(type) {
426− case tea.KeyPressMsg:
427− switch msg.String() {
428− case "q", "ctrl+c":
429− return m, tea.Quit
430− case "space":
431− m.count++
432− }
433− case tea.MouseClickMsg:
434− if msg.Button == tea.MouseLeft {
435− m.count++
436− }
437− }
438− return m, nil
439−}
440−
441−func (m model) View() tea.View {
442− v := tea.NewView(fmt.Sprintf("Count: %d\n\nSpace or click to increment. q to quit.\n", m.count))
443− v.AltScreen = true
444− v.MouseMode = tea.MouseModeCellMotion
445− return v
446−}
447−
448−func main() {
449− p := tea.NewProgram(model{})
450− if _, err := p.Run(); err != nil {
451− fmt.Fprintln(os.Stderr, err)
452− os.Exit(1)
453− }
454−}
455−```
456−
457−Notice how the `NewProgram` call got simpler? All the terminal feature flags moved into `View()` where they belong.
458−
459−## Quick Reference
460−
461−A flat old → new lookup table. Handy for search-and-replace and LLM-assisted migration.
462−
463−### Import Paths
464−
465−| v1 | v2 |
466−|---|---|
467−| `github.com/charmbracelet/bubbletea` | `charm.land/bubbletea/v2` |
468−| `github.com/charmbracelet/lipgloss` | `charm.land/lipgloss/v2` |
469−
470−### Model Interface
471−
472−| v1 | v2 |
473−|---|---|
474−| `View() string` | `View() tea.View` |
475−
476−### Key Events
477−
478−| v1 | v2 |
479−|---|---|
480−| `tea.KeyMsg` (struct) | `tea.KeyPressMsg` for presses, `tea.KeyMsg` (interface) for both |
481−| `msg.Type` | `msg.Code` |
482−| `msg.Runes` | `msg.Text` (string, not `[]rune`) |
483−| `msg.Alt` | `msg.Mod.Contains(tea.ModAlt)` |
484−| `tea.KeyRune` | check `len(msg.Text) > 0` |
485−| `tea.KeyCtrlC` | `msg.Code == 'c' && msg.Mod == tea.ModCtrl` or `msg.String() == "ctrl+c"` |
486−| `case " ":` (space) | `case "space":` |
487−
488−### Mouse Events
489−
490−| v1 | v2 |
491−|---|---|
492−| `tea.MouseMsg` (struct) | `tea.MouseMsg` (interface) — call `.Mouse()` for the data |
493−| `tea.MouseEvent` | `tea.Mouse` |
494−| `tea.MouseButtonLeft` | `tea.MouseLeft` |
495−| `tea.MouseButtonRight` | `tea.MouseRight` |
496−| `tea.MouseButtonMiddle` | `tea.MouseMiddle` |
497−| `tea.MouseButtonWheelUp` | `tea.MouseWheelUp` |
498−| `tea.MouseButtonWheelDown` | `tea.MouseWheelDown` |
499−| `msg.X`, `msg.Y` (direct) | `msg.Mouse().X`, `msg.Mouse().Y` |
500−
501−### Options → View Fields
502−
503−| v1 Option | v2 View Field |
504−|---|---|
505−| `tea.WithAltScreen()` | `view.AltScreen = true` |
506−| `tea.WithMouseCellMotion()` | `view.MouseMode = tea.MouseModeCellMotion` |
507−| `tea.WithMouseAllMotion()` | `view.MouseMode = tea.MouseModeAllMotion` |
508−| `tea.WithReportFocus()` | `view.ReportFocus = true` |
509−| `tea.WithoutBracketedPaste()` | `view.DisableBracketedPasteMode = true` |
510−
511−### Commands → View Fields
512−
513−| v1 Command | v2 View Field |
514−|---|---|
515−| `tea.EnterAltScreen` / `tea.ExitAltScreen` | `view.AltScreen = true/false` |
516−| `tea.EnableMouseCellMotion` | `view.MouseMode = tea.MouseModeCellMotion` |
517−| `tea.EnableMouseAllMotion` | `view.MouseMode = tea.MouseModeAllMotion` |
518−| `tea.DisableMouse` | `view.MouseMode = tea.MouseModeNone` |
519−| `tea.HideCursor` / `tea.ShowCursor` | `view.Cursor = nil` / `view.Cursor = &tea.Cursor{...}` |
520−| `tea.EnableBracketedPaste` / `tea.DisableBracketedPaste` | `view.DisableBracketedPasteMode = false/true` |
521−| `tea.EnableReportFocus` / `tea.DisableReportFocus` | `view.ReportFocus = true/false` |
522−| `tea.SetWindowTitle("...")` | `view.WindowTitle = "..."` |
523−
524−### Removed Options (No Replacement Needed)
525−
526−| v1 Option | What Happened |
527−|---|---|
528−| `tea.WithInputTTY()` | v2 always opens the TTY for input automatically |
529−| `tea.WithANSICompressor()` | The new renderer handles optimization automatically |
530−
531−### Removed Program Methods
532−
533−| v1 Method | v2 Replacement |
534−|---|---|
535−| `p.Start()` | `p.Run()` |
536−| `p.StartReturningModel()` | `p.Run()` |
537−| `p.EnterAltScreen()` | `view.AltScreen = true` in `View()` |
538−| `p.ExitAltScreen()` | `view.AltScreen = false` in `View()` |
539−| `p.EnableMouseCellMotion()` | `view.MouseMode` in `View()` |
540−| `p.DisableMouseCellMotion()` | `view.MouseMode = tea.MouseModeNone` in `View()` |
541−| `p.EnableMouseAllMotion()` | `view.MouseMode` in `View()` |
542−| `p.DisableMouseAllMotion()` | `view.MouseMode = tea.MouseModeNone` in `View()` |
543−| `p.SetWindowTitle(...)` | `view.WindowTitle` in `View()` |
544−
545−### Other Renames
546−
547−| v1 | v2 |
548−|---|---|
549−| `tea.Sequentially(...)` | `tea.Sequence(...)` |
550−| `tea.WindowSize()` | `tea.RequestWindowSize` (now returns `Msg`, not `Cmd`) |
551−
552−### New Program Options
553−
554−| Option | Description |
555−|---|---|
556−| `tea.WithColorProfile(p)` | Force a specific color profile |
557−| `tea.WithWindowSize(w, h)` | Set initial window size (great for testing) |
558−
559−## Feedback
560−
561−Have thoughts on the v2 upgrade? We'd _love_ to hear about it. Let us know on…
562−
563−- [Discord](https://charm.land/chat)
564−- [Matrix](https://charm.land/matrix)
565−- [Email](mailto:vt100@charm.land)
566−
567−---
568−
569−Part of [Charm](https://charm.land).
570−
571−<a href="https://charm.land/"><img alt="The Charm logo" src="https://stuff.charm.sh/charm-badge.jpg" width="400"></a>
572−
573−Charm热爱开源 • Charm loves open source • نحنُ نحب المصادر المفتوحة
vendor/charm.land/bubbletea/v2/clipboard.godeleted−70
@@ -1,70 +0,0 @@
1−package tea
2−
3−// ClipboardMsg is a clipboard read message event. This message is emitted when
4−// a terminal receives an OSC52 clipboard read message event.
5−type ClipboardMsg struct {
6− Content string
7− Selection byte
8−}
9−
10−// Clipboard returns the clipboard selection type. This will be one of the
11−// following values:
12−//
13−// - c: System clipboard.
14−// - p: Primary clipboard (X11/Wayland only).
15−func (e ClipboardMsg) Clipboard() byte {
16− return e.Selection
17−}
18−
19−// String returns the string representation of the clipboard message.
20−func (e ClipboardMsg) String() string {
21− return e.Content
22−}
23−
24−// setClipboardMsg is an internal message used to set the system clipboard
25−// using OSC52.
26−type setClipboardMsg string
27−
28−// SetClipboard produces a command that sets the system clipboard using OSC52.
29−// Note that OSC52 is not supported in all terminals.
30−func SetClipboard(s string) Cmd {
31− return func() Msg {
32− return setClipboardMsg(s)
33− }
34−}
35−
36−// readClipboardMsg is an internal message used to read the system clipboard
37−// using OSC52.
38−type readClipboardMsg struct{}
39−
40−// ReadClipboard produces a command that reads the system clipboard using OSC52.
41−// Note that OSC52 is not supported in all terminals.
42−func ReadClipboard() Msg {
43− return readClipboardMsg{}
44−}
45−
46−// setPrimaryClipboardMsg is an internal message used to set the primary
47−// clipboard using OSC52.
48−type setPrimaryClipboardMsg string
49−
50−// SetPrimaryClipboard produces a command that sets the primary clipboard using
51−// OSC52. Primary clipboard selection is a feature present in X11 and Wayland
52−// only.
53−// Note that OSC52 is not supported in all terminals.
54−func SetPrimaryClipboard(s string) Cmd {
55− return func() Msg {
56− return setPrimaryClipboardMsg(s)
57− }
58−}
59−
60−// readPrimaryClipboardMsg is an internal message used to read the primary
61−// clipboard using OSC52.
62−type readPrimaryClipboardMsg struct{}
63−
64−// ReadPrimaryClipboard produces a command that reads the primary clipboard
65−// using OSC52. Primary clipboard selection is a feature present in X11 and
66−// Wayland only.
67−// Note that OSC52 is not supported in all terminals.
68−func ReadPrimaryClipboard() Msg {
69− return readPrimaryClipboardMsg{}
70−}
vendor/charm.land/bubbletea/v2/color.godeleted−91
@@ -1,91 +0,0 @@
1−package tea
2−
3−import (
4− "image/color"
5−
6− uv "github.com/charmbracelet/ultraviolet"
7−)
8−
9−// backgroundColorMsg is a message that requests the terminal background color.
10−type backgroundColorMsg struct{}
11−
12−// RequestBackgroundColor is a command that requests the terminal background color.
13−func RequestBackgroundColor() Msg {
14− return backgroundColorMsg{}
15−}
16−
17−// foregroundColorMsg is a message that requests the terminal foreground color.
18−type foregroundColorMsg struct{}
19−
20−// RequestForegroundColor is a command that requests the terminal foreground color.
21−func RequestForegroundColor() Msg {
22− return foregroundColorMsg{}
23−}
24−
25−// cursorColorMsg is a message that requests the terminal cursor color.
26−type cursorColorMsg struct{}
27−
28−// RequestCursorColor is a command that requests the terminal cursor color.
29−func RequestCursorColor() Msg {
30− return cursorColorMsg{}
31−}
32−
33−// ForegroundColorMsg represents a foreground color message. This message is
34−// emitted when the program requests the terminal foreground color with the
35−// [RequestForegroundColor] Cmd.
36−type ForegroundColorMsg struct{ color.Color }
37−
38−// String returns the hex representation of the color.
39−func (e ForegroundColorMsg) String() string {
40− return uv.ForegroundColorEvent(e).String()
41−}
42−
43−// IsDark returns whether the color is dark.
44−func (e ForegroundColorMsg) IsDark() bool {
45− return uv.ForegroundColorEvent(e).IsDark()
46−}
47−
48−// BackgroundColorMsg represents a background color message. This message is
49−// emitted when the program requests the terminal background color with the
50−// [RequestBackgroundColor] Cmd.
51−//
52−// This is commonly used in [Update.Init] to get the terminal background color
53−// for style definitions. For that you'll want to call
54−// [BackgroundColorMsg.IsDark] to determine if the color is dark or light. For
55−// example:
56−//
57−// func (m Model) Init() (Model, Cmd) {
58−// return m, RequestBackgroundColor()
59−// }
60−//
61−// func (m Model) Update(msg Msg) (Model, Cmd) {
62−// switch msg := msg.(type) {
63−// case BackgroundColorMsg:
64−// m.styles = newStyles(msg.IsDark())
65−// }
66−// }
67−type BackgroundColorMsg struct{ color.Color }
68−
69−// String returns the hex representation of the color.
70−func (e BackgroundColorMsg) String() string {
71− return uv.BackgroundColorEvent(e).String()
72−}
73−
74−// IsDark returns whether the color is dark.
75−func (e BackgroundColorMsg) IsDark() bool {
76− return uv.BackgroundColorEvent(e).IsDark()
77−}
78−
79−// CursorColorMsg represents a cursor color change message. This message is
80−// emitted when the program requests the terminal cursor color.
81−type CursorColorMsg struct{ color.Color }
82−
83−// String returns the hex representation of the color.
84−func (e CursorColorMsg) String() string {
85− return uv.CursorColorEvent(e).String()
86−}
87−
88−// IsDark returns whether the color is dark.
89−func (e CursorColorMsg) IsDark() bool {
90− return uv.CursorColorEvent(e).IsDark()
91−}
vendor/charm.land/bubbletea/v2/commands.godeleted−175
@@ -1,175 +0,0 @@
1−package tea
2−
3−import (
4− "time"
5−)
6−
7−// Batch performs a bunch of commands concurrently with no ordering guarantees
8−// about the results. Use a Batch to return several commands.
9−//
10−// Example:
11−//
12−// func (m model) Init() (Model, Cmd) {
13−// return m, tea.Batch(someCommand, someOtherCommand)
14−// }
15−func Batch(cmds ...Cmd) Cmd {
16− return compactCmds[BatchMsg](cmds)
17−}
18−
19−// BatchMsg is a message used to perform a bunch of commands concurrently with
20−// no ordering guarantees. You can send a BatchMsg with Batch.
21−type BatchMsg []Cmd
22−
23−// Sequence runs the given commands one at a time, in order. Contrast this with
24−// Batch, which runs commands concurrently.
25−func Sequence(cmds ...Cmd) Cmd {
26− return compactCmds[sequenceMsg](cmds)
27−}
28−
29−// sequenceMsg is used internally to run the given commands in order.
30−type sequenceMsg []Cmd
31−
32−// compactCmds ignores any nil commands in cmds, and returns the most direct
33−// command possible. That is, considering the non-nil commands, if there are
34−// none it returns nil, if there is exactly one it returns that command
35−// directly, else it returns the non-nil commands as type T.
36−func compactCmds[T ~[]Cmd](cmds []Cmd) Cmd {
37− var validCmds []Cmd
38− for _, c := range cmds {
39− if c == nil {
40− continue
41− }
42− validCmds = append(validCmds, c)
43− }
44− switch len(validCmds) {
45− case 0:
46− return nil
47− case 1:
48− return validCmds[0]
49− default:
50− return func() Msg {
51− return T(validCmds)
52− }
53− }
54−}
55−
56−// Every is a command that ticks in sync with the system clock. So, if you
57−// wanted to tick with the system clock every second, minute or hour you
58−// could use this. It's also handy for having different things tick in sync.
59−//
60−// Because we're ticking with the system clock the tick will likely not run for
61−// the entire specified duration. For example, if we're ticking for one minute
62−// and the clock is at 12:34:20 then the next tick will happen at 12:35:00, 40
63−// seconds later.
64−//
65−// To produce the command, pass a duration and a function which returns
66−// a message containing the time at which the tick occurred.
67−//
68−// type TickMsg time.Time
69−//
70−// cmd := Every(time.Second, func(t time.Time) Msg {
71−// return TickMsg(t)
72−// })
73−//
74−// Beginners' note: Every sends a single message and won't automatically
75−// dispatch messages at an interval. To do that, you'll want to return another
76−// Every command after receiving your tick message. For example:
77−//
78−// type TickMsg time.Time
79−//
80−// // Send a message every second.
81−// func tickEvery() Cmd {
82−// return Every(time.Second, func(t time.Time) Msg {
83−// return TickMsg(t)
84−// })
85−// }
86−//
87−// func (m model) Init() (Model, Cmd) {
88−// // Start ticking.
89−// return m, tickEvery()
90−// }
91−//
92−// func (m model) Update(msg Msg) (Model, Cmd) {
93−// switch msg.(type) {
94−// case TickMsg:
95−// // Return your Every command again to loop.
96−// return m, tickEvery()
97−// }
98−// return m, nil
99−// }
100−//
101−// Every is analogous to Tick in the Elm Architecture.
102−func Every(duration time.Duration, fn func(time.Time) Msg) Cmd {
103− n := time.Now()
104− d := n.Truncate(duration).Add(duration).Sub(n)
105− t := time.NewTimer(d)
106− return func() Msg {
107− ts := <-t.C
108− t.Stop()
109− for len(t.C) > 0 {
110− <-t.C
111− }
112− return fn(ts)
113− }
114−}
115−
116−// Tick produces a command at an interval independent of the system clock at
117−// the given duration. That is, the timer begins precisely when invoked,
118−// and runs for its entire duration.
119−//
120−// To produce the command, pass a duration and a function which returns
121−// a message containing the time at which the tick occurred.
122−//
123−// type TickMsg time.Time
124−//
125−// cmd := Tick(time.Second, func(t time.Time) Msg {
126−// return TickMsg(t)
127−// })
128−//
129−// Beginners' note: Tick sends a single message and won't automatically
130−// dispatch messages at an interval. To do that, you'll want to return another
131−// Tick command after receiving your tick message. For example:
132−//
133−// type TickMsg time.Time
134−//
135−// func doTick() Cmd {
136−// return Tick(time.Second, func(t time.Time) Msg {
137−// return TickMsg(t)
138−// })
139−// }
140−//
141−// func (m model) Init() (Model, Cmd) {
142−// // Start ticking.
143−// return m, doTick()
144−// }
145−//
146−// func (m model) Update(msg Msg) (Model, Cmd) {
147−// switch msg.(type) {
148−// case TickMsg:
149−// // Return your Tick command again to loop.
150−// return m, doTick()
151−// }
152−// return m, nil
153−// }
154−func Tick(d time.Duration, fn func(time.Time) Msg) Cmd {
155− t := time.NewTimer(d)
156− return func() Msg {
157− ts := <-t.C
158− t.Stop()
159− for len(t.C) > 0 {
160− <-t.C
161− }
162− return fn(ts)
163− }
164−}
165−
166−type windowSizeMsg struct{}
167−
168−// RequestWindowSize is a command that queries the terminal for its current
169−// size. It delivers the results to Update via a [WindowSizeMsg]. Keep in mind
170−// that WindowSizeMsgs will automatically be delivered to Update when the
171−// [Program] starts and when the window dimensions change so in many cases you
172−// will not need to explicitly invoke this command.
173−func RequestWindowSize() Msg {
174− return windowSizeMsg{}
175−}
vendor/charm.land/bubbletea/v2/cursed_renderer.godeleted−860
@@ -1,860 +0,0 @@
1−package tea
2−
3−import (
4− "bytes"
5− "fmt"
6− "image/color"
7− "io"
8− "runtime"
9− "strings"
10− "sync"
11−
12− "github.com/charmbracelet/colorprofile"
13− uv "github.com/charmbracelet/ultraviolet"
14− "github.com/charmbracelet/x/ansi"
15− "github.com/lucasb-eyer/go-colorful"
16−)
17−
18−type cursedRenderer struct {
19− w io.Writer
20− buf bytes.Buffer // updates buffer to be flushed to [w]
21− scr *uv.TerminalRenderer
22− cellbuf uv.ScreenBuffer
23− lastView *View
24− env []string
25− term string // the terminal type $TERM
26− width, height int
27− mu sync.Mutex
28− profile colorprofile.Profile
29− logger uv.Logger
30− view View
31− hardTabs bool // whether to use hard tabs to optimize cursor movements
32− backspace bool // whether to use backspace to optimize cursor movements
33− mapnl bool
34− syncdUpdates bool // whether to use synchronized output mode for updates
35− starting bool // indicates whether the renderer is starting after being stopped
36−}
37−
38−var _ renderer = &cursedRenderer{}
39−
40−func newCursedRenderer(w io.Writer, env []string, width, height int) (s *cursedRenderer) {
41− s = new(cursedRenderer)
42− s.w = w
43− s.env = env
44− s.term = uv.Environ(env).Getenv("TERM")
45− s.width, s.height = width, height // This needs to happen before [cursedRenderer.reset].
46− s.cellbuf = uv.NewScreenBuffer(s.width, s.height)
47− reset(s)
48− return
49−}
50−
51−// setLogger sets the logger for the renderer.
52−func (s *cursedRenderer) setLogger(logger uv.Logger) {
53− s.mu.Lock()
54− s.logger = logger
55− s.mu.Unlock()
56−}
57−
58−// setOptimizations sets the cursor movement optimizations.
59−func (s *cursedRenderer) setOptimizations(hardTabs, backspace, mapnl bool) {
60− s.mu.Lock()
61− s.hardTabs = hardTabs
62− s.backspace = backspace
63− s.mapnl = mapnl
64− if s.hardTabs {
65− s.scr.SetTabStops(s.width)
66− } else {
67− s.scr.SetTabStops(-1)
68− }
69− s.scr.SetBackspace(s.backspace)
70− s.scr.SetMapNewline(s.mapnl)
71− s.mu.Unlock()
72−}
73−
74−// start implements renderer.
75−func (s *cursedRenderer) start() {
76− s.mu.Lock()
77− defer s.mu.Unlock()
78−
79− // Mark that we're starting. This is used to restore some state when
80− // starting the renderer again after it was stopped.
81− s.starting = true
82−
83− if s.lastView == nil {
84− return
85− }
86−
87− if s.lastView.AltScreen {
88− enableAltScreen(s, true, true)
89− }
90− enableTextCursor(s, s.lastView.Cursor != nil)
91− if s.lastView.Cursor != nil {
92− if s.lastView.Cursor.Color != nil {
93− col, ok := colorful.MakeColor(s.lastView.Cursor.Color)
94− if ok {
95− _, _ = s.scr.WriteString(ansi.SetCursorColor(col.Hex()))
96− }
97− }
98− curStyle := encodeCursorStyle(s.lastView.Cursor.Shape, s.lastView.Cursor.Blink)
99− if curStyle != 0 && curStyle != 1 {
100− _, _ = s.scr.WriteString(ansi.SetCursorStyle(curStyle))
101− }
102− }
103− if s.lastView.ForegroundColor != nil {
104− col, ok := colorful.MakeColor(s.lastView.ForegroundColor)
105− if ok {
106− _, _ = s.scr.WriteString(ansi.SetForegroundColor(col.Hex()))
107− }
108− }
109− if s.lastView.BackgroundColor != nil {
110− col, ok := colorful.MakeColor(s.lastView.BackgroundColor)
111− if ok {
112− _, _ = s.scr.WriteString(ansi.SetBackgroundColor(col.Hex()))
113− }
114− }
115− if !s.lastView.DisableBracketedPasteMode {
116− _, _ = s.scr.WriteString(ansi.SetModeBracketedPaste)
117− }
118− if s.lastView.ReportFocus {
119− _, _ = s.scr.WriteString(ansi.SetModeFocusEvent)
120− }
121− switch s.lastView.MouseMode {
122− case MouseModeNone:
123− case MouseModeCellMotion:
124− _, _ = s.scr.WriteString(ansi.SetModeMouseButtonEvent + ansi.SetModeMouseExtSgr)
125− case MouseModeAllMotion:
126− _, _ = s.scr.WriteString(ansi.SetModeMouseAnyEvent + ansi.SetModeMouseExtSgr)
127− }
128− if s.lastView.WindowTitle != "" {
129− _, _ = s.scr.WriteString(ansi.SetWindowTitle(s.lastView.WindowTitle))
130− }
131− if s.lastView.ProgressBar != nil {
132− setProgressBar(s, s.lastView.ProgressBar)
133− }
134− // Enable modifyOtherKeys and Kitty keyboard protocol.
135− // Both can coexist; terminals ignore what they don't support.
136− _, _ = s.scr.WriteString(ansi.SetModifyOtherKeys2)
137−
138− kittyFlags := keyboardEnhancementsFlags(s.lastView.KeyboardEnhancements)
139− _, _ = s.scr.WriteString(ansi.KittyKeyboard(kittyFlags, 1))
140−}
141−
142−// close implements renderer.
143−func (s *cursedRenderer) close() (err error) {
144− s.mu.Lock()
145− defer s.mu.Unlock()
146−
147− // Exit the altScreen and show cursor before closing. It's important that
148− // we don't change the [cursedRenderer] altScreen and cursorHidden states
149− // so that we can restore them when we start the renderer again. This is
150− // used when the user suspends the program and then resumes it.
151− if lv := s.lastView; lv != nil { //nolint:nestif
152− // NOTE: The Kitty keyboard specs specify that the terminal should have
153− // two registries for the main and alt screens. We disable keyboard
154− // enhancements whenever we enter/exit alt screen mode in
155− // [cursedRenderer.flush].
156− // Here, we reset the keyboard protocol of the last screen used
157− // assuming the other screen is already reset when we switched screens.
158− _, _ = s.buf.WriteString(ansi.ResetModifyOtherKeys)
159− _, _ = s.buf.WriteString(ansi.KittyKeyboard(0, 1))
160−
161− // Go to the bottom of the screen.
162− // We need to go to the bottom of the screen regardless of whether
163− // we're in alt screen mode or not to avoid leaving the cursor in the
164− // middle in terminals that don't support alt screen mode.
165− s.scr.MoveTo(0, s.cellbuf.Height()-1)
166− _ = s.scr.Flush() // we need to flush to write the cursor movement
167− if lv.AltScreen {
168− enableAltScreen(s, false, true)
169− } else {
170− _, _ = s.scr.WriteString(ansi.EraseScreenBelow)
171− }
172− if lv.Cursor == nil {
173− enableTextCursor(s, true)
174− }
175− if !lv.DisableBracketedPasteMode {
176− _, _ = s.scr.WriteString(ansi.ResetModeBracketedPaste)
177− }
178− if lv.ReportFocus {
179− _, _ = s.scr.WriteString(ansi.ResetModeFocusEvent)
180− }
181− switch lv.MouseMode {
182− case MouseModeNone:
183− case MouseModeCellMotion, MouseModeAllMotion:
184− _, _ = s.scr.WriteString(ansi.ResetModeMouseButtonEvent +
185− ansi.ResetModeMouseAnyEvent +
186− ansi.ResetModeMouseExtSgr)
187− }
188−
189− if lv.WindowTitle != "" {
190− // Clear the window title if it was set.
191− _, _ = s.scr.WriteString(ansi.SetWindowTitle(""))
192− }
193− if lc := lv.Cursor; lc != nil {
194− curShape := encodeCursorStyle(lc.Shape, lc.Blink)
195− if curShape != 0 && curShape != 1 {
196− // Reset the cursor style to default if it was set to something other
197− // blinking block.
198− _, _ = s.scr.WriteString(ansi.SetCursorStyle(0))
199− }
200−
201− if lc.Color != nil {
202− _, _ = s.scr.WriteString(ansi.ResetCursorColor)
203− }
204− }
205−
206− if lv.BackgroundColor != nil {
207− _, _ = s.scr.WriteString(ansi.ResetBackgroundColor)
208− }
209− if lv.ForegroundColor != nil {
210− _, _ = s.scr.WriteString(ansi.ResetForegroundColor)
211− }
212− if lv.ProgressBar != nil && lv.ProgressBar.State != ProgressBarNone {
213− _, _ = s.scr.WriteString(ansi.ResetProgressBar)
214− }
215− }
216−
217− if s.cellbuf.Method == ansi.GraphemeWidth {
218− // Make sure to turn off Unicode mode (2027)
219− _, _ = s.scr.WriteString(ansi.ResetModeUnicodeCore)
220− }
221−
222− if err := s.scr.Flush(); err != nil {
223− return fmt.Errorf("bubbletea: error closing screen writer: %w", err)
224− }
225−
226− if s.buf.Len() > 0 {
227− if s.logger != nil {
228− s.logger.Printf("output: %q", s.buf.String())
229− }
230− if _, err := io.Copy(s.w, &s.buf); err != nil {
231− return fmt.Errorf("bubbletea: error writing to screen: %w", err)
232− }
233− s.buf.Reset()
234− }
235−
236− x, y := s.scr.Position()
237−
238− // We want to clear the renderer state but not the cursor position. This is
239− // because we might be putting the tea process in the background, run some
240− // other process, and then return to the tea process. We want to keep the
241− // cursor position so that we can continue where we left off.
242− reset(s)
243− s.scr.SetPosition(x, y)
244−
245− return nil
246−}
247−
248−// writeString implements renderer.
249−func (s *cursedRenderer) writeString(str string) (int, error) {
250− s.mu.Lock()
251− defer s.mu.Unlock()
252−
253− return s.scr.WriteString(str) //nolint:wrapcheck
254−}
255−
256−// flush implements renderer.
257−func (s *cursedRenderer) flush(closing bool) error {
258− s.mu.Lock()
259− defer s.mu.Unlock()
260−
261− view := s.view
262− frameArea := uv.Rect(0, 0, s.width, s.height)
263− if len(view.Content) == 0 {
264− // If the component is nil, we should clear the screen buffer.
265− frameArea.Max.Y = 0
266− }
267−
268− content := uv.NewStyledString(view.Content)
269− if !view.AltScreen {
270− // We need to resizes the screen based on the frame height and
271− // terminal width. This is because the frame height can change based on
272− // the content of the frame. For example, if the frame contains a list
273− // of items, the height of the frame will be the number of items in the
274− // list. This is different from the alt screen buffer, which has a
275− // fixed height and width.
276− frameHeight := content.Height()
277− if frameHeight != frameArea.Dy() {
278− frameArea.Max.Y = frameHeight
279− }
280− }
281−
282− // Restore tab stops if we have tab optimizations enabled.
283− if s.starting && s.hardTabs {
284− _, _ = s.scr.WriteString(ansi.SetTabEvery8Columns)
285− }
286−
287− if !s.starting && !closing && s.lastView != nil && viewEquals(s.lastView, &view) && frameArea == s.cellbuf.Bounds() {
288− // No changes, nothing to do.
289− return nil
290− }
291−
292− // We're no longer starting.
293− s.starting = false
294−
295− if frameArea != s.cellbuf.Bounds() {
296− s.scr.Erase() // Force a full redraw to avoid artifacts.
297−
298− // We need to reset the touched lines buffer to match the new height.
299− s.cellbuf.Touched = nil
300−
301− // Resize the screen buffer to match the frame area. This is necessary
302− // to ensure that the screen buffer is the same size as the frame area
303− // and to avoid rendering issues when the frame area is smaller than
304− // the screen buffer.
305− s.cellbuf.Resize(frameArea.Dx(), frameArea.Dy())
306− }
307−
308− // Clear our screen buffer before copying the new frame into it to ensure
309− // we erase any old content.
310− s.cellbuf.Clear()
311− content.Draw(s.cellbuf, s.cellbuf.Bounds())
312−
313− // If the frame height is greater than the screen height, we drop the
314− // lines from the top of the buffer.
315− if frameHeight := frameArea.Dy(); frameHeight > s.height {
316− s.cellbuf.Lines = s.cellbuf.Lines[frameHeight-s.height:]
317− }
318−
319− // Alt screen mode.
320− shouldUpdateAltScreen := (s.lastView == nil && view.AltScreen) || (s.lastView != nil && s.lastView.AltScreen != view.AltScreen)
321− if shouldUpdateAltScreen {
322− // We want to enter/exit altscreen mode but defer writing the actual
323− // sequences until we flush the rest of the updates. This is because we
324− // control the cursor visibility and we need to ensure that happens
325− // after entering/exiting alt screen mode. Some terminals have
326− // different cursor visibility states for main and alt screen modes and
327− // this ensures we handle that correctly.
328− enableAltScreen(s, view.AltScreen, false)
329− }
330−
331− // bracketed paste mode.
332− if s.lastView == nil || view.DisableBracketedPasteMode != s.lastView.DisableBracketedPasteMode {
333− if !view.DisableBracketedPasteMode {
334− _, _ = s.scr.WriteString(ansi.SetModeBracketedPaste)
335− } else if s.lastView != nil {
336− _, _ = s.scr.WriteString(ansi.ResetModeBracketedPaste)
337− }
338− }
339−
340− // report focus events mode.
341− if s.lastView == nil || s.lastView.ReportFocus != view.ReportFocus {
342− if view.ReportFocus {
343− _, _ = s.scr.WriteString(ansi.SetModeFocusEvent)
344− } else if s.lastView != nil {
345− _, _ = s.scr.WriteString(ansi.ResetModeFocusEvent)
346− }
347− }
348−
349− // mouse events mode.
350− if s.lastView == nil || view.MouseMode != s.lastView.MouseMode {
351− switch view.MouseMode {
352− case MouseModeNone:
353− if s.lastView != nil && s.lastView.MouseMode != MouseModeNone {
354− _, _ = s.scr.WriteString(ansi.ResetModeMouseButtonEvent +
355− ansi.ResetModeMouseAnyEvent +
356− ansi.ResetModeMouseExtSgr)
357− }
358− case MouseModeCellMotion:
359− if s.lastView != nil && s.lastView.MouseMode == MouseModeAllMotion {
360− _, _ = s.scr.WriteString(ansi.ResetModeMouseAnyEvent)
361− }
362− _, _ = s.scr.WriteString(ansi.SetModeMouseButtonEvent + ansi.SetModeMouseExtSgr)
363− case MouseModeAllMotion:
364− if s.lastView != nil && s.lastView.MouseMode == MouseModeCellMotion {
365− _, _ = s.scr.WriteString(ansi.ResetModeMouseButtonEvent)
366− }
367− _, _ = s.scr.WriteString(ansi.SetModeMouseAnyEvent + ansi.SetModeMouseExtSgr)
368− }
369− }
370−
371− // Set window title.
372− if s.lastView == nil || view.WindowTitle != s.lastView.WindowTitle {
373− if s.lastView != nil || view.WindowTitle != "" {
374− _, _ = s.scr.WriteString(ansi.SetWindowTitle(view.WindowTitle))
375− }
376− }
377−
378− // kitty keyboard protocol
379− if s.lastView == nil || view.KeyboardEnhancements != s.lastView.KeyboardEnhancements ||
380− view.AltScreen != s.lastView.AltScreen {
381− // NOTE: We need to reset the keyboard protocol when switching
382− // between main and alt screen. This is because the specs specify
383− // two different states for the main and alt screen.
384−
385− // Enable modifyOtherKeys and Kitty keyboard protocol.
386− _, _ = s.scr.WriteString(ansi.SetModifyOtherKeys2)
387−
388− kittyFlags := keyboardEnhancementsFlags(view.KeyboardEnhancements)
389− _, _ = s.scr.WriteString(ansi.KittyKeyboard(kittyFlags, 1))
390− if !closing {
391− // Request keyboard enhancements when they change
392− _, _ = s.scr.WriteString(ansi.RequestKittyKeyboard)
393− }
394− }
395−
396− // Set terminal colors.
397− var (
398− cc, lcc color.Color
399− lfg, lbg color.Color
400− )
401− if view.Cursor != nil {
402− cc = view.Cursor.Color
403− }
404− if s.lastView != nil {
405− if s.lastView.Cursor != nil {
406− lcc = s.lastView.Cursor.Color
407− }
408− lfg = s.lastView.ForegroundColor
409− lbg = s.lastView.BackgroundColor
410− }
411− for _, c := range []struct {
412− newColor color.Color
413− oldColor color.Color
414− reset string
415− setter func(string) string
416− }{
417− {newColor: cc, oldColor: lcc, reset: ansi.ResetCursorColor, setter: ansi.SetCursorColor},
418− {newColor: view.ForegroundColor, oldColor: lfg, reset: ansi.ResetForegroundColor, setter: ansi.SetForegroundColor},
419− {newColor: view.BackgroundColor, oldColor: lbg, reset: ansi.ResetBackgroundColor, setter: ansi.SetBackgroundColor},
420− } {
421− if c.newColor != c.oldColor {
422− if c.newColor == nil {
423− // Reset the color if it was set to nil.
424− _, _ = s.scr.WriteString(c.reset)
425− } else {
426− // Set the color.
427− col, ok := colorful.MakeColor(c.newColor)
428− if ok {
429− _, _ = s.scr.WriteString(c.setter(col.Hex()))
430− }
431− }
432− }
433− }
434−
435− // Set cursor shape and blink if set.
436− var ccStyle, lcStyle int
437− var lcur *Cursor
438− ccur := view.Cursor
439− if lv := s.lastView; lv != nil {
440− lcur = lv.Cursor
441− }
442− if ccur != nil {
443− ccStyle = encodeCursorStyle(ccur.Shape, ccur.Blink)
444− }
445− if lcur != nil {
446− lcStyle = encodeCursorStyle(lcur.Shape, lcur.Blink)
447− }
448− if ccStyle != lcStyle {
449− _, _ = s.scr.WriteString(ansi.SetCursorStyle(ccStyle))
450− }
451−
452− // Render progress bar if it's changed.
453− if (s.lastView == nil && view.ProgressBar != nil && view.ProgressBar.State != ProgressBarNone) ||
454− (s.lastView != nil && (s.lastView.ProgressBar == nil) != (view.ProgressBar == nil)) ||
455− (s.lastView != nil && s.lastView.ProgressBar != nil && view.ProgressBar != nil && *s.lastView.ProgressBar != *view.ProgressBar) {
456− // Render or clear the progress bar if it was added or removed.
457− setProgressBar(s, view.ProgressBar)
458− }
459−
460− // Render and queue changes to the screen buffer.
461− s.scr.Render(s.cellbuf.RenderBuffer)
462−
463− if cur := view.Cursor; cur != nil {
464− // MoveTo must come after [uv.TerminalRenderer.Render] because the
465− // cursor position might get updated during rendering.
466− s.scr.MoveTo(view.Cursor.X, view.Cursor.Y)
467− } else if !view.AltScreen {
468− // We don't want the cursor to be dangling at the end of the line in
469− // inline mode because it can cause unwanted line wraps in some
470− // terminals. So we move it to the beginning of the next line if
471− // necessary.
472− // This is only needed when the cursor is hidden because when it's
473− // visible, we already set its position above.
474− x, y := s.scr.Position()
475− if x >= s.width-1 {
476− s.scr.MoveTo(0, y)
477− }
478− }
479−
480− if err := s.scr.Flush(); err != nil {
481− return fmt.Errorf("bubbletea: error flushing screen writer: %w", err)
482− }
483−
484− // Check if we have any render updates to flush.
485− hasUpdates := s.buf.Len() > 0
486−
487− // Cursor visibility.
488− didShowCursor := s.lastView != nil && s.lastView.Cursor != nil
489− showCursor := view.Cursor != nil
490− hideCursor := !showCursor
491− shouldUpdateCursorVis := (s.lastView == nil || didShowCursor != showCursor) || shouldUpdateAltScreen
492−
493− // Build final output buffer with synchronized output or hide/show cursor
494− // updates. But first, enter/exit alt screen mode if needed.
495− //
496− // Here, we have two scenarios:
497− // 1. Synchronized output updates are supported. In this case, we want to
498− // wrap all updates, unless it's just a cursor visibility change, in
499− // synchronized output mode. This is because synchronized output mode
500− // takes care of rendering the updates atomically. In the case of
501− // just a cursor visibility change, we don't need to enter
502− // synchronized output mode because it's just a single sequence to
503− // flush out to the terminal.
504− //
505− // 2. We don't have synchronized output updates support. In this case, and
506− // if the cursor is visible or should be visible, we wrap the updates
507− // with hide/show cursor sequences to try and mitigate cursor
508− // flickering. This is terminal dependent and may still result in
509− // flickering in some terminals. It's the best effort we can do instead
510− // of showing the cursor flying around the screen during updates.
511−
512− var buf bytes.Buffer
513− if shouldUpdateAltScreen {
514− // We always disable keyboard enhancements when switching screens
515− // because the terminal is expected to have two different keyboard
516− // registries for main and alt screens.
517− _, _ = buf.WriteString(ansi.ResetModifyOtherKeys)
518− _, _ = buf.WriteString(ansi.KittyKeyboard(0, 1))
519− if view.AltScreen {
520− // Entering alt screen mode.
521− buf.WriteString(ansi.SetModeAltScreenSaveCursor)
522− } else {
523− // Exiting alt screen mode.
524− buf.WriteString(ansi.ResetModeAltScreenSaveCursor)
525− }
526− }
527−
528− if s.syncdUpdates {
529− if hasUpdates {
530− // We have synchronized output updates enabled.
531− buf.WriteString(ansi.SetModeSynchronizedOutput)
532− }
533− if shouldUpdateCursorVis && hideCursor {
534− // Do we need to update the cursor visibility to hidden? If so, do
535− // it here before writing any updates to the buffer.
536− _, _ = buf.WriteString(ansi.ResetModeTextCursorEnable)
537− }
538− } else if (shouldUpdateCursorVis && hideCursor) || (hasUpdates && showCursor && didShowCursor) {
539− _, _ = buf.WriteString(ansi.ResetModeTextCursorEnable)
540− }
541−
542− if hasUpdates {
543− buf.Write(s.buf.Bytes())
544− }
545−
546− if s.syncdUpdates {
547− if shouldUpdateCursorVis && showCursor {
548− // Do we need to update the cursor visibility to visible? If so, do
549− // it here after writing any updates to the buffer.
550− _, _ = buf.WriteString(ansi.SetModeTextCursorEnable)
551− }
552− if hasUpdates {
553− // Close synchronized output mode.
554− buf.WriteString(ansi.ResetModeSynchronizedOutput)
555− }
556− } else if (shouldUpdateCursorVis && showCursor) || (hasUpdates && showCursor && didShowCursor) {
557− _, _ = buf.WriteString(ansi.SetModeTextCursorEnable)
558− }
559−
560− // Reset internal screen renderer buffer.
561− s.buf.Reset()
562−
563− // If our updates flush buffer has content, write it to the output writer.
564− if buf.Len() > 0 {
565− if s.logger != nil {
566− s.logger.Printf("output: %q", buf.String())
567− }
568− if _, err := io.Copy(s.w, &buf); err != nil {
569− return fmt.Errorf("bubbletea: error flushing update to the writer: %w", err)
570− }
571− }
572−
573− s.lastView = &view
574−
575− return nil
576−}
577−
578−// render implements renderer.
579−func (s *cursedRenderer) render(v View) {
580− s.mu.Lock()
581− defer s.mu.Unlock()
582−
583− s.view = v
584−}
585−
586−// reset implements renderer.
587−func (s *cursedRenderer) reset() {
588− s.mu.Lock()
589− reset(s)
590− s.mu.Unlock()
591−}
592−
593−func reset(s *cursedRenderer) {
594− s.buf.Reset()
595− scr := uv.NewTerminalRenderer(&s.buf, s.env)
596− scr.SetColorProfile(s.profile)
597− scr.SetRelativeCursor(true) // Always start in inline mode
598− scr.SetFullscreen(false) // Always start in inline mode
599− if s.hardTabs {
600− scr.SetTabStops(s.width)
601− } else {
602− scr.SetTabStops(-1)
603− }
604− scr.SetBackspace(s.backspace)
605− scr.SetMapNewline(s.mapnl)
606− scr.SetScrollOptim(runtime.GOOS != "windows") // disable scroll optimization on Windows due to bugs in some terminals
607− s.scr = scr
608−}
609−
610−// setColorProfile implements renderer.
611−func (s *cursedRenderer) setColorProfile(p colorprofile.Profile) {
612− s.mu.Lock()
613− s.profile = p
614− s.scr.SetColorProfile(p)
615− s.mu.Unlock()
616−}
617−
618−// resize implements renderer.
619−func (s *cursedRenderer) resize(w, h int) {
620− s.mu.Lock()
621− // We need to mark the screen for clear to force a redraw. However, we
622− // only do so if we're using alt screen or the width has changed.
623− // That's because redrawing is expensive and we can avoid it if the
624− // width hasn't changed in inline mode. On the other hand, when using
625− // alt screen mode, we always want to redraw because some terminals
626− // would scroll the screen and our content would be lost.
627− s.scr.Erase()
628− s.width, s.height = w, h
629− s.scr.Resize(s.width, s.height)
630− s.mu.Unlock()
631−}
632−
633−// clearScreen implements renderer.
634−func (s *cursedRenderer) clearScreen() {
635− s.mu.Lock()
636− // Move the cursor to the top left corner of the screen and trigger a full
637− // screen redraw.
638− s.scr.MoveTo(0, 0)
639− s.scr.Erase()
640− s.mu.Unlock()
641−}
642−
643−// enableAltScreen sets the alt screen mode.
644−// Note that this writes to the buffer directly if write is true.
645−func enableAltScreen(s *cursedRenderer, enable bool, write bool) {
646− if enable {
647− enterAltScreen(s, write)
648− } else {
649− exitAltScreen(s, write)
650− }
651−}
652−
653−func enterAltScreen(s *cursedRenderer, write bool) {
654− s.scr.SaveCursor()
655− if write {
656− s.buf.WriteString(ansi.SetModeAltScreenSaveCursor)
657− }
658− s.scr.SetFullscreen(true)
659− s.scr.SetRelativeCursor(false)
660− s.scr.Erase()
661−}
662−
663−func exitAltScreen(s *cursedRenderer, write bool) {
664− s.scr.Erase()
665− s.scr.SetRelativeCursor(true)
666− s.scr.SetFullscreen(false)
667− if write {
668− s.buf.WriteString(ansi.ResetModeAltScreenSaveCursor)
669− }
670− s.scr.RestoreCursor()
671−}
672−
673−// enableTextCursor sets the text cursor mode.
674−func enableTextCursor(s *cursedRenderer, enable bool) {
675− if enable {
676− _, _ = s.scr.WriteString(ansi.SetModeTextCursorEnable)
677− } else {
678− _, _ = s.scr.WriteString(ansi.ResetModeTextCursorEnable)
679− }
680−}
681−
682−// setSyncdUpdates implements renderer.
683−func (s *cursedRenderer) setSyncdUpdates(syncd bool) {
684− s.mu.Lock()
685− s.syncdUpdates = syncd
686− s.mu.Unlock()
687−}
688−
689−// setWidthMethod implements renderer.
690−func (s *cursedRenderer) setWidthMethod(method ansi.Method) {
691− s.mu.Lock()
692− if method == ansi.GraphemeWidth {
693− // Turn on Unicode mode (2027) for accurate grapheme width calculation.
694− // This is needed for proper rendering of wide characters and emojis.
695− _, _ = s.scr.WriteString(ansi.SetModeUnicodeCore)
696− } else if s.cellbuf.Method == ansi.GraphemeWidth {
697− // Turn off Unicode mode if we're switching away from grapheme width
698− // calculation to avoid issues with some terminals that might still be
699− // in Unicode mode and render characters incorrectly.
700− _, _ = s.scr.WriteString(ansi.ResetModeUnicodeCore)
701− }
702− s.cellbuf.Method = method
703− s.mu.Unlock()
704−}
705−
706−// insertAbove implements renderer.
707−func (s *cursedRenderer) insertAbove(str string) error {
708− s.mu.Lock()
709− defer s.mu.Unlock()
710−
711− if len(str) == 0 {
712− return nil
713− }
714−
715− var sb strings.Builder
716− w, h := s.cellbuf.Width(), s.cellbuf.Height()
717− _, y := s.scr.Position()
718−
719− // We need to scroll the screen up by the number of lines in the queue.
720− sb.WriteByte('\r')
721− down := h - y - 1
722− if down > 0 {
723− sb.WriteString(ansi.CursorDown(down))
724− }
725−
726− lines := strings.Split(str, "\n")
727− offset := len(lines)
728− for _, line := range lines {
729− lineWidth := ansi.StringWidth(line)
730− if w > 0 && lineWidth > w {
731− offset += (lineWidth / w)
732− }
733− }
734−
735− // Scroll the screen up by the offset to make room for the new lines.
736− sb.WriteString(strings.Repeat("\n", offset))
737−
738− // XXX: Now go to the top of the screen, insert new lines, and write
739− // the queued strings. It is important to use [Screen.moveCursor]
740− // instead of [Screen.move] because we don't want to perform any checks
741− // on the cursor position.
742− up := offset + h - 1
743− sb.WriteString(ansi.CursorUp(up))
744− sb.WriteString(ansi.InsertLine(offset))
745− for _, line := range lines {
746− sb.WriteString(line)
747− sb.WriteString(ansi.EraseLineRight)
748− sb.WriteString("\r\n")
749− }
750−
751− s.scr.SetPosition(0, 0)
752−
753− if s.logger != nil {
754− s.logger.Printf("insert above: %q", sb.String())
755− }
756−
757− _, err := io.WriteString(s.w, sb.String())
758− if err != nil {
759− return fmt.Errorf("bubbletea: error writing insert above to the writer: %w", err)
760− }
761−
762− return nil
763−}
764−
765−// onMouse implements renderer.
766−func (s *cursedRenderer) onMouse(m MouseMsg) Cmd {
767− var onMouse func(MouseMsg) Cmd
768− s.mu.Lock()
769− if s.lastView != nil {
770− onMouse = s.lastView.OnMouse
771− }
772− s.mu.Unlock()
773− if onMouse != nil {
774− return onMouse(m)
775− }
776− return nil
777−}
778−
779−func setProgressBar(s *cursedRenderer, pb *ProgressBar) {
780− if pb == nil {
781− _, _ = s.scr.WriteString(ansi.ResetProgressBar)
782− return
783− }
784−
785− var seq string
786− switch pb.State {
787− case ProgressBarNone:
788− seq = ansi.ResetProgressBar
789− case ProgressBarDefault:
790− seq = ansi.SetProgressBar(pb.Value)
791− case ProgressBarError:
792− seq = ansi.SetErrorProgressBar(pb.Value)
793− case ProgressBarIndeterminate:
794− seq = ansi.SetIndeterminateProgressBar
795− case ProgressBarWarning:
796− seq = ansi.SetWarningProgressBar(pb.Value)
797− }
798− if seq != "" {
799− _, _ = s.scr.WriteString(seq)
800− }
801−}
802−
803−func viewEquals(a, b *View) bool {
804− if a == nil || b == nil {
805− return false
806− }
807−
808− if a.Content != b.Content ||
809− a.AltScreen != b.AltScreen ||
810− a.DisableBracketedPasteMode != b.DisableBracketedPasteMode ||
811− a.ReportFocus != b.ReportFocus ||
812− a.MouseMode != b.MouseMode ||
813− a.WindowTitle != b.WindowTitle ||
814− a.ForegroundColor != b.ForegroundColor ||
815− a.BackgroundColor != b.BackgroundColor ||
816− a.KeyboardEnhancements != b.KeyboardEnhancements {
817− return false
818− }
819−
820− if (a.Cursor == nil) != (b.Cursor == nil) {
821− return false
822− }
823− if a.Cursor != nil && b.Cursor != nil {
824− if a.Cursor.X != b.Cursor.X ||
825− a.Cursor.Y != b.Cursor.Y ||
826− a.Cursor.Shape != b.Cursor.Shape ||
827− a.Cursor.Blink != b.Cursor.Blink ||
828− a.Cursor.Color != b.Cursor.Color {
829− return false
830− }
831− }
832−
833− if (a.ProgressBar == nil) != (b.ProgressBar == nil) {
834− return false
835− }
836− if a.ProgressBar != nil && b.ProgressBar != nil {
837− if *a.ProgressBar != *b.ProgressBar {
838− return false
839− }
840− }
841−
842− return true
843−}
844−
845−func keyboardEnhancementsFlags(ke KeyboardEnhancements) int {
846− flags := 1 // always enable basic key disambiguation
847− if ke.ReportEventTypes {
848− flags |= ansi.KittyReportEventTypes
849− }
850− if ke.ReportAlternateKeys {
851− flags |= ansi.KittyReportAlternateKeys
852− }
853− if ke.ReportAllKeysAsEscapeCodes {
854− flags |= ansi.KittyReportAllKeysAsEscapeCodes
855− }
856− if ke.ReportAssociatedText {
857− flags |= ansi.KittyReportAssociatedKeys
858− }
859− return flags
860−}
vendor/charm.land/bubbletea/v2/cursor.godeleted−28
@@ -1,28 +0,0 @@
1−package tea
2−
3−// Position represents a position in the terminal.
4−type Position struct{ X, Y int }
5−
6−// CursorPositionMsg is a message that represents the terminal cursor position.
7−type CursorPositionMsg struct {
8− X, Y int
9−}
10−
11−// CursorShape represents a terminal cursor shape.
12−type CursorShape int
13−
14−// Cursor shapes.
15−const (
16− CursorBlock CursorShape = iota
17− CursorUnderline
18− CursorBar
19−)
20−
21−// requestCursorPosMsg is a message that requests the cursor position.
22−type requestCursorPosMsg struct{}
23−
24−// RequestCursorPosition is a command that requests the cursor position.
25−// The cursor position will be sent as a [CursorPositionMsg] message.
26−func RequestCursorPosition() Msg {
27− return requestCursorPosMsg{}
28−}
vendor/charm.land/bubbletea/v2/environ.godeleted−34
@@ -1,34 +0,0 @@
1−package tea
2−
3−import uv "github.com/charmbracelet/ultraviolet"
4−
5−// EnvMsg is a message that represents the environment variables of the
6−// program. This is useful for getting the environment variables of programs
7−// running in a remote session like SSH. In that case, using [os.Getenv] would
8−// return the server's environment variables, not the client's.
9−//
10−// This message is sent to the program when it starts.
11−//
12−// Example:
13−//
14−// switch msg := msg.(type) {
15−// case EnvMsg:
16−// // What terminal type is being used?
17−// term := msg.Getenv("TERM")
18−// }
19−type EnvMsg uv.Environ
20−
21−// Getenv returns the value of the environment variable named by the key. If
22−// the variable is not present in the environment, the value returned will be
23−// the empty string.
24−func (msg EnvMsg) Getenv(key string) (v string) {
25− return uv.Environ(msg).Getenv(key)
26−}
27−
28−// LookupEnv retrieves the value of the environment variable named by the key.
29−// If the variable is present in the environment the value (which may be empty)
30−// is returned and the boolean is true. Otherwise the returned value will be
31−// empty and the boolean will be false.
32−func (msg EnvMsg) LookupEnv(key string) (s string, v bool) {
33− return uv.Environ(msg).LookupEnv(key)
34−}
vendor/charm.land/bubbletea/v2/exec.godeleted−129
@@ -1,129 +0,0 @@
1−package tea
2−
3−import (
4− "io"
5− "os"
6− "os/exec"
7−)
8−
9−// execMsg is used internally to run an ExecCommand sent with Exec.
10−type execMsg struct {
11− cmd ExecCommand
12− fn ExecCallback
13−}
14−
15−// Exec is used to perform arbitrary I/O in a blocking fashion, effectively
16−// pausing the Program while execution is running and resuming it when
17−// execution has completed.
18−//
19−// Most of the time you'll want to use ExecProcess, which runs an exec.Cmd.
20−//
21−// For non-interactive i/o you should use a Cmd (that is, a tea.Cmd).
22−func Exec(c ExecCommand, fn ExecCallback) Cmd {
23− return func() Msg {
24− return execMsg{cmd: c, fn: fn}
25− }
26−}
27−
28−// ExecProcess runs the given *exec.Cmd in a blocking fashion, effectively
29−// pausing the Program while the command is running. After the *exec.Cmd exists
30−// the Program resumes. It's useful for spawning other interactive applications
31−// such as editors and shells from within a Program.
32−//
33−// To produce the command, pass an *exec.Cmd and a function which returns
34−// a message containing the error which may have occurred when running the
35−// ExecCommand.
36−//
37−// type VimFinishedMsg struct { err error }
38−//
39−// c := exec.Command("vim", "file.txt")
40−//
41−// cmd := ExecProcess(c, func(err error) Msg {
42−// return VimFinishedMsg{err: err}
43−// })
44−//
45−// Or, if you don't care about errors, you could simply:
46−//
47−// cmd := ExecProcess(exec.Command("vim", "file.txt"), nil)
48−//
49−// For non-interactive i/o you should use a Cmd (that is, a tea.Cmd).
50−func ExecProcess(c *exec.Cmd, fn ExecCallback) Cmd {
51− return Exec(wrapExecCommand(c), fn)
52−}
53−
54−// ExecCallback is used when executing an *exec.Command to return a message
55−// with an error, which may or may not be nil.
56−type ExecCallback func(error) Msg
57−
58−// ExecCommand can be implemented to execute things in a blocking fashion in
59−// the current terminal.
60−type ExecCommand interface {
61− Run() error
62− SetStdin(io.Reader)
63− SetStdout(io.Writer)
64− SetStderr(io.Writer)
65−}
66−
67−// wrapExecCommand wraps an exec.Cmd so that it satisfies the ExecCommand
68−// interface so it can be used with Exec.
69−func wrapExecCommand(c *exec.Cmd) ExecCommand {
70− return &osExecCommand{Cmd: c}
71−}
72−
73−// osExecCommand is a layer over an exec.Cmd that satisfies the ExecCommand
74−// interface.
75−type osExecCommand struct{ *exec.Cmd }
76−
77−// SetStdin sets stdin on underlying exec.Cmd to the given io.Reader.
78−func (c *osExecCommand) SetStdin(r io.Reader) {
79− // If unset, have the command use the same input as the terminal.
80− if c.Stdin == nil {
81− c.Stdin = r
82− }
83−}
84−
85−// SetStdout sets stdout on underlying exec.Cmd to the given io.Writer.
86−func (c *osExecCommand) SetStdout(w io.Writer) {
87− // If unset, have the command use the same output as the terminal.
88− if c.Stdout == nil {
89− c.Stdout = w
90− }
91−}
92−
93−// SetStderr sets stderr on the underlying exec.Cmd to the given io.Writer.
94−func (c *osExecCommand) SetStderr(w io.Writer) {
95− // If unset, use stderr for the command's stderr
96− if c.Stderr == nil {
97− c.Stderr = w
98− }
99−}
100−
101−// exec runs an ExecCommand and delivers the results to the program as a Msg.
102−func (p *Program) exec(c ExecCommand, fn ExecCallback) {
103− if err := p.releaseTerminal(false); err != nil {
104− // If we can't release input, abort.
105− if fn != nil {
106− go p.Send(fn(err))
107− }
108− return
109− }
110−
111− c.SetStdin(p.input)
112− c.SetStdout(p.output)
113− c.SetStderr(os.Stderr)
114−
115− // Execute system command.
116− if err := c.Run(); err != nil {
117− _ = p.RestoreTerminal() // also try to restore the terminal.
118− if fn != nil {
119− go p.Send(fn(err))
120− }
121− return
122− }
123−
124− // Have the program re-capture input.
125− err := p.RestoreTerminal()
126− if fn != nil {
127− go p.Send(fn(err))
128− }
129−}
vendor/charm.land/bubbletea/v2/focus.godeleted−9
@@ -1,9 +0,0 @@
1−package tea
2−
3−// FocusMsg represents a terminal focus message.
4−// This occurs when the terminal gains focus.
5−type FocusMsg struct{}
6−
7−// BlurMsg represents a terminal blur message.
8−// This occurs when the terminal loses focus.
9−type BlurMsg struct{}
vendor/charm.land/bubbletea/v2/input.godeleted−54
@@ -1,54 +0,0 @@
1−package tea
2−
3−import (
4− uv "github.com/charmbracelet/ultraviolet"
5−)
6−
7−// translateInputEvent translates an input event into a Bubble Tea Msg.
8−func (p *Program) translateInputEvent(e uv.Event) Msg {
9− switch e := e.(type) {
10− case uv.ClipboardEvent:
11− return ClipboardMsg(e)
12− case uv.ForegroundColorEvent:
13− return ForegroundColorMsg(e)
14− case uv.BackgroundColorEvent:
15− return BackgroundColorMsg(e)
16− case uv.CursorColorEvent:
17− return CursorColorMsg(e)
18− case uv.CursorPositionEvent:
19− return CursorPositionMsg(e)
20− case uv.FocusEvent:
21− return FocusMsg(e)
22− case uv.BlurEvent:
23− return BlurMsg(e)
24− case uv.KeyPressEvent:
25− return KeyPressMsg(e)
26− case uv.KeyReleaseEvent:
27− return KeyReleaseMsg(e)
28− case uv.MouseClickEvent:
29− return MouseClickMsg(e)
30− case uv.MouseMotionEvent:
31− return MouseMotionMsg(e)
32− case uv.MouseReleaseEvent:
33− return MouseReleaseMsg(e)
34− case uv.MouseWheelEvent:
35− return MouseWheelMsg(e)
36− case uv.PasteEvent:
37− return PasteMsg(e)
38− case uv.PasteStartEvent:
39− return PasteStartMsg(e)
40− case uv.PasteEndEvent:
41− return PasteEndMsg(e)
42− case uv.WindowSizeEvent:
43− return WindowSizeMsg(e)
44− case uv.CapabilityEvent:
45− return CapabilityMsg(e)
46− case uv.TerminalVersionEvent:
47− return TerminalVersionMsg(e)
48− case uv.KeyboardEnhancementsEvent:
49− return KeyboardEnhancementsMsg(e)
50− case uv.ModeReportEvent:
51− return ModeReportMsg(e)
52− }
53− return e
54−}
vendor/charm.land/bubbletea/v2/key.godeleted−371
@@ -1,371 +0,0 @@
1−package tea
2−
3−import (
4− "fmt"
5−
6− uv "github.com/charmbracelet/ultraviolet"
7−)
8−
9−const (
10− // KeyExtended is a special key code used to signify that a key event
11− // contains multiple runes.
12− KeyExtended = uv.KeyExtended
13−)
14−
15−// Special key symbols.
16−const (
17−
18− // Special keys.
19−
20− KeyUp = uv.KeyUp
21− KeyDown = uv.KeyDown
22− KeyRight = uv.KeyRight
23− KeyLeft = uv.KeyLeft
24− KeyBegin = uv.KeyBegin
25− KeyFind = uv.KeyFind
26− KeyInsert = uv.KeyInsert
27− KeyDelete = uv.KeyDelete
28− KeySelect = uv.KeySelect
29− KeyPgUp = uv.KeyPgUp
30− KeyPgDown = uv.KeyPgDown
31− KeyHome = uv.KeyHome
32− KeyEnd = uv.KeyEnd
33−
34− // Keypad keys.
35−
36− KeyKpEnter = uv.KeyKpEnter
37− KeyKpEqual = uv.KeyKpEqual
38− KeyKpMultiply = uv.KeyKpMultiply
39− KeyKpPlus = uv.KeyKpPlus
40− KeyKpComma = uv.KeyKpComma
41− KeyKpMinus = uv.KeyKpMinus
42− KeyKpDecimal = uv.KeyKpDecimal
43− KeyKpDivide = uv.KeyKpDivide
44− KeyKp0 = uv.KeyKp0
45− KeyKp1 = uv.KeyKp1
46− KeyKp2 = uv.KeyKp2
47− KeyKp3 = uv.KeyKp3
48− KeyKp4 = uv.KeyKp4
49− KeyKp5 = uv.KeyKp5
50− KeyKp6 = uv.KeyKp6
51− KeyKp7 = uv.KeyKp7
52− KeyKp8 = uv.KeyKp8
53− KeyKp9 = uv.KeyKp9
54−
55− // The following are keys defined in the Kitty keyboard protocol.
56− // XXX: Investigate the names of these keys.
57− KeyKpSep = uv.KeyKpSep
58− KeyKpUp = uv.KeyKpUp
59− KeyKpDown = uv.KeyKpDown
60− KeyKpLeft = uv.KeyKpLeft
61− KeyKpRight = uv.KeyKpRight
62− KeyKpPgUp = uv.KeyKpPgUp
63− KeyKpPgDown = uv.KeyKpPgDown
64− KeyKpHome = uv.KeyKpHome
65− KeyKpEnd = uv.KeyKpEnd
66− KeyKpInsert = uv.KeyKpInsert
67− KeyKpDelete = uv.KeyKpDelete
68− KeyKpBegin = uv.KeyKpBegin
69−
70− // Function keys.
71−
72− KeyF1 = uv.KeyF1
73− KeyF2 = uv.KeyF2
74− KeyF3 = uv.KeyF3
75− KeyF4 = uv.KeyF4
76− KeyF5 = uv.KeyF5
77− KeyF6 = uv.KeyF6
78− KeyF7 = uv.KeyF7
79− KeyF8 = uv.KeyF8
80− KeyF9 = uv.KeyF9
81− KeyF10 = uv.KeyF10
82− KeyF11 = uv.KeyF11
83− KeyF12 = uv.KeyF12
84− KeyF13 = uv.KeyF13
85− KeyF14 = uv.KeyF14
86− KeyF15 = uv.KeyF15
87− KeyF16 = uv.KeyF16
88− KeyF17 = uv.KeyF17
89− KeyF18 = uv.KeyF18
90− KeyF19 = uv.KeyF19
91− KeyF20 = uv.KeyF20
92− KeyF21 = uv.KeyF21
93− KeyF22 = uv.KeyF22
94− KeyF23 = uv.KeyF23
95− KeyF24 = uv.KeyF24
96− KeyF25 = uv.KeyF25
97− KeyF26 = uv.KeyF26
98− KeyF27 = uv.KeyF27
99− KeyF28 = uv.KeyF28
100− KeyF29 = uv.KeyF29
101− KeyF30 = uv.KeyF30
102− KeyF31 = uv.KeyF31
103− KeyF32 = uv.KeyF32
104− KeyF33 = uv.KeyF33
105− KeyF34 = uv.KeyF34
106− KeyF35 = uv.KeyF35
107− KeyF36 = uv.KeyF36
108− KeyF37 = uv.KeyF37
109− KeyF38 = uv.KeyF38
110− KeyF39 = uv.KeyF39
111− KeyF40 = uv.KeyF40
112− KeyF41 = uv.KeyF41
113− KeyF42 = uv.KeyF42
114− KeyF43 = uv.KeyF43
115− KeyF44 = uv.KeyF44
116− KeyF45 = uv.KeyF45
117− KeyF46 = uv.KeyF46
118− KeyF47 = uv.KeyF47
119− KeyF48 = uv.KeyF48
120− KeyF49 = uv.KeyF49
121− KeyF50 = uv.KeyF50
122− KeyF51 = uv.KeyF51
123− KeyF52 = uv.KeyF52
124− KeyF53 = uv.KeyF53
125− KeyF54 = uv.KeyF54
126− KeyF55 = uv.KeyF55
127− KeyF56 = uv.KeyF56
128− KeyF57 = uv.KeyF57
129− KeyF58 = uv.KeyF58
130− KeyF59 = uv.KeyF59
131− KeyF60 = uv.KeyF60
132− KeyF61 = uv.KeyF61
133− KeyF62 = uv.KeyF62
134− KeyF63 = uv.KeyF63
135−
136− // The following are keys defined in the Kitty keyboard protocol.
137− // XXX: Investigate the names of these keys.
138−
139− KeyCapsLock = uv.KeyCapsLock
140− KeyScrollLock = uv.KeyScrollLock
141− KeyNumLock = uv.KeyNumLock
142− KeyPrintScreen = uv.KeyPrintScreen
143− KeyPause = uv.KeyPause
144− KeyMenu = uv.KeyMenu
145−
146− KeyMediaPlay = uv.KeyMediaPlay
147− KeyMediaPause = uv.KeyMediaPause
148− KeyMediaPlayPause = uv.KeyMediaPlayPause
149− KeyMediaReverse = uv.KeyMediaReverse
150− KeyMediaStop = uv.KeyMediaStop
151− KeyMediaFastForward = uv.KeyMediaFastForward
152− KeyMediaRewind = uv.KeyMediaRewind
153− KeyMediaNext = uv.KeyMediaNext
154− KeyMediaPrev = uv.KeyMediaPrev
155− KeyMediaRecord
156−
157− KeyLowerVol = uv.KeyLowerVol
158− KeyRaiseVol = uv.KeyRaiseVol
159− KeyMute = uv.KeyMute
160−
161− KeyLeftShift = uv.KeyLeftShift
162− KeyLeftAlt = uv.KeyLeftAlt
163− KeyLeftCtrl = uv.KeyLeftCtrl
164− KeyLeftSuper = uv.KeyLeftSuper
165− KeyLeftHyper = uv.KeyLeftHyper
166− KeyLeftMeta = uv.KeyLeftMeta
167− KeyRightShift = uv.KeyRightShift
168− KeyRightAlt = uv.KeyRightAlt
169− KeyRightCtrl = uv.KeyRightCtrl
170− KeyRightSuper = uv.KeyRightSuper
171− KeyRightHyper = uv.KeyRightHyper
172− KeyRightMeta = uv.KeyRightMeta
173− KeyIsoLevel3Shift = uv.KeyIsoLevel3Shift
174− KeyIsoLevel5Shift = uv.KeyIsoLevel5Shift
175−
176− // Special names in C0.
177−
178− KeyBackspace = uv.KeyBackspace
179− KeyTab = uv.KeyTab
180− KeyEnter = uv.KeyEnter
181− KeyReturn = uv.KeyReturn
182− KeyEscape = uv.KeyEscape
183− KeyEsc = uv.KeyEsc
184−
185− // Special names in G0.
186−
187− KeySpace = uv.KeySpace
188−)
189−
190−// KeyPressMsg represents a key press message.
191−type KeyPressMsg Key
192−
193−// String implements [fmt.Stringer] and is quite useful for matching key
194−// events. For details, on what this returns see [Key.String].
195−func (k KeyPressMsg) String() string {
196− return Key(k).String()
197−}
198−
199−// Keystroke returns the keystroke representation of the [Key]. While less type
200−// safe than looking at the individual fields, it will usually be more
201−// convenient and readable to use this method when matching against keys.
202−//
203−// Note that modifier keys are always printed in the following order:
204−// - ctrl
205−// - alt
206−// - shift
207−// - meta
208−// - hyper
209−// - super
210−//
211−// For example, you'll always see "ctrl+shift+alt+a" and never
212−// "shift+ctrl+alt+a".
213−func (k KeyPressMsg) Keystroke() string {
214− return uv.Key(k).Keystroke()
215−}
216−
217−// Key returns the underlying key event. This is a syntactic sugar for casting
218−// the key event to a [Key].
219−func (k KeyPressMsg) Key() Key {
220− return Key(k)
221−}
222−
223−// KeyReleaseMsg represents a key release message.
224−type KeyReleaseMsg Key
225−
226−// String implements [fmt.Stringer] and is quite useful for matching key
227−// events. For details, on what this returns see [Key.String].
228−func (k KeyReleaseMsg) String() string {
229− return Key(k).String()
230−}
231−
232−// Keystroke returns the keystroke representation of the [Key]. While less type
233−// safe than looking at the individual fields, it will usually be more
234−// convenient and readable to use this method when matching against keys.
235−//
236−// Note that modifier keys are always printed in the following order:
237−// - ctrl
238−// - alt
239−// - shift
240−// - meta
241−// - hyper
242−// - super
243−//
244−// For example, you'll always see "ctrl+shift+alt+a" and never
245−// "shift+ctrl+alt+a".
246−func (k KeyReleaseMsg) Keystroke() string {
247− return uv.Key(k).Keystroke()
248−}
249−
250−// Key returns the underlying key event. This is a convenience method and
251−// syntactic sugar to satisfy the [KeyMsg] interface, and cast the key event to
252−// [Key].
253−func (k KeyReleaseMsg) Key() Key {
254− return Key(k)
255−}
256−
257−// KeyMsg represents a key event. This can be either a key press or a key
258−// release event.
259−type KeyMsg interface {
260− fmt.Stringer
261−
262− // Key returns the underlying key event.
263− Key() Key
264−}
265−
266−// Key represents a Key press or release event. It contains information about
267−// the Key pressed, like the runes, the type of Key, and the modifiers pressed.
268−// There are a couple general patterns you could use to check for key presses
269−// or releases:
270−//
271−// // Switch on the string representation of the key (shorter)
272−// switch msg := msg.(type) {
273−// case KeyPressMsg:
274−// switch msg.String() {
275−// case "enter":
276−// fmt.Println("you pressed enter!")
277−// case "a":
278−// fmt.Println("you pressed a!")
279−// }
280−// }
281−//
282−// // Switch on the key type (more foolproof)
283−// switch msg := msg.(type) {
284−// case KeyMsg:
285−// // catch both KeyPressMsg and KeyReleaseMsg
286−// switch key := msg.Key(); key.Code {
287−// case KeyEnter:
288−// fmt.Println("you pressed enter!")
289−// default:
290−// switch key.Text {
291−// case "a":
292−// fmt.Println("you pressed a!")
293−// }
294−// }
295−// }
296−//
297−// Note that [Key.Text] will be empty for special keys like [KeyEnter],
298−// [KeyTab], and for keys that don't represent printable characters like key
299−// combos with modifier keys. In other words, [Key.Text] is populated only for
300−// keys that represent printable characters shifted or unshifted (like 'a',
301−// 'A', '1', '!', etc.).
302−type Key struct {
303− // Text contains the actual characters received. This usually the same as
304− // [Key.Code]. When [Key.Text] is non-empty, it indicates that the key
305− // pressed represents printable character(s).
306− Text string
307−
308− // Mod represents modifier keys, like [ModCtrl], [ModAlt], and so on.
309− Mod KeyMod
310−
311− // Code represents the key pressed. This is usually a special key like
312− // [KeyTab], [KeyEnter], [KeyF1], or a printable character like 'a'.
313− Code rune
314−
315− // ShiftedCode is the actual, shifted key pressed by the user. For example,
316− // if the user presses shift+a, or caps lock is on, [Key.ShiftedCode] will
317− // be 'A' and [Key.Code] will be 'a'.
318− //
319− // In the case of non-latin keyboards, like Arabic, [Key.ShiftedCode] is the
320− // unshifted key on the keyboard.
321− //
322− // This is only available with the Kitty Keyboard Protocol or the Windows
323− // Console API.
324− ShiftedCode rune
325−
326− // BaseCode is the key pressed according to the standard PC-101 key layout.
327− // On international keyboards, this is the key that would be pressed if the
328− // keyboard was set to US PC-101 layout.
329− //
330− // For example, if the user presses 'q' on a French AZERTY keyboard,
331− // [Key.BaseCode] will be 'q'.
332− //
333− // This is only available with the Kitty Keyboard Protocol or the Windows
334− // Console API.
335− BaseCode rune
336−
337− // IsRepeat indicates whether the key is being held down and sending events
338− // repeatedly.
339− //
340− // This is only available with the Kitty Keyboard Protocol or the Windows
341− // Console API.
342− IsRepeat bool
343−}
344−
345−// String implements [fmt.Stringer] and is quite useful for matching key
346−// events. It will return the textual representation of the [Key] if there is
347−// one, otherwise, it will fallback to [Key.Keystroke].
348−//
349−// For example, you'll always get "?" and instead of "shift+/" on a US ANSI
350−// keyboard.
351−func (k Key) String() string {
352− return uv.Key(k).String()
353−}
354−
355−// Keystroke returns the keystroke representation of the [Key]. While less type
356−// safe than looking at the individual fields, it will usually be more
357−// convenient and readable to use this method when matching against keys.
358−//
359−// Note that modifier keys are always printed in the following order:
360−// - ctrl
361−// - alt
362−// - shift
363−// - meta
364−// - hyper
365−// - super
366−//
367−// For example, you'll always see "ctrl+shift+alt+a" and never
368−// "shift+ctrl+alt+a".
369−func (k Key) Keystroke() string {
370− return uv.Key(k).Keystroke()
371−}
vendor/charm.land/bubbletea/v2/keyboard.godeleted−59
@@ -1,59 +0,0 @@
1−package tea
2−
3−import (
4− "github.com/charmbracelet/x/ansi"
5−)
6−
7−// KeyboardEnhancementsMsg is a message that gets sent when the terminal
8−// supports keyboard enhancements.
9−type KeyboardEnhancementsMsg struct {
10− // Flags is a bitmask of enabled keyboard enhancement features. A non-zero
11− // value indicates that at least we have key disambiguation support.
12− //
13− // See [ansi.KittyReportEventTypes] and other constants for details.
14− //
15− // Example:
16− //
17− // ```go
18− // // The hard way
19− // if msg.Flags&ansi.KittyReportEventTypes != 0 {
20− // // Terminal supports reporting different key event types
21− // }
22− //
23− // // The easy way
24− // if msg.SupportsEventTypes() {
25− // // Terminal supports reporting different key event types
26− // }
27− // ```
28− Flags int
29−}
30−
31−// SupportsKeyDisambiguation returns whether the terminal supports key
32−// disambiguation (e.g., distinguishing between different modifier keys).
33−func (k KeyboardEnhancementsMsg) SupportsKeyDisambiguation() bool {
34− return k.Flags > 0
35−}
36−
37−// SupportsEventTypes returns whether the terminal supports reporting
38−// different types of key events (press, release, and repeat).
39−func (k KeyboardEnhancementsMsg) SupportsEventTypes() bool {
40− return k.Flags&ansi.KittyReportEventTypes != 0
41−}
42−
43−// SupportsAlternateKeys returns whether the terminal supports reporting
44−// alternate key codes.
45−func (k KeyboardEnhancementsMsg) SupportsAlternateKeys() bool {
46− return k.Flags&ansi.KittyReportAlternateKeys != 0
47−}
48−
49−// SupportsAllKeysAsEscapeCodes returns whether the terminal supports reporting
50−// all keys as escape codes.
51−func (k KeyboardEnhancementsMsg) SupportsAllKeysAsEscapeCodes() bool {
52− return k.Flags&ansi.KittyReportAllKeysAsEscapeCodes != 0
53−}
54−
55−// SupportsAssociatedText returns whether the terminal supports reporting
56−// associated text with key events.
57−func (k KeyboardEnhancementsMsg) SupportsAssociatedText() bool {
58− return k.Flags&ansi.KittyReportAssociatedKeys != 0
59−}
vendor/charm.land/bubbletea/v2/logging.godeleted−53
@@ -1,53 +0,0 @@
1−package tea
2−
3−import (
4− "fmt"
5− "io"
6− "log"
7− "os"
8− "unicode"
9−)
10−
11−// LogToFile sets up default logging to log to a file. This is helpful as we
12−// can't print to the terminal since our TUI is occupying it. If the file
13−// doesn't exist it will be created.
14−//
15−// Don't forget to close the file when you're done with it.
16−//
17−// f, err := LogToFile("debug.log", "debug")
18−// if err != nil {
19−// fmt.Println("fatal:", err)
20−// os.Exit(1)
21−// }
22−// defer f.Close()
23−func LogToFile(path string, prefix string) (*os.File, error) {
24− return LogToFileWith(path, prefix, log.Default())
25−}
26−
27−// LogOptionsSetter is an interface implemented by stdlib's log and charm's log
28−// libraries.
29−type LogOptionsSetter interface {
30− SetOutput(io.Writer)
31− SetPrefix(string)
32−}
33−
34−// LogToFileWith does allows to call LogToFile with a custom LogOptionsSetter.
35−func LogToFileWith(path string, prefix string, log LogOptionsSetter) (*os.File, error) {
36− f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0o600) //nolint:mnd
37− if err != nil {
38− return nil, fmt.Errorf("error opening file for logging: %w", err)
39− }
40− log.SetOutput(f)
41−
42− // Add a space after the prefix if a prefix is being specified and it
43− // doesn't already have a trailing space.
44− if len(prefix) > 0 {
45− finalChar := prefix[len(prefix)-1]
46− if !unicode.IsSpace(rune(finalChar)) {
47− prefix += " "
48− }
49− }
50− log.SetPrefix(prefix)
51−
52− return f, nil
53−}
vendor/charm.land/bubbletea/v2/mod.godeleted−27
@@ -1,27 +0,0 @@
1−package tea
2−
3−import uv "github.com/charmbracelet/ultraviolet"
4−
5−// KeyMod represents modifier keys.
6−type KeyMod = uv.KeyMod
7−
8−// Modifier keys.
9−const (
10− ModShift = uv.ModShift
11− ModAlt = uv.ModAlt
12− ModCtrl = uv.ModCtrl
13− ModMeta = uv.ModMeta
14−
15− // These modifiers are used with the Kitty protocol.
16− // XXX: Meta and Super are swapped in the Kitty protocol,
17− // this is to preserve compatibility with XTerm modifiers.
18−
19− ModHyper = uv.ModHyper
20− ModSuper = uv.ModSuper // Windows/Command keys
21−
22− // These are key lock states.
23−
24− ModCapsLock = uv.ModCapsLock
25− ModNumLock = uv.ModNumLock
26− ModScrollLock = uv.ModScrollLock // Defined in Windows API only
27−)
vendor/charm.land/bubbletea/v2/mouse.godeleted−144
@@ -1,144 +0,0 @@
1−package tea
2−
3−import (
4− "fmt"
5−
6− uv "github.com/charmbracelet/ultraviolet"
7−)
8−
9−// MouseButton represents the button that was pressed during a mouse message.
10−type MouseButton = uv.MouseButton
11−
12−// Mouse event buttons
13−//
14−// This is based on X11 mouse button codes.
15−//
16−// 1 = left button
17−// 2 = middle button (pressing the scroll wheel)
18−// 3 = right button
19−// 4 = turn scroll wheel up
20−// 5 = turn scroll wheel down
21−// 6 = push scroll wheel left
22−// 7 = push scroll wheel right
23−// 8 = 4th button (aka browser backward button)
24−// 9 = 5th button (aka browser forward button)
25−// 10
26−// 11
27−//
28−// Other buttons are not supported.
29−const (
30− MouseNone = uv.MouseNone
31− MouseLeft = uv.MouseLeft
32− MouseMiddle = uv.MouseMiddle
33− MouseRight = uv.MouseRight
34− MouseWheelUp = uv.MouseWheelUp
35− MouseWheelDown = uv.MouseWheelDown
36− MouseWheelLeft = uv.MouseWheelLeft
37− MouseWheelRight = uv.MouseWheelRight
38− MouseBackward = uv.MouseBackward
39− MouseForward = uv.MouseForward
40− MouseButton10 = uv.MouseButton10
41− MouseButton11
42−)
43−
44−// MouseMsg represents a mouse message. This is a generic mouse message that
45−// can represent any kind of mouse event.
46−type MouseMsg interface {
47− fmt.Stringer
48−
49− // Mouse returns the underlying mouse event.
50− Mouse() Mouse
51−}
52−
53−// Mouse represents a Mouse message. Use [MouseMsg] to represent all mouse
54−// messages.
55−//
56−// The X and Y coordinates are zero-based, with (0,0) being the upper left
57−// corner of the terminal.
58−//
59−// // Catch all mouse events
60−// switch msg := msg.(type) {
61−// case MouseMsg:
62−// m := msg.Mouse()
63−// fmt.Println("Mouse event:", m.X, m.Y, m)
64−// }
65−//
66−// // Only catch mouse click events
67−// switch msg := msg.(type) {
68−// case MouseClickMsg:
69−// fmt.Println("Mouse click event:", msg.X, msg.Y, msg)
70−// }
71−type Mouse struct {
72− X, Y int
73− Button MouseButton
74− Mod KeyMod
75−}
76−
77−// String returns a string representation of the mouse message.
78−func (m Mouse) String() (s string) {
79− return uv.Mouse(m).String()
80−}
81−
82−// MouseClickMsg represents a mouse button click message.
83−type MouseClickMsg Mouse
84−
85−// String returns a string representation of the mouse click message.
86−func (e MouseClickMsg) String() string {
87− return Mouse(e).String()
88−}
89−
90−// Mouse returns the underlying mouse event. This is a convenience method and
91−// syntactic sugar to satisfy the [MouseMsg] interface, and cast the mouse
92−// event to [Mouse].
93−func (e MouseClickMsg) Mouse() Mouse {
94− return Mouse(e)
95−}
96−
97−// MouseReleaseMsg represents a mouse button release message.
98−type MouseReleaseMsg Mouse
99−
100−// String returns a string representation of the mouse release message.
101−func (e MouseReleaseMsg) String() string {
102− return Mouse(e).String()
103−}
104−
105−// Mouse returns the underlying mouse event. This is a convenience method and
106−// syntactic sugar to satisfy the [MouseMsg] interface, and cast the mouse
107−// event to [Mouse].
108−func (e MouseReleaseMsg) Mouse() Mouse {
109− return Mouse(e)
110−}
111−
112−// MouseWheelMsg represents a mouse wheel message event.
113−type MouseWheelMsg Mouse
114−
115−// String returns a string representation of the mouse wheel message.
116−func (e MouseWheelMsg) String() string {
117− return Mouse(e).String()
118−}
119−
120−// Mouse returns the underlying mouse event. This is a convenience method and
121−// syntactic sugar to satisfy the [MouseMsg] interface, and cast the mouse
122−// event to [Mouse].
123−func (e MouseWheelMsg) Mouse() Mouse {
124− return Mouse(e)
125−}
126−
127−// MouseMotionMsg represents a mouse motion message.
128−type MouseMotionMsg Mouse
129−
130−// String returns a string representation of the mouse motion message.
131−func (e MouseMotionMsg) String() string {
132− m := Mouse(e)
133− if m.Button != 0 {
134− return m.String() + "+motion"
135− }
136− return m.String() + "motion"
137−}
138−
139−// Mouse returns the underlying mouse event. This is a convenience method and
140−// syntactic sugar to satisfy the [MouseMsg] interface, and cast the mouse
141−// event to [Mouse].
142−func (e MouseMotionMsg) Mouse() Mouse {
143− return Mouse(e)
144−}
vendor/charm.land/bubbletea/v2/nil_renderer.godeleted−53
@@ -1,53 +0,0 @@
1−package tea
2−
3−import (
4− "github.com/charmbracelet/colorprofile"
5− "github.com/charmbracelet/x/ansi"
6−)
7−
8−// nilRenderer is a no-op renderer. It implements the Renderer interface but
9−// doesn't render anything to the terminal.
10−type nilRenderer struct{}
11−
12−var _ renderer = nilRenderer{}
13−
14−// start implements renderer.
15−func (n nilRenderer) start() {}
16−
17−// clearScreen implements renderer.
18−func (n nilRenderer) clearScreen() {}
19−
20−// insertAbove implements renderer.
21−func (n nilRenderer) insertAbove(string) error { return nil }
22−
23−// resize implements renderer.
24−func (n nilRenderer) resize(int, int) {}
25−
26−// setColorProfile implements renderer.
27−func (n nilRenderer) setColorProfile(colorprofile.Profile) {}
28−
29−// flush implements the Renderer interface.
30−func (nilRenderer) flush(bool) error { return nil }
31−
32−// close implements the Renderer interface.
33−func (nilRenderer) close() error { return nil }
34−
35−// render implements the Renderer interface.
36−func (nilRenderer) render(View) {}
37−
38−// reset implements the Renderer interface.
39−func (nilRenderer) reset() {}
40−
41−// writeString implements the Renderer interface.
42−func (nilRenderer) writeString(string) (int, error) { return 0, nil }
43−
44−// setSyncdUpdates implements the Renderer interface.
45−func (n nilRenderer) setSyncdUpdates(bool) {}
46−
47−// setWidthMethod implements the Renderer interface.
48−func (n nilRenderer) setWidthMethod(ansi.Method) {}
49−
50−// onMouse implements the Renderer interface.
51−func (n nilRenderer) onMouse(MouseMsg) Cmd {
52− return nil
53−}
vendor/charm.land/bubbletea/v2/options.godeleted−168
@@ -1,168 +0,0 @@
1−package tea
2−
3−import (
4− "context"
5− "io"
6− "sync/atomic"
7−
8− "github.com/charmbracelet/colorprofile"
9−)
10−
11−// ProgramOption is used to set options when initializing a Program. Program can
12−// accept a variable number of options.
13−//
14−// Example usage:
15−//
16−// p := NewProgram(model, WithInput(someInput), WithOutput(someOutput))
17−type ProgramOption func(*Program)
18−
19−// WithContext lets you specify a context in which to run the Program. This is
20−// useful if you want to cancel the execution from outside. When a Program gets
21−// cancelled it will exit with an error ErrProgramKilled.
22−func WithContext(ctx context.Context) ProgramOption {
23− return func(p *Program) {
24− p.externalCtx = ctx
25− }
26−}
27−
28−// WithOutput sets the output which, by default, is stdout. In most cases you
29−// won't need to use this.
30−func WithOutput(output io.Writer) ProgramOption {
31− return func(p *Program) {
32− p.output = output
33− }
34−}
35−
36−// WithInput sets the input which, by default, is stdin. In most cases you
37−// won't need to use this. To disable input entirely pass nil.
38−//
39−// p := NewProgram(model, WithInput(nil))
40−func WithInput(input io.Reader) ProgramOption {
41− return func(p *Program) {
42− p.input = input
43− p.disableInput = input == nil
44− }
45−}
46−
47−// WithEnvironment sets the environment variables that the program will use.
48−// This useful when the program is running in a remote session (e.g. SSH) and
49−// you want to pass the environment variables from the remote session to the
50−// program.
51−//
52−// Example:
53−//
54−// var sess ssh.Session // ssh.Session is a type from the github.com/charmbracelet/ssh package
55−// pty, _, _ := sess.Pty()
56−// environ := append(sess.Environ(), "TERM="+pty.Term)
57−// p := tea.NewProgram(model, tea.WithEnvironment(environ)
58−func WithEnvironment(env []string) ProgramOption {
59− return func(p *Program) {
60− p.environ = env
61− }
62−}
63−
64−// WithoutSignalHandler disables the signal handler that Bubble Tea sets up for
65−// Programs. This is useful if you want to handle signals yourself.
66−func WithoutSignalHandler() ProgramOption {
67− return func(p *Program) {
68− p.disableSignalHandler = true
69− }
70−}
71−
72−// WithoutCatchPanics disables the panic catching that Bubble Tea does by
73−// default. If panic catching is disabled the terminal will be in a fairly
74−// unusable state after a panic because Bubble Tea will not perform its usual
75−// cleanup on exit.
76−func WithoutCatchPanics() ProgramOption {
77− return func(p *Program) {
78− p.disableCatchPanics = true
79− }
80−}
81−
82−// WithoutSignals will ignore OS signals.
83−// This is mainly useful for testing.
84−func WithoutSignals() ProgramOption {
85− return func(p *Program) {
86− atomic.StoreUint32(&p.ignoreSignals, 1)
87− }
88−}
89−
90−// WithoutRenderer disables the renderer. When this is set output and log
91−// statements will be plainly sent to stdout (or another output if one is set)
92−// without any rendering and redrawing logic. In other words, printing and
93−// logging will behave the same way it would in a non-TUI commandline tool.
94−// This can be useful if you want to use the Bubble Tea framework for a non-TUI
95−// application, or to provide an additional non-TUI mode to your Bubble Tea
96−// programs. For example, your program could behave like a daemon if output is
97−// not a TTY.
98−func WithoutRenderer() ProgramOption {
99− return func(p *Program) {
100− p.disableRenderer = true
101− }
102−}
103−
104−// WithFilter supplies an event filter that will be invoked before Bubble Tea
105−// processes a tea.Msg. The event filter can return any tea.Msg which will then
106−// get handled by Bubble Tea instead of the original event. If the event filter
107−// returns nil, the event will be ignored and Bubble Tea will not process it.
108−//
109−// As an example, this could be used to prevent a program from shutting down if
110−// there are unsaved changes.
111−//
112−// Example:
113−//
114−// func filter(m tea.Model, msg tea.Msg) tea.Msg {
115−// if _, ok := msg.(tea.QuitMsg); !ok {
116−// return msg
117−// }
118−//
119−// model := m.(myModel)
120−// if model.hasChanges {
121−// return nil
122−// }
123−//
124−// return msg
125−// }
126−//
127−// p := tea.NewProgram(Model{}, tea.WithFilter(filter));
128−//
129−// if _,err := p.Run(); err != nil {
130−// fmt.Println("Error running program:", err)
131−// os.Exit(1)
132−// }
133−func WithFilter(filter func(Model, Msg) Msg) ProgramOption {
134− return func(p *Program) {
135− p.filter = filter
136− }
137−}
138−
139−// WithFPS sets a custom maximum FPS at which the renderer should run. If
140−// less than 1, the default value of 60 will be used. If over 120, the FPS
141−// will be capped at 120.
142−func WithFPS(fps int) ProgramOption {
143− return func(p *Program) {
144− p.fps = fps
145− }
146−}
147−
148−// WithColorProfile sets the color profile that the program will use. This is
149−// useful when you want to force a specific color profile. By default, Bubble
150−// Tea will try to detect the terminal's color profile from environment
151−// variables and terminfo capabilities. Use [tea.WithEnvironment] to set custom
152−// environment variables.
153−func WithColorProfile(profile colorprofile.Profile) ProgramOption {
154− return func(p *Program) {
155− p.profile = &profile
156− }
157−}
158−
159−// WithWindowSize sets the initial size of the terminal window. This is useful
160−// when you need to set the initial size of the terminal window, for example
161−// during testing or when you want to run your program in a non-interactive
162−// environment.
163−func WithWindowSize(width, height int) ProgramOption {
164− return func(p *Program) {
165− p.width = width
166− p.height = height
167− }
168−}
vendor/charm.land/bubbletea/v2/paste.godeleted−20
@@ -1,20 +0,0 @@
1−package tea
2−
3−// PasteMsg is an message that is emitted when a terminal receives pasted text
4−// using bracketed-paste.
5−type PasteMsg struct {
6− Content string
7−}
8−
9−// String returns the pasted content as a string.
10−func (p PasteMsg) String() string {
11− return p.Content
12−}
13−
14−// PasteStartMsg is an message that is emitted when the terminal starts the
15−// bracketed-paste text.
16−type PasteStartMsg struct{}
17−
18−// PasteEndMsg is an message that is emitted when the terminal ends the
19−// bracketed-paste text.
20−type PasteEndMsg struct{}
vendor/charm.land/bubbletea/v2/profile.godeleted−15
@@ -1,15 +0,0 @@
1−package tea
2−
3−import "github.com/charmbracelet/colorprofile"
4−
5−// ColorProfileMsg is a message that describes the terminal's color profile.
6−// This message is send to the program's update function when the program is
7−// started.
8−//
9−// To upgrade the terminal color profile, use the `tea.RequestCapability`
10−// command to request the `RGB` and `Tc` terminfo capabilities. Bubble Tea will
11−// then cache the terminal's color profile and send a `ColorProfileMsg` to the
12−// program's update function.
13−type ColorProfileMsg struct {
14− colorprofile.Profile
15−}
vendor/charm.land/bubbletea/v2/raw.godeleted−37
@@ -1,37 +0,0 @@
1−package tea
2−
3−// RawMsg is a message that contains a string to be printed to the terminal
4−// without any intermediate processing.
5−type RawMsg struct {
6− Msg any
7−}
8−
9−// Raw is a command that prints the given string to the terminal without any
10−// formatting.
11−//
12−// This is intended for advanced use cases where you need to query the terminal
13−// or send escape sequences directly. Don't use this unless you know what
14−// you're doing :)
15−//
16−// Example:
17−//
18−// func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
19−// switch msg := msg.(type) {
20−// case input.PrimaryDeviceAttributesEvent:
21−// for _, attr := range msg {
22−// if attr == 4 {
23−// // We have Sixel graphics support!
24−// break
25−// }
26−// }
27−// }
28−//
29−// // Request the terminal primary device attributes to detect Sixel graphics
30−// // support.
31−// return m, tea.Raw(ansi.RequestPrimaryDeviceAttributes)
32−// }
33−func Raw(r any) Cmd {
34− return func() Msg {
35− return RawMsg{r}
36− }
37−}
vendor/charm.land/bubbletea/v2/renderer.godeleted−104
@@ -1,104 +0,0 @@
1−package tea
2−
3−import (
4− "fmt"
5−
6− "github.com/charmbracelet/colorprofile"
7− "github.com/charmbracelet/x/ansi"
8−)
9−
10−const (
11− // defaultFramerate specifies the maximum interval at which we should
12− // update the view.
13− defaultFPS = 60
14− maxFPS = 120
15−)
16−
17−// renderer is the interface for Bubble Tea renderers.
18−type renderer interface {
19− // start starts the renderer.
20− start()
21−
22− // close closes the renderer and flushes any remaining data.
23− close() error
24−
25− // render renders a frame to the output.
26− render(View)
27−
28− // flush flushes the renderer's buffer to the output.
29− flush(closing bool) error
30−
31− // reset resets the renderer's state to its initial state.
32− reset()
33−
34− // insertAbove inserts unmanaged lines above the renderer.
35− insertAbove(string) error
36−
37− // setSyncdUpdates sets whether to use synchronized updates.
38− setSyncdUpdates(bool)
39−
40− // setWidthMethod sets the method for calculating the width of the terminal.
41− setWidthMethod(ansi.Method)
42−
43− // resize notify the renderer of a terminal resize.
44− resize(int, int)
45−
46− // setColorProfile sets the color profile.
47− setColorProfile(colorprofile.Profile)
48−
49− // clearScreen clears the screen.
50− clearScreen()
51−
52− // writeString writes a string to the renderer's output.
53− writeString(string) (int, error)
54−
55− // onMouse handles a mouse event.
56− onMouse(MouseMsg) Cmd
57−}
58−
59−type printLineMessage struct {
60− messageBody string
61−}
62−
63−// Println prints above the Program. This output is unmanaged by the program and
64−// will persist across renders by the Program.
65−//
66−// Unlike fmt.Println (but similar to log.Println) the message will be print on
67−// its own line.
68−//
69−// If the altscreen is active no output will be printed.
70−func Println(args ...any) Cmd {
71− return func() Msg {
72− return printLineMessage{
73− messageBody: fmt.Sprint(args...),
74− }
75− }
76−}
77−
78−// Printf prints above the Program. It takes a format template followed by
79−// values similar to fmt.Printf. This output is unmanaged by the program and
80−// will persist across renders by the Program.
81−//
82−// Unlike fmt.Printf (but similar to log.Printf) the message will be print on
83−// its own line.
84−//
85−// If the altscreen is active no output will be printed.
86−func Printf(template string, args ...any) Cmd {
87− return func() Msg {
88− return printLineMessage{
89− messageBody: fmt.Sprintf(template, args...),
90− }
91− }
92−}
93−
94−// encodeCursorStyle returns the integer value for the given cursor style and
95−// blink state.
96−func encodeCursorStyle(style CursorShape, blink bool) int {
97− // We're using the ANSI escape sequence values for cursor styles.
98− // We need to map both [style] and [steady] to the correct value.
99− style = (style * 2) + 1 //nolint:mnd
100− if !blink {
101− style++
102− }
103− return int(style)
104−}
vendor/charm.land/bubbletea/v2/screen.godeleted−68
@@ -1,68 +0,0 @@
1−package tea
2−
3−import "github.com/charmbracelet/x/ansi"
4−
5−// WindowSizeMsg is used to report the terminal size. It's sent to Update once
6−// initially and then on every terminal resize. Note that Windows does not
7−// have support for reporting when resizes occur as it does not support the
8−// SIGWINCH signal.
9−type WindowSizeMsg struct {
10− Width int
11− Height int
12−}
13−
14−// ClearScreen is a special command that tells the program to clear the screen
15−// before the next update. This can be used to move the cursor to the top left
16−// of the screen and clear visual clutter when the alt screen is not in use.
17−//
18−// Note that it should never be necessary to call ClearScreen() for regular
19−// redraws.
20−func ClearScreen() Msg {
21− return clearScreenMsg{}
22−}
23−
24−// clearScreenMsg is an internal message that signals to clear the screen.
25−// You can send a clearScreenMsg with ClearScreen.
26−type clearScreenMsg struct{}
27−
28−// ModeReportMsg is a message that represents a mode report event (DECRPM).
29−//
30−// This is sent by the terminal in response to a request for a terminal mode
31−// report (DECRQM). It indicates the current setting of a specific terminal
32−// mode like cursor visibility, mouse tracking, etc.
33−//
34−// Example:
35−//
36−// ```go
37−// func (m model) Init() tea.Cmd {
38−// // Does my terminal support reporting focus events?
39−// return tea.Raw(ansi.RequestModeFocusEvent)
40−// }
41−//
42−// func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
43−// switch msg := msg.(type) {
44−// case tea.ModeReportMsg:
45−// if msg.Mode == ansi.ModeFocusEvent && !msg.Value.IsNotRecognized() {
46−// // Terminal supports focus events
47−// m.supportsFocus = true
48−// }
49−// }
50−// return m, nil
51−// }
52−//
53−// func (m model) View() tea.View {
54−// var view tea.View
55−// view.ReportFocus = m.supportsFocus
56−// view.SetContent(fmt.Sprintf("Terminal supports focus events: %v", m.supportsFocus))
57−// return view
58−// }
59−// ```
60−//
61−// See: https://vt100.net/docs/vt510-rm/DECRPM.html
62−type ModeReportMsg struct {
63− // Mode is the mode number.
64− Mode ansi.Mode
65−
66− // Value is the mode value.
67− Value ansi.ModeSetting
68−}
vendor/charm.land/bubbletea/v2/signals_unix.godeleted−33
@@ -1,33 +0,0 @@
1−//go:build darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || aix || zos
2−// +build darwin dragonfly freebsd linux netbsd openbsd solaris aix zos
3−
4−package tea
5−
6−import (
7− "os"
8− "os/signal"
9− "syscall"
10−)
11−
12−// listenForResize sends messages (or errors) when the terminal resizes.
13−// Argument output should be the file descriptor for the terminal; usually
14−// os.Stdout.
15−func (p *Program) listenForResize(done chan struct{}) {
16− sig := make(chan os.Signal, 1)
17− signal.Notify(sig, syscall.SIGWINCH)
18−
19− defer func() {
20− signal.Stop(sig)
21− close(done)
22− }()
23−
24− for {
25− select {
26− case <-p.ctx.Done():
27− return
28− case <-sig:
29− }
30−
31− p.checkResize()
32− }
33−}
vendor/charm.land/bubbletea/v2/signals_windows.godeleted−10
@@ -1,10 +0,0 @@
1−//go:build windows
2−// +build windows
3−
4−package tea
5−
6−// listenForResize is not available on windows because windows does not
7−// implement syscall.SIGWINCH.
8−func (p *Program) listenForResize(done chan struct{}) {
9− close(done)
10−}
vendor/charm.land/bubbletea/v2/tea.godeleted−1439
@@ -1,1439 +0,0 @@
1−// Package tea provides a framework for building rich terminal user interfaces
2−// based on the paradigms of The Elm Architecture. It's well-suited for simple
3−// and complex terminal applications, either inline, full-window, or a mix of
4−// both. It's been battle-tested in several large projects and is
5−// production-ready.
6−//
7−// A tutorial is available at https://github.com/charmbracelet/bubbletea/tree/master/tutorials
8−//
9−// Example programs can be found at https://github.com/charmbracelet/bubbletea/tree/master/examples
10−package tea
11−
12−import (
13− "bytes"
14− "context"
15− "errors"
16− "fmt"
17− "image/color"
18− "io"
19− "log"
20− "os"
21− "os/signal"
22− "runtime"
23− "runtime/debug"
24− "strconv"
25− "strings"
26− "sync"
27− "sync/atomic"
28− "syscall"
29− "time"
30−
31− "github.com/charmbracelet/colorprofile"
32− uv "github.com/charmbracelet/ultraviolet"
33− "github.com/charmbracelet/x/ansi"
34− "github.com/charmbracelet/x/term"
35− "github.com/muesli/cancelreader"
36−)
37−
38−// ErrProgramPanic is returned by [Program.Run] when the program recovers from a panic.
39−var ErrProgramPanic = errors.New("program experienced a panic")
40−
41−// ErrProgramKilled is returned by [Program.Run] when the program gets killed.
42−var ErrProgramKilled = errors.New("program was killed")
43−
44−// ErrInterrupted is returned by [Program.Run] when the program get a SIGINT
45−// signal, or when it receives a [InterruptMsg].
46−var ErrInterrupted = errors.New("program was interrupted")
47−
48−// Msg contain data from the result of a IO operation. Msgs trigger the update
49−// function and, henceforth, the UI.
50−type Msg = uv.Event
51−
52−// Model contains the program's state as well as its core functions.
53−type Model interface {
54− // Init is the first function that will be called. It returns an optional
55− // initial command. To not perform an initial command return nil.
56− Init() Cmd
57−
58− // Update is called when a message is received. Use it to inspect messages
59− // and, in response, update the model and/or send a command.
60− Update(Msg) (Model, Cmd)
61−
62− // View renders the program's UI, which can be a string or a [Layer]. The
63− // view is rendered after every Update.
64− View() View
65−}
66−
67−// NewView is a helper function to create a new [View] with the given styled
68−// string. A styled string represents text with styles and hyperlinks encoded
69−// as ANSI escape codes.
70−//
71−// Example:
72−//
73−// ```go
74−// v := tea.NewView("Hello, World!")
75−// ```
76−func NewView(s string) View {
77− var view View
78− view.SetContent(s)
79− return view
80−}
81−
82−// View represents a terminal view that can be composed of multiple layers.
83−// It can also contain a cursor that will be rendered on top of the layers.
84−type View struct {
85− // Content is the screen content of the view. It holds styled strings that
86− // will be rendered to the terminal when the view is rendered.
87− //
88− // A styled string represents text with styles and hyperlinks encoded as
89− // ANSI escape codes.
90− //
91− // Example:
92− //
93− // ```go
94− // v := tea.NewView("Hello, World!")
95− // ```
96− Content string
97−
98− // OnMouse is an optional mouse message handler that can be used to
99− // intercept mouse messages that depends on view content from last render.
100− // It can be useful for implementing view-specific behavior without
101− // breaking the unidirectional data flow of Bubble Tea.
102− //
103− // Example:
104− //
105− // ```go
106− // content := "Hello, World!"
107− // v := tea.NewView(content)
108− // v.OnMouse = func(msg tea.MouseMsg) tea.Cmd {
109− // return func() tea.Msg {
110− // m := msg.Mouse()
111− // // Check if the mouse is within the bounds of "World!"
112− // start := strings.Index(content, "World!")
113− // end := start + len("World!")
114− // if m.Y == 0 && m.X >= start && m.X < end {
115− // // Mouse is over "World!"
116− // return MyCustomMsg{
117− // MouseMsg: msg,
118− // }
119− // }
120− // }
121− // }
122− // return nil
123− // }
124− // return v
125− // ```
126− OnMouse func(msg MouseMsg) Cmd
127−
128− // Cursor represents the cursor position, style, and visibility on the
129− // screen. When not nil, the cursor will be shown at the specified
130− // position.
131− Cursor *Cursor
132−
133− // BackgroundColor when not nil, sets the terminal background color. Use
134− // nil to reset to the terminal's default background color.
135− BackgroundColor color.Color
136−
137− // ForegroundColor when not nil, sets the terminal foreground color. Use
138− // nil to reset to the terminal's default foreground color.
139− ForegroundColor color.Color
140−
141− // WindowTitle sets the terminal window title. Support depends on the
142− // terminal.
143− WindowTitle string
144−
145− // ProgressBar when not nil, shows a progress bar in the terminal's
146− // progress bar section. Support depends on the terminal.
147− ProgressBar *ProgressBar
148−
149− // AltScreen puts the program in the alternate screen buffer
150− // (i.e. the program goes into full window mode). Note that the altscreen will
151− // be automatically exited when the program quits.
152− //
153− // Example:
154− //
155− // func (m model) View() tea.View {
156− // v := tea.NewView("Hello, World!")
157− // v.AltScreen = true
158− // return v
159− // }
160− //
161− AltScreen bool
162−
163− // ReportFocus enables reporting when the terminal gains and loses focus.
164− // When this is enabled [FocusMsg] and [BlurMsg] messages will be sent to
165− // your Update method.
166− //
167− // Note that while most terminals and multiplexers support focus reporting,
168− // some do not. Also note that tmux needs to be configured to report focus
169− // events.
170− ReportFocus bool
171−
172− // DisableBracketedPasteMode disables bracketed paste mode for this view.
173− DisableBracketedPasteMode bool
174−
175− // MouseMode sets the mouse mode for this view. It can be one of
176− // [MouseModeNone], [MouseModeCellMotion], or [MouseModeAllMotion].
177− MouseMode MouseMode
178−
179− // KeyboardEnhancements describes what keyboard enhancement features Bubble
180− // Tea should request from the terminal.
181− //
182− // Bubble Tea supports requesting the following keyboard enhancement features:
183− // - ReportEventTypes: requests the terminal to report key repeat and
184− // release events.
185− //
186− // If the terminal supports any of these features, your program will
187− // receive a [KeyboardEnhancementsMsg] that indicates which features are
188− // available.
189− KeyboardEnhancements KeyboardEnhancements
190−}
191−
192−// KeyboardEnhancements describes the requested keyboard enhancement features.
193−// If the terminal supports any of them, it will respond with a
194−// [KeyboardEnhancementsMsg] that indicates which features are supported.
195−
196−// KeyboardEnhancements defines different keyboard enhancement features that
197−// can be requested from the terminal.
198−
199−// KeyboardEnhancements defines different keyboard enhancement features that
200−// can be requested from the terminal.
201−//
202−// By default, Bubble Tea requests basic key disambiguation features from the
203−// terminal. If the terminal supports keyboard enhancements, or any of its
204−// additional features, it will respond with a [KeyboardEnhancementsMsg] that
205−// indicates which features are supported.
206−//
207−// Example:
208−//
209−// ```go
210−// func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
211−// switch msg := msg.(type) {
212−// case tea.KeyboardEnhancementsMsg:
213−// // We have basic key disambiguation support.
214−// // We can handle "shift+enter", "ctrl+i", etc.
215−// m.keyboardEnhancements = msg
216−// if msg.ReportEventTypes {
217−// // Even better! We can now handle key repeat and release events.
218−// }
219−// case tea.KeyPressMsg:
220−// switch msg.String() {
221−// case "shift+enter":
222−// // Handle shift+enter
223−// // This would not be possible without keyboard enhancements.
224−// case "ctrl+j":
225−// // Handle ctrl+j
226−// }
227−// case tea.KeyReleaseMsg:
228−// // Whoa! A key was released!
229−// }
230−//
231−// return m, nil
232−// }
233−//
234−// func (m model) View() tea.View {
235−// v := tea.NewView("Press some keys!")
236−// // Request reporting key repeat and release events.
237−// v.KeyboardEnhancements.ReportEventTypes = true
238−// return v
239−// }
240−// ```
241−type KeyboardEnhancements struct {
242− // ReportEventTypes requests the terminal to report key repeat and release
243− // events.
244− // If supported, your program will receive [KeyReleaseMsg]s and
245− // [KeyPressMsg] with the [Key.IsRepeat] field set indicating that this is
246− // a it's part of a key repeat sequence.
247− ReportEventTypes bool
248−
249− // ReportAlternateKeys requests the terminal to report alternate key values
250− // in addition to the main ones.
251− // Note that only key events represented as escape codes will affected by
252− // this enhancement.
253− ReportAlternateKeys bool
254−
255− // ReportAllKeysAsEscapeCodes requests the terminal to report all key
256− // events, including plain text keys, as escape codes.
257− // When this is enabled, text won't be sent as plain text but instead as
258− // escape codes that encode the key value and modifiers.
259− ReportAllKeysAsEscapeCodes bool
260−
261− // ReportAssociatedText requests the terminal to report the text associated
262− // with key events.
263− // Note that this is an enhancement to
264− // [KeyboardEnhancements.ReportAllKeysAsEscapeCodes] and only has an effect
265− // if that is enabled.
266− ReportAssociatedText bool
267−}
268−
269−// SetContent is a helper method to set the content of a [View] with a styled
270−// string. A styled string represents text with styles and hyperlinks encoded
271−// as ANSI escape codes.
272−//
273−// Example:
274−//
275−// ```go
276−// var v tea.View
277−// v.SetContent("Hello, World!")
278−// ```
279−func (v *View) SetContent(s string) {
280− v.Content = s
281−}
282−
283−// MouseMode represents the mouse mode of a view.
284−type MouseMode int
285−
286−const (
287− // MouseModeNone disables mouse events.
288− MouseModeNone MouseMode = iota
289−
290− // MouseModeCellMotion enables mouse click, release, and wheel events.
291− // Mouse movement events are also captured if a mouse button is pressed
292− // (i.e., drag events). Cell motion mode is better supported than all
293− // motion mode.
294− //
295− // This will try to enable the mouse in extended mode (SGR), if that is not
296− // supported by the terminal it will fall back to normal mode (X10).
297− MouseModeCellMotion
298−
299− // MouseModeAllMotion enables all mouse events, including click, release,
300− // wheel, and movement events. You will receive mouse movement events even
301− // when no buttons are pressed.
302− //
303− // This will try to enable the mouse in extended mode (SGR), if that is not
304− // supported by the terminal it will fall back to normal mode (X10).
305− MouseModeAllMotion
306−)
307−
308−// ProgressBarState represents the state of the progress bar.
309−type ProgressBarState int
310−
311−// Progress bar states.
312−const (
313− ProgressBarNone ProgressBarState = iota
314− ProgressBarDefault
315− ProgressBarError
316− ProgressBarIndeterminate
317− ProgressBarWarning
318−)
319−
320−// String return a human-readable value for the given [ProgressBarState].
321−func (s ProgressBarState) String() string {
322− return [...]string{
323− "None",
324− "Default",
325− "Error",
326− "Indeterminate",
327− "Warning",
328− }[s]
329−}
330−
331−// ProgressBar represents the terminal progress bar.
332−//
333−// Support depends on the terminal.
334−//
335−// See https://learn.microsoft.com/en-us/windows/terminal/tutorials/progress-bar-sequences
336−type ProgressBar struct {
337− // State is the current state of the progress bar. It can be one of
338− // [ProgressBarNone], [ProgressBarDefault], [ProgressBarError],
339− // [ProgressBarIndeterminate], and [ProgressBarWarn].
340− State ProgressBarState
341− // Value is the current value of the progress bar. It should be between
342− // 0 and 100.
343− Value int
344−}
345−
346−// NewProgressBar returns a new progress bar with the given state and value.
347−// The value is ignored if the state is [ProgressBarNone] or
348−// [ProgressBarIndeterminate].
349−func NewProgressBar(state ProgressBarState, value int) *ProgressBar {
350− return &ProgressBar{
351− State: state,
352− Value: min(max(value, 0), 100),
353− }
354−}
355−
356−// Cursor represents a cursor on the terminal screen.
357−type Cursor struct {
358− // Position is a [Position] that determines the cursor's position on the
359− // screen relative to the top left corner of the frame.
360− Position
361−
362− // Color is a [color.Color] that determines the cursor's color.
363− Color color.Color
364−
365− // Shape is a [CursorShape] that determines the cursor's shape.
366− Shape CursorShape
367−
368− // Blink is a boolean that determines whether the cursor should blink.
369− Blink bool
370−}
371−
372−// NewCursor returns a new cursor with the default settings and the given
373−// position.
374−func NewCursor(x, y int) *Cursor {
375− return &Cursor{
376− Position: Position{X: x, Y: y},
377− Color: nil,
378− Shape: CursorBlock,
379− Blink: true,
380− }
381−}
382−
383−// Cmd is an IO operation that returns a message when it's complete. If it's
384−// nil it's considered a no-op. Use it for things like HTTP requests, timers,
385−// saving and loading from disk, and so on.
386−//
387−// Note that there's almost never a reason to use a command to send a message
388−// to another part of your program. That can almost always be done in the
389−// update function.
390−type Cmd func() Msg
391−
392−// channelHandlers manages the series of channels returned by various processes.
393−// It allows us to wait for those processes to terminate before exiting the
394−// program.
395−type channelHandlers struct {
396− handlers []chan struct{}
397− mu sync.RWMutex
398−}
399−
400−// Adds a channel to the list of handlers. We wait for all handlers to terminate
401−// gracefully on shutdown.
402−func (h *channelHandlers) add(ch chan struct{}) {
403− h.mu.Lock()
404− h.handlers = append(h.handlers, ch)
405− h.mu.Unlock()
406−}
407−
408−// shutdown waits for all handlers to terminate.
409−func (h *channelHandlers) shutdown() {
410− var wg sync.WaitGroup
411−
412− h.mu.RLock()
413− defer h.mu.RUnlock()
414−
415− for _, ch := range h.handlers {
416− wg.Add(1)
417− go func(ch chan struct{}) {
418− <-ch
419− wg.Done()
420− }(ch)
421− }
422− wg.Wait()
423−}
424−
425−// Program is a terminal user interface.
426−type Program struct {
427− // disableInput disables all input. This is useful for programs that
428− // don't need input, like a progress bar or a spinner.
429− disableInput bool
430−
431− // disableSignalHandler disables the signal handler that Bubble Tea sets up
432− // for Programs. This is useful if you want to handle signals yourself.
433− disableSignalHandler bool
434−
435− // disableCatchPanics disables the panic catching that Bubble Tea does by
436− // default. If panic catching is disabled the terminal will be in a fairly
437− // unusable state after a panic because Bubble Tea will not perform its usual
438− // cleanup on exit.
439− disableCatchPanics bool
440−
441− // filter supplies an event filter that will be invoked before Bubble Tea
442− // processes a tea.Msg. The event filter can return any tea.Msg which will
443− // then get handled by Bubble Tea instead of the original event. If the
444− // event filter returns nil, the event will be ignored and Bubble Tea will
445− // not process it.
446− //
447− // As an example, this could be used to prevent a program from shutting
448− // down if there are unsaved changes.
449− //
450− // Example:
451− //
452− // func filter(m tea.Model, msg tea.Msg) tea.Msg {
453− // if _, ok := msg.(tea.QuitMsg); !ok {
454− // return msg
455− // }
456− //
457− // model := m.(myModel)
458− // if model.hasChanges {
459− // return nil
460− // }
461− //
462− // return msg
463− // }
464− //
465− // p := tea.NewProgram(Model{});
466− // p.filter = filter
467− //
468− // if _,err := p.Run(context.Background()); err != nil {
469− // fmt.Println("Error running program:", err)
470− // os.Exit(1)
471− // }
472− filter func(Model, Msg) Msg
473−
474− // fps sets a custom maximum fps at which the renderer should run. If less
475− // than 1, the default value of 60 will be used. If over 120, the fps will
476− // be capped at 120.
477− fps int
478−
479− // initialModel is the initial model for the program and is the only
480− // required field when creating a new program.
481− initialModel Model
482−
483− // disableRenderer prevents the program from rendering to the terminal.
484− // This can be useful for running daemon-like programs that don't require a
485− // UI but still want to take advantage of Bubble Tea's architecture.
486− disableRenderer bool
487−
488− // handlers is a list of channels that need to be waited on before the
489− // program can exit.
490− handlers channelHandlers
491−
492− // ctx is the programs's internal context for signalling internal teardown.
493− // It is built and derived from the externalCtx in NewProgram().
494− ctx context.Context
495− cancel context.CancelFunc
496−
497− // externalCtx is a context that was passed in via WithContext, otherwise defaulting
498− // to ctx.Background() (in case it was not), the internal context is derived from it.
499− externalCtx context.Context
500−
501− msgs chan Msg
502− errs chan error
503− finished chan struct{}
504− shutdownOnce sync.Once
505−
506− profile *colorprofile.Profile // the terminal color profile
507−
508− // where to send output, this will usually be os.Stdout.
509− output io.Writer
510− outputBuf bytes.Buffer // buffer used to queue commands to be sent to the output
511−
512− // ttyOutput is null if output is not a TTY.
513− ttyOutput term.File
514− previousOutputState *term.State
515− renderer renderer
516−
517− // the environment variables for the program, defaults to os.Environ().
518− environ uv.Environ
519− // the program's logger for debugging.
520− logger uv.Logger
521−
522− // where to read inputs from, this will usually be os.Stdin.
523− input io.Reader
524− // ttyInput is null if input is not a TTY.
525− ttyInput term.File
526− previousTtyInputState *term.State
527− cancelReader cancelreader.CancelReader
528− inputScanner *uv.TerminalReader
529− readLoopDone chan struct{}
530−
531− // modes keeps track of terminal modes that have been enabled or disabled.
532− ignoreSignals uint32
533−
534− // ticker is the ticker that will be used to write to the renderer.
535− ticker *time.Ticker
536−
537− // once is used to stop the renderer.
538− once sync.Once
539−
540− // rendererDone is used to stop the renderer.
541− rendererDone chan struct{}
542−
543− // Initial window size. Mainly used for testing.
544− width, height int
545−
546− // whether to use hard tabs to optimize cursor movements
547− useHardTabs bool
548− // whether to use backspace to optimize cursor movements
549− useBackspace bool
550−
551− mu sync.Mutex
552−}
553−
554−// Quit is a special command that tells the Bubble Tea program to exit.
555−func Quit() Msg {
556− return QuitMsg{}
557−}
558−
559−// QuitMsg signals that the program should quit. You can send a [QuitMsg] with
560−// [Quit].
561−type QuitMsg struct{}
562−
563−// Suspend is a special command that tells the Bubble Tea program to suspend.
564−func Suspend() Msg {
565− return SuspendMsg{}
566−}
567−
568−// SuspendMsg signals the program should suspend.
569−// This usually happens when ctrl+z is pressed on common programs, but since
570−// bubbletea puts the terminal in raw mode, we need to handle it in a
571−// per-program basis.
572−//
573−// You can send this message with [Suspend()].
574−type SuspendMsg struct{}
575−
576−// ResumeMsg can be listen to do something once a program is resumed back
577−// from a suspend state.
578−type ResumeMsg struct{}
579−
580−// InterruptMsg signals the program should suspend.
581−// This usually happens when ctrl+c is pressed on common programs, but since
582−// bubbletea puts the terminal in raw mode, we need to handle it in a
583−// per-program basis.
584−//
585−// You can send this message with [Interrupt()].
586−type InterruptMsg struct{}
587−
588−// Interrupt is a special command that tells the Bubble Tea program to
589−// interrupt.
590−func Interrupt() Msg {
591− return InterruptMsg{}
592−}
593−
594−// NewProgram creates a new [Program].
595−func NewProgram(model Model, opts ...ProgramOption) *Program {
596− p := &Program{
597− initialModel: model,
598− msgs: make(chan Msg),
599− errs: make(chan error, 1),
600− rendererDone: make(chan struct{}),
601− }
602−
603− // Apply all options to the program.
604− for _, opt := range opts {
605− opt(p)
606− }
607−
608− // A context can be provided with a ProgramOption, but if none was provided
609− // we'll use the default background context.
610− if p.externalCtx == nil {
611− p.externalCtx = context.Background()
612− }
613− // Initialize context and teardown channel.
614− p.ctx, p.cancel = context.WithCancel(p.externalCtx)
615−
616− // if no output was set, set it to stdout
617− if p.output == nil {
618− p.output = os.Stdout
619− }
620−
621− // if no environment was set, set it to os.Environ()
622− if p.environ == nil {
623− p.environ = os.Environ()
624− }
625−
626− if p.fps < 1 {
627− p.fps = defaultFPS
628− } else if p.fps > maxFPS {
629− p.fps = maxFPS
630− }
631−
632− tracePath, traceOk := os.LookupEnv("TEA_TRACE")
633− if traceOk && len(tracePath) > 0 {
634− // We have a trace filepath.
635− if f, err := os.OpenFile(tracePath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0o600); err == nil {
636− p.logger = log.New(f, "bubbletea: ", log.LstdFlags|log.Lshortfile)
637− }
638− }
639−
640− return p
641−}
642−
643−func (p *Program) handleSignals() chan struct{} {
644− ch := make(chan struct{})
645−
646− // Listen for SIGINT and SIGTERM.
647− //
648− // In most cases ^C will not send an interrupt because the terminal will be
649− // in raw mode and ^C will be captured as a keystroke and sent along to
650− // Program.Update as a KeyMsg. When input is not a TTY, however, ^C will be
651− // caught here.
652− //
653− // SIGTERM is sent by unix utilities (like kill) to terminate a process.
654− go func() {
655− sig := make(chan os.Signal, 1)
656− signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
657− defer func() {
658− signal.Stop(sig)
659− close(ch)
660− }()
661−
662− for {
663− select {
664− case <-p.ctx.Done():
665− return
666−
667− case s := <-sig:
668− if atomic.LoadUint32(&p.ignoreSignals) == 0 {
669− switch s {
670− case syscall.SIGINT:
671− p.msgs <- InterruptMsg{}
672− default:
673− p.msgs <- QuitMsg{}
674− }
675− return
676− }
677− }
678− }
679− }()
680−
681− return ch
682−}
683−
684−// handleResize handles terminal resize events.
685−func (p *Program) handleResize() chan struct{} {
686− ch := make(chan struct{})
687−
688− if p.ttyOutput != nil {
689− // Listen for window resizes.
690− go p.listenForResize(ch)
691− } else {
692− close(ch)
693− }
694−
695− return ch
696−}
697−
698−// handleCommands runs commands in a goroutine and sends the result to the
699−// program's message channel.
700−func (p *Program) handleCommands(cmds chan Cmd) chan struct{} {
701− ch := make(chan struct{})
702−
703− go func() {
704− defer close(ch)
705−
706− for {
707− select {
708− case <-p.ctx.Done():
709− return
710−
711− case cmd := <-cmds:
712− if cmd == nil {
713− continue
714− }
715−
716− // Don't wait on these goroutines, otherwise the shutdown
717− // latency would get too large as a Cmd can run for some time
718− // (e.g. tick commands that sleep for half a second). It's not
719− // possible to cancel them so we'll have to leak the goroutine
720− // until Cmd returns.
721− go func() {
722− // Recover from panics.
723− if !p.disableCatchPanics {
724− defer func() {
725− if r := recover(); r != nil {
726− p.recoverFromPanic(r)
727− }
728− }()
729− }
730−
731− msg := cmd() // this can be long.
732− p.Send(msg)
733− }()
734− }
735− }
736− }()
737−
738− return ch
739−}
740−
741−// eventLoop is the central message loop. It receives and handles the default
742−// Bubble Tea messages, update the model and triggers redraws.
743−func (p *Program) eventLoop(model Model, cmds chan Cmd) (Model, error) {
744− for {
745− select {
746− case <-p.ctx.Done():
747− return model, nil
748−
749− case err := <-p.errs:
750− return model, err
751−
752− case msg := <-p.msgs:
753− msg = p.translateInputEvent(msg)
754−
755− // Filter messages.
756− if p.filter != nil {
757− msg = p.filter(model, msg)
758− }
759− if msg == nil {
760− continue
761− }
762−
763− // Handle special internal messages.
764− switch msg := msg.(type) {
765− case QuitMsg:
766− return model, nil
767−
768− case InterruptMsg:
769− return model, ErrInterrupted
770−
771− case SuspendMsg:
772− if suspendSupported {
773− p.suspend()
774− }
775−
776− case CapabilityMsg:
777− switch msg.Content {
778− case "RGB", "Tc":
779− if *p.profile != colorprofile.TrueColor {
780− tc := colorprofile.TrueColor
781− p.profile = &tc
782− go p.Send(ColorProfileMsg{*p.profile})
783− }
784− }
785−
786− case ModeReportMsg:
787− switch msg.Mode {
788− case ansi.ModeSynchronizedOutput:
789− if msg.Value == ansi.ModeReset {
790− // The terminal supports synchronized output and it's
791− // currently disabled, so we can enable it on the renderer.
792− p.renderer.setSyncdUpdates(true)
793− }
794− case ansi.ModeUnicodeCore:
795− if msg.Value == ansi.ModeReset || msg.Value == ansi.ModeSet || msg.Value == ansi.ModePermanentlySet {
796− p.renderer.setWidthMethod(ansi.GraphemeWidth)
797− }
798− }
799−
800− case MouseMsg:
801− switch msg.(type) {
802− case MouseClickMsg, MouseReleaseMsg, MouseWheelMsg, MouseMotionMsg:
803− // Only send mouse messages to the renderer if they are an
804− // actual mouse event.
805− if cmd := p.renderer.onMouse(msg); cmd != nil {
806− go p.Send(cmd())
807− }
808− }
809−
810− case readClipboardMsg:
811− p.execute(ansi.RequestSystemClipboard)
812−
813− case setClipboardMsg:
814− p.execute(ansi.SetSystemClipboard(string(msg)))
815−
816− case readPrimaryClipboardMsg:
817− p.execute(ansi.RequestPrimaryClipboard)
818−
819− case setPrimaryClipboardMsg:
820− p.execute(ansi.SetPrimaryClipboard(string(msg)))
821−
822− case backgroundColorMsg:
823− p.execute(ansi.RequestBackgroundColor)
824−
825− case foregroundColorMsg:
826− p.execute(ansi.RequestForegroundColor)
827−
828− case cursorColorMsg:
829− p.execute(ansi.RequestCursorColor)
830−
831− case execMsg:
832− // NB: this blocks.
833− p.exec(msg.cmd, msg.fn)
834−
835− case terminalVersion:
836− p.execute(ansi.RequestNameVersion)
837−
838− case requestCapabilityMsg:
839− p.execute(ansi.RequestTermcap(string(msg)))
840−
841− case BatchMsg:
842− go p.execBatchMsg(msg)
843− continue
844−
845− case sequenceMsg:
846− go p.execSequenceMsg(msg)
847− continue
848−
849− case WindowSizeMsg:
850− p.renderer.resize(msg.Width, msg.Height)
851−
852− case windowSizeMsg:
853− go p.checkResize()
854−
855− case requestCursorPosMsg:
856− p.execute(ansi.RequestCursorPositionReport)
857−
858− case RawMsg:
859− p.execute(fmt.Sprint(msg.Msg))
860−
861− case printLineMessage:
862− p.renderer.insertAbove(msg.messageBody) //nolint:errcheck,gosec
863−
864− case clearScreenMsg:
865− p.renderer.clearScreen()
866−
867− case ColorProfileMsg:
868− p.renderer.setColorProfile(msg.Profile)
869− }
870−
871− var cmd Cmd
872− model, cmd = model.Update(msg) // run update
873−
874− select {
875− case <-p.ctx.Done():
876− return model, nil
877− case cmds <- cmd: // process command (if any)
878− }
879−
880− p.render(model) // render view
881− }
882− }
883−}
884−
885−// render renders the given view to the renderer.
886−func (p *Program) render(model Model) {
887− if p.renderer != nil {
888− p.renderer.render(model.View()) // send view to renderer
889− }
890−}
891−
892−func (p *Program) execSequenceMsg(msg sequenceMsg) {
893− if !p.disableCatchPanics {
894− defer func() {
895− if r := recover(); r != nil {
896− p.recoverFromGoPanic(r)
897− }
898− }()
899− }
900−
901− // Execute commands one at a time, in order.
902− for _, cmd := range msg {
903− if cmd == nil {
904− continue
905− }
906− msg := cmd()
907− switch msg := msg.(type) {
908− case BatchMsg:
909− p.execBatchMsg(msg)
910− case sequenceMsg:
911− p.execSequenceMsg(msg)
912− default:
913− p.Send(msg)
914− }
915− }
916−}
917−
918−func (p *Program) execBatchMsg(msg BatchMsg) {
919− if !p.disableCatchPanics {
920− defer func() {
921− if r := recover(); r != nil {
922− p.recoverFromGoPanic(r)
923− }
924− }()
925− }
926−
927− // Execute commands one at a time.
928− var wg sync.WaitGroup
929− for _, cmd := range msg {
930− if cmd == nil {
931− continue
932− }
933− wg.Add(1)
934− go func() {
935− defer wg.Done()
936−
937− if !p.disableCatchPanics {
938− defer func() {
939− if r := recover(); r != nil {
940− p.recoverFromGoPanic(r)
941− }
942− }()
943− }
944−
945− msg := cmd()
946− switch msg := msg.(type) {
947− case BatchMsg:
948− p.execBatchMsg(msg)
949− case sequenceMsg:
950− p.execSequenceMsg(msg)
951− default:
952− p.Send(msg)
953− }
954− }()
955− }
956−
957− wg.Wait() // wait for all commands from batch msg to finish
958−}
959−
960−// shouldQuerySynchronizedOutput determines whether the terminal should be
961−// queried for various capabilities.
962−//
963−// This function checks for terminals that are known to support mode 2026,
964−// while excluding SSH sessions which may be unreliable, unless it's a
965−// known-good terminal like Windows Terminal.
966−//
967−// The function returns true for:
968−// - Terminals without TERM_PROGRAM set and not in SSH sessions
969−// - Windows Terminal (WT_SESSION is set)
970−// - Terminals with TERM_PROGRAM set (except Apple Terminal) and not in SSH sessions
971−// - Specific terminal types: ghostty, wezterm, alacritty, kitty, rio
972−func shouldQuerySynchronizedOutput(environ uv.Environ) bool {
973− termType := environ.Getenv("TERM")
974− termProg, okTermProg := environ.LookupEnv("TERM_PROGRAM")
975− _, okSSHTTY := environ.LookupEnv("SSH_TTY")
976− _, okWTSession := environ.LookupEnv("WT_SESSION")
977−
978− return (!okTermProg && !okSSHTTY) ||
979− okWTSession ||
980− (okTermProg && !strings.Contains(termProg, "Apple") && !okSSHTTY) ||
981− strings.Contains(termType, "ghostty") ||
982− strings.Contains(termType, "wezterm") ||
983− strings.Contains(termType, "alacritty") ||
984− strings.Contains(termType, "kitty") ||
985− strings.Contains(termType, "rio")
986−}
987−
988−// Run initializes the program and runs its event loops, blocking until it gets
989−// terminated by either [Program.Quit], [Program.Kill], or its signal handler.
990−// Returns the final model.
991−func (p *Program) Run() (returnModel Model, returnErr error) {
992− if p.initialModel == nil {
993− return nil, errors.New("bubbletea: InitialModel cannot be nil")
994− }
995−
996− // Initialize context and teardown channel.
997− p.handlers = channelHandlers{}
998− cmds := make(chan Cmd)
999−
1000− p.finished = make(chan struct{})
1001− defer func() {
1002− close(p.finished)
1003− }()
1004−
1005− defer p.cancel()
1006−
1007− if p.disableInput {
1008− p.input = nil
1009− } else if p.input == nil {
1010− p.input = os.Stdin
1011− if !term.IsTerminal(os.Stdin.Fd()) {
1012− ttyIn, _, err := OpenTTY()
1013− if err != nil {
1014− return p.initialModel, fmt.Errorf("bubbletea: error opening TTY: %w", err)
1015− }
1016− p.input = ttyIn
1017− }
1018− }
1019−
1020− // Handle signals.
1021− if !p.disableSignalHandler {
1022− p.handlers.add(p.handleSignals())
1023− }
1024−
1025− // Recover from panics.
1026− if !p.disableCatchPanics {
1027− defer func() {
1028− if r := recover(); r != nil {
1029− returnErr = fmt.Errorf("%w: %w", ErrProgramKilled, ErrProgramPanic)
1030− p.recoverFromPanic(r)
1031− }
1032− }()
1033− }
1034−
1035− // Check if output is a TTY before entering raw mode, hiding the cursor and
1036− // so on.
1037− if err := p.initTerminal(); err != nil {
1038− return p.initialModel, err
1039− }
1040−
1041− // Get the initial window size.
1042− width, height := p.width, p.height
1043− if p.ttyOutput != nil {
1044− // Set the initial size of the terminal.
1045− w, h, err := term.GetSize(p.ttyOutput.Fd())
1046− if err != nil {
1047− return p.initialModel, fmt.Errorf("bubbletea: error getting terminal size: %w", err)
1048− }
1049−
1050− width, height = w, h
1051− }
1052−
1053− p.width, p.height = width, height
1054− resizeMsg := WindowSizeMsg{Width: p.width, Height: p.height}
1055−
1056− if p.renderer == nil {
1057− if p.disableRenderer {
1058− p.renderer = &nilRenderer{}
1059− } else {
1060− // If no renderer is set use the cursed one.
1061− r := newCursedRenderer(
1062− p.output,
1063− p.environ,
1064− p.width,
1065− p.height,
1066− )
1067− r.setLogger(p.logger)
1068− // XXX: This breaks many things especially when we want the output
1069− // to be compatible with terminals that are not necessary a TTY.
1070− // This was originally done to work around a Wish emulated-pty
1071− // issue where when a PTY session is detected, and we don't
1072− // allocate a real PTY, the terminal settings (Termios and WinCon)
1073− // don't change and the we end up working in cooked mode instead of
1074− // raw mode. See issue #1572.
1075− mapNl := runtime.GOOS != "windows" && p.ttyInput == nil
1076− r.setOptimizations(p.useHardTabs, p.useBackspace, mapNl)
1077− p.renderer = r
1078− }
1079− }
1080−
1081− // Get the color profile and send it to the program.
1082− if p.profile == nil {
1083− cp := colorprofile.Detect(p.output, p.environ)
1084− p.profile = &cp
1085− }
1086−
1087− // Set the color profile on the renderer and send it to the program.
1088− p.renderer.setColorProfile(*p.profile)
1089− go p.Send(ColorProfileMsg{*p.profile})
1090−
1091− // Send the initial size to the program.
1092− go p.Send(resizeMsg)
1093− p.renderer.resize(resizeMsg.Width, resizeMsg.Height)
1094−
1095− // Send the environment variables used by the program.
1096− go p.Send(EnvMsg(p.environ))
1097−
1098− // Init the input reader and initial model.
1099− model := p.initialModel
1100− if p.input != nil {
1101− if err := p.initInputReader(false); err != nil {
1102− return model, err
1103− }
1104− }
1105−
1106− // Start the renderer.
1107− p.startRenderer()
1108−
1109− if !p.disableRenderer && shouldQuerySynchronizedOutput(p.environ) {
1110− // Query for synchronized updates support (mode 2026) and unicode core
1111− // (mode 2027). If the terminal supports it, the renderer will enable
1112− // it once we get the response.
1113− p.execute(ansi.RequestModeSynchronizedOutput +
1114− ansi.RequestModeUnicodeCore)
1115− }
1116−
1117− // Initialize the program.
1118− initCmd := model.Init()
1119− if initCmd != nil {
1120− ch := make(chan struct{})
1121− p.handlers.add(ch)
1122−
1123− go func() {
1124− defer close(ch)
1125−
1126− select {
1127− case cmds <- initCmd:
1128− case <-p.ctx.Done():
1129− }
1130− }()
1131− }
1132−
1133− // Render the initial view.
1134− p.render(model)
1135−
1136− // Handle resize events.
1137− p.handlers.add(p.handleResize())
1138−
1139− // Process commands.
1140− p.handlers.add(p.handleCommands(cmds))
1141−
1142− // Run event loop, handle updates and draw.
1143− var err error
1144− model, err = p.eventLoop(model, cmds)
1145−
1146− if err == nil && len(p.errs) > 0 {
1147− err = <-p.errs // Drain a leftover error in case eventLoop crashed.
1148− }
1149−
1150− killed := p.externalCtx.Err() != nil || p.ctx.Err() != nil || err != nil
1151− if killed {
1152− if err == nil && p.externalCtx.Err() != nil {
1153− // Return also as context error the cancellation of an external context.
1154− // This is the context the user knows about and should be able to act on.
1155− err = fmt.Errorf("%w: %w", ErrProgramKilled, p.externalCtx.Err())
1156− } else if err == nil && p.ctx.Err() != nil {
1157− // Return only that the program was killed (not the internal mechanism).
1158− // The user does not know or need to care about the internal program context.
1159− err = ErrProgramKilled
1160− } else {
1161− // Return that the program was killed and also the error that caused it.
1162− err = fmt.Errorf("%w: %w", ErrProgramKilled, err)
1163− }
1164− } else {
1165− // Graceful shutdown of the program (not killed):
1166− // Ensure we rendered the final state of the model.
1167− p.render(model)
1168− }
1169−
1170− // Restore terminal state.
1171− p.shutdown(killed)
1172−
1173− return model, err
1174−}
1175−
1176−// Send sends a message to the main update function, effectively allowing
1177−// messages to be injected from outside the program for interoperability
1178−// purposes.
1179−//
1180−// If the program hasn't started yet this will be a blocking operation.
1181−// If the program has already been terminated this will be a no-op, so it's safe
1182−// to send messages after the program has exited.
1183−func (p *Program) Send(msg Msg) {
1184− select {
1185− case <-p.ctx.Done():
1186− case p.msgs <- msg:
1187− }
1188−}
1189−
1190−// Quit is a convenience function for quitting Bubble Tea programs. Use it
1191−// when you need to shut down a Bubble Tea program from the outside.
1192−//
1193−// If you wish to quit from within a Bubble Tea program use the Quit command.
1194−//
1195−// If the program is not running this will be a no-op, so it's safe to call
1196−// if the program is unstarted or has already exited.
1197−func (p *Program) Quit() {
1198− p.Send(Quit())
1199−}
1200−
1201−// Kill stops the program immediately and restores the former terminal state.
1202−// The final render that you would normally see when quitting will be skipped.
1203−// [program.Run] returns a [ErrProgramKilled] error.
1204−func (p *Program) Kill() {
1205− p.shutdown(true)
1206−}
1207−
1208−// Wait waits/blocks until the underlying Program finished shutting down.
1209−func (p *Program) Wait() {
1210− <-p.finished
1211−}
1212−
1213−// execute writes the given sequence to the program output.
1214−func (p *Program) execute(seq string) {
1215− p.mu.Lock()
1216− _, _ = p.outputBuf.WriteString(seq)
1217− p.mu.Unlock()
1218−}
1219−
1220−// flush flushes the output buffer to the program output.
1221−func (p *Program) flush() error {
1222− p.mu.Lock()
1223− defer p.mu.Unlock()
1224−
1225− if p.outputBuf.Len() == 0 {
1226− return nil
1227− }
1228− if p.logger != nil {
1229− p.logger.Printf("output: %q", p.outputBuf.String())
1230− }
1231− _, err := p.output.Write(p.outputBuf.Bytes())
1232− p.outputBuf.Reset()
1233− if err != nil {
1234− return fmt.Errorf("error writing to output: %w", err)
1235− }
1236− return nil
1237−}
1238−
1239−// shutdown performs operations to free up resources and restore the terminal
1240−// to its original state.
1241−func (p *Program) shutdown(kill bool) {
1242− p.shutdownOnce.Do(func() {
1243− p.cancel()
1244−
1245− // Wait for all handlers to finish.
1246− p.handlers.shutdown()
1247−
1248− // Check if the cancel reader has been setup before waiting and closing.
1249− if p.cancelReader != nil {
1250− // Wait for input loop to finish.
1251− if p.cancelReader.Cancel() {
1252− if !kill {
1253− p.waitForReadLoop()
1254− }
1255− }
1256− _ = p.cancelReader.Close()
1257− }
1258−
1259− if p.renderer != nil {
1260− p.stopRenderer(kill)
1261− }
1262−
1263− _ = p.restoreTerminalState()
1264− })
1265−}
1266−
1267−// recoverFromPanic recovers from a panic, prints the stack trace, and restores
1268−// the terminal to a usable state.
1269−func (p *Program) recoverFromPanic(r interface{}) {
1270− select {
1271− case p.errs <- ErrProgramPanic:
1272− default:
1273− }
1274− p.shutdown(true) // Ok to call here, p.Run() cannot do it anymore.
1275− // We use "\r\n" to ensure the output is formatted even when restoring the
1276− // terminal does not work or when raw mode is still active.
1277− rec := strings.ReplaceAll(fmt.Sprintf("%s", r), "\n", "\r\n")
1278− fmt.Fprintf(os.Stderr, "Caught panic:\r\n\r\n%s\r\n\r\nRestoring terminal...\r\n\r\n", rec)
1279− stack := strings.ReplaceAll(fmt.Sprintf("%s\n", debug.Stack()), "\n", "\r\n")
1280− fmt.Fprint(os.Stderr, stack)
1281− if v, err := strconv.ParseBool(os.Getenv("TEA_DEBUG")); err == nil && v {
1282− f, err := os.Create(fmt.Sprintf("bubbletea-panic-%d.log", time.Now().Unix()))
1283− if err == nil {
1284− defer f.Close() //nolint:errcheck
1285− fmt.Fprintln(f, rec) //nolint:errcheck
1286− fmt.Fprintln(f) //nolint:errcheck
1287− fmt.Fprintln(f, stack) //nolint:errcheck
1288− }
1289− }
1290−}
1291−
1292−// recoverFromGoPanic recovers from a goroutine panic, prints a stack trace and
1293−// signals for the program to be killed and terminal restored to a usable state.
1294−func (p *Program) recoverFromGoPanic(r interface{}) {
1295− select {
1296− case p.errs <- ErrProgramPanic:
1297− default:
1298− }
1299− p.cancel()
1300− // We use "\r\n" to ensure the output is formatted even when restoring the
1301− // terminal does not work or when raw mode is still active.
1302− rec := strings.ReplaceAll(fmt.Sprintf("%s", r), "\n", "\r\n")
1303− fmt.Fprintf(os.Stderr, "Caught panic:\r\n\r\n%s\r\n\r\nRestoring terminal...\r\n\r\n", rec)
1304− stack := strings.ReplaceAll(fmt.Sprintf("%s\n", debug.Stack()), "\n", "\r\n")
1305− fmt.Fprint(os.Stderr, stack)
1306− if v, err := strconv.ParseBool(os.Getenv("TEA_DEBUG")); err == nil && v {
1307− f, err := os.Create(fmt.Sprintf("bubbletea-panic-%d.log", time.Now().Unix()))
1308− if err == nil {
1309− defer f.Close() //nolint:errcheck
1310− fmt.Fprintln(f, rec) //nolint:errcheck
1311− fmt.Fprintln(f) //nolint:errcheck
1312− fmt.Fprintln(f, stack) //nolint:errcheck
1313− }
1314− }
1315−}
1316−
1317−// ReleaseTerminal restores the original terminal state and cancels the input
1318−// reader. You can return control to the Program with RestoreTerminal.
1319−func (p *Program) ReleaseTerminal() error {
1320− return p.releaseTerminal(false)
1321−}
1322−
1323−func (p *Program) releaseTerminal(reset bool) error {
1324− atomic.StoreUint32(&p.ignoreSignals, 1)
1325− if p.cancelReader != nil {
1326− p.cancelReader.Cancel()
1327− }
1328−
1329− p.waitForReadLoop()
1330−
1331− if p.renderer != nil {
1332− p.stopRenderer(false)
1333− if reset {
1334− p.renderer.reset()
1335− }
1336− }
1337−
1338− return p.restoreTerminalState()
1339−}
1340−
1341−// RestoreTerminal reinitializes the Program's input reader, restores the
1342−// terminal to the former state when the program was running, and repaints.
1343−// Use it to reinitialize a Program after running ReleaseTerminal.
1344−func (p *Program) RestoreTerminal() error {
1345− atomic.StoreUint32(&p.ignoreSignals, 0)
1346−
1347− if err := p.initTerminal(); err != nil {
1348− return err
1349− }
1350− if p.input != nil {
1351− if err := p.initInputReader(false); err != nil {
1352− return err
1353− }
1354− }
1355−
1356− p.startRenderer()
1357−
1358− // If the output is a terminal, it may have been resized while another
1359− // process was at the foreground, in which case we may not have received
1360− // SIGWINCH. Detect any size change now and propagate the new size as
1361− // needed.
1362− go p.checkResize()
1363−
1364− // Flush queued commands.
1365− return p.flush()
1366−}
1367−
1368−// Println prints above the Program. This output is unmanaged by the program
1369−// and will persist across renders by the Program.
1370−//
1371−// If the altscreen is active no output will be printed.
1372−func (p *Program) Println(args ...any) {
1373− p.msgs <- printLineMessage{
1374− messageBody: fmt.Sprint(args...),
1375− }
1376−}
1377−
1378−// Printf prints above the Program. It takes a format template followed by
1379−// values similar to fmt.Printf. This output is unmanaged by the program and
1380−// will persist across renders by the Program.
1381−//
1382−// Unlike fmt.Printf (but similar to log.Printf) the message will be print on
1383−// its own line.
1384−//
1385−// If the altscreen is active no output will be printed.
1386−func (p *Program) Printf(template string, args ...any) {
1387− p.msgs <- printLineMessage{
1388− messageBody: fmt.Sprintf(template, args...),
1389− }
1390−}
1391−
1392−// startRenderer starts the renderer.
1393−func (p *Program) startRenderer() {
1394− framerate := time.Second / time.Duration(p.fps)
1395− if p.ticker == nil {
1396− p.ticker = time.NewTicker(framerate)
1397− } else {
1398− // If the ticker already exists, it has been stopped and we need to
1399− // reset it.
1400− p.ticker.Reset(framerate)
1401− }
1402−
1403− // Since the renderer can be restarted after a stop, we need to reset
1404− // the done channel and its corresponding sync.Once.
1405− p.once = sync.Once{}
1406−
1407− // Start the renderer.
1408− p.renderer.start()
1409− go func() {
1410− for {
1411− select {
1412− case <-p.rendererDone:
1413− p.ticker.Stop()
1414− return
1415−
1416− case <-p.ticker.C:
1417− _ = p.flush()
1418− _ = p.renderer.flush(false)
1419− }
1420− }
1421− }()
1422−}
1423−
1424−// stopRenderer stops the renderer.
1425−// If kill is true, the renderer will be stopped immediately without flushing
1426−// the last frame.
1427−func (p *Program) stopRenderer(kill bool) {
1428− // Stop the renderer before acquiring the mutex to avoid a deadlock.
1429− p.once.Do(func() {
1430− p.rendererDone <- struct{}{}
1431− })
1432−
1433− if !kill {
1434− // flush locks the mutex
1435− _ = p.renderer.flush(true)
1436− }
1437−
1438− _ = p.renderer.close()
1439−}
vendor/charm.land/bubbletea/v2/termcap.godeleted−48
@@ -1,48 +0,0 @@
1−package tea
2−
3−// requestCapabilityMsg is an internal message that requests the terminal to
4−// send its Termcap/Terminfo response.
5−type requestCapabilityMsg string
6−
7−// RequestCapability is a command that requests the terminal to send its
8−// Termcap/Terminfo response for the given capability.
9−//
10−// Bubble Tea recognizes the following capabilities and will use them to
11−// upgrade the program's color profile:
12−// - "RGB" Xterm direct color
13−// - "Tc" True color support
14−//
15−// Note: that some terminal's like Apple's Terminal.app do not support this and
16−// will send the wrong response to the terminal breaking the program's output.
17−//
18−// When the Bubble Tea advertises a non-TrueColor profile, you can use this
19−// command to query the terminal for its color capabilities. Example:
20−//
21−// switch msg := msg.(type) {
22−// case tea.ColorProfileMsg:
23−// if msg.Profile != colorprofile.TrueColor {
24−// return m, tea.Batch(
25−// tea.RequestCapability("RGB"),
26−// tea.RequestCapability("Tc"),
27−// )
28−// }
29−// }
30−func RequestCapability(s string) Cmd {
31− return func() Msg {
32− return requestCapabilityMsg(s)
33− }
34−}
35−
36−// CapabilityMsg represents a Termcap/Terminfo response event. Termcap
37−// responses are generated by the terminal in response to RequestTermcap
38−// (XTGETTCAP) requests.
39−//
40−// See: https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-Operating-System-Commands
41−type CapabilityMsg struct {
42− Content string
43−}
44−
45−// String returns the capability content as a string.
46−func (c CapabilityMsg) String() string {
47− return c.Content
48−}
vendor/charm.land/bubbletea/v2/termios_bsd.godeleted−13
@@ -1,13 +0,0 @@
1−//go:build dragonfly || freebsd
2−// +build dragonfly freebsd
3−
4−package tea
5−
6−import (
7− "github.com/charmbracelet/x/term"
8− "golang.org/x/sys/unix"
9−)
10−
11−func (p *Program) checkOptimizedMovements(s *term.State) {
12− p.useHardTabs = s.Oflag&unix.TABDLY == unix.TAB0
13−}
vendor/charm.land/bubbletea/v2/termios_other.godeleted−8
@@ -1,8 +0,0 @@
1−//go:build !windows && !darwin && !dragonfly && !freebsd && !linux && !solaris && !aix
2−// +build !windows,!darwin,!dragonfly,!freebsd,!linux,!solaris,!aix
3−
4−package tea
5−
6−import "github.com/charmbracelet/x/term"
7−
8−func (*Program) checkOptimizedMovements(*term.State) {}
vendor/charm.land/bubbletea/v2/termios_unix.godeleted−14
@@ -1,14 +0,0 @@
1−//go:build darwin || linux || solaris || aix
2−// +build darwin linux solaris aix
3−
4−package tea
5−
6−import (
7− "github.com/charmbracelet/x/term"
8− "golang.org/x/sys/unix"
9−)
10−
11−func (p *Program) checkOptimizedMovements(s *term.State) {
12− p.useHardTabs = s.Oflag&unix.TABDLY == unix.TAB0
13− p.useBackspace = s.Lflag&unix.BSDLY == unix.BS0
14−}
vendor/charm.land/bubbletea/v2/termios_windows.godeleted−11
@@ -1,11 +0,0 @@
1−//go:build windows
2−// +build windows
3−
4−package tea
5−
6−import "github.com/charmbracelet/x/term"
7−
8−func (p *Program) checkOptimizedMovements(*term.State) {
9− p.useHardTabs = true
10− p.useBackspace = true
11−}
vendor/charm.land/bubbletea/v2/tty.godeleted−136
@@ -1,136 +0,0 @@
1−package tea
2−
3−import (
4− "fmt"
5− "os"
6− "time"
7−
8− uv "github.com/charmbracelet/ultraviolet"
9− "github.com/charmbracelet/x/term"
10−)
11−
12−func (p *Program) suspend() {
13− if err := p.releaseTerminal(true); err != nil {
14− // If we can't release input, abort.
15− return
16− }
17−
18− suspendProcess()
19−
20− _ = p.RestoreTerminal()
21− go p.Send(ResumeMsg{})
22−}
23−
24−func (p *Program) initTerminal() error {
25− if p.disableRenderer {
26− return nil
27− }
28− return p.initInput()
29−}
30−
31−// restoreTerminalState restores the terminal to the state prior to running the
32−// Bubble Tea program.
33−func (p *Program) restoreTerminalState() error {
34− // Flush queued commands.
35− _ = p.flush()
36−
37− return p.restoreInput()
38−}
39−
40−// restoreInput restores the tty input to its original state.
41−func (p *Program) restoreInput() error {
42− if p.ttyInput != nil && p.previousTtyInputState != nil {
43− if err := term.Restore(p.ttyInput.Fd(), p.previousTtyInputState); err != nil {
44− return fmt.Errorf("bubbletea: error restoring console: %w", err)
45− }
46− }
47− if p.ttyOutput != nil && p.previousOutputState != nil {
48− if err := term.Restore(p.ttyOutput.Fd(), p.previousOutputState); err != nil {
49− return fmt.Errorf("bubbletea: error restoring console: %w", err)
50− }
51− }
52− return nil
53−}
54−
55−// initInputReader (re)commences reading inputs.
56−func (p *Program) initInputReader(cancel bool) error {
57− if cancel && p.cancelReader != nil {
58− p.cancelReader.Cancel()
59− p.waitForReadLoop()
60− }
61−
62− term := p.environ.Getenv("TERM")
63−
64− // Initialize the input reader.
65− // This need to be done after the terminal has been initialized and set to
66− // raw mode.
67−
68− var err error
69− p.cancelReader, err = uv.NewCancelReader(p.input)
70− if err != nil {
71− return fmt.Errorf("bubbletea: could not create cancelable reader: %w", err)
72− }
73−
74− drv := uv.NewTerminalReader(p.cancelReader, term)
75− drv.SetLogger(p.logger)
76− p.inputScanner = drv
77− p.readLoopDone = make(chan struct{})
78−
79− go p.readLoop()
80−
81− return nil
82−}
83−
84−func (p *Program) readLoop() {
85− defer close(p.readLoopDone)
86−
87− if err := p.inputScanner.StreamEvents(p.ctx, p.msgs); err != nil {
88− select {
89− case <-p.ctx.Done():
90− return
91− case p.errs <- err:
92− }
93− }
94−}
95−
96−// waitForReadLoop waits for the cancelReader to finish its read loop.
97−func (p *Program) waitForReadLoop() {
98− select {
99− case <-p.readLoopDone:
100− case <-time.After(500 * time.Millisecond): //nolint:mnd
101− // The read loop hangs, which means the input
102− // cancelReader's cancel function has returned true even
103− // though it was not able to cancel the read.
104− }
105−}
106−
107−// checkResize detects the current size of the output and informs the program
108−// via a WindowSizeMsg.
109−func (p *Program) checkResize() {
110− if p.ttyOutput == nil {
111− // can't query window size
112− return
113− }
114−
115− w, h, err := term.GetSize(p.ttyOutput.Fd())
116− if err != nil {
117− select {
118− case <-p.ctx.Done():
119− case p.errs <- err:
120− }
121−
122− return
123− }
124−
125− p.width, p.height = w, h
126− p.Send(WindowSizeMsg{Width: w, Height: h})
127−}
128−
129−// OpenTTY opens the running terminal's TTY for reading and writing.
130−func OpenTTY() (*os.File, *os.File, error) {
131− in, out, err := uv.OpenTTY()
132− if err != nil {
133− return nil, nil, fmt.Errorf("bubbletea: could not open TTY: %w", err)
134− }
135− return in, out, nil
136−}
vendor/charm.land/bubbletea/v2/tty_unix.godeleted−47
@@ -1,47 +0,0 @@
1−//go:build darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || aix || zos
2−// +build darwin dragonfly freebsd linux netbsd openbsd solaris aix zos
3−
4−package tea
5−
6−import (
7− "fmt"
8− "os"
9− "os/signal"
10− "syscall"
11−
12− "github.com/charmbracelet/x/term"
13−)
14−
15−func (p *Program) initInput() (err error) {
16− // Check if input is a terminal
17− if f, ok := p.input.(term.File); ok && term.IsTerminal(f.Fd()) {
18− p.ttyInput = f
19− p.previousTtyInputState, err = term.MakeRaw(p.ttyInput.Fd())
20− if err != nil {
21− return fmt.Errorf("error entering raw mode: %w", err)
22− }
23−
24− // OPTIM: We can use hard tabs and backspaces to optimize cursor
25− // movements. This is based on termios settings support and whether
26− // they exist and enabled.
27− p.checkOptimizedMovements(p.previousTtyInputState)
28− }
29−
30− if f, ok := p.output.(term.File); ok && term.IsTerminal(f.Fd()) {
31− p.ttyOutput = f
32− }
33−
34− return nil
35−}
36−
37−const suspendSupported = true
38−
39−// Send SIGTSTP to the entire process group.
40−func suspendProcess() {
41− c := make(chan os.Signal, 1)
42− signal.Notify(c, syscall.SIGCONT)
43− defer signal.Stop(c)
44− _ = syscall.Kill(0, syscall.SIGTSTP)
45− // blocks until a CONT happens...
46− <-c
47−}
vendor/charm.land/bubbletea/v2/tty_windows.godeleted−64
@@ -1,64 +0,0 @@
1−//go:build windows
2−// +build windows
3−
4−package tea
5−
6−import (
7− "fmt"
8−
9− "github.com/charmbracelet/x/term"
10− "golang.org/x/sys/windows"
11−)
12−
13−func (p *Program) initInput() (err error) {
14− // Save stdin state and enable VT input
15− // We also need to enable VT
16− // input here.
17− if f, ok := p.input.(term.File); ok && term.IsTerminal(f.Fd()) {
18− p.ttyInput = f
19− p.previousTtyInputState, err = term.MakeRaw(p.ttyInput.Fd())
20− if err != nil {
21− return fmt.Errorf("error making terminal raw: %w", err)
22− }
23−
24− // Enable VT input
25− var mode uint32
26− if err := windows.GetConsoleMode(windows.Handle(p.ttyInput.Fd()), &mode); err != nil {
27− return fmt.Errorf("error getting console mode: %w", err)
28− }
29−
30− if err := windows.SetConsoleMode(windows.Handle(p.ttyInput.Fd()), mode|windows.ENABLE_VIRTUAL_TERMINAL_INPUT); err != nil {
31− return fmt.Errorf("error setting console mode: %w", err)
32− }
33− }
34−
35− // Save output screen buffer state and enable VT processing.
36− if f, ok := p.output.(term.File); ok && term.IsTerminal(f.Fd()) {
37− p.ttyOutput = f
38− p.previousOutputState, err = term.GetState(f.Fd())
39− if err != nil {
40− return fmt.Errorf("error getting terminal state: %w", err)
41− }
42−
43− var mode uint32
44− if err := windows.GetConsoleMode(windows.Handle(p.ttyOutput.Fd()), &mode); err != nil {
45− return fmt.Errorf("error getting console mode: %w", err)
46− }
47−
48− if err := windows.SetConsoleMode(windows.Handle(p.ttyOutput.Fd()),
49− mode|windows.ENABLE_VIRTUAL_TERMINAL_PROCESSING|
50− windows.DISABLE_NEWLINE_AUTO_RETURN); err != nil {
51− return fmt.Errorf("error setting console mode: %w", err)
52− }
53−
54− //nolint:godox
55− // TODO: check if we can optimize cursor movements on Windows.
56− p.checkOptimizedMovements(p.previousOutputState)
57− }
58−
59− return //nolint:nakedret
60−}
61−
62−const suspendSupported = false
63−
64−func suspendProcess() {}
vendor/charm.land/bubbletea/v2/xterm.godeleted−22
@@ -1,22 +0,0 @@
1−package tea
2−
3−// TerminalVersionMsg is a message that represents the terminal version.
4−type TerminalVersionMsg struct {
5− Name string
6−}
7−
8−// String returns the terminal name as a string.
9−func (t TerminalVersionMsg) String() string {
10− return t.Name
11−}
12−
13−// terminalVersion is an internal message that queries the terminal for its
14−// version using XTVERSION.
15−type terminalVersion struct{}
16−
17−// RequestTerminalVersion is a command that queries the terminal for its
18−// version using XTVERSION. Note that some terminals may not support this
19−// command.
20−func RequestTerminalVersion() Msg {
21− return terminalVersion{}
22−}
vendor/charm.land/catwalk/LICENSEdeleted−21
@@ -1,21 +0,0 @@
1−MIT License
2−
3−Copyright (c) 2025 Charmbracelet, Inc
4−
5−Permission is hereby granted, free of charge, to any person obtaining a copy
6−of this software and associated documentation files (the "Software"), to deal
7−in the Software without restriction, including without limitation the rights
8−to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9−copies of the Software, and to permit persons to whom the Software is
10−furnished to do so, subject to the following conditions:
11−
12−The above copyright notice and this permission notice shall be included in all
13−copies or substantial portions of the Software.
14−
15−THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16−IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17−FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18−AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19−LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20−OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21−SOFTWARE.
vendor/charm.land/catwalk/internal/providers/configs/aihubmix.jsondeleted−3746
@@ -1,3746 +0,0 @@
1−{
2− "name": "AIHubMix",
3− "id": "aihubmix",
4− "api_key": "$AIHUBMIX_API_KEY",
5− "api_endpoint": "https://aihubmix.com/v1",
6− "type": "openai-compat",
7− "default_large_model_id": "gpt-5",
8− "default_small_model_id": "gpt-5-nano",
9− "models": [
10− {
11− "id": "AiHubmix-Phi-4-mini-reasoning",
12− "name": "Aihubmix Phi 4 Mini (reasoning)",
13− "cost_per_1m_in": 0.12,
14− "cost_per_1m_out": 0.12,
15− "cost_per_1m_in_cached": 0,
16− "cost_per_1m_out_cached": 0,
17− "context_window": 128000,
18− "default_max_tokens": 4000,
19− "can_reason": false,
20− "supports_attachments": false
21− },
22− {
23− "id": "ByteDance-Seed/Seed-OSS-36B-Instruct",
24− "name": "Seed Oss 36B Instruct",
25− "cost_per_1m_in": 0.2,
26− "cost_per_1m_out": 0.534,
27− "cost_per_1m_in_cached": 0,
28− "cost_per_1m_out_cached": 0,
29− "context_window": 256000,
30− "default_max_tokens": 32000,
31− "can_reason": false,
32− "supports_attachments": true
33− },
34− {
35− "id": "DeepSeek-R1",
36− "name": "DeepSeek R1",
37− "cost_per_1m_in": 0.4,
38− "cost_per_1m_out": 2,
39− "cost_per_1m_in_cached": 0,
40− "cost_per_1m_out_cached": 0,
41− "context_window": 1638000,
42− "default_max_tokens": 163800,
43− "can_reason": false,
44− "supports_attachments": false
45− },
46− {
47− "id": "DeepSeek-V3",
48− "name": "DeepSeek V3",
49− "cost_per_1m_in": 0.272,
50− "cost_per_1m_out": 1.088,
51− "cost_per_1m_in_cached": 0,
52− "cost_per_1m_out_cached": 0,
53− "context_window": 1638000,
54− "default_max_tokens": 163800,
55− "can_reason": false,
56− "supports_attachments": false
57− },
58− {
59− "id": "DeepSeek-V3-Fast",
60− "name": "DeepSeek V3 Fast",
61− "cost_per_1m_in": 0.56,
62− "cost_per_1m_out": 2.24,
63− "cost_per_1m_in_cached": 0,
64− "cost_per_1m_out_cached": 0,
65− "context_window": 32000,
66− "default_max_tokens": 3200,
67− "can_reason": false,
68− "supports_attachments": false
69− },
70− {
71− "id": "DeepSeek-V3.1-Terminus",
72− "name": "DeepSeek V3.1 Terminus",
73− "cost_per_1m_in": 0.56,
74− "cost_per_1m_out": 1.68,
75− "cost_per_1m_in_cached": 0,
76− "cost_per_1m_out_cached": 0,
77− "context_window": 160000,
78− "default_max_tokens": 32000,
79− "can_reason": false,
80− "supports_attachments": false
81− },
82− {
83− "id": "DeepSeek-V3.1-Think",
84− "name": "DeepSeek V3.1 Thinking",
85− "cost_per_1m_in": 0.56,
86− "cost_per_1m_out": 1.68,
87− "cost_per_1m_in_cached": 0,
88− "cost_per_1m_out_cached": 0,
89− "context_window": 128000,
90− "default_max_tokens": 32000,
91− "can_reason": true,
92− "reasoning_levels": [
93− "low",
94− "medium",
95− "high"
96− ],
97− "default_reasoning_effort": "medium",
98− "supports_attachments": false
99− },
100− {
101− "id": "ERNIE-X1.1-Preview",
102− "name": "ERNIE X1.1 Preview",
103− "cost_per_1m_in": 0.136,
104− "cost_per_1m_out": 0.544,
105− "cost_per_1m_in_cached": 0,
106− "cost_per_1m_out_cached": 0,
107− "context_window": 119000,
108− "default_max_tokens": 11900,
109− "can_reason": true,
110− "reasoning_levels": [
111− "low",
112− "medium",
113− "high"
114− ],
115− "default_reasoning_effort": "medium",
116− "supports_attachments": false
117− },
118− {
119− "id": "aihub-Phi-4-mini-instruct",
120− "name": "Aihub Phi 4 Mini Instruct",
121− "cost_per_1m_in": 0.12,
122− "cost_per_1m_out": 0.48,
123− "cost_per_1m_in_cached": 0,
124− "cost_per_1m_out_cached": 0,
125− "context_window": 128000,
126− "default_max_tokens": 4000,
127− "can_reason": false,
128− "supports_attachments": false
129− },
130− {
131− "id": "aihub-Phi-4-multimodal-instruct",
132− "name": "Aihub Phi 4 Multimodal Instruct",
133− "cost_per_1m_in": 0.12,
134− "cost_per_1m_out": 0.48,
135− "cost_per_1m_in_cached": 0,
136− "cost_per_1m_out_cached": 0,
137− "context_window": 128000,
138− "default_max_tokens": 4000,
139− "can_reason": false,
140− "supports_attachments": true
141− },
142− {
143− "id": "anthropic-opus-4-6",
144− "name": "Anthropic Opus 4.6",
145− "cost_per_1m_in": 5,
146− "cost_per_1m_out": 25,
147− "cost_per_1m_in_cached": 6.25,
148− "cost_per_1m_out_cached": 0.5,
149− "context_window": 200000,
150− "default_max_tokens": 32000,
151− "can_reason": true,
152− "reasoning_levels": [
153− "low",
154− "medium",
155− "high"
156− ],
157− "default_reasoning_effort": "medium",
158− "supports_attachments": true
159− },
160− {
161− "id": "auto",
162− "name": "Auto",
163− "cost_per_1m_in": 2,
164− "cost_per_1m_out": 2,
165− "cost_per_1m_in_cached": 0,
166− "cost_per_1m_out_cached": 0,
167− "context_window": 1000000,
168− "default_max_tokens": 100000,
169− "can_reason": true,
170− "reasoning_levels": [
171− "low",
172− "medium",
173− "high"
174− ],
175− "default_reasoning_effort": "medium",
176− "supports_attachments": true
177− },
178− {
179− "id": "claude-3-7-sonnet",
180− "name": "Claude 3.7 Sonnet",
181− "cost_per_1m_in": 3.3,
182− "cost_per_1m_out": 16.5,
183− "cost_per_1m_in_cached": 0,
184− "cost_per_1m_out_cached": 0,
185− "context_window": 200000,
186− "default_max_tokens": 20000,
187− "can_reason": true,
188− "reasoning_levels": [
189− "low",
190− "medium",
191− "high"
192− ],
193− "default_reasoning_effort": "medium",
194− "supports_attachments": true
195− },
196− {
197− "id": "claude-fable-5",
198− "name": "Claude Fable 5",
199− "cost_per_1m_in": 11,
200− "cost_per_1m_out": 55,
201− "cost_per_1m_in_cached": 13.75,
202− "cost_per_1m_out_cached": 1.1,
203− "context_window": 1000000,
204− "default_max_tokens": 128000,
205− "can_reason": true,
206− "reasoning_levels": [
207− "low",
208− "medium",
209− "high"
210− ],
211− "default_reasoning_effort": "medium",
212− "supports_attachments": true
213− },
214− {
215− "id": "claude-haiku-4-5",
216− "name": "Claude Haiku 4.5",
217− "cost_per_1m_in": 1.1,
218− "cost_per_1m_out": 5.5,
219− "cost_per_1m_in_cached": 1.375,
220− "cost_per_1m_out_cached": 0.11,
221− "context_window": 204800,
222− "default_max_tokens": 20480,
223− "can_reason": true,
224− "reasoning_levels": [
225− "low",
226− "medium",
227− "high"
228− ],
229− "default_reasoning_effort": "medium",
230− "supports_attachments": true
231− },
232− {
233− "id": "claude-opus-4-1",
234− "name": "Claude Opus 4.1",
235− "cost_per_1m_in": 16.5,
236− "cost_per_1m_out": 82.5,
237− "cost_per_1m_in_cached": 0,
238− "cost_per_1m_out_cached": 0,
239− "context_window": 200000,
240− "default_max_tokens": 32000,
241− "can_reason": true,
242− "reasoning_levels": [
243− "low",
244− "medium",
245− "high"
246− ],
247− "default_reasoning_effort": "medium",
248− "supports_attachments": true
249− },
250− {
251− "id": "claude-opus-4-5",
252− "name": "Claude Opus 4.5",
253− "cost_per_1m_in": 5,
254− "cost_per_1m_out": 25,
255− "cost_per_1m_in_cached": 6.25,
256− "cost_per_1m_out_cached": 0.5,
257− "context_window": 200000,
258− "default_max_tokens": 32000,
259− "can_reason": true,
260− "reasoning_levels": [
261− "low",
262− "medium",
263− "high"
264− ],
265− "default_reasoning_effort": "medium",
266− "supports_attachments": true
267− },
268− {
269− "id": "claude-opus-4-5-think",
270− "name": "Claude Opus 4.5 Thinking",
271− "cost_per_1m_in": 5,
272− "cost_per_1m_out": 25,
273− "cost_per_1m_in_cached": 6.25,
274− "cost_per_1m_out_cached": 0.5,
275− "context_window": 200000,
276− "default_max_tokens": 32000,
277− "can_reason": true,
278− "reasoning_levels": [
279− "low",
280− "medium",
281− "high"
282− ],
283− "default_reasoning_effort": "medium",
284− "supports_attachments": true
285− },
286− {
287− "id": "claude-opus-4-6",
288− "name": "Claude Opus 4.6",
289− "cost_per_1m_in": 5,
290− "cost_per_1m_out": 25,
291− "cost_per_1m_in_cached": 6.25,
292− "cost_per_1m_out_cached": 0.5,
293− "context_window": 200000,
294− "default_max_tokens": 32000,
295− "can_reason": true,
296− "reasoning_levels": [
297− "low",
298− "medium",
299− "high"
300− ],
301− "default_reasoning_effort": "medium",
302− "supports_attachments": true
303− },
304− {
305− "id": "claude-opus-4-6-think",
306− "name": "Claude Opus 4.6 Thinking",
307− "cost_per_1m_in": 5,
308− "cost_per_1m_out": 25,
309− "cost_per_1m_in_cached": 6.25,
310− "cost_per_1m_out_cached": 0.5,
311− "context_window": 200000,
312− "default_max_tokens": 32000,
313− "can_reason": true,
314− "reasoning_levels": [
315− "low",
316− "medium",
317− "high"
318− ],
319− "default_reasoning_effort": "medium",
320− "supports_attachments": true
321− },
322− {
323− "id": "claude-opus-4-7",
324− "name": "Claude Opus 4.7",
325− "cost_per_1m_in": 5,
326− "cost_per_1m_out": 25,
327− "cost_per_1m_in_cached": 6.25,
328− "cost_per_1m_out_cached": 0.5,
329− "context_window": 200000,
330− "default_max_tokens": 32000,
331− "can_reason": true,
332− "reasoning_levels": [
333− "low",
334− "medium",
335− "high"
336− ],
337− "default_reasoning_effort": "medium",
338− "supports_attachments": true
339− },
340− {
341− "id": "claude-opus-4-7-think",
342− "name": "Claude Opus 4.7 Thinking",
343− "cost_per_1m_in": 5,
344− "cost_per_1m_out": 25,
345− "cost_per_1m_in_cached": 6.25,
346− "cost_per_1m_out_cached": 0.5,
347− "context_window": 200000,
348− "default_max_tokens": 32000,
349− "can_reason": true,
350− "reasoning_levels": [
351− "low",
352− "medium",
353− "high"
354− ],
355− "default_reasoning_effort": "medium",
356− "supports_attachments": true
357− },
358− {
359− "id": "claude-opus-4-8",
360− "name": "Claude Opus 4.8",
361− "cost_per_1m_in": 5,
362− "cost_per_1m_out": 25,
363− "cost_per_1m_in_cached": 6.25,
364− "cost_per_1m_out_cached": 0.5,
365− "context_window": 200000,
366− "default_max_tokens": 32000,
367− "can_reason": true,
368− "reasoning_levels": [
369− "low",
370− "medium",
371− "high"
372− ],
373− "default_reasoning_effort": "medium",
374− "supports_attachments": true
375− },
376− {
377− "id": "claude-opus-4-8-think",
378− "name": "Claude Opus 4.8 Thinking",
379− "cost_per_1m_in": 5,
380− "cost_per_1m_out": 25,
381− "cost_per_1m_in_cached": 6.25,
382− "cost_per_1m_out_cached": 0.5,
383− "context_window": 200000,
384− "default_max_tokens": 32000,
385− "can_reason": true,
386− "reasoning_levels": [
387− "low",
388− "medium",
389− "high"
390− ],
391− "default_reasoning_effort": "medium",
392− "supports_attachments": true
393− },
394− {
395− "id": "claude-sonnet-4-5",
396− "name": "Claude Sonnet 4.5",
397− "cost_per_1m_in": 3.3,
398− "cost_per_1m_out": 16.5,
399− "cost_per_1m_in_cached": 4.125,
400− "cost_per_1m_out_cached": 0.33,
401− "context_window": 1000000,
402− "default_max_tokens": 64000,
403− "can_reason": true,
404− "reasoning_levels": [
405− "low",
406− "medium",
407− "high"
408− ],
409− "default_reasoning_effort": "medium",
410− "supports_attachments": true
411− },
412− {
413− "id": "claude-sonnet-4-5-think",
414− "name": "Claude Sonnet 4.5 Thinking",
415− "cost_per_1m_in": 3.3,
416− "cost_per_1m_out": 16.5,
417− "cost_per_1m_in_cached": 4.125,
418− "cost_per_1m_out_cached": 0.33,
419− "context_window": 1000000,
420− "default_max_tokens": 64000,
421− "can_reason": true,
422− "reasoning_levels": [
423− "low",
424− "medium",
425− "high"
426− ],
427− "default_reasoning_effort": "medium",
428− "supports_attachments": true
429− },
430− {
431− "id": "claude-sonnet-4-6",
432− "name": "Claude Sonnet 4.6",
433− "cost_per_1m_in": 3,
434− "cost_per_1m_out": 15,
435− "cost_per_1m_in_cached": 3.75,
436− "cost_per_1m_out_cached": 0.3,
437− "context_window": 1000000,
438− "default_max_tokens": 64000,
439− "can_reason": true,
440− "reasoning_levels": [
441− "low",
442− "medium",
443− "high"
444− ],
445− "default_reasoning_effort": "medium",
446− "supports_attachments": true
447− },
448− {
449− "id": "claude-sonnet-4-6-think",
450− "name": "Claude Sonnet 4.6 Thinking",
451− "cost_per_1m_in": 3,
452− "cost_per_1m_out": 15,
453− "cost_per_1m_in_cached": 3.75,
454− "cost_per_1m_out_cached": 0.3,
455− "context_window": 200000,
456− "default_max_tokens": 32000,
457− "can_reason": true,
458− "reasoning_levels": [
459− "low",
460− "medium",
461− "high"
462− ],
463− "default_reasoning_effort": "medium",
464− "supports_attachments": true
465− },
466− {
467− "id": "claude-sonnet-5",
468− "name": "Claude Sonnet 5",
469− "cost_per_1m_in": 2,
470− "cost_per_1m_out": 10,
471− "cost_per_1m_in_cached": 2.5,
472− "cost_per_1m_out_cached": 0.2,
473− "context_window": 1000000,
474− "default_max_tokens": 128000,
475− "can_reason": true,
476− "reasoning_levels": [
477− "low",
478− "medium",
479− "high"
480− ],
481− "default_reasoning_effort": "medium",
482− "supports_attachments": true
483− },
484− {
485− "id": "coding-glm-4.6-free",
486− "name": "Coding GLM 4.6 (free)",
487− "cost_per_1m_in": 0,
488− "cost_per_1m_out": 0,
489− "cost_per_1m_in_cached": 0,
490− "cost_per_1m_out_cached": 0,
491− "context_window": 200000,
492− "default_max_tokens": 20000,
493− "can_reason": true,
494− "reasoning_levels": [
495− "low",
496− "medium",
497− "high"
498− ],
499− "default_reasoning_effort": "medium",
500− "supports_attachments": false
501− },
502− {
503− "id": "coding-minimax-m2",
504− "name": "Coding MiniMax M2",
505− "cost_per_1m_in": 0.2,
506− "cost_per_1m_out": 0.2,
507− "cost_per_1m_in_cached": 0,
508− "cost_per_1m_out_cached": 0,
509− "context_window": 204800,
510− "default_max_tokens": 13100,
511− "can_reason": true,
512− "reasoning_levels": [
513− "low",
514− "medium",
515− "high"
516− ],
517− "default_reasoning_effort": "medium",
518− "supports_attachments": false
519− },
520− {
521− "id": "coding-minimax-m2-free",
522− "name": "Coding MiniMax M2 (free)",
523− "cost_per_1m_in": 0,
524− "cost_per_1m_out": 0,
525− "cost_per_1m_in_cached": 0,
526− "cost_per_1m_out_cached": 0,
527− "context_window": 204800,
528− "default_max_tokens": 13100,
529− "can_reason": true,
530− "reasoning_levels": [
531− "low",
532− "medium",
533− "high"
534− ],
535− "default_reasoning_effort": "medium",
536− "supports_attachments": false
537− },
538− {
539− "id": "coding-minimax-m2.1",
540− "name": "Coding MiniMax M2.1",
541− "cost_per_1m_in": 0.2,
542− "cost_per_1m_out": 0.2,
543− "cost_per_1m_in_cached": 0,
544− "cost_per_1m_out_cached": 0,
545− "context_window": 204800,
546− "default_max_tokens": 13100,
547− "can_reason": true,
548− "reasoning_levels": [
549− "low",
550− "medium",
551− "high"
552− ],
553− "default_reasoning_effort": "medium",
554− "supports_attachments": false
555− },
556− {
557− "id": "coding-minimax-m2.1-free",
558− "name": "Coding MiniMax M2.1 (free)",
559− "cost_per_1m_in": 0,
560− "cost_per_1m_out": 0,
561− "cost_per_1m_in_cached": 0,
562− "cost_per_1m_out_cached": 0,
563− "context_window": 204800,
564− "default_max_tokens": 13100,
565− "can_reason": true,
566− "reasoning_levels": [
567− "low",
568− "medium",
569− "high"
570− ],
571− "default_reasoning_effort": "medium",
572− "supports_attachments": false
573− },
574− {
575− "id": "coding-minimax-m2.5",
576− "name": "Coding MiniMax M2.5",
577− "cost_per_1m_in": 0.2,
578− "cost_per_1m_out": 0.2,
579− "cost_per_1m_in_cached": 0,
580− "cost_per_1m_out_cached": 0,
581− "context_window": 204800,
582− "default_max_tokens": 13100,
583− "can_reason": true,
584− "reasoning_levels": [
585− "low",
586− "medium",
587− "high"
588− ],
589− "default_reasoning_effort": "medium",
590− "supports_attachments": false
591− },
592− {
593− "id": "coding-minimax-m2.5-free",
594− "name": "Coding MiniMax M2.5 (free)",
595− "cost_per_1m_in": 0,
596− "cost_per_1m_out": 0,
597− "cost_per_1m_in_cached": 0,
598− "cost_per_1m_out_cached": 0,
599− "context_window": 204800,
600− "default_max_tokens": 13100,
601− "can_reason": true,
602− "reasoning_levels": [
603− "low",
604− "medium",
605− "high"
606− ],
607− "default_reasoning_effort": "medium",
608− "supports_attachments": false
609− },
610− {
611− "id": "coding-minimax-m2.5-highspeed",
612− "name": "Coding MiniMax M2.5 Highspeed",
613− "cost_per_1m_in": 0.2,
614− "cost_per_1m_out": 0.2,
615− "cost_per_1m_in_cached": 0,
616− "cost_per_1m_out_cached": 0,
617− "context_window": 204800,
618− "default_max_tokens": 13100,
619− "can_reason": true,
620− "reasoning_levels": [
621− "low",
622− "medium",
623− "high"
624− ],
625− "default_reasoning_effort": "medium",
626− "supports_attachments": false
627− },
628− {
629− "id": "coding-minimax-m2.7",
630− "name": "Coding MiniMax M2.7",
631− "cost_per_1m_in": 0.2,
632− "cost_per_1m_out": 0.2,
633− "cost_per_1m_in_cached": 0,
634− "cost_per_1m_out_cached": 0,
635− "context_window": 204800,
636− "default_max_tokens": 13100,
637− "can_reason": true,
638− "reasoning_levels": [
639− "low",
640− "medium",
641− "high"
642− ],
643− "default_reasoning_effort": "medium",
644− "supports_attachments": false
645− },
646− {
647− "id": "coding-minimax-m2.7-free",
648− "name": "Coding MiniMax M2.7 (free)",
649− "cost_per_1m_in": 0,
650− "cost_per_1m_out": 0,
651− "cost_per_1m_in_cached": 0,
652− "cost_per_1m_out_cached": 0,
653− "context_window": 204800,
654− "default_max_tokens": 13100,
655− "can_reason": true,
656− "reasoning_levels": [
657− "low",
658− "medium",
659− "high"
660− ],
661− "default_reasoning_effort": "medium",
662− "supports_attachments": false
663− },
664− {
665− "id": "coding-minimax-m2.7-highspeed",
666− "name": "Coding MiniMax M2.7 Highspeed",
667− "cost_per_1m_in": 0.2,
668− "cost_per_1m_out": 0.2,
669− "cost_per_1m_in_cached": 0,
670− "cost_per_1m_out_cached": 0,
671− "context_window": 204800,
672− "default_max_tokens": 13100,
673− "can_reason": true,
674− "reasoning_levels": [
675− "low",
676− "medium",
677− "high"
678− ],
679− "default_reasoning_effort": "medium",
680− "supports_attachments": false
681− },
682− {
683− "id": "coding-minimax-m3",
684− "name": "Coding MiniMax M3",
685− "cost_per_1m_in": 0.2,
686− "cost_per_1m_out": 0.2,
687− "cost_per_1m_in_cached": 0,
688− "cost_per_1m_out_cached": 0,
689− "context_window": 204800,
690− "default_max_tokens": 13100,
691− "can_reason": true,
692− "reasoning_levels": [
693− "low",
694− "medium",
695− "high"
696− ],
697− "default_reasoning_effort": "medium",
698− "supports_attachments": false
699− },
700− {
701− "id": "coding-minimax-m3-free",
702− "name": "Coding MiniMax M3 (free)",
703− "cost_per_1m_in": 0,
704− "cost_per_1m_out": 0,
705− "cost_per_1m_in_cached": 0,
706− "cost_per_1m_out_cached": 0,
707− "context_window": 204800,
708− "default_max_tokens": 13100,
709− "can_reason": true,
710− "reasoning_levels": [
711− "low",
712− "medium",
713− "high"
714− ],
715− "default_reasoning_effort": "medium",
716− "supports_attachments": false
717− },
718− {
719− "id": "coding-step-3.5-flash",
720− "name": "Coding Step 3.5 Flash",
721− "cost_per_1m_in": 0.03,
722− "cost_per_1m_out": 0.09,
723− "cost_per_1m_in_cached": 0,
724− "cost_per_1m_out_cached": 0,
725− "context_window": 256000,
726− "default_max_tokens": 25600,
727− "can_reason": false,
728− "supports_attachments": true
729− },
730− {
731− "id": "coding-step-3.5-flash-free",
732− "name": "Coding Step 3.5 Flash (free)",
733− "cost_per_1m_in": 0,
734− "cost_per_1m_out": 0,
735− "cost_per_1m_in_cached": 0,
736− "cost_per_1m_out_cached": 0,
737− "context_window": 256000,
738− "default_max_tokens": 25600,
739− "can_reason": false,
740− "supports_attachments": true
741− },
742− {
743− "id": "coding-step-3.7-flash",
744− "name": "Coding Step 3.7 Flash",
745− "cost_per_1m_in": 0.088,
746− "cost_per_1m_out": 0.528,
747− "cost_per_1m_in_cached": 0,
748− "cost_per_1m_out_cached": 0.0176,
749− "context_window": 256000,
750− "default_max_tokens": 25600,
751− "can_reason": false,
752− "supports_attachments": true
753− },
754− {
755− "id": "coding-step-3.7-flash-free",
756− "name": "Coding Step 3.7 Flash (free)",
757− "cost_per_1m_in": 0,
758− "cost_per_1m_out": 0,
759− "cost_per_1m_in_cached": 0,
760− "cost_per_1m_out_cached": 0,
761− "context_window": 256000,
762− "default_max_tokens": 25600,
763− "can_reason": false,
764− "supports_attachments": true
765− },
766− {
767− "id": "command-a-plus-05-2026",
768− "name": "Command A Plus 05 2026",
769− "cost_per_1m_in": 2.5,
770− "cost_per_1m_out": 10,
771− "cost_per_1m_in_cached": 0,
772− "cost_per_1m_out_cached": 0,
773− "context_window": 128000,
774− "default_max_tokens": 64000,
775− "can_reason": true,
776− "reasoning_levels": [
777− "low",
778− "medium",
779− "high"
780− ],
781− "default_reasoning_effort": "medium",
782− "supports_attachments": true
783− },
784− {
785− "id": "deepinfra-kimi-k2.7-code",
786− "name": "Deepinfra Kimi K2.7 Code",
787− "cost_per_1m_in": 0.814,
788− "cost_per_1m_out": 3.85022,
789− "cost_per_1m_in_cached": 0,
790− "cost_per_1m_out_cached": 0.16524,
791− "context_window": 256000,
792− "default_max_tokens": 25600,
793− "can_reason": true,
794− "reasoning_levels": [
795− "low",
796− "medium",
797− "high"
798− ],
799− "default_reasoning_effort": "medium",
800− "supports_attachments": true
801− },
802− {
803− "id": "deepseek-v3.2",
804− "name": "DeepSeek V3.2",
805− "cost_per_1m_in": 0.302,
806− "cost_per_1m_out": 0.453,
807− "cost_per_1m_in_cached": 0,
808− "cost_per_1m_out_cached": 0.0302,
809− "context_window": 128000,
810− "default_max_tokens": 64000,
811− "can_reason": true,
812− "reasoning_levels": [
813− "low",
814− "medium",
815− "high"
816− ],
817− "default_reasoning_effort": "medium",
818− "supports_attachments": false
819− },
820− {
821− "id": "deepseek-v3.2-think",
822− "name": "DeepSeek V3.2 Thinking",
823− "cost_per_1m_in": 0.302,
824− "cost_per_1m_out": 0.453,
825− "cost_per_1m_in_cached": 0,
826− "cost_per_1m_out_cached": 0.0302,
827− "context_window": 128000,
828− "default_max_tokens": 64000,
829− "can_reason": true,
830− "reasoning_levels": [
831− "low",
832− "medium",
833− "high"
834− ],
835− "default_reasoning_effort": "medium",
836− "supports_attachments": false
837− },
838− {
839− "id": "deepseek-v4-flash",
840− "name": "DeepSeek V4 Flash",
841− "cost_per_1m_in": 0.154,
842− "cost_per_1m_out": 0.308,
843− "cost_per_1m_in_cached": 0,
844− "cost_per_1m_out_cached": 0.00308,
845− "context_window": 1000000,
846− "default_max_tokens": 384000,
847− "can_reason": true,
848− "reasoning_levels": [
849− "low",
850− "medium",
851− "high"
852− ],
853− "default_reasoning_effort": "medium",
854− "supports_attachments": false
855− },
856− {
857− "id": "deepseek-v4-pro",
858− "name": "DeepSeek V4 Pro",
859− "cost_per_1m_in": 0.464,
860− "cost_per_1m_out": 0.928,
861− "cost_per_1m_in_cached": 0,
862− "cost_per_1m_out_cached": 0.00385,
863− "context_window": 1000000,
864− "default_max_tokens": 384000,
865− "can_reason": true,
866− "reasoning_levels": [
867− "low",
868− "medium",
869− "high"
870− ],
871− "default_reasoning_effort": "medium",
872− "supports_attachments": false
873− },
874− {
875− "id": "doubao-seed-1-6",
876− "name": "Doubao Seed 1.6",
877− "cost_per_1m_in": 0.18,
878− "cost_per_1m_out": 1.8,
879− "cost_per_1m_in_cached": 0,
880− "cost_per_1m_out_cached": 0.036,
881− "context_window": 256000,
882− "default_max_tokens": 32000,
883− "can_reason": false,
884− "supports_attachments": true
885− },
886− {
887− "id": "doubao-seed-1-6-flash",
888− "name": "Doubao Seed 1.6 Flash",
889− "cost_per_1m_in": 0.044,
890− "cost_per_1m_out": 0.44,
891− "cost_per_1m_in_cached": 0,
892− "cost_per_1m_out_cached": 0.0088,
893− "context_window": 256000,
894− "default_max_tokens": 33000,
895− "can_reason": false,
896− "supports_attachments": true
897− },
898− {
899− "id": "doubao-seed-1-6-lite",
900− "name": "Doubao Seed 1.6 Lite",
901− "cost_per_1m_in": 0.082,
902− "cost_per_1m_out": 0.656,
903− "cost_per_1m_in_cached": 0,
904− "cost_per_1m_out_cached": 0.0164,
905− "context_window": 256000,
906− "default_max_tokens": 32000,
907− "can_reason": false,
908− "supports_attachments": true
909− },
910− {
911− "id": "doubao-seed-1-6-thinking",
912− "name": "Doubao Seed 1.6 Thinking",
913− "cost_per_1m_in": 0.18,
914− "cost_per_1m_out": 1.8,
915− "cost_per_1m_in_cached": 0,
916− "cost_per_1m_out_cached": 0.036,
917− "context_window": 256000,
918− "default_max_tokens": 32000,
919− "can_reason": false,
920− "supports_attachments": true
921− },
922− {
923− "id": "doubao-seed-1-8",
924− "name": "Doubao Seed 1.8",
925− "cost_per_1m_in": 0.10959,
926− "cost_per_1m_out": 0.27398,
927− "cost_per_1m_in_cached": 0,
928− "cost_per_1m_out_cached": 0.02192,
929− "context_window": 256000,
930− "default_max_tokens": 64000,
931− "can_reason": true,
932− "reasoning_levels": [
933− "low",
934− "medium",
935− "high"
936− ],
937− "default_reasoning_effort": "medium",
938− "supports_attachments": true
939− },
940− {
941− "id": "doubao-seed-2-0-code-preview",
942− "name": "Doubao Seed 2.0 Code Preview",
943− "cost_per_1m_in": 0.4822,
944− "cost_per_1m_out": 2.411,
945− "cost_per_1m_in_cached": 0,
946− "cost_per_1m_out_cached": 0.09644,
947− "context_window": 256000,
948− "default_max_tokens": 128000,
949− "can_reason": true,
950− "reasoning_levels": [
951− "low",
952− "medium",
953− "high"
954− ],
955− "default_reasoning_effort": "medium",
956− "supports_attachments": true
957− },
958− {
959− "id": "doubao-seed-2-0-lite-260215",
960− "name": "Doubao Seed 2.0 Lite 260215",
961− "cost_per_1m_in": 0.09041,
962− "cost_per_1m_out": 0.54246,
963− "cost_per_1m_in_cached": 0,
964− "cost_per_1m_out_cached": 0.01808,
965− "context_window": 256000,
966− "default_max_tokens": 32000,
967− "can_reason": true,
968− "reasoning_levels": [
969− "low",
970− "medium",
971− "high"
972− ],
973− "default_reasoning_effort": "medium",
974− "supports_attachments": true
975− },
976− {
977− "id": "doubao-seed-2-0-lite-260428",
978− "name": "Doubao Seed 2.0 Lite 260428",
979− "cost_per_1m_in": 0.09041,
980− "cost_per_1m_out": 0.54246,
981− "cost_per_1m_in_cached": 0,
982− "cost_per_1m_out_cached": 0.01808,
983− "context_window": 256000,
984− "default_max_tokens": 32000,
985− "can_reason": true,
986− "reasoning_levels": [
987− "low",
988− "medium",
989− "high"
990− ],
991− "default_reasoning_effort": "medium",
992− "supports_attachments": true
993− },
994− {
995− "id": "doubao-seed-2-0-mini",
996− "name": "Doubao Seed 2.0 Mini",
997− "cost_per_1m_in": 0.03014,
998− "cost_per_1m_out": 0.30136,
999− "cost_per_1m_in_cached": 0,
1000− "cost_per_1m_out_cached": 0.00603,
1001− "context_window": 256000,
1002− "default_max_tokens": 32000,
1003− "can_reason": true,
1004− "reasoning_levels": [
1005− "low",
1006− "medium",
1007− "high"
1008− ],
1009− "default_reasoning_effort": "medium",
1010− "supports_attachments": true
1011− },
1012− {
1013− "id": "doubao-seed-2-0-mini-260428",
1014− "name": "Doubao Seed 2.0 Mini 260428",
1015− "cost_per_1m_in": 0.0282,
1016− "cost_per_1m_out": 0.282,
1017− "cost_per_1m_in_cached": 0,
1018− "cost_per_1m_out_cached": 0.00564,
1019− "context_window": 256000,
1020− "default_max_tokens": 32000,
1021− "can_reason": true,
1022− "reasoning_levels": [
1023− "low",
1024− "medium",
1025− "high"
1026− ],
1027− "default_reasoning_effort": "medium",
1028− "supports_attachments": true
1029− },
1030− {
1031− "id": "doubao-seed-2-0-pro",
1032− "name": "Doubao Seed 2.0 Pro",
1033− "cost_per_1m_in": 0.4822,
1034− "cost_per_1m_out": 2.411,
1035− "cost_per_1m_in_cached": 0,
1036− "cost_per_1m_out_cached": 0.09644,
1037− "context_window": 256000,
1038− "default_max_tokens": 128000,
1039− "can_reason": true,
1040− "reasoning_levels": [
1041− "low",
1042− "medium",
1043− "high"
1044− ],
1045− "default_reasoning_effort": "medium",
1046− "supports_attachments": true
1047− },
1048− {
1049− "id": "doubao-seed-2-1-pro",
1050− "name": "Doubao Seed 2.1 Pro",
1051− "cost_per_1m_in": 0.9295,
1052− "cost_per_1m_out": 4.6475,
1053− "cost_per_1m_in_cached": 0,
1054− "cost_per_1m_out_cached": 0.1859,
1055− "context_window": 256000,
1056− "default_max_tokens": 25600,
1057− "can_reason": true,
1058− "reasoning_levels": [
1059− "low",
1060− "medium",
1061− "high"
1062− ],
1063− "default_reasoning_effort": "medium",
1064− "supports_attachments": true
1065− },
1066− {
1067− "id": "doubao-seed-2-1-turbo",
1068− "name": "Doubao Seed 2.1 Turbo",
1069− "cost_per_1m_in": 0.46475,
1070− "cost_per_1m_out": 2.32375,
1071− "cost_per_1m_in_cached": 0,
1072− "cost_per_1m_out_cached": 0.09295,
1073− "context_window": 256000,
1074− "default_max_tokens": 25600,
1075− "can_reason": true,
1076− "reasoning_levels": [
1077− "low",
1078− "medium",
1079− "high"
1080− ],
1081− "default_reasoning_effort": "medium",
1082− "supports_attachments": true
1083− },
1084− {
1085− "id": "ernie-4.5",
1086− "name": "ERNIE 4.5",
1087− "cost_per_1m_in": 0.068,
1088− "cost_per_1m_out": 0.272,
1089− "cost_per_1m_in_cached": 0,
1090− "cost_per_1m_out_cached": 0,
1091− "context_window": 160000,
1092− "default_max_tokens": 64000,
1093− "can_reason": false,
1094− "supports_attachments": true
1095− },
1096− {
1097− "id": "ernie-4.5-turbo-latest",
1098− "name": "ERNIE 4.5 Turbo",
1099− "cost_per_1m_in": 0.11,
1100− "cost_per_1m_out": 0.44,
1101− "cost_per_1m_in_cached": 0,
1102− "cost_per_1m_out_cached": 0,
1103− "context_window": 135000,
1104− "default_max_tokens": 12000,
1105− "can_reason": false,
1106− "supports_attachments": true
1107− },
1108− {
1109− "id": "ernie-4.5-turbo-vl",
1110− "name": "ERNIE 4.5 Turbo VL",
1111− "cost_per_1m_in": 0.4,
1112− "cost_per_1m_out": 1.2,
1113− "cost_per_1m_in_cached": 0,
1114− "cost_per_1m_out_cached": 0,
1115− "context_window": 139000,
1116− "default_max_tokens": 16000,
1117− "can_reason": false,
1118− "supports_attachments": true
1119− },
1120− {
1121− "id": "ernie-5.0",
1122− "name": "ERNIE 5.0",
1123− "cost_per_1m_in": 0.82192,
1124− "cost_per_1m_out": 3.28768,
1125− "cost_per_1m_in_cached": 0,
1126− "cost_per_1m_out_cached": 0.82192,
1127− "context_window": 119000,
1128− "default_max_tokens": 11900,
1129− "can_reason": true,
1130− "reasoning_levels": [
1131− "low",
1132− "medium",
1133− "high"
1134− ],
1135− "default_reasoning_effort": "medium",
1136− "supports_attachments": true
1137− },
1138− {
1139− "id": "ernie-5.0-thinking-exp",
1140− "name": "ERNIE 5.0 Thinking Exp",
1141− "cost_per_1m_in": 0.82192,
1142− "cost_per_1m_out": 3.28768,
1143− "cost_per_1m_in_cached": 0,
1144− "cost_per_1m_out_cached": 0.82192,
1145− "context_window": 119000,
1146− "default_max_tokens": 11900,
1147− "can_reason": true,
1148− "reasoning_levels": [
1149− "low",
1150− "medium",
1151− "high"
1152− ],
1153− "default_reasoning_effort": "medium",
1154− "supports_attachments": true
1155− },
1156− {
1157− "id": "ernie-5.0-thinking-preview",
1158− "name": "ERNIE 5.0 Thinking Preview",
1159− "cost_per_1m_in": 0.822,
1160− "cost_per_1m_out": 3.288,
1161− "cost_per_1m_in_cached": 0,
1162− "cost_per_1m_out_cached": 0.822,
1163− "context_window": 183000,
1164− "default_max_tokens": 64000,
1165− "can_reason": true,
1166− "reasoning_levels": [
1167− "low",
1168− "medium",
1169− "high"
1170− ],
1171− "default_reasoning_effort": "medium",
1172− "supports_attachments": false
1173− },
1174− {
1175− "id": "ernie-5.1",
1176− "name": "ERNIE 5.1",
1177− "cost_per_1m_in": 0.5634,
1178− "cost_per_1m_out": 2.5353,
1179− "cost_per_1m_in_cached": 0,
1180− "cost_per_1m_out_cached": 0.5634,
1181− "context_window": 119000,
1182− "default_max_tokens": 11900,
1183− "can_reason": true,
1184− "reasoning_levels": [
1185− "low",
1186− "medium",
1187− "high"
1188− ],
1189− "default_reasoning_effort": "medium",
1190− "supports_attachments": false
1191− },
1192− {
1193− "id": "ernie-x1-turbo",
1194− "name": "ERNIE X1 Turbo",
1195− "cost_per_1m_in": 0.136,
1196− "cost_per_1m_out": 0.544,
1197− "cost_per_1m_in_cached": 0,
1198− "cost_per_1m_out_cached": 0,
1199− "context_window": 50500,
1200− "default_max_tokens": 5050,
1201− "can_reason": true,
1202− "reasoning_levels": [
1203− "low",
1204− "medium",
1205− "high"
1206− ],
1207− "default_reasoning_effort": "medium",
1208− "supports_attachments": false
1209− },
1210− {
1211− "id": "gemini-2.5-flash",
1212− "name": "Gemini 2.5 Flash",
1213− "cost_per_1m_in": 0.3,
1214− "cost_per_1m_out": 2.499,
1215− "cost_per_1m_in_cached": 0,
1216− "cost_per_1m_out_cached": 0.03,
1217− "context_window": 1048576,
1218− "default_max_tokens": 65536,
1219− "can_reason": false,
1220− "supports_attachments": true
1221− },
1222− {
1223− "id": "gemini-2.5-flash-image",
1224− "name": "Gemini 2.5 Flash Image",
1225− "cost_per_1m_in": 0.3,
1226− "cost_per_1m_out": 2.499,
1227− "cost_per_1m_in_cached": 0,
1228− "cost_per_1m_out_cached": 0.3,
1229− "context_window": 32800,
1230− "default_max_tokens": 8000,
1231− "can_reason": false,
1232− "supports_attachments": true
1233− },
1234− {
1235− "id": "gemini-2.5-flash-lite",
1236− "name": "Gemini 2.5 Flash Lite",
1237− "cost_per_1m_in": 0.1,
1238− "cost_per_1m_out": 0.4,
1239− "cost_per_1m_in_cached": 0,
1240− "cost_per_1m_out_cached": 0.01,
1241− "context_window": 1048576,
1242− "default_max_tokens": 65536,
1243− "can_reason": false,
1244− "supports_attachments": true
1245− },
1246− {
1247− "id": "gemini-2.5-flash-lite-nothink",
1248− "name": "Gemini 2.5 Flash Lite (no think)",
1249− "cost_per_1m_in": 0.1,
1250− "cost_per_1m_out": 0.4,
1251− "cost_per_1m_in_cached": 0,
1252− "cost_per_1m_out_cached": 0.01,
1253− "context_window": 1048576,
1254− "default_max_tokens": 65536,
1255− "can_reason": false,
1256− "supports_attachments": true
1257− },
1258− {
1259− "id": "gemini-2.5-flash-lite-preview-09-2025",
1260− "name": "Gemini 2.5 Flash Lite Preview 09 2025",
1261− "cost_per_1m_in": 0.1,
1262− "cost_per_1m_out": 0.4,
1263− "cost_per_1m_in_cached": 0,
1264− "cost_per_1m_out_cached": 0.01,
1265− "context_window": 1048576,
1266− "default_max_tokens": 65536,
1267− "can_reason": false,
1268− "supports_attachments": true
1269− },
1270− {
1271− "id": "gemini-2.5-flash-lite-preview-09-2025-nothink",
1272− "name": "Gemini 2.5 Flash Lite Preview 09 2025 (no think)",
1273− "cost_per_1m_in": 0.1,
1274− "cost_per_1m_out": 0.4,
1275− "cost_per_1m_in_cached": 0,
1276− "cost_per_1m_out_cached": 0.01,
1277− "context_window": 1048576,
1278− "default_max_tokens": 65536,
1279− "can_reason": false,
1280− "supports_attachments": true
1281− },
1282− {
1283− "id": "gemini-2.5-flash-nothink",
1284− "name": "Gemini 2.5 Flash (no think)",
1285− "cost_per_1m_in": 0.3,
1286− "cost_per_1m_out": 2.499,
1287− "cost_per_1m_in_cached": 0,
1288− "cost_per_1m_out_cached": 0.03,
1289− "context_window": 1047576,
1290− "default_max_tokens": 65536,
1291− "can_reason": false,
1292− "supports_attachments": true
1293− },
1294− {
1295− "id": "gemini-2.5-flash-preview-05-20-nothink",
1296− "name": "Gemini 2.5 Flash Preview 05-20 (no think)",
1297− "cost_per_1m_in": 0.3,
1298− "cost_per_1m_out": 2.499,
1299− "cost_per_1m_in_cached": 0,
1300− "cost_per_1m_out_cached": 0.03,
1301− "context_window": 1048576,
1302− "default_max_tokens": 65536,
1303− "can_reason": false,
1304− "supports_attachments": true
1305− },
1306− {
1307− "id": "gemini-2.5-flash-preview-05-20-search",
1308− "name": "Gemini 2.5 Flash Preview 05-20 Search",
1309− "cost_per_1m_in": 0.3,
1310− "cost_per_1m_out": 2.499,
1311− "cost_per_1m_in_cached": 0,
1312− "cost_per_1m_out_cached": 0.03,
1313− "context_window": 1048576,
1314− "default_max_tokens": 65536,
1315− "can_reason": false,
1316− "supports_attachments": true
1317− },
1318− {
1319− "id": "gemini-2.5-flash-preview-09-2025",
1320− "name": "Gemini 2.5 Flash Preview 09 2025",
1321− "cost_per_1m_in": 0.3,
1322− "cost_per_1m_out": 2.499,
1323− "cost_per_1m_in_cached": 0,
1324− "cost_per_1m_out_cached": 0.03,
1325− "context_window": 1048576,
1326− "default_max_tokens": 65536,
1327− "can_reason": false,
1328− "supports_attachments": true
1329− },
1330− {
1331− "id": "gemini-2.5-flash-search",
1332− "name": "Gemini 2.5 Flash Search",
1333− "cost_per_1m_in": 0.3,
1334− "cost_per_1m_out": 2.499,
1335− "cost_per_1m_in_cached": 0,
1336− "cost_per_1m_out_cached": 0.03,
1337− "context_window": 1048576,
1338− "default_max_tokens": 65536,
1339− "can_reason": false,
1340− "supports_attachments": true
1341− },
1342− {
1343− "id": "gemini-2.5-pro",
1344− "name": "Gemini 2.5 Pro",
1345− "cost_per_1m_in": 1.25,
1346− "cost_per_1m_out": 10,
1347− "cost_per_1m_in_cached": 0,
1348− "cost_per_1m_out_cached": 0.125,
1349− "context_window": 1048576,
1350− "default_max_tokens": 65536,
1351− "can_reason": true,
1352− "reasoning_levels": [
1353− "low",
1354− "medium",
1355− "high"
1356− ],
1357− "default_reasoning_effort": "medium",
1358− "supports_attachments": true
1359− },
1360− {
1361− "id": "gemini-2.5-pro-preview-05-06",
1362− "name": "Gemini 2.5 Pro Preview 05-06",
1363− "cost_per_1m_in": 1.25,
1364− "cost_per_1m_out": 10,
1365− "cost_per_1m_in_cached": 0,
1366− "cost_per_1m_out_cached": 0.125,
1367− "context_window": 1048576,
1368− "default_max_tokens": 65536,
1369− "can_reason": true,
1370− "reasoning_levels": [
1371− "low",
1372− "medium",
1373− "high"
1374− ],
1375− "default_reasoning_effort": "medium",
1376− "supports_attachments": true
1377− },
1378− {
1379− "id": "gemini-2.5-pro-preview-06-05",
1380− "name": "Gemini 2.5 Pro Preview 06-05",
1381− "cost_per_1m_in": 1.25,
1382− "cost_per_1m_out": 10,
1383− "cost_per_1m_in_cached": 0,
1384− "cost_per_1m_out_cached": 0.125,
1385− "context_window": 1048576,
1386− "default_max_tokens": 65536,
1387− "can_reason": true,
1388− "reasoning_levels": [
1389− "low",
1390− "medium",
1391− "high"
1392− ],
1393− "default_reasoning_effort": "medium",
1394− "supports_attachments": true
1395− },
1396− {
1397− "id": "gemini-2.5-pro-search",
1398− "name": "Gemini 2.5 Pro Search",
1399− "cost_per_1m_in": 1.25,
1400− "cost_per_1m_out": 10,
1401− "cost_per_1m_in_cached": 0,
1402− "cost_per_1m_out_cached": 0.125,
1403− "context_window": 1048576,
1404− "default_max_tokens": 65536,
1405− "can_reason": true,
1406− "reasoning_levels": [
1407− "low",
1408− "medium",
1409− "high"
1410− ],
1411− "default_reasoning_effort": "medium",
1412− "supports_attachments": true
1413− },
1414− {
1415− "id": "gemini-3-flash-preview",
1416− "name": "Gemini 3 Flash Preview",
1417− "cost_per_1m_in": 0.5,
1418− "cost_per_1m_out": 3,
1419− "cost_per_1m_in_cached": 0,
1420− "cost_per_1m_out_cached": 0.05,
1421− "context_window": 1048576,
1422− "default_max_tokens": 104857,
1423− "can_reason": true,
1424− "reasoning_levels": [
1425− "low",
1426− "medium",
1427− "high"
1428− ],
1429− "default_reasoning_effort": "medium",
1430− "supports_attachments": true
1431− },
1432− {
1433− "id": "gemini-3-flash-preview-free",
1434− "name": "Gemini 3 Flash Preview (free)",
1435− "cost_per_1m_in": 0,
1436− "cost_per_1m_out": 0,
1437− "cost_per_1m_in_cached": 0,
1438− "cost_per_1m_out_cached": 0,
1439− "context_window": 1048576,
1440− "default_max_tokens": 65536,
1441− "can_reason": true,
1442− "reasoning_levels": [
1443− "low",
1444− "medium",
1445− "high"
1446− ],
1447− "default_reasoning_effort": "medium",
1448− "supports_attachments": true
1449− },
1450− {
1451− "id": "gemini-3-flash-preview-search",
1452− "name": "Gemini 3 Flash Preview Search",
1453− "cost_per_1m_in": 0.5,
1454− "cost_per_1m_out": 3,
1455− "cost_per_1m_in_cached": 0,
1456− "cost_per_1m_out_cached": 0.05,
1457− "context_window": 1048576,
1458− "default_max_tokens": 104857,
1459− "can_reason": true,
1460− "reasoning_levels": [
1461− "low",
1462− "medium",
1463− "high"
1464− ],
1465− "default_reasoning_effort": "medium",
1466− "supports_attachments": true
1467− },
1468− {
1469− "id": "gemini-3.1-flash-lite",
1470− "name": "Gemini 3.1 Flash Lite",
1471− "cost_per_1m_in": 0.25,
1472− "cost_per_1m_out": 1.5,
1473− "cost_per_1m_in_cached": 0,
1474− "cost_per_1m_out_cached": 0.25,
1475− "context_window": 1000000,
1476− "default_max_tokens": 64000,
1477− "can_reason": true,
1478− "reasoning_levels": [
1479− "low",
1480− "medium",
1481− "high"
1482− ],
1483− "default_reasoning_effort": "medium",
1484− "supports_attachments": true
1485− },
1486− {
1487− "id": "gemini-3.1-flash-lite-preview",
1488− "name": "Gemini 3.1 Flash Lite Preview",
1489− "cost_per_1m_in": 0.25,
1490− "cost_per_1m_out": 1.5,
1491− "cost_per_1m_in_cached": 0,
1492− "cost_per_1m_out_cached": 0.25,
1493− "context_window": 1000000,
1494− "default_max_tokens": 64000,
1495− "can_reason": true,
1496− "reasoning_levels": [
1497− "low",
1498− "medium",
1499− "high"
1500− ],
1501− "default_reasoning_effort": "medium",
1502− "supports_attachments": true
1503− },
1504− {
1505− "id": "gemini-3.1-flash-lite-preview-nothink",
1506− "name": "Gemini 3.1 Flash Lite Preview (no think)",
1507− "cost_per_1m_in": 0.25,
1508− "cost_per_1m_out": 1.5,
1509− "cost_per_1m_in_cached": 0,
1510− "cost_per_1m_out_cached": 0.25,
1511− "context_window": 1000000,
1512− "default_max_tokens": 64000,
1513− "can_reason": true,
1514− "reasoning_levels": [
1515− "low",
1516− "medium",
1517− "high"
1518− ],
1519− "default_reasoning_effort": "medium",
1520− "supports_attachments": true
1521− },
1522− {
1523− "id": "gemini-3.1-pro-preview",
1524− "name": "Gemini 3.1 Pro Preview",
1525− "cost_per_1m_in": 2,
1526− "cost_per_1m_out": 12,
1527− "cost_per_1m_in_cached": 0,
1528− "cost_per_1m_out_cached": 0.2,
1529− "context_window": 1000000,
1530− "default_max_tokens": 64000,
1531− "can_reason": true,
1532− "reasoning_levels": [
1533− "low",
1534− "medium",
1535− "high"
1536− ],
1537− "default_reasoning_effort": "medium",
1538− "supports_attachments": true
1539− },
1540− {
1541− "id": "gemini-3.1-pro-preview-customtools",
1542− "name": "Gemini 3.1 Pro Preview Customtools",
1543− "cost_per_1m_in": 2,
1544− "cost_per_1m_out": 12,
1545− "cost_per_1m_in_cached": 0,
1546− "cost_per_1m_out_cached": 0.2,
1547− "context_window": 1000000,
1548− "default_max_tokens": 64000,
1549− "can_reason": true,
1550− "reasoning_levels": [
1551− "low",
1552− "medium",
1553− "high"
1554− ],
1555− "default_reasoning_effort": "medium",
1556− "supports_attachments": true
1557− },
1558− {
1559− "id": "gemini-3.5-flash",
1560− "name": "Gemini 3.5 Flash",
1561− "cost_per_1m_in": 1.5,
1562− "cost_per_1m_out": 9,
1563− "cost_per_1m_in_cached": 0,
1564− "cost_per_1m_out_cached": 1.5,
1565− "context_window": 1000000,
1566− "default_max_tokens": 64000,
1567− "can_reason": true,
1568− "reasoning_levels": [
1569− "low",
1570− "medium",
1571− "high"
1572− ],
1573− "default_reasoning_effort": "medium",
1574− "supports_attachments": true
1575− },
1576− {
1577− "id": "glm-4.5v",
1578− "name": "GLM 4.5 Vision",
1579− "cost_per_1m_in": 0.274,
1580− "cost_per_1m_out": 0.822,
1581− "cost_per_1m_in_cached": 0,
1582− "cost_per_1m_out_cached": 0.274,
1583− "context_window": 64000,
1584− "default_max_tokens": 16384,
1585− "can_reason": false,
1586− "supports_attachments": true
1587− },
1588− {
1589− "id": "glm-4.6",
1590− "name": "GLM 4.6",
1591− "cost_per_1m_in": 0.27397,
1592− "cost_per_1m_out": 1.0959,
1593− "cost_per_1m_in_cached": 0,
1594− "cost_per_1m_out_cached": 0.0548,
1595− "context_window": 204800,
1596− "default_max_tokens": 20480,
1597− "can_reason": true,
1598− "reasoning_levels": [
1599− "low",
1600− "medium",
1601− "high"
1602− ],
1603− "default_reasoning_effort": "medium",
1604− "supports_attachments": false
1605− },
1606− {
1607− "id": "glm-4.6v",
1608− "name": "GLM 4.6 Vision",
1609− "cost_per_1m_in": 0.137,
1610− "cost_per_1m_out": 0.411,
1611− "cost_per_1m_in_cached": 0,
1612− "cost_per_1m_out_cached": 0.0274,
1613− "context_window": 128000,
1614− "default_max_tokens": 12800,
1615− "can_reason": false,
1616− "supports_attachments": true
1617− },
1618− {
1619− "id": "glm-4.7",
1620− "name": "GLM 4.7",
1621− "cost_per_1m_in": 0.27397,
1622− "cost_per_1m_out": 1.0959,
1623− "cost_per_1m_in_cached": 0,
1624− "cost_per_1m_out_cached": 0.0548,
1625− "context_window": 200000,
1626− "default_max_tokens": 20000,
1627− "can_reason": true,
1628− "reasoning_levels": [
1629− "low",
1630− "medium",
1631− "high"
1632− ],
1633− "default_reasoning_effort": "medium",
1634− "supports_attachments": false
1635− },
1636− {
1637− "id": "glm-5",
1638− "name": "GLM 5",
1639− "cost_per_1m_in": 0.88,
1640− "cost_per_1m_out": 2.816,
1641− "cost_per_1m_in_cached": 0,
1642− "cost_per_1m_out_cached": 0.176,
1643− "context_window": 202752,
1644− "default_max_tokens": 20275,
1645− "can_reason": true,
1646− "reasoning_levels": [
1647− "low",
1648− "medium",
1649− "high"
1650− ],
1651− "default_reasoning_effort": "medium",
1652− "supports_attachments": false
1653− },
1654− {
1655− "id": "glm-5-turbo",
1656− "name": "GLM 5 Turbo",
1657− "cost_per_1m_in": 1.2,
1658− "cost_per_1m_out": 3.9996,
1659− "cost_per_1m_in_cached": 0,
1660− "cost_per_1m_out_cached": 0.24,
1661− "context_window": 202752,
1662− "default_max_tokens": 20275,
1663− "can_reason": true,
1664− "reasoning_levels": [
1665− "low",
1666− "medium",
1667− "high"
1668− ],
1669− "default_reasoning_effort": "medium",
1670− "supports_attachments": false
1671− },
1672− {
1673− "id": "glm-5.1",
1674− "name": "GLM 5.1",
1675− "cost_per_1m_in": 0.845,
1676− "cost_per_1m_out": 3.38,
1677− "cost_per_1m_in_cached": 0,
1678− "cost_per_1m_out_cached": 0.18311,
1679− "context_window": 200000,
1680− "default_max_tokens": 20000,
1681− "can_reason": true,
1682− "reasoning_levels": [
1683− "low",
1684− "medium",
1685− "high"
1686− ],
1687− "default_reasoning_effort": "medium",
1688− "supports_attachments": false
1689− },
1690− {
1691− "id": "glm-5.2",
1692− "name": "GLM 5.2",
1693− "cost_per_1m_in": 1.1268,
1694− "cost_per_1m_out": 3.9438,
1695− "cost_per_1m_in_cached": 0,
1696− "cost_per_1m_out_cached": 0.2817,
1697− "context_window": 1000000,
1698− "default_max_tokens": 128000,
1699− "can_reason": true,
1700− "reasoning_levels": [
1701− "low",
1702− "medium",
1703− "high"
1704− ],
1705− "default_reasoning_effort": "medium",
1706− "supports_attachments": false
1707− },
1708− {
1709− "id": "glm-5v-turbo",
1710− "name": "GLM 5 Vision Turbo",
1711− "cost_per_1m_in": 0.7042,
1712− "cost_per_1m_out": 3.09848,
1713− "cost_per_1m_in_cached": 0,
1714− "cost_per_1m_out_cached": 0.16901,
1715− "context_window": 200000,
1716− "default_max_tokens": 20000,
1717− "can_reason": false,
1718− "supports_attachments": true
1719− },
1720− {
1721− "id": "gpt-4.1",
1722− "name": "GPT 4.1",
1723− "cost_per_1m_in": 2,
1724− "cost_per_1m_out": 8,
1725− "cost_per_1m_in_cached": 0,
1726− "cost_per_1m_out_cached": 0.5,
1727− "context_window": 1047576,
1728− "default_max_tokens": 32768,
1729− "can_reason": false,
1730− "supports_attachments": true
1731− },
1732− {
1733− "id": "gpt-4.1-free",
1734− "name": "GPT 4.1 (free)",
1735− "cost_per_1m_in": 0,
1736− "cost_per_1m_out": 0,
1737− "cost_per_1m_in_cached": 0,
1738− "cost_per_1m_out_cached": 0,
1739− "context_window": 1047576,
1740− "default_max_tokens": 32768,
1741− "can_reason": false,
1742− "supports_attachments": true
1743− },
1744− {
1745− "id": "gpt-4.1-mini",
1746− "name": "GPT 4.1 Mini",
1747− "cost_per_1m_in": 0.4,
1748− "cost_per_1m_out": 1.6,
1749− "cost_per_1m_in_cached": 0,
1750− "cost_per_1m_out_cached": 0.1,
1751− "context_window": 1047576,
1752− "default_max_tokens": 32768,
1753− "can_reason": false,
1754− "supports_attachments": true
1755− },
1756− {
1757− "id": "gpt-4.1-mini-free",
1758− "name": "GPT 4.1 Mini (free)",
1759− "cost_per_1m_in": 0,
1760− "cost_per_1m_out": 0,
1761− "cost_per_1m_in_cached": 0,
1762− "cost_per_1m_out_cached": 0,
1763− "context_window": 1047576,
1764− "default_max_tokens": 32768,
1765− "can_reason": false,
1766− "supports_attachments": true
1767− },
1768− {
1769− "id": "gpt-4.1-nano",
1770− "name": "GPT 4.1 Nano",
1771− "cost_per_1m_in": 0.1,
1772− "cost_per_1m_out": 0.4,
1773− "cost_per_1m_in_cached": 0,
1774− "cost_per_1m_out_cached": 0.025,
1775− "context_window": 1047576,
1776− "default_max_tokens": 32768,
1777− "can_reason": false,
1778− "supports_attachments": true
1779− },
1780− {
1781− "id": "gpt-4.1-nano-free",
1782− "name": "GPT 4.1 Nano (free)",
1783− "cost_per_1m_in": 0,
1784− "cost_per_1m_out": 0,
1785− "cost_per_1m_in_cached": 0,
1786− "cost_per_1m_out_cached": 0,
1787− "context_window": 1047576,
1788− "default_max_tokens": 32768,
1789− "can_reason": false,
1790− "supports_attachments": true
1791− },
1792− {
1793− "id": "gpt-4o",
1794− "name": "GPT 4o",
1795− "cost_per_1m_in": 2.5,
1796− "cost_per_1m_out": 10,
1797− "cost_per_1m_in_cached": 0,
1798− "cost_per_1m_out_cached": 1.25,
1799− "context_window": 128000,
1800− "default_max_tokens": 16384,
1801− "can_reason": false,
1802− "supports_attachments": true
1803− },
1804− {
1805− "id": "gpt-4o-2024-11-20",
1806− "name": "GPT 4o 2024 11-20",
1807− "cost_per_1m_in": 2.5,
1808− "cost_per_1m_out": 10,
1809− "cost_per_1m_in_cached": 0,
1810− "cost_per_1m_out_cached": 1.25,
1811− "context_window": 128000,
1812− "default_max_tokens": 16384,
1813− "can_reason": false,
1814− "supports_attachments": true
1815− },
1816− {
1817− "id": "gpt-4o-audio-preview",
1818− "name": "GPT 4o Audio Preview",
1819− "cost_per_1m_in": 2.5,
1820− "cost_per_1m_out": 10,
1821− "cost_per_1m_in_cached": 0,
1822− "cost_per_1m_out_cached": 0,
1823− "context_window": 128000,
1824− "default_max_tokens": 16384,
1825− "can_reason": false,
1826− "supports_attachments": false
1827− },
1828− {
1829− "id": "gpt-4o-free",
1830− "name": "GPT 4o (free)",
1831− "cost_per_1m_in": 0,
1832− "cost_per_1m_out": 0,
1833− "cost_per_1m_in_cached": 0,
1834− "cost_per_1m_out_cached": 0,
1835− "context_window": 1047576,
1836− "default_max_tokens": 32768,
1837− "can_reason": false,
1838− "supports_attachments": true
1839− },
1840− {
1841− "id": "gpt-4o-mini",
1842− "name": "GPT 4o Mini",
1843− "cost_per_1m_in": 0.15,
1844− "cost_per_1m_out": 0.6,
1845− "cost_per_1m_in_cached": 0,
1846− "cost_per_1m_out_cached": 0.075,
1847− "context_window": 128000,
1848− "default_max_tokens": 16384,
1849− "can_reason": false,
1850− "supports_attachments": true
1851− },
1852− {
1853− "id": "gpt-4o-mini-search-preview",
1854− "name": "GPT 4o Mini Search Preview",
1855− "cost_per_1m_in": 0.15,
1856− "cost_per_1m_out": 0.6,
1857− "cost_per_1m_in_cached": 0,
1858− "cost_per_1m_out_cached": 0.075,
1859− "context_window": 128000,
1860− "default_max_tokens": 16384,
1861− "can_reason": false,
1862− "supports_attachments": true
1863− },
1864− {
1865− "id": "gpt-4o-search-preview",
1866− "name": "GPT 4o Search Preview",
1867− "cost_per_1m_in": 2.5,
1868− "cost_per_1m_out": 10,
1869− "cost_per_1m_in_cached": 0,
1870− "cost_per_1m_out_cached": 1.25,
1871− "context_window": 128000,
1872− "default_max_tokens": 16384,
1873− "can_reason": false,
1874− "supports_attachments": true
1875− },
1876− {
1877− "id": "gpt-5",
1878− "name": "GPT 5",
1879− "cost_per_1m_in": 1.25,
1880− "cost_per_1m_out": 10,
1881− "cost_per_1m_in_cached": 0,
1882− "cost_per_1m_out_cached": 0.125,
1883− "context_window": 400000,
1884− "default_max_tokens": 128000,
1885− "can_reason": true,
1886− "reasoning_levels": [
1887− "low",
1888− "medium",
1889− "high"
1890− ],
1891− "default_reasoning_effort": "medium",
1892− "supports_attachments": true
1893− },
1894− {
1895− "id": "gpt-5-chat-latest",
1896− "name": "GPT 5 Chat",
1897− "cost_per_1m_in": 1.25,
1898− "cost_per_1m_out": 10,
1899− "cost_per_1m_in_cached": 0,
1900− "cost_per_1m_out_cached": 0.125,
1901− "context_window": 400000,
1902− "default_max_tokens": 128000,
1903− "can_reason": false,
1904− "supports_attachments": true
1905− },
1906− {
1907− "id": "gpt-5-codex",
1908− "name": "GPT-5-Codex",
1909− "cost_per_1m_in": 1.25,
1910− "cost_per_1m_out": 10,
1911− "cost_per_1m_in_cached": 0,
1912− "cost_per_1m_out_cached": 0.125,
1913− "context_window": 400000,
1914− "default_max_tokens": 128000,
1915− "can_reason": true,
1916− "reasoning_levels": [
1917− "low",
1918− "medium",
1919− "high"
1920− ],
1921− "default_reasoning_effort": "medium",
1922− "supports_attachments": true
1923− },
1924− {
1925− "id": "gpt-5-mini",
1926− "name": "GPT 5 Mini",
1927− "cost_per_1m_in": 0.25,
1928− "cost_per_1m_out": 2,
1929− "cost_per_1m_in_cached": 0,
1930− "cost_per_1m_out_cached": 0.025,
1931− "context_window": 400000,
1932− "default_max_tokens": 128000,
1933− "can_reason": true,
1934− "reasoning_levels": [
1935− "low",
1936− "medium",
1937− "high"
1938− ],
1939− "default_reasoning_effort": "medium",
1940− "supports_attachments": true
1941− },
1942− {
1943− "id": "gpt-5-nano",
1944− "name": "GPT 5 Nano",
1945− "cost_per_1m_in": 0.05,
1946− "cost_per_1m_out": 0.4,
1947− "cost_per_1m_in_cached": 0,
1948− "cost_per_1m_out_cached": 0.005,
1949− "context_window": 400000,
1950− "default_max_tokens": 128000,
1951− "can_reason": true,
1952− "reasoning_levels": [
1953− "low",
1954− "medium",
1955− "high"
1956− ],
1957− "default_reasoning_effort": "medium",
1958− "supports_attachments": true
1959− },
1960− {
1961− "id": "gpt-5-pro",
1962− "name": "GPT 5 Pro",
1963− "cost_per_1m_in": 15,
1964− "cost_per_1m_out": 120,
1965− "cost_per_1m_in_cached": 0,
1966− "cost_per_1m_out_cached": 0,
1967− "context_window": 400000,
1968− "default_max_tokens": 128000,
1969− "can_reason": true,
1970− "reasoning_levels": [
1971− "low",
1972− "medium",
1973− "high"
1974− ],
1975− "default_reasoning_effort": "medium",
1976− "supports_attachments": true
1977− },
1978− {
1979− "id": "gpt-5.1",
1980− "name": "GPT 5.1",
1981− "cost_per_1m_in": 1.25,
1982− "cost_per_1m_out": 10,
1983− "cost_per_1m_in_cached": 0,
1984− "cost_per_1m_out_cached": 0.125,
1985− "context_window": 400000,
1986− "default_max_tokens": 128000,
1987− "can_reason": true,
1988− "reasoning_levels": [
1989− "low",
1990− "medium",
1991− "high"
1992− ],
1993− "default_reasoning_effort": "medium",
1994− "supports_attachments": true
1995− },
1996− {
1997− "id": "gpt-5.1-chat-latest",
1998− "name": "GPT 5.1 Chat",
1999− "cost_per_1m_in": 1.25,
2000− "cost_per_1m_out": 10,
2001− "cost_per_1m_in_cached": 0,
2002− "cost_per_1m_out_cached": 0.125,
2003− "context_window": 128000,
2004− "default_max_tokens": 16384,
2005− "can_reason": false,
2006− "supports_attachments": true
2007− },
2008− {
2009− "id": "gpt-5.1-codex",
2010− "name": "GPT-5.1-Codex",
2011− "cost_per_1m_in": 1.25,
2012− "cost_per_1m_out": 10,
2013− "cost_per_1m_in_cached": 0,
2014− "cost_per_1m_out_cached": 0.125,
2015− "context_window": 400000,
2016− "default_max_tokens": 128000,
2017− "can_reason": true,
2018− "reasoning_levels": [
2019− "low",
2020− "medium",
2021− "high"
2022− ],
2023− "default_reasoning_effort": "medium",
2024− "supports_attachments": true
2025− },
2026− {
2027− "id": "gpt-5.1-codex-max",
2028− "name": "GPT-5.1-Codex Max",
2029− "cost_per_1m_in": 1.25,
2030− "cost_per_1m_out": 10,
2031− "cost_per_1m_in_cached": 0,
2032− "cost_per_1m_out_cached": 0.125,
2033− "context_window": 400000,
2034− "default_max_tokens": 128000,
2035− "can_reason": true,
2036− "reasoning_levels": [
2037− "low",
2038− "medium",
2039− "high"
2040− ],
2041− "default_reasoning_effort": "medium",
2042− "supports_attachments": true
2043− },
2044− {
2045− "id": "gpt-5.1-codex-mini",
2046− "name": "GPT-5.1-Codex Mini",
2047− "cost_per_1m_in": 0.25,
2048− "cost_per_1m_out": 2,
2049− "cost_per_1m_in_cached": 0,
2050− "cost_per_1m_out_cached": 0.025,
2051− "context_window": 400000,
2052− "default_max_tokens": 128000,
2053− "can_reason": true,
2054− "reasoning_levels": [
2055− "low",
2056− "medium",
2057− "high"
2058− ],
2059− "default_reasoning_effort": "medium",
2060− "supports_attachments": true
2061− },
2062− {
2063− "id": "gpt-5.2",
2064− "name": "GPT 5.2",
2065− "cost_per_1m_in": 1.75,
2066− "cost_per_1m_out": 14,
2067− "cost_per_1m_in_cached": 0,
2068− "cost_per_1m_out_cached": 0.175,
2069− "context_window": 400000,
2070− "default_max_tokens": 128000,
2071− "can_reason": true,
2072− "reasoning_levels": [
2073− "low",
2074− "medium",
2075− "high"
2076− ],
2077− "default_reasoning_effort": "medium",
2078− "supports_attachments": true
2079− },
2080− {
2081− "id": "gpt-5.2-chat-latest",
2082− "name": "GPT 5.2 Chat",
2083− "cost_per_1m_in": 1.75,
2084− "cost_per_1m_out": 14,
2085− "cost_per_1m_in_cached": 0,
2086− "cost_per_1m_out_cached": 0.175,
2087− "context_window": 128000,
2088− "default_max_tokens": 16384,
2089− "can_reason": false,
2090− "supports_attachments": true
2091− },
2092− {
2093− "id": "gpt-5.2-codex",
2094− "name": "GPT-5.2-Codex",
2095− "cost_per_1m_in": 1.75,
2096− "cost_per_1m_out": 14,
2097− "cost_per_1m_in_cached": 0,
2098− "cost_per_1m_out_cached": 0.175,
2099− "context_window": 400000,
2100− "default_max_tokens": 128000,
2101− "can_reason": true,
2102− "reasoning_levels": [
2103− "low",
2104− "medium",
2105− "high"
2106− ],
2107− "default_reasoning_effort": "medium",
2108− "supports_attachments": true
2109− },
2110− {
2111− "id": "gpt-5.2-high",
2112− "name": "GPT 5.2 High",
2113− "cost_per_1m_in": 1.75,
2114− "cost_per_1m_out": 14,
2115− "cost_per_1m_in_cached": 0,
2116− "cost_per_1m_out_cached": 0.175,
2117− "context_window": 400000,
2118− "default_max_tokens": 128000,
2119− "can_reason": true,
2120− "reasoning_levels": [
2121− "low",
2122− "medium",
2123− "high"
2124− ],
2125− "default_reasoning_effort": "medium",
2126− "supports_attachments": true
2127− },
2128− {
2129− "id": "gpt-5.2-low",
2130− "name": "GPT 5.2 Low",
2131− "cost_per_1m_in": 1.75,
2132− "cost_per_1m_out": 14,
2133− "cost_per_1m_in_cached": 0,
2134− "cost_per_1m_out_cached": 0.175,
2135− "context_window": 400000,
2136− "default_max_tokens": 128000,
2137− "can_reason": true,
2138− "reasoning_levels": [
2139− "low",
2140− "medium",
2141− "high"
2142− ],
2143− "default_reasoning_effort": "medium",
2144− "supports_attachments": true
2145− },
2146− {
2147− "id": "gpt-5.2-pro",
2148− "name": "GPT 5.2 Pro",
2149− "cost_per_1m_in": 21,
2150− "cost_per_1m_out": 168,
2151− "cost_per_1m_in_cached": 0,
2152− "cost_per_1m_out_cached": 2.1,
2153− "context_window": 400000,
2154− "default_max_tokens": 128000,
2155− "can_reason": true,
2156− "reasoning_levels": [
2157− "low",
2158− "medium",
2159− "high"
2160− ],
2161− "default_reasoning_effort": "medium",
2162− "supports_attachments": true
2163− },
2164− {
2165− "id": "gpt-5.3-chat-latest",
2166− "name": "GPT 5.3 Chat",
2167− "cost_per_1m_in": 1.75,
2168− "cost_per_1m_out": 14,
2169− "cost_per_1m_in_cached": 0,
2170− "cost_per_1m_out_cached": 0.175,
2171− "context_window": 128000,
2172− "default_max_tokens": 16384,
2173− "can_reason": false,
2174− "supports_attachments": true
2175− },
2176− {
2177− "id": "gpt-5.3-codex",
2178− "name": "GPT-5.3-Codex",
2179− "cost_per_1m_in": 1.75,
2180− "cost_per_1m_out": 14,
2181− "cost_per_1m_in_cached": 0,
2182− "cost_per_1m_out_cached": 0.175,
2183− "context_window": 400000,
2184− "default_max_tokens": 128000,
2185− "can_reason": true,
2186− "reasoning_levels": [
2187− "low",
2188− "medium",
2189− "high"
2190− ],
2191− "default_reasoning_effort": "medium",
2192− "supports_attachments": true
2193− },
2194− {
2195− "id": "gpt-5.4",
2196− "name": "GPT 5.4",
2197− "cost_per_1m_in": 2.5,
2198− "cost_per_1m_out": 15,
2199− "cost_per_1m_in_cached": 0,
2200− "cost_per_1m_out_cached": 0.25,
2201− "context_window": 400000,
2202− "default_max_tokens": 128000,
2203− "can_reason": true,
2204− "reasoning_levels": [
2205− "low",
2206− "medium",
2207− "high"
2208− ],
2209− "default_reasoning_effort": "medium",
2210− "supports_attachments": true
2211− },
2212− {
2213− "id": "gpt-5.4-high",
2214− "name": "GPT 5.4 High",
2215− "cost_per_1m_in": 2.5,
2216− "cost_per_1m_out": 15,
2217− "cost_per_1m_in_cached": 0,
2218− "cost_per_1m_out_cached": 0.25,
2219− "context_window": 400000,
2220− "default_max_tokens": 128000,
2221− "can_reason": true,
2222− "reasoning_levels": [
2223− "low",
2224− "medium",
2225− "high"
2226− ],
2227− "default_reasoning_effort": "medium",
2228− "supports_attachments": true
2229− },
2230− {
2231− "id": "gpt-5.4-low",
2232− "name": "GPT 5.4 Low",
2233− "cost_per_1m_in": 2.5,
2234− "cost_per_1m_out": 15,
2235− "cost_per_1m_in_cached": 0,
2236− "cost_per_1m_out_cached": 0.25,
2237− "context_window": 400000,
2238− "default_max_tokens": 128000,
2239− "can_reason": true,
2240− "reasoning_levels": [
2241− "low",
2242− "medium",
2243− "high"
2244− ],
2245− "default_reasoning_effort": "medium",
2246− "supports_attachments": true
2247− },
2248− {
2249− "id": "gpt-5.4-mini",
2250− "name": "GPT 5.4 Mini",
2251− "cost_per_1m_in": 0.75,
2252− "cost_per_1m_out": 4.5,
2253− "cost_per_1m_in_cached": 0,
2254− "cost_per_1m_out_cached": 0.075,
2255− "context_window": 400000,
2256− "default_max_tokens": 128000,
2257− "can_reason": false,
2258− "supports_attachments": true
2259− },
2260− {
2261− "id": "gpt-5.4-nano",
2262− "name": "GPT 5.4 Nano",
2263− "cost_per_1m_in": 0.2,
2264− "cost_per_1m_out": 1.25,
2265− "cost_per_1m_in_cached": 0,
2266− "cost_per_1m_out_cached": 0.02,
2267− "context_window": 400000,
2268− "default_max_tokens": 128000,
2269− "can_reason": true,
2270− "reasoning_levels": [
2271− "low",
2272− "medium",
2273− "high"
2274− ],
2275− "default_reasoning_effort": "medium",
2276− "supports_attachments": true
2277− },
2278− {
2279− "id": "gpt-5.4-pro",
2280− "name": "GPT 5.4 Pro",
2281− "cost_per_1m_in": 30,
2282− "cost_per_1m_out": 180,
2283− "cost_per_1m_in_cached": 0,
2284− "cost_per_1m_out_cached": 30,
2285− "context_window": 1050000,
2286− "default_max_tokens": 128000,
2287− "can_reason": true,
2288− "reasoning_levels": [
2289− "low",
2290− "medium",
2291− "high"
2292− ],
2293− "default_reasoning_effort": "medium",
2294− "supports_attachments": true
2295− },
2296− {
2297− "id": "gpt-5.5",
2298− "name": "GPT 5.5",
2299− "cost_per_1m_in": 5,
2300− "cost_per_1m_out": 30,
2301− "cost_per_1m_in_cached": 0,
2302− "cost_per_1m_out_cached": 0.5,
2303− "context_window": 1050000,
2304− "default_max_tokens": 128000,
2305− "can_reason": true,
2306− "reasoning_levels": [
2307− "low",
2308− "medium",
2309− "high"
2310− ],
2311− "default_reasoning_effort": "medium",
2312− "supports_attachments": true
2313− },
2314− {
2315− "id": "gpt-5.5-free",
2316− "name": "GPT 5.5 (free)",
2317− "cost_per_1m_in": 0,
2318− "cost_per_1m_out": 0,
2319− "cost_per_1m_in_cached": 0,
2320− "cost_per_1m_out_cached": 0,
2321− "context_window": 1050000,
2322− "default_max_tokens": 128000,
2323− "can_reason": true,
2324− "reasoning_levels": [
2325− "low",
2326− "medium",
2327− "high"
2328− ],
2329− "default_reasoning_effort": "medium",
2330− "supports_attachments": true
2331− },
2332− {
2333− "id": "gpt-5.5-pro",
2334− "name": "GPT 5.5 Pro",
2335− "cost_per_1m_in": 30,
2336− "cost_per_1m_out": 180,
2337− "cost_per_1m_in_cached": 0,
2338− "cost_per_1m_out_cached": 30,
2339− "context_window": 1050000,
2340− "default_max_tokens": 128000,
2341− "can_reason": true,
2342− "reasoning_levels": [
2343− "low",
2344− "medium",
2345− "high"
2346− ],
2347− "default_reasoning_effort": "medium",
2348− "supports_attachments": true
2349− },
2350− {
2351− "id": "gpt-chat-latest",
2352− "name": "GPT Chat",
2353− "cost_per_1m_in": 5,
2354− "cost_per_1m_out": 30,
2355− "cost_per_1m_in_cached": 0,
2356− "cost_per_1m_out_cached": 0.5,
2357− "context_window": 1050000,
2358− "default_max_tokens": 128000,
2359− "can_reason": true,
2360− "reasoning_levels": [
2361− "low",
2362− "medium",
2363− "high"
2364− ],
2365− "default_reasoning_effort": "medium",
2366− "supports_attachments": true
2367− },
2368− {
2369− "id": "gpt-oss-120b",
2370− "name": "gpt-oss-120b",
2371− "cost_per_1m_in": 0.18,
2372− "cost_per_1m_out": 0.9,
2373− "cost_per_1m_in_cached": 0,
2374− "cost_per_1m_out_cached": 0,
2375− "context_window": 131072,
2376− "default_max_tokens": 32768,
2377− "can_reason": true,
2378− "reasoning_levels": [
2379− "low",
2380− "medium",
2381− "high"
2382− ],
2383− "default_reasoning_effort": "medium",
2384− "supports_attachments": false
2385− },
2386− {
2387− "id": "gpt-oss-20b",
2388− "name": "gpt-oss-20b",
2389− "cost_per_1m_in": 0.11,
2390− "cost_per_1m_out": 0.55,
2391− "cost_per_1m_in_cached": 0,
2392− "cost_per_1m_out_cached": 0,
2393− "context_window": 128000,
2394− "default_max_tokens": 12800,
2395− "can_reason": true,
2396− "reasoning_levels": [
2397− "low",
2398− "medium",
2399− "high"
2400− ],
2401− "default_reasoning_effort": "medium",
2402− "supports_attachments": false
2403− },
2404− {
2405− "id": "grok-4",
2406− "name": "Grok 4",
2407− "cost_per_1m_in": 3.3,
2408− "cost_per_1m_out": 16.5,
2409− "cost_per_1m_in_cached": 0,
2410− "cost_per_1m_out_cached": 0.825,
2411− "context_window": 256000,
2412− "default_max_tokens": 64000,
2413− "can_reason": true,
2414− "reasoning_levels": [
2415− "low",
2416− "medium",
2417− "high"
2418− ],
2419− "default_reasoning_effort": "medium",
2420− "supports_attachments": true
2421− },
2422− {
2423− "id": "grok-4-1-fast-non-reasoning",
2424− "name": "Grok 4.1 Fast",
2425− "cost_per_1m_in": 0.2,
2426− "cost_per_1m_out": 0.5,
2427− "cost_per_1m_in_cached": 0,
2428− "cost_per_1m_out_cached": 0.05,
2429− "context_window": 2000000,
2430− "default_max_tokens": 200000,
2431− "can_reason": false,
2432− "supports_attachments": true
2433− },
2434− {
2435− "id": "grok-4-1-fast-reasoning",
2436− "name": "Grok 4.1 Fast (reasoning)",
2437− "cost_per_1m_in": 0.2,
2438− "cost_per_1m_out": 0.5,
2439− "cost_per_1m_in_cached": 0,
2440− "cost_per_1m_out_cached": 0.05,
2441− "context_window": 2000000,
2442− "default_max_tokens": 200000,
2443− "can_reason": true,
2444− "reasoning_levels": [
2445− "low",
2446− "medium",
2447− "high"
2448− ],
2449− "default_reasoning_effort": "medium",
2450− "supports_attachments": true
2451− },
2452− {
2453− "id": "grok-4-20-non-reasoning",
2454− "name": "Grok 4 20",
2455− "cost_per_1m_in": 2,
2456− "cost_per_1m_out": 6,
2457− "cost_per_1m_in_cached": 0,
2458− "cost_per_1m_out_cached": 0.2,
2459− "context_window": 2000000,
2460− "default_max_tokens": 200000,
2461− "can_reason": true,
2462− "reasoning_levels": [
2463− "low",
2464− "medium",
2465− "high"
2466− ],
2467− "default_reasoning_effort": "medium",
2468− "supports_attachments": true
2469− },
2470− {
2471− "id": "grok-4-20-reasoning",
2472− "name": "Grok 4 20 (reasoning)",
2473− "cost_per_1m_in": 2,
2474− "cost_per_1m_out": 6,
2475− "cost_per_1m_in_cached": 0,
2476− "cost_per_1m_out_cached": 0.2,
2477− "context_window": 2000000,
2478− "default_max_tokens": 200000,
2479− "can_reason": true,
2480− "reasoning_levels": [
2481− "low",
2482− "medium",
2483− "high"
2484− ],
2485− "default_reasoning_effort": "medium",
2486− "supports_attachments": true
2487− },
2488− {
2489− "id": "grok-4-fast-non-reasoning",
2490− "name": "Grok 4 Fast",
2491− "cost_per_1m_in": 0.2,
2492− "cost_per_1m_out": 0.5,
2493− "cost_per_1m_in_cached": 0,
2494− "cost_per_1m_out_cached": 0.05,
2495− "context_window": 2000000,
2496− "default_max_tokens": 30000,
2497− "can_reason": false,
2498− "supports_attachments": true
2499− },
2500− {
2501− "id": "grok-4-fast-reasoning",
2502− "name": "Grok 4 Fast (reasoning)",
2503− "cost_per_1m_in": 0.2,
2504− "cost_per_1m_out": 0.5,
2505− "cost_per_1m_in_cached": 0,
2506− "cost_per_1m_out_cached": 0.05,
2507− "context_window": 2000000,
2508− "default_max_tokens": 30000,
2509− "can_reason": true,
2510− "reasoning_levels": [
2511− "low",
2512− "medium",
2513− "high"
2514− ],
2515− "default_reasoning_effort": "medium",
2516− "supports_attachments": true
2517− },
2518− {
2519− "id": "grok-4.20-beta-0309-non-reasoning",
2520− "name": "Grok 4.20 Beta 0309",
2521− "cost_per_1m_in": 2,
2522− "cost_per_1m_out": 6,
2523− "cost_per_1m_in_cached": 0,
2524− "cost_per_1m_out_cached": 0.2,
2525− "context_window": 2000000,
2526− "default_max_tokens": 200000,
2527− "can_reason": true,
2528− "reasoning_levels": [
2529− "low",
2530− "medium",
2531− "high"
2532− ],
2533− "default_reasoning_effort": "medium",
2534− "supports_attachments": true
2535− },
2536− {
2537− "id": "grok-4.20-beta-0309-reasoning",
2538− "name": "Grok 4.20 Beta 0309 (reasoning)",
2539− "cost_per_1m_in": 2,
2540− "cost_per_1m_out": 6,
2541− "cost_per_1m_in_cached": 0,
2542− "cost_per_1m_out_cached": 0.2,
2543− "context_window": 2000000,
2544− "default_max_tokens": 200000,
2545− "can_reason": true,
2546− "reasoning_levels": [
2547− "low",
2548− "medium",
2549− "high"
2550− ],
2551− "default_reasoning_effort": "medium",
2552− "supports_attachments": true
2553− },
2554− {
2555− "id": "grok-4.20-multi-agent-0309",
2556− "name": "Grok 4.20 Multi Agent 0309",
2557− "cost_per_1m_in": 2,
2558− "cost_per_1m_out": 6,
2559− "cost_per_1m_in_cached": 0,
2560− "cost_per_1m_out_cached": 0.2,
2561− "context_window": 2000000,
2562− "default_max_tokens": 200000,
2563− "can_reason": true,
2564− "reasoning_levels": [
2565− "low",
2566− "medium",
2567− "high"
2568− ],
2569− "default_reasoning_effort": "medium",
2570− "supports_attachments": true
2571− },
2572− {
2573− "id": "grok-4.20-multi-agent-beta-0309",
2574− "name": "Grok 4.20 Multi Agent Beta 0309",
2575− "cost_per_1m_in": 2,
2576− "cost_per_1m_out": 6,
2577− "cost_per_1m_in_cached": 0,
2578− "cost_per_1m_out_cached": 0.2,
2579− "context_window": 2000000,
2580− "default_max_tokens": 200000,
2581− "can_reason": true,
2582− "reasoning_levels": [
2583− "low",
2584− "medium",
2585− "high"
2586− ],
2587− "default_reasoning_effort": "medium",
2588− "supports_attachments": true
2589− },
2590− {
2591− "id": "grok-4.3",
2592− "name": "Grok 4.3",
2593− "cost_per_1m_in": 1.25,
2594− "cost_per_1m_out": 2.5,
2595− "cost_per_1m_in_cached": 0,
2596− "cost_per_1m_out_cached": 0.2,
2597− "context_window": 1000000,
2598− "default_max_tokens": 100000,
2599− "can_reason": true,
2600− "reasoning_levels": [
2601− "low",
2602− "medium",
2603− "high"
2604− ],
2605− "default_reasoning_effort": "medium",
2606− "supports_attachments": true
2607− },
2608− {
2609− "id": "grok-build-0.1",
2610− "name": "Grok Build 0.1",
2611− "cost_per_1m_in": 1,
2612− "cost_per_1m_out": 2,
2613− "cost_per_1m_in_cached": 0,
2614− "cost_per_1m_out_cached": 0.2,
2615− "context_window": 256000,
2616− "default_max_tokens": 25600,
2617− "can_reason": true,
2618− "reasoning_levels": [
2619− "low",
2620− "medium",
2621− "high"
2622− ],
2623− "default_reasoning_effort": "medium",
2624− "supports_attachments": true
2625− },
2626− {
2627− "id": "grok-code-fast-1",
2628− "name": "Grok Code Fast 1",
2629− "cost_per_1m_in": 0.2,
2630− "cost_per_1m_out": 0.5,
2631− "cost_per_1m_in_cached": 0,
2632− "cost_per_1m_out_cached": 0.05,
2633− "context_window": 256000,
2634− "default_max_tokens": 10000,
2635− "can_reason": true,
2636− "reasoning_levels": [
2637− "low",
2638− "medium",
2639− "high"
2640− ],
2641− "default_reasoning_effort": "medium",
2642− "supports_attachments": true
2643− },
2644− {
2645− "id": "hy3-preview",
2646− "name": "Hy3 Preview",
2647− "cost_per_1m_in": 0.17,
2648− "cost_per_1m_out": 0.56666,
2649− "cost_per_1m_in_cached": 0,
2650− "cost_per_1m_out_cached": 0.051,
2651− "context_window": 256000,
2652− "default_max_tokens": 128000,
2653− "can_reason": true,
2654− "reasoning_levels": [
2655− "low",
2656− "medium",
2657− "high"
2658− ],
2659− "default_reasoning_effort": "medium",
2660− "supports_attachments": false
2661− },
2662− {
2663− "id": "jina-deepsearch-v1",
2664− "name": "Jina Deepsearch V1",
2665− "cost_per_1m_in": 0.05,
2666− "cost_per_1m_out": 0.05,
2667− "cost_per_1m_in_cached": 0,
2668− "cost_per_1m_out_cached": 0,
2669− "context_window": 1000000,
2670− "default_max_tokens": 100000,
2671− "can_reason": true,
2672− "reasoning_levels": [
2673− "low",
2674− "medium",
2675− "high"
2676− ],
2677− "default_reasoning_effort": "medium",
2678− "supports_attachments": true
2679− },
2680− {
2681− "id": "k2.6-code-preview-free",
2682− "name": "K2.6 Code Preview (free)",
2683− "cost_per_1m_in": 0,
2684− "cost_per_1m_out": 0,
2685− "cost_per_1m_in_cached": 0,
2686− "cost_per_1m_out_cached": 0,
2687− "context_window": 256000,
2688− "default_max_tokens": 25600,
2689− "can_reason": true,
2690− "reasoning_levels": [
2691− "low",
2692− "medium",
2693− "high"
2694− ],
2695− "default_reasoning_effort": "medium",
2696− "supports_attachments": false
2697− },
2698− {
2699− "id": "kat-dev",
2700− "name": "Kat Dev",
2701− "cost_per_1m_in": 0.137,
2702− "cost_per_1m_out": 0.548,
2703− "cost_per_1m_in_cached": 0,
2704− "cost_per_1m_out_cached": 0,
2705− "context_window": 128000,
2706− "default_max_tokens": 12800,
2707− "can_reason": false,
2708− "supports_attachments": false
2709− },
2710− {
2711− "id": "kimi-for-coding-free",
2712− "name": "Kimi For Coding (free)",
2713− "cost_per_1m_in": 0,
2714− "cost_per_1m_out": 0,
2715− "cost_per_1m_in_cached": 0,
2716− "cost_per_1m_out_cached": 0,
2717− "context_window": 256000,
2718− "default_max_tokens": 25600,
2719− "can_reason": true,
2720− "reasoning_levels": [
2721− "low",
2722− "medium",
2723− "high"
2724− ],
2725− "default_reasoning_effort": "medium",
2726− "supports_attachments": false
2727− },
2728− {
2729− "id": "kimi-k2-0711",
2730− "name": "Kimi K2 0711",
2731− "cost_per_1m_in": 0.54,
2732− "cost_per_1m_out": 2.16,
2733− "cost_per_1m_in_cached": 0,
2734− "cost_per_1m_out_cached": 0,
2735− "context_window": 131000,
2736− "default_max_tokens": 13100,
2737− "can_reason": false,
2738− "supports_attachments": false
2739− },
2740− {
2741− "id": "kimi-k2-thinking",
2742− "name": "Kimi K2 Thinking",
2743− "cost_per_1m_in": 0.548,
2744− "cost_per_1m_out": 2.192,
2745− "cost_per_1m_in_cached": 0,
2746− "cost_per_1m_out_cached": 0.137,
2747− "context_window": 262144,
2748− "default_max_tokens": 26214,
2749− "can_reason": true,
2750− "reasoning_levels": [
2751− "low",
2752− "medium",
2753− "high"
2754− ],
2755− "default_reasoning_effort": "medium",
2756− "supports_attachments": false
2757− },
2758− {
2759− "id": "kimi-k2-turbo-preview",
2760− "name": "Kimi K2 Turbo Preview",
2761− "cost_per_1m_in": 1.2,
2762− "cost_per_1m_out": 4.8,
2763− "cost_per_1m_in_cached": 0,
2764− "cost_per_1m_out_cached": 0.3,
2765− "context_window": 262144,
2766− "default_max_tokens": 26214,
2767− "can_reason": false,
2768− "supports_attachments": false
2769− },
2770− {
2771− "id": "kimi-k2.5",
2772− "name": "Kimi K2.5",
2773− "cost_per_1m_in": 0.6,
2774− "cost_per_1m_out": 3,
2775− "cost_per_1m_in_cached": 0,
2776− "cost_per_1m_out_cached": 0.105,
2777− "context_window": 256000,
2778− "default_max_tokens": 25600,
2779− "can_reason": true,
2780− "reasoning_levels": [
2781− "low",
2782− "medium",
2783− "high"
2784− ],
2785− "default_reasoning_effort": "medium",
2786− "supports_attachments": true
2787− },
2788− {
2789− "id": "kimi-k2.6",
2790− "name": "Kimi K2.6",
2791− "cost_per_1m_in": 0.95,
2792− "cost_per_1m_out": 3.9995,
2793− "cost_per_1m_in_cached": 0,
2794− "cost_per_1m_out_cached": 0.16084,
2795− "context_window": 262144,
2796− "default_max_tokens": 32768,
2797− "can_reason": true,
2798− "reasoning_levels": [
2799− "low",
2800− "medium",
2801− "high"
2802− ],
2803− "default_reasoning_effort": "medium",
2804− "supports_attachments": true
2805− },
2806− {
2807− "id": "kimi-k2.7-code",
2808− "name": "Kimi K2.7 Code",
2809− "cost_per_1m_in": 0.95,
2810− "cost_per_1m_out": 3.9995,
2811− "cost_per_1m_in_cached": 0,
2812− "cost_per_1m_out_cached": 0.16084,
2813− "context_window": 262144,
2814− "default_max_tokens": 32768,
2815− "can_reason": true,
2816− "reasoning_levels": [
2817− "low",
2818− "medium",
2819− "high"
2820− ],
2821− "default_reasoning_effort": "medium",
2822− "supports_attachments": true
2823− },
2824− {
2825− "id": "kimi-k2.7-code-highspeed",
2826− "name": "Kimi K2.7 Code Highspeed",
2827− "cost_per_1m_in": 1.9,
2828− "cost_per_1m_out": 7.999,
2829− "cost_per_1m_in_cached": 0,
2830− "cost_per_1m_out_cached": 0.32167,
2831− "context_window": 262144,
2832− "default_max_tokens": 32768,
2833− "can_reason": true,
2834− "reasoning_levels": [
2835− "low",
2836− "medium",
2837− "high"
2838− ],
2839− "default_reasoning_effort": "medium",
2840− "supports_attachments": true
2841− },
2842− {
2843− "id": "llama-4-maverick",
2844− "name": "Llama 4 Maverick",
2845− "cost_per_1m_in": 0.2,
2846− "cost_per_1m_out": 0.2,
2847− "cost_per_1m_in_cached": 0,
2848− "cost_per_1m_out_cached": 0,
2849− "context_window": 1048576,
2850− "default_max_tokens": 32000,
2851− "can_reason": false,
2852− "supports_attachments": true
2853− },
2854− {
2855− "id": "llama-4-scout",
2856− "name": "Llama 4 Scout",
2857− "cost_per_1m_in": 0.2,
2858− "cost_per_1m_out": 0.2,
2859− "cost_per_1m_in_cached": 0,
2860− "cost_per_1m_out_cached": 0,
2861− "context_window": 131000,
2862− "default_max_tokens": 13100,
2863− "can_reason": false,
2864− "supports_attachments": true
2865− },
2866− {
2867− "id": "mimo-v2-flash-free",
2868− "name": "MiMo V2 Flash (free)",
2869− "cost_per_1m_in": 0,
2870− "cost_per_1m_out": 0,
2871− "cost_per_1m_in_cached": 0,
2872− "cost_per_1m_out_cached": 0,
2873− "context_window": 256000,
2874− "default_max_tokens": 25600,
2875− "can_reason": false,
2876− "supports_attachments": false
2877− },
2878− {
2879− "id": "mimo-v2-omni",
2880− "name": "MiMo V2 Omni",
2881− "cost_per_1m_in": 0.44,
2882− "cost_per_1m_out": 2.2,
2883− "cost_per_1m_in_cached": 0,
2884− "cost_per_1m_out_cached": 0.088,
2885− "context_window": 256000,
2886− "default_max_tokens": 25600,
2887− "can_reason": false,
2888− "supports_attachments": true
2889− },
2890− {
2891− "id": "mimo-v2-pro",
2892− "name": "MiMo V2 Pro",
2893− "cost_per_1m_in": 1.1,
2894− "cost_per_1m_out": 3.3,
2895− "cost_per_1m_in_cached": 0,
2896− "cost_per_1m_out_cached": 0.22,
2897− "context_window": 1000000,
2898− "default_max_tokens": 100000,
2899− "can_reason": false,
2900− "supports_attachments": true
2901− },
2902− {
2903− "id": "minimax-m2",
2904− "name": "MiniMax M2",
2905− "cost_per_1m_in": 0.288,
2906− "cost_per_1m_out": 1.152,
2907− "cost_per_1m_in_cached": 0,
2908− "cost_per_1m_out_cached": 0,
2909− "context_window": 204800,
2910− "default_max_tokens": 20480,
2911− "can_reason": true,
2912− "reasoning_levels": [
2913− "low",
2914− "medium",
2915− "high"
2916− ],
2917− "default_reasoning_effort": "medium",
2918− "supports_attachments": false
2919− },
2920− {
2921− "id": "minimax-m2.1",
2922− "name": "MiniMax M2.1",
2923− "cost_per_1m_in": 0.288,
2924− "cost_per_1m_out": 1.152,
2925− "cost_per_1m_in_cached": 0,
2926− "cost_per_1m_out_cached": 0,
2927− "context_window": 204800,
2928− "default_max_tokens": 20480,
2929− "can_reason": true,
2930− "reasoning_levels": [
2931− "low",
2932− "medium",
2933− "high"
2934− ],
2935− "default_reasoning_effort": "medium",
2936− "supports_attachments": false
2937− },
2938− {
2939− "id": "minimax-m2.5",
2940− "name": "MiniMax M2.5",
2941− "cost_per_1m_in": 0.288,
2942− "cost_per_1m_out": 1.152,
2943− "cost_per_1m_in_cached": 0,
2944− "cost_per_1m_out_cached": 0,
2945− "context_window": 204800,
2946− "default_max_tokens": 20480,
2947− "can_reason": true,
2948− "reasoning_levels": [
2949− "low",
2950− "medium",
2951− "high"
2952− ],
2953− "default_reasoning_effort": "medium",
2954− "supports_attachments": false
2955− },
2956− {
2957− "id": "minimax-m2.5-highspeed",
2958− "name": "MiniMax M2.5 Highspeed",
2959− "cost_per_1m_in": 0.288,
2960− "cost_per_1m_out": 1.152,
2961− "cost_per_1m_in_cached": 0,
2962− "cost_per_1m_out_cached": 0,
2963− "context_window": 204800,
2964− "default_max_tokens": 20480,
2965− "can_reason": true,
2966− "reasoning_levels": [
2967− "low",
2968− "medium",
2969− "high"
2970− ],
2971− "default_reasoning_effort": "medium",
2972− "supports_attachments": false
2973− },
2974− {
2975− "id": "minimax-m2.7",
2976− "name": "MiniMax M2.7",
2977− "cost_per_1m_in": 0.2958,
2978− "cost_per_1m_out": 1.1832,
2979− "cost_per_1m_in_cached": 0,
2980− "cost_per_1m_out_cached": 0.05916,
2981− "context_window": 200000,
2982− "default_max_tokens": 20000,
2983− "can_reason": true,
2984− "reasoning_levels": [
2985− "low",
2986− "medium",
2987− "high"
2988− ],
2989− "default_reasoning_effort": "medium",
2990− "supports_attachments": false
2991− },
2992− {
2993− "id": "minimax-m3",
2994− "name": "MiniMax M3",
2995− "cost_per_1m_in": 0.288,
2996− "cost_per_1m_out": 1.152,
2997− "cost_per_1m_in_cached": 0,
2998− "cost_per_1m_out_cached": 0,
2999− "context_window": 204800,
3000− "default_max_tokens": 20480,
3001− "can_reason": true,
3002− "reasoning_levels": [
3003− "low",
3004− "medium",
3005− "high"
3006− ],
3007− "default_reasoning_effort": "medium",
3008− "supports_attachments": false
3009− },
3010− {
3011− "id": "mistral-large-3",
3012− "name": "Mistral Large 3",
3013− "cost_per_1m_in": 0.5,
3014− "cost_per_1m_out": 1.5,
3015− "cost_per_1m_in_cached": 0,
3016− "cost_per_1m_out_cached": 0,
3017− "context_window": 256000,
3018− "default_max_tokens": 25600,
3019− "can_reason": false,
3020− "supports_attachments": true
3021− },
3022− {
3023− "id": "nvidia-nemotron-3-super-120b-a12b",
3024− "name": "Nvidia Nemotron 3 Super 120B A12B",
3025− "cost_per_1m_in": 0.11,
3026− "cost_per_1m_out": 0.55,
3027− "cost_per_1m_in_cached": 0,
3028− "cost_per_1m_out_cached": 0.0275,
3029− "context_window": 1000000,
3030− "default_max_tokens": 100000,
3031− "can_reason": true,
3032− "reasoning_levels": [
3033− "low",
3034− "medium",
3035− "high"
3036− ],
3037− "default_reasoning_effort": "medium",
3038− "supports_attachments": false
3039− },
3040− {
3041− "id": "o3",
3042− "name": "O3",
3043− "cost_per_1m_in": 2,
3044− "cost_per_1m_out": 8,
3045− "cost_per_1m_in_cached": 0,
3046− "cost_per_1m_out_cached": 0.5,
3047− "context_window": 200000,
3048− "default_max_tokens": 100000,
3049− "can_reason": true,
3050− "reasoning_levels": [
3051− "low",
3052− "medium",
3053− "high"
3054− ],
3055− "default_reasoning_effort": "medium",
3056− "supports_attachments": true
3057− },
3058− {
3059− "id": "o3-mini",
3060− "name": "O3 Mini",
3061− "cost_per_1m_in": 1.1,
3062− "cost_per_1m_out": 4.4,
3063− "cost_per_1m_in_cached": 0,
3064− "cost_per_1m_out_cached": 0.55,
3065− "context_window": 200000,
3066− "default_max_tokens": 100000,
3067− "can_reason": true,
3068− "reasoning_levels": [
3069− "low",
3070− "medium",
3071− "high"
3072− ],
3073− "default_reasoning_effort": "medium",
3074− "supports_attachments": true
3075− },
3076− {
3077− "id": "o3-pro",
3078− "name": "O3 Pro",
3079− "cost_per_1m_in": 20,
3080− "cost_per_1m_out": 80,
3081− "cost_per_1m_in_cached": 0,
3082− "cost_per_1m_out_cached": 20,
3083− "context_window": 200000,
3084− "default_max_tokens": 100000,
3085− "can_reason": true,
3086− "reasoning_levels": [
3087− "low",
3088− "medium",
3089− "high"
3090− ],
3091− "default_reasoning_effort": "medium",
3092− "supports_attachments": true
3093− },
3094− {
3095− "id": "o4-mini",
3096− "name": "O4 Mini",
3097− "cost_per_1m_in": 1.1,
3098− "cost_per_1m_out": 4.4,
3099− "cost_per_1m_in_cached": 0,
3100− "cost_per_1m_out_cached": 0.275,
3101− "context_window": 200000,
3102− "default_max_tokens": 100000,
3103− "can_reason": true,
3104− "reasoning_levels": [
3105− "low",
3106− "medium",
3107− "high"
3108− ],
3109− "default_reasoning_effort": "medium",
3110− "supports_attachments": true
3111− },
3112− {
3113− "id": "qwen3-235b-a22b",
3114− "name": "Qwen3 235B A22B",
3115− "cost_per_1m_in": 0.28,
3116− "cost_per_1m_out": 1.12,
3117− "cost_per_1m_in_cached": 0,
3118− "cost_per_1m_out_cached": 0,
3119− "context_window": 131100,
3120− "default_max_tokens": 13110,
3121− "can_reason": false,
3122− "supports_attachments": true
3123− },
3124− {
3125− "id": "qwen3-235b-a22b-instruct-2507",
3126− "name": "Qwen3 235B A22B Instruct 2507",
3127− "cost_per_1m_in": 0.28,
3128− "cost_per_1m_out": 1.12,
3129− "cost_per_1m_in_cached": 0,
3130− "cost_per_1m_out_cached": 0,
3131− "context_window": 262144,
3132− "default_max_tokens": 26214,
3133− "can_reason": false,
3134− "supports_attachments": true
3135− },
3136− {
3137− "id": "qwen3-235b-a22b-thinking-2507",
3138− "name": "Qwen3 235B A22B Thinking 2507",
3139− "cost_per_1m_in": 0.28,
3140− "cost_per_1m_out": 2.8,
3141− "cost_per_1m_in_cached": 0,
3142− "cost_per_1m_out_cached": 0,
3143− "context_window": 262144,
3144− "default_max_tokens": 26214,
3145− "can_reason": true,
3146− "reasoning_levels": [
3147− "low",
3148− "medium",
3149− "high"
3150− ],
3151− "default_reasoning_effort": "medium",
3152− "supports_attachments": true
3153− },
3154− {
3155− "id": "qwen3-coder-30b-a3b-instruct",
3156− "name": "Qwen3 Coder 30B A3B Instruct",
3157− "cost_per_1m_in": 0.2,
3158− "cost_per_1m_out": 0.8,
3159− "cost_per_1m_in_cached": 0,
3160− "cost_per_1m_out_cached": 0.2,
3161− "context_window": 2000000,
3162− "default_max_tokens": 262000,
3163− "can_reason": false,
3164− "supports_attachments": false
3165− },
3166− {
3167− "id": "qwen3-coder-480b-a35b-instruct",
3168− "name": "Qwen3 Coder 480B A35B Instruct",
3169− "cost_per_1m_in": 0.82,
3170− "cost_per_1m_out": 3.28,
3171− "cost_per_1m_in_cached": 0,
3172− "cost_per_1m_out_cached": 0.82,
3173− "context_window": 262000,
3174− "default_max_tokens": 26200,
3175− "can_reason": false,
3176− "supports_attachments": false
3177− },
3178− {
3179− "id": "qwen3-coder-flash",
3180− "name": "Qwen3 Coder Flash",
3181− "cost_per_1m_in": 0.136,
3182− "cost_per_1m_out": 0.544,
3183− "cost_per_1m_in_cached": 0,
3184− "cost_per_1m_out_cached": 0.136,
3185− "context_window": 256000,
3186− "default_max_tokens": 65536,
3187− "can_reason": false,
3188− "supports_attachments": false
3189− },
3190− {
3191− "id": "qwen3-coder-next",
3192− "name": "Qwen3 Coder Next",
3193− "cost_per_1m_in": 0.137,
3194− "cost_per_1m_out": 0.548,
3195− "cost_per_1m_in_cached": 0,
3196− "cost_per_1m_out_cached": 0.137,
3197− "context_window": 2000000,
3198− "default_max_tokens": 64000,
3199− "can_reason": false,
3200− "supports_attachments": false
3201− },
3202− {
3203− "id": "qwen3-coder-plus",
3204− "name": "Qwen3 Coder Plus",
3205− "cost_per_1m_in": 0.54,
3206− "cost_per_1m_out": 2.16,
3207− "cost_per_1m_in_cached": 0,
3208− "cost_per_1m_out_cached": 0.108,
3209− "context_window": 1048576,
3210− "default_max_tokens": 65536,
3211− "can_reason": false,
3212− "supports_attachments": false
3213− },
3214− {
3215− "id": "qwen3-coder-plus-2025-07-22",
3216− "name": "Qwen3 Coder Plus 2025 07-22",
3217− "cost_per_1m_in": 0.54,
3218− "cost_per_1m_out": 2.16,
3219− "cost_per_1m_in_cached": 0,
3220− "cost_per_1m_out_cached": 0.54,
3221− "context_window": 128000,
3222− "default_max_tokens": 12800,
3223− "can_reason": false,
3224− "supports_attachments": false
3225− },
3226− {
3227− "id": "qwen3-max",
3228− "name": "Qwen3 Max",
3229− "cost_per_1m_in": 0.4508,
3230− "cost_per_1m_out": 1.8032,
3231− "cost_per_1m_in_cached": 0.5635,
3232− "cost_per_1m_out_cached": 0.09016,
3233− "context_window": 262144,
3234− "default_max_tokens": 65536,
3235− "can_reason": false,
3236− "supports_attachments": true
3237− },
3238− {
3239− "id": "qwen3-max-2026-01-23",
3240− "name": "Qwen3 Max 2026 01-23",
3241− "cost_per_1m_in": 0.4508,
3242− "cost_per_1m_out": 1.8032,
3243− "cost_per_1m_in_cached": 0.5635,
3244− "cost_per_1m_out_cached": 0.09016,
3245− "context_window": 252000,
3246− "default_max_tokens": 32000,
3247− "can_reason": true,
3248− "reasoning_levels": [
3249− "low",
3250− "medium",
3251− "high"
3252− ],
3253− "default_reasoning_effort": "medium",
3254− "supports_attachments": false
3255− },
3256− {
3257− "id": "qwen3-next-80b-a3b-instruct",
3258− "name": "Qwen3 Next 80B A3B Instruct",
3259− "cost_per_1m_in": 0.138,
3260− "cost_per_1m_out": 0.552,
3261− "cost_per_1m_in_cached": 0,
3262− "cost_per_1m_out_cached": 0,
3263− "context_window": 256000,
3264− "default_max_tokens": 25600,
3265− "can_reason": false,
3266− "supports_attachments": true
3267− },
3268− {
3269− "id": "qwen3-next-80b-a3b-thinking",
3270− "name": "Qwen3 Next 80B A3B Thinking",
3271− "cost_per_1m_in": 0.142,
3272− "cost_per_1m_out": 1.42,
3273− "cost_per_1m_in_cached": 0,
3274− "cost_per_1m_out_cached": 0,
3275− "context_window": 256000,
3276− "default_max_tokens": 25600,
3277− "can_reason": true,
3278− "reasoning_levels": [
3279− "low",
3280− "medium",
3281− "high"
3282− ],
3283− "default_reasoning_effort": "medium",
3284− "supports_attachments": true
3285− },
3286− {
3287− "id": "qwen3-vl-235b-a22b-instruct",
3288− "name": "Qwen3 VL 235B A22B Instruct",
3289− "cost_per_1m_in": 0.274,
3290− "cost_per_1m_out": 1.096,
3291− "cost_per_1m_in_cached": 0,
3292− "cost_per_1m_out_cached": 0,
3293− "context_window": 131000,
3294− "default_max_tokens": 33000,
3295− "can_reason": false,
3296− "supports_attachments": true
3297− },
3298− {
3299− "id": "qwen3-vl-235b-a22b-thinking",
3300− "name": "Qwen3 VL 235B A22B Thinking",
3301− "cost_per_1m_in": 0.274,
3302− "cost_per_1m_out": 2.74,
3303− "cost_per_1m_in_cached": 0,
3304− "cost_per_1m_out_cached": 0,
3305− "context_window": 131000,
3306− "default_max_tokens": 33000,
3307− "can_reason": true,
3308− "reasoning_levels": [
3309− "low",
3310− "medium",
3311− "high"
3312− ],
3313− "default_reasoning_effort": "medium",
3314− "supports_attachments": true
3315− },
3316− {
3317− "id": "qwen3-vl-30b-a3b-instruct",
3318− "name": "Qwen3 VL 30B A3B Instruct",
3319− "cost_per_1m_in": 0.1028,
3320− "cost_per_1m_out": 0.4112,
3321− "cost_per_1m_in_cached": 0,
3322− "cost_per_1m_out_cached": 0,
3323− "context_window": 128000,
3324− "default_max_tokens": 32000,
3325− "can_reason": false,
3326− "supports_attachments": true
3327− },
3328− {
3329− "id": "qwen3-vl-30b-a3b-thinking",
3330− "name": "Qwen3 VL 30B A3B Thinking",
3331− "cost_per_1m_in": 0.1028,
3332− "cost_per_1m_out": 1.028,
3333− "cost_per_1m_in_cached": 0,
3334− "cost_per_1m_out_cached": 0,
3335− "context_window": 128000,
3336− "default_max_tokens": 32000,
3337− "can_reason": true,
3338− "reasoning_levels": [
3339− "low",
3340− "medium",
3341− "high"
3342− ],
3343− "default_reasoning_effort": "medium",
3344− "supports_attachments": true
3345− },
3346− {
3347− "id": "qwen3-vl-flash",
3348− "name": "Qwen3 VL Flash",
3349− "cost_per_1m_in": 0.0206,
3350− "cost_per_1m_out": 0.206,
3351− "cost_per_1m_in_cached": 0,
3352− "cost_per_1m_out_cached": 0.00412,
3353− "context_window": 254000,
3354− "default_max_tokens": 32000,
3355− "can_reason": false,
3356− "supports_attachments": true
3357− },
3358− {
3359− "id": "qwen3-vl-flash-2026-01-22",
3360− "name": "Qwen3 VL Flash 2026 01-22",
3361− "cost_per_1m_in": 0.0206,
3362− "cost_per_1m_out": 0.206,
3363− "cost_per_1m_in_cached": 0,
3364− "cost_per_1m_out_cached": 0.0206,
3365− "context_window": 254000,
3366− "default_max_tokens": 32000,
3367− "can_reason": false,
3368− "supports_attachments": true
3369− },
3370− {
3371− "id": "qwen3-vl-plus",
3372− "name": "Qwen3 VL Plus",
3373− "cost_per_1m_in": 0.137,
3374− "cost_per_1m_out": 1.37,
3375− "cost_per_1m_in_cached": 0,
3376− "cost_per_1m_out_cached": 0.0274,
3377− "context_window": 256000,
3378− "default_max_tokens": 32000,
3379− "can_reason": false,
3380− "supports_attachments": true
3381− },
3382− {
3383− "id": "qwen3.5-122b-a10b",
3384− "name": "Qwen3.5 122B A10B",
3385− "cost_per_1m_in": 0.1126,
3386− "cost_per_1m_out": 0.9008,
3387− "cost_per_1m_in_cached": 0,
3388− "cost_per_1m_out_cached": 0.1126,
3389− "context_window": 991000,
3390− "default_max_tokens": 64000,
3391− "can_reason": true,
3392− "reasoning_levels": [
3393− "low",
3394− "medium",
3395− "high"
3396− ],
3397− "default_reasoning_effort": "medium",
3398− "supports_attachments": true
3399− },
3400− {
3401− "id": "qwen3.5-27b",
3402− "name": "Qwen3.5 27B",
3403− "cost_per_1m_in": 0.0846,
3404− "cost_per_1m_out": 0.6768,
3405− "cost_per_1m_in_cached": 0,
3406− "cost_per_1m_out_cached": 0.0846,
3407− "context_window": 991000,
3408− "default_max_tokens": 64000,
3409− "can_reason": true,
3410− "reasoning_levels": [
3411− "low",
3412− "medium",
3413− "high"
3414− ],
3415− "default_reasoning_effort": "medium",
3416− "supports_attachments": true
3417− },
3418− {
3419− "id": "qwen3.5-35b-a3b",
3420− "name": "Qwen3.5 35B A3B",
3421− "cost_per_1m_in": 0.0564,
3422− "cost_per_1m_out": 0.4512,
3423− "cost_per_1m_in_cached": 0,
3424− "cost_per_1m_out_cached": 0.0564,
3425− "context_window": 991000,
3426− "default_max_tokens": 64000,
3427− "can_reason": true,
3428− "reasoning_levels": [
3429− "low",
3430− "medium",
3431− "high"
3432− ],
3433− "default_reasoning_effort": "medium",
3434− "supports_attachments": true
3435− },
3436− {
3437− "id": "qwen3.5-397b-a17b",
3438− "name": "Qwen3.5 397B A17B",
3439− "cost_per_1m_in": 0.1644,
3440− "cost_per_1m_out": 0.9864,
3441− "cost_per_1m_in_cached": 0,
3442− "cost_per_1m_out_cached": 0.1644,
3443− "context_window": 991000,
3444− "default_max_tokens": 64000,
3445− "can_reason": true,
3446− "reasoning_levels": [
3447− "low",
3448− "medium",
3449− "high"
3450− ],
3451− "default_reasoning_effort": "medium",
3452− "supports_attachments": true
3453− },
3454− {
3455− "id": "qwen3.5-flash",
3456− "name": "Qwen3.5 Flash",
3457− "cost_per_1m_in": 0.0282,
3458− "cost_per_1m_out": 0.282,
3459− "cost_per_1m_in_cached": 0.03525,
3460− "cost_per_1m_out_cached": 0.00282,
3461− "context_window": 991000,
3462− "default_max_tokens": 64000,
3463− "can_reason": true,
3464− "reasoning_levels": [
3465− "low",
3466− "medium",
3467− "high"
3468− ],
3469− "default_reasoning_effort": "medium",
3470− "supports_attachments": true
3471− },
3472− {
3473− "id": "qwen3.5-plus",
3474− "name": "Qwen3.5 Plus",
3475− "cost_per_1m_in": 0.1096,
3476− "cost_per_1m_out": 0.6576,
3477− "cost_per_1m_in_cached": 0.137,
3478− "cost_per_1m_out_cached": 0.01096,
3479− "context_window": 991000,
3480− "default_max_tokens": 64000,
3481− "can_reason": true,
3482− "reasoning_levels": [
3483− "low",
3484− "medium",
3485− "high"
3486− ],
3487− "default_reasoning_effort": "medium",
3488− "supports_attachments": true
3489− },
3490− {
3491− "id": "qwen3.6-27b",
3492− "name": "Qwen3.6 27B",
3493− "cost_per_1m_in": 0.422,
3494− "cost_per_1m_out": 2.532,
3495− "cost_per_1m_in_cached": 0,
3496− "cost_per_1m_out_cached": 0,
3497− "context_window": 254000,
3498− "default_max_tokens": 64000,
3499− "can_reason": true,
3500− "reasoning_levels": [
3501− "low",
3502− "medium",
3503− "high"
3504− ],
3505− "default_reasoning_effort": "medium",
3506− "supports_attachments": true
3507− },
3508− {
3509− "id": "qwen3.6-35b-a3b",
3510− "name": "Qwen3.6 35B A3B",
3511− "cost_per_1m_in": 0.254,
3512− "cost_per_1m_out": 1.524,
3513− "cost_per_1m_in_cached": 0,
3514− "cost_per_1m_out_cached": 0.254,
3515− "context_window": 254000,
3516− "default_max_tokens": 64000,
3517− "can_reason": true,
3518− "reasoning_levels": [
3519− "low",
3520− "medium",
3521− "high"
3522− ],
3523− "default_reasoning_effort": "medium",
3524− "supports_attachments": true
3525− },
3526− {
3527− "id": "qwen3.6-flash",
3528− "name": "Qwen3.6 Flash",
3529− "cost_per_1m_in": 0.169,
3530− "cost_per_1m_out": 1.014,
3531− "cost_per_1m_in_cached": 0.21125,
3532− "cost_per_1m_out_cached": 0.0169,
3533− "context_window": 991000,
3534− "default_max_tokens": 64000,
3535− "can_reason": true,
3536− "reasoning_levels": [
3537− "low",
3538− "medium",
3539− "high"
3540− ],
3541− "default_reasoning_effort": "medium",
3542− "supports_attachments": true
3543− },
3544− {
3545− "id": "qwen3.6-max-preview",
3546− "name": "Qwen3.6 Max Preview",
3547− "cost_per_1m_in": 1.268,
3548− "cost_per_1m_out": 7.608,
3549− "cost_per_1m_in_cached": 1.585,
3550− "cost_per_1m_out_cached": 0.1268,
3551− "context_window": 240000,
3552− "default_max_tokens": 64000,
3553− "can_reason": true,
3554− "reasoning_levels": [
3555− "low",
3556− "medium",
3557− "high"
3558− ],
3559− "default_reasoning_effort": "medium",
3560− "supports_attachments": false
3561− },
3562− {
3563− "id": "qwen3.6-plus",
3564− "name": "Qwen3.6 Plus",
3565− "cost_per_1m_in": 0.282,
3566− "cost_per_1m_out": 1.692,
3567− "cost_per_1m_in_cached": 0.3525,
3568− "cost_per_1m_out_cached": 0.0282,
3569− "context_window": 991000,
3570− "default_max_tokens": 64000,
3571− "can_reason": true,
3572− "reasoning_levels": [
3573− "low",
3574− "medium",
3575− "high"
3576− ],
3577− "default_reasoning_effort": "medium",
3578− "supports_attachments": true
3579− },
3580− {
3581− "id": "qwen3.6-plus-preview-free",
3582− "name": "Qwen3.6 Plus Preview (free)",
3583− "cost_per_1m_in": 0,
3584− "cost_per_1m_out": 0,
3585− "cost_per_1m_in_cached": 0,
3586− "cost_per_1m_out_cached": 0,
3587− "context_window": 1000000,
3588− "default_max_tokens": 65535,
3589− "can_reason": true,
3590− "reasoning_levels": [
3591− "low",
3592− "medium",
3593− "high"
3594− ],
3595− "default_reasoning_effort": "medium",
3596− "supports_attachments": false
3597− },
3598− {
3599− "id": "qwen3.7-max",
3600− "name": "Qwen3.7 Max",
3601− "cost_per_1m_in": 1.69,
3602− "cost_per_1m_out": 5.07,
3603− "cost_per_1m_in_cached": 2.1125,
3604− "cost_per_1m_out_cached": 0.169,
3605− "context_window": 991000,
3606− "default_max_tokens": 64000,
3607− "can_reason": true,
3608− "reasoning_levels": [
3609− "low",
3610− "medium",
3611− "high"
3612− ],
3613− "default_reasoning_effort": "medium",
3614− "supports_attachments": false
3615− },
3616− {
3617− "id": "qwen3.7-plus",
3618− "name": "Qwen3.7 Plus",
3619− "cost_per_1m_in": 0.282,
3620− "cost_per_1m_out": 1.128,
3621− "cost_per_1m_in_cached": 0.3525,
3622− "cost_per_1m_out_cached": 0.0564,
3623− "context_window": 991000,
3624− "default_max_tokens": 64000,
3625− "can_reason": true,
3626− "reasoning_levels": [
3627− "low",
3628− "medium",
3629− "high"
3630− ],
3631− "default_reasoning_effort": "medium",
3632− "supports_attachments": false
3633− },
3634− {
3635− "id": "step-3.5-flash",
3636− "name": "Step 3.5 Flash",
3637− "cost_per_1m_in": 0.11,
3638− "cost_per_1m_out": 0.33,
3639− "cost_per_1m_in_cached": 0,
3640− "cost_per_1m_out_cached": 0,
3641− "context_window": 256000,
3642− "default_max_tokens": 25600,
3643− "can_reason": false,
3644− "supports_attachments": true
3645− },
3646− {
3647− "id": "step-3.7-flash",
3648− "name": "Step 3.7 Flash",
3649− "cost_per_1m_in": 0.022,
3650− "cost_per_1m_out": 0.132,
3651− "cost_per_1m_in_cached": 0,
3652− "cost_per_1m_out_cached": 0.0044,
3653− "context_window": 256000,
3654− "default_max_tokens": 25600,
3655− "can_reason": false,
3656− "supports_attachments": true
3657− },
3658− {
3659− "id": "step-3.7-flash-free",
3660− "name": "Step 3.7 Flash (free)",
3661− "cost_per_1m_in": 0,
3662− "cost_per_1m_out": 0,
3663− "cost_per_1m_in_cached": 0,
3664− "cost_per_1m_out_cached": 0,
3665− "context_window": 256000,
3666− "default_max_tokens": 25600,
3667− "can_reason": false,
3668− "supports_attachments": true
3669− },
3670− {
3671− "id": "xiaomi-mimo-v2-omni-free",
3672− "name": "Xiaomi Mimo V2 Omni (free)",
3673− "cost_per_1m_in": 0,
3674− "cost_per_1m_out": 0,
3675− "cost_per_1m_in_cached": 0,
3676− "cost_per_1m_out_cached": 0,
3677− "context_window": 256000,
3678− "default_max_tokens": 25600,
3679− "can_reason": false,
3680− "supports_attachments": true
3681− },
3682− {
3683− "id": "xiaomi-mimo-v2-pro-free",
3684− "name": "Xiaomi Mimo V2 Pro (free)",
3685− "cost_per_1m_in": 0,
3686− "cost_per_1m_out": 0,
3687− "cost_per_1m_in_cached": 0,
3688− "cost_per_1m_out_cached": 0,
3689− "context_window": 256000,
3690− "default_max_tokens": 25600,
3691− "can_reason": false,
3692− "supports_attachments": true
3693− },
3694− {
3695− "id": "xiaomi-mimo-v2.5",
3696− "name": "Xiaomi Mimo V2.5",
3697− "cost_per_1m_in": 0.155,
3698− "cost_per_1m_out": 0.31,
3699− "cost_per_1m_in_cached": 0,
3700− "cost_per_1m_out_cached": 0.0031,
3701− "context_window": 256000,
3702− "default_max_tokens": 25600,
3703− "can_reason": false,
3704− "supports_attachments": true
3705− },
3706− {
3707− "id": "xiaomi-mimo-v2.5-free",
3708− "name": "Xiaomi Mimo V2.5 (free)",
3709− "cost_per_1m_in": 0,
3710− "cost_per_1m_out": 0,
3711− "cost_per_1m_in_cached": 0,
3712− "cost_per_1m_out_cached": 0,
3713− "context_window": 256000,
3714− "default_max_tokens": 25600,
3715− "can_reason": false,
3716− "supports_attachments": true
3717− },
3718− {
3719− "id": "xiaomi-mimo-v2.5-pro",
3720− "name": "Xiaomi Mimo V2.5 Pro",
3721− "cost_per_1m_in": 0.48,
3722− "cost_per_1m_out": 0.96,
3723− "cost_per_1m_in_cached": 0,
3724− "cost_per_1m_out_cached": 0.00384,
3725− "context_window": 1000000,
3726− "default_max_tokens": 100000,
3727− "can_reason": false,
3728− "supports_attachments": false
3729− },
3730− {
3731− "id": "xiaomi-mimo-v2.5-pro-free",
3732− "name": "Xiaomi Mimo V2.5 Pro (free)",
3733− "cost_per_1m_in": 0,
3734− "cost_per_1m_out": 0,
3735− "cost_per_1m_in_cached": 0,
3736− "cost_per_1m_out_cached": 0,
3737− "context_window": 256000,
3738− "default_max_tokens": 25600,
3739− "can_reason": false,
3740− "supports_attachments": true
3741− }
3742− ],
3743− "default_headers": {
3744− "APP-Code": "IUFF7106"
3745− }
3746−}
vendor/charm.land/catwalk/internal/providers/configs/alibaba-singapore.jsondeleted−141
@@ -1,141 +0,0 @@
1−{
2− "name": "Alibaba (Singapore)",
3− "id": "alibaba-singapore",
4− "api_key": "$ALIBABA_SINGAPORE_API_KEY",
5− "api_endpoint": "https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
6− "type": "openai-compat",
7− "default_large_model_id": "qwen3.6-plus",
8− "default_small_model_id": "qwen3.6-flash",
9− "models": [
10− {
11− "id": "qwen3.5-35b-a3b",
12− "name": "Qwen3.5-35B-A3B",
13− "cost_per_1m_in": 0.248,
14− "cost_per_1m_out": 1.485,
15− "cost_per_1m_in_cached": 0,
16− "cost_per_1m_out_cached": 0,
17− "context_window": 256000,
18− "default_max_tokens": 64000,
19− "can_reason": true,
20− "supports_attachments": true
21− },
22− {
23− "id": "qwen3.5-27b",
24− "name": "Qwen3.5-27B",
25− "cost_per_1m_in": 0.6,
26− "cost_per_1m_out": 3.6,
27− "cost_per_1m_in_cached": 0,
28− "cost_per_1m_out_cached": 0,
29− "context_window": 256000,
30− "default_max_tokens": 64000,
31− "can_reason": true,
32− "supports_attachments": true
33− },
34− {
35− "id": "qwen3.6-flash",
36− "name": "Qwen3.6-Flash",
37− "cost_per_1m_in": 1,
38− "cost_per_1m_out": 4,
39− "cost_per_1m_in_cached": 1.25,
40− "cost_per_1m_out_cached": 0.1,
41− "context_window": 1000000,
42− "default_max_tokens": 64000,
43− "can_reason": true,
44− "supports_attachments": true
45− },
46− {
47− "id": "qwen3.6-plus",
48− "name": "Qwen3.6-Plus",
49− "cost_per_1m_in": 2,
50− "cost_per_1m_out": 6,
51− "cost_per_1m_in_cached": 2.5,
52− "cost_per_1m_out_cached": 0.2,
53− "context_window": 1000000,
54− "default_max_tokens": 64000,
55− "can_reason": true,
56− "supports_attachments": true
57− },
58− {
59− "id": "qwen3.6-max-preview",
60− "name": "Qwen3.6-Max",
61− "cost_per_1m_in": 2,
62− "cost_per_1m_out": 12,
63− "cost_per_1m_in_cached": 2.5,
64− "cost_per_1m_out_cached": 0.2,
65− "context_window": 256000,
66− "default_max_tokens": 64000,
67− "can_reason": true,
68− "supports_attachments": false
69− },
70− {
71− "id": "qwen3.7-plus",
72− "name": "Qwen3.7-Plus",
73− "cost_per_1m_in": 1.2,
74− "cost_per_1m_out": 4.8,
75− "cost_per_1m_in_cached": 1.5,
76− "cost_per_1m_out_cached": 0,
77− "context_window": 1000000,
78− "default_max_tokens": 64000,
79− "can_reason": true,
80− "supports_attachments": true
81− },
82− {
83− "id": "qwen3.7-max",
84− "name": "Qwen3.7-Max",
85− "cost_per_1m_in": 2.5,
86− "cost_per_1m_out": 7.5,
87− "cost_per_1m_in_cached": 3.125,
88− "cost_per_1m_out_cached": 0,
89− "context_window": 1000000,
90− "default_max_tokens": 64000,
91− "can_reason": true,
92− "supports_attachments": false
93− },
94− {
95− "id": "deepseek-v4-pro",
96− "name": "DeepSeek-V4-Pro",
97− "cost_per_1m_in": 2.4,
98− "cost_per_1m_out": 4.8,
99− "cost_per_1m_in_cached": 0.2,
100− "cost_per_1m_out_cached": 0,
101− "context_window": 1000000,
102− "default_max_tokens": 384000,
103− "can_reason": true,
104− "reasoning_levels": [
105− "high",
106− "xhigh"
107− ],
108− "default_reasoning_effort": "high",
109− "supports_attachments": false
110− },
111− {
112− "id": "deepseek-v4-flash",
113− "name": "DeepSeek-V4-Flash",
114− "cost_per_1m_in": 0.2,
115− "cost_per_1m_out": 0.4,
116− "cost_per_1m_in_cached": 0.04,
117− "cost_per_1m_out_cached": 0,
118− "context_window": 1000000,
119− "default_max_tokens": 384000,
120− "can_reason": true,
121− "reasoning_levels": [
122− "high",
123− "xhigh"
124− ],
125− "default_reasoning_effort": "high",
126− "supports_attachments": false
127− },
128− {
129− "id": "deepseek-v3.2",
130− "name": "DeepSeek-V3.2",
131− "cost_per_1m_in": 0.57,
132− "cost_per_1m_out": 1.71,
133− "cost_per_1m_in_cached": 0.114,
134− "cost_per_1m_out_cached": 0,
135− "context_window": 128000,
136− "default_max_tokens": 64000,
137− "can_reason": true,
138− "supports_attachments": false
139− }
140− ]
141−}
vendor/charm.land/catwalk/internal/providers/configs/alibaba-united-states.jsondeleted−45
@@ -1,45 +0,0 @@
1−{
2− "name": "Alibaba (US)",
3− "id": "alibaba-us",
4− "api_key": "$ALIBABA_US_API_KEY",
5− "api_endpoint": "https://dashscope-us.aliyuncs.com/compatible-mode/v1",
6− "type": "openai-compat",
7− "default_large_model_id": "deepseek-v4-pro-us",
8− "default_small_model_id": "deepseek-v4-flash-us",
9− "models": [
10− {
11− "id": "deepseek-v4-pro-us",
12− "name": "DeepSeek-V4-Pro",
13− "cost_per_1m_in": 2.4,
14− "cost_per_1m_out": 4.8,
15− "cost_per_1m_in_cached": 0.2,
16− "cost_per_1m_out_cached": 0,
17− "context_window": 1000000,
18− "default_max_tokens": 384000,
19− "can_reason": true,
20− "reasoning_levels": [
21− "high",
22− "xhigh"
23− ],
24− "default_reasoning_effort": "high",
25− "supports_attachments": false
26− },
27− {
28− "id": "deepseek-v4-flash-us",
29− "name": "DeepSeek-V4-Flash",
30− "cost_per_1m_in": 0.2,
31− "cost_per_1m_out": 0.4,
32− "cost_per_1m_in_cached": 0.04,
33− "cost_per_1m_out_cached": 0,
34− "context_window": 1000000,
35− "default_max_tokens": 384000,
36− "can_reason": true,
37− "reasoning_levels": [
38− "high",
39− "xhigh"
40− ],
41− "default_reasoning_effort": "high",
42− "supports_attachments": false
43− }
44− ]
45−}
vendor/charm.land/catwalk/internal/providers/configs/anthropic.jsondeleted−183
@@ -1,183 +0,0 @@
1−{
2− "name": "Anthropic",
3− "id": "anthropic",
4− "type": "anthropic",
5− "api_key": "$ANTHROPIC_API_KEY",
6− "api_endpoint": "$ANTHROPIC_API_ENDPOINT",
7− "default_large_model_id": "claude-sonnet-4-6",
8− "default_small_model_id": "claude-haiku-4-5-20251001",
9− "models": [
10− {
11− "id": "claude-mythos-5",
12− "name": "Claude Mythos 5",
13− "cost_per_1m_in": 10,
14− "cost_per_1m_out": 50,
15− "cost_per_1m_in_cached": 12.5,
16− "cost_per_1m_out_cached": 1,
17− "context_window": 1000000,
18− "default_max_tokens": 128000,
19− "can_reason": true,
20− "reasoning_levels": ["low", "medium", "high", "xhigh", "max"],
21− "default_reasoning_effort": "high",
22− "supports_attachments": true
23− },
24− {
25− "id": "claude-opus-4-8",
26− "name": "Claude Opus 4.8",
27− "cost_per_1m_in": 5,
28− "cost_per_1m_out": 25,
29− "cost_per_1m_in_cached": 6.25,
30− "cost_per_1m_out_cached": 0.5,
31− "context_window": 1000000,
32− "default_max_tokens": 128000,
33− "can_reason": true,
34− "reasoning_levels": ["low", "medium", "high", "xhigh", "max"],
35− "default_reasoning_effort": "high",
36− "supports_attachments": true
37− },
38− {
39− "id": "claude-opus-4-7",
40− "name": "Claude Opus 4.7",
41− "cost_per_1m_in": 5,
42− "cost_per_1m_out": 25,
43− "cost_per_1m_in_cached": 6.25,
44− "cost_per_1m_out_cached": 0.5,
45− "context_window": 1000000,
46− "default_max_tokens": 128000,
47− "can_reason": true,
48− "reasoning_levels": ["low", "medium", "high", "xhigh", "max"],
49− "default_reasoning_effort": "high",
50− "supports_attachments": true
51− },
52− {
53− "id": "claude-opus-4-6",
54− "name": "Claude Opus 4.6",
55− "cost_per_1m_in": 5,
56− "cost_per_1m_out": 25,
57− "cost_per_1m_in_cached": 6.25,
58− "cost_per_1m_out_cached": 0.5,
59− "context_window": 200000,
60− "default_max_tokens": 128000,
61− "can_reason": true,
62− "reasoning_levels": ["low", "medium", "high", "max"],
63− "default_reasoning_effort": "high",
64− "supports_attachments": true
65− },
66− {
67− "id": "claude-opus-4-5-20251101",
68− "name": "Claude Opus 4.5",
69− "cost_per_1m_in": 5,
70− "cost_per_1m_out": 25,
71− "cost_per_1m_in_cached": 6.25,
72− "cost_per_1m_out_cached": 0.5,
73− "context_window": 200000,
74− "default_max_tokens": 64000,
75− "can_reason": true,
76− "reasoning_levels": ["low", "medium", "high"],
77− "default_reasoning_effort": "high",
78− "supports_attachments": true
79− },
80− {
81− "id": "claude-sonnet-5",
82− "name": "Claude Sonnet 5",
83− "cost_per_1m_in": 2,
84− "cost_per_1m_out": 10,
85− "cost_per_1m_in_cached": 2.5,
86− "cost_per_1m_out_cached": 0.2,
87− "context_window": 1000000,
88− "default_max_tokens": 128000,
89− "can_reason": true,
90− "reasoning_levels": ["low", "medium", "high", "xhigh", "max"],
91− "default_reasoning_effort": "high",
92− "supports_attachments": true
93− },
94− {
95− "id": "claude-sonnet-4-6",
96− "name": "Claude Sonnet 4.6",
97− "cost_per_1m_in": 3,
98− "cost_per_1m_out": 15,
99− "cost_per_1m_in_cached": 3.75,
100− "cost_per_1m_out_cached": 0.3,
101− "context_window": 200000,
102− "default_max_tokens": 128000,
103− "can_reason": true,
104− "reasoning_levels": ["low", "medium", "high", "max"],
105− "default_reasoning_effort": "high",
106− "supports_attachments": true
107− },
108− {
109− "id": "claude-sonnet-4-5-20250929",
110− "name": "Claude Sonnet 4.5",
111− "cost_per_1m_in": 3,
112− "cost_per_1m_out": 15,
113− "cost_per_1m_in_cached": 3.75,
114− "cost_per_1m_out_cached": 0.3,
115− "context_window": 200000,
116− "default_max_tokens": 64000,
117− "can_reason": true,
118− "supports_attachments": true
119− },
120− {
121− "id": "claude-haiku-4-5-20251001",
122− "name": "Claude Haiku 4.5",
123− "cost_per_1m_in": 1,
124− "cost_per_1m_out": 5,
125− "cost_per_1m_in_cached": 1.25,
126− "cost_per_1m_out_cached": 0.1,
127− "context_window": 200000,
128− "default_max_tokens": 64000,
129− "can_reason": true,
130− "supports_attachments": true
131− },
132− {
133− "id": "claude-opus-4-1-20250805",
134− "name": "Claude Opus 4.1",
135− "cost_per_1m_in": 15,
136− "cost_per_1m_out": 75,
137− "cost_per_1m_in_cached": 18.75,
138− "cost_per_1m_out_cached": 1.5,
139− "context_window": 200000,
140− "default_max_tokens": 32000,
141− "can_reason": true,
142− "supports_attachments": true
143− },
144− {
145− "id": "claude-opus-4-20250514",
146− "name": "Claude Opus 4",
147− "cost_per_1m_in": 15,
148− "cost_per_1m_out": 75,
149− "cost_per_1m_in_cached": 18.75,
150− "cost_per_1m_out_cached": 1.5,
151− "context_window": 200000,
152− "default_max_tokens": 32000,
153− "can_reason": true,
154− "supports_attachments": true
155− },
156− {
157− "id": "claude-sonnet-4-20250514",
158− "name": "Claude Sonnet 4",
159− "cost_per_1m_in": 3,
160− "cost_per_1m_out": 15,
161− "cost_per_1m_in_cached": 3.75,
162− "cost_per_1m_out_cached": 0.3,
163− "context_window": 200000,
164− "default_max_tokens": 64000,
165− "can_reason": true,
166− "supports_attachments": true
167− },
168− {
169− "id": "claude-fable-5",
170− "name": "Claude Fable 5",
171− "cost_per_1m_in": 10,
172− "cost_per_1m_out": 50,
173− "cost_per_1m_in_cached": 12.5,
174− "cost_per_1m_out_cached": 1,
175− "context_window": 1000000,
176− "default_max_tokens": 128000,
177− "can_reason": true,
178− "reasoning_levels": ["low", "medium", "high", "xhigh", "max"],
179− "default_reasoning_effort": "high",
180− "supports_attachments": true
181− }
182− ]
183−}
vendor/charm.land/catwalk/internal/providers/configs/avian.jsondeleted−125
@@ -1,125 +0,0 @@
1−{
2− "name": "Avian",
3− "id": "avian",
4− "api_key": "$AVIAN_API_KEY",
5− "api_endpoint": "https://api.avian.io/v1",
6− "type": "openai-compat",
7− "default_large_model_id": "moonshotai/kimi-k2.5",
8− "default_small_model_id": "deepseek/deepseek-v3.2",
9− "models": [
10− {
11− "id": "deepseek/deepseek-v3.2",
12− "name": "DeepSeek V3.2",
13− "cost_per_1m_in": 0.23,
14− "cost_per_1m_out": 0.33,
15− "cost_per_1m_in_cached": 0.012,
16− "cost_per_1m_out_cached": 0,
17− "context_window": 163840,
18− "default_max_tokens": 65536,
19− "can_reason": true,
20− "reasoning_levels": [
21− "low",
22− "medium",
23− "high"
24− ],
25− "default_reasoning_effort": "medium",
26− "supports_attachments": false
27− },
28− {
29− "id": "deepseek/deepseek-v4-flash",
30− "name": "DeepSeek V4 Flash",
31− "cost_per_1m_in": 0.105,
32− "cost_per_1m_out": 0.21,
33− "cost_per_1m_in_cached": 0.021,
34− "cost_per_1m_out_cached": 0,
35− "context_window": 1000000,
36− "default_max_tokens": 393216,
37− "can_reason": true,
38− "reasoning_levels": [
39− "low",
40− "medium",
41− "high"
42− ],
43− "default_reasoning_effort": "medium",
44− "supports_attachments": false
45− },
46− {
47− "id": "deepseek/deepseek-v4-pro",
48− "name": "DeepSeek V4 Pro",
49− "cost_per_1m_in": 1.305,
50− "cost_per_1m_out": 2.61,
51− "cost_per_1m_in_cached": 0.10875,
52− "cost_per_1m_out_cached": 0,
53− "context_window": 1000000,
54− "default_max_tokens": 393216,
55− "can_reason": true,
56− "reasoning_levels": [
57− "low",
58− "medium",
59− "high"
60− ],
61− "default_reasoning_effort": "medium",
62− "supports_attachments": false
63− },
64− {
65− "id": "z-ai/glm-5",
66− "name": "GLM-5",
67− "cost_per_1m_in": 0.95,
68− "cost_per_1m_out": 2.55,
69− "cost_per_1m_in_cached": 0.2,
70− "cost_per_1m_out_cached": 0,
71− "context_window": 204800,
72− "default_max_tokens": 131072,
73− "can_reason": false,
74− "supports_attachments": false
75− },
76− {
77− "id": "z-ai/glm-5.1",
78− "name": "GLM-5.1",
79− "cost_per_1m_in": 1,
80− "cost_per_1m_out": 3.2,
81− "cost_per_1m_in_cached": 0.2,
82− "cost_per_1m_out_cached": 0,
83− "context_window": 202752,
84− "default_max_tokens": 202752,
85− "can_reason": false,
86− "supports_attachments": false
87− },
88− {
89− "id": "moonshotai/kimi-k2.5",
90− "name": "Kimi K2.5",
91− "cost_per_1m_in": 0.45,
92− "cost_per_1m_out": 2.2,
93− "cost_per_1m_in_cached": 0.225,
94− "cost_per_1m_out_cached": 0,
95− "context_window": 262144,
96− "default_max_tokens": 262144,
97− "can_reason": false,
98− "supports_attachments": false
99− },
100− {
101− "id": "moonshotai/kimi-k2.6",
102− "name": "Kimi K2.6",
103− "cost_per_1m_in": 0.95,
104− "cost_per_1m_out": 4,
105− "cost_per_1m_in_cached": 0.16,
106− "cost_per_1m_out_cached": 0,
107− "context_window": 262144,
108− "default_max_tokens": 262144,
109− "can_reason": false,
110− "supports_attachments": false
111− },
112− {
113− "id": "minimax/minimax-m2.5",
114− "name": "MiniMax M2.5",
115− "cost_per_1m_in": 0.27,
116− "cost_per_1m_out": 1.08,
117− "cost_per_1m_in_cached": 0.15,
118− "cost_per_1m_out_cached": 0,
119− "context_window": 196608,
120− "default_max_tokens": 131072,
121− "can_reason": false,
122− "supports_attachments": false
123− }
124− ]
125−}
vendor/charm.land/catwalk/internal/providers/configs/azure.jsondeleted−225
@@ -1,225 +0,0 @@
1−{
2− "name": "Azure OpenAI",
3− "id": "azure",
4− "type": "azure",
5− "api_key": "$AZURE_OPENAI_API_KEY",
6− "api_endpoint": "$AZURE_OPENAI_API_ENDPOINT",
7− "default_large_model_id": "gpt-5",
8− "default_small_model_id": "gpt-5-mini",
9− "models": [
10− {
11− "id": "gpt-5",
12− "name": "GPT-5",
13− "cost_per_1m_in": 1.25,
14− "cost_per_1m_out": 10,
15− "cost_per_1m_in_cached": 0.25,
16− "cost_per_1m_out_cached": 0.25,
17− "context_window": 400000,
18− "default_max_tokens": 128000,
19− "can_reason": true,
20− "reasoning_levels": [
21− "minimal",
22− "low",
23− "medium",
24− "high"
25− ],
26− "default_reasoning_effort": "minimal",
27− "supports_attachments": true
28− },
29− {
30− "id": "gpt-5-mini",
31− "name": "GPT-5 Mini",
32− "cost_per_1m_in": 0.25,
33− "cost_per_1m_out": 2,
34− "cost_per_1m_in_cached": 0.025,
35− "cost_per_1m_out_cached": 0.025,
36− "context_window": 400000,
37− "default_max_tokens": 128000,
38− "can_reason": true,
39− "reasoning_levels": [
40− "low",
41− "medium",
42− "high"
43− ],
44− "default_reasoning_effort": "low",
45− "supports_attachments": true
46− },
47− {
48− "id": "gpt-5-nano",
49− "name": "GPT-5 Nano",
50− "cost_per_1m_in": 0.05,
51− "cost_per_1m_out": 0.4,
52− "cost_per_1m_in_cached": 0.005,
53− "cost_per_1m_out_cached": 0.005,
54− "context_window": 400000,
55− "default_max_tokens": 128000,
56− "can_reason": true,
57− "reasoning_levels": [
58− "low",
59− "medium",
60− "high"
61− ],
62− "default_reasoning_effort": "low",
63− "supports_attachments": true
64− },
65− {
66− "id": "codex-mini-latest",
67− "name": "Codex Mini",
68− "cost_per_1m_in": 1.5,
69− "cost_per_1m_out": 6,
70− "cost_per_1m_in_cached": 0,
71− "cost_per_1m_out_cached": 0.375,
72− "context_window": 200000,
73− "default_max_tokens": 50000,
74− "can_reason": true,
75− "reasoning_levels": [
76− "low",
77− "medium",
78− "high"
79− ],
80− "default_reasoning_effort": "medium",
81− "supports_attachments": true
82− },
83− {
84− "id": "o4-mini",
85− "name": "o4 Mini",
86− "cost_per_1m_in": 1.1,
87− "cost_per_1m_out": 4.4,
88− "cost_per_1m_in_cached": 0,
89− "cost_per_1m_out_cached": 0.275,
90− "context_window": 200000,
91− "default_max_tokens": 50000,
92− "can_reason": true,
93− "has_reasoning_efforts": true,
94− "default_reasoning_effort": "medium",
95− "supports_attachments": true
96− },
97− {
98− "id": "o3",
99− "name": "o3",
100− "cost_per_1m_in": 2,
101− "cost_per_1m_out": 8,
102− "cost_per_1m_in_cached": 0,
103− "cost_per_1m_out_cached": 0.5,
104− "context_window": 200000,
105− "default_max_tokens": 50000,
106− "can_reason": true,
107− "reasoning_levels": [
108− "low",
109− "medium",
110− "high"
111− ],
112− "default_reasoning_effort": "medium",
113− "supports_attachments": true
114− },
115− {
116− "id": "o3-pro",
117− "name": "o3 Pro",
118− "cost_per_1m_in": 20,
119− "cost_per_1m_out": 80,
120− "cost_per_1m_in_cached": 0,
121− "cost_per_1m_out_cached": 0,
122− "context_window": 200000,
123− "default_max_tokens": 50000,
124− "can_reason": true,
125− "reasoning_levels": [
126− "low",
127− "medium",
128− "high"
129− ],
130− "default_reasoning_effort": "medium",
131− "supports_attachments": true
132− },
133− {
134− "id": "gpt-4.1",
135− "name": "GPT-4.1",
136− "cost_per_1m_in": 2,
137− "cost_per_1m_out": 8,
138− "cost_per_1m_in_cached": 0,
139− "cost_per_1m_out_cached": 0.5,
140− "context_window": 1047576,
141− "default_max_tokens": 50000,
142− "can_reason": false,
143− "supports_attachments": true
144− },
145− {
146− "id": "gpt-4.1-mini",
147− "name": "GPT-4.1 Mini",
148− "cost_per_1m_in": 0.39999999999999997,
149− "cost_per_1m_out": 1.5999999999999999,
150− "cost_per_1m_in_cached": 0,
151− "cost_per_1m_out_cached": 0.09999999999999999,
152− "context_window": 1047576,
153− "default_max_tokens": 50000,
154− "can_reason": false,
155− "supports_attachments": true
156− },
157− {
158− "id": "gpt-4.1-nano",
159− "name": "GPT-4.1 Nano",
160− "cost_per_1m_in": 0.09999999999999999,
161− "cost_per_1m_out": 0.39999999999999997,
162− "cost_per_1m_in_cached": 0,
163− "cost_per_1m_out_cached": 0.024999999999999998,
164− "context_window": 1047576,
165− "default_max_tokens": 50000,
166− "can_reason": false,
167− "supports_attachments": true
168− },
169− {
170− "id": "gpt-4.5-preview",
171− "name": "GPT-4.5 (Preview)",
172− "cost_per_1m_in": 75,
173− "cost_per_1m_out": 150,
174− "cost_per_1m_in_cached": 0,
175− "cost_per_1m_out_cached": 37.5,
176− "context_window": 128000,
177− "default_max_tokens": 50000,
178− "can_reason": false,
179− "supports_attachments": true
180− },
181− {
182− "id": "o3-mini",
183− "name": "o3 Mini",
184− "cost_per_1m_in": 1.1,
185− "cost_per_1m_out": 4.4,
186− "cost_per_1m_in_cached": 0,
187− "cost_per_1m_out_cached": 0.55,
188− "context_window": 200000,
189− "default_max_tokens": 50000,
190− "can_reason": true,
191− "reasoning_levels": [
192− "low",
193− "medium",
194− "high"
195− ],
196− "default_reasoning_effort": "medium",
197− "supports_attachments": false
198− },
199− {
200− "id": "gpt-4o",
201− "name": "GPT-4o",
202− "cost_per_1m_in": 2.5,
203− "cost_per_1m_out": 10,
204− "cost_per_1m_in_cached": 0,
205− "cost_per_1m_out_cached": 1.25,
206− "context_window": 128000,
207− "default_max_tokens": 20000,
208− "can_reason": false,
209− "supports_attachments": true
210− },
211− {
212− "id": "gpt-4o-mini",
213− "name": "GPT-4o-mini",
214− "cost_per_1m_in": 0.15,
215− "cost_per_1m_out": 0.6,
216− "cost_per_1m_in_cached": 0,
217− "cost_per_1m_out_cached": 0.075,
218− "context_window": 128000,
219− "default_max_tokens": 20000,
220− "can_reason": false,
221− "reasoning_effort": "",
222− "supports_attachments": true
223− }
224− ]
225−}
vendor/charm.land/catwalk/internal/providers/configs/baseten.jsondeleted−187
@@ -1,187 +0,0 @@
1−{
2− "name": "Baseten",
3− "id": "baseten",
4− "api_key": "$BASETEN_API_KEY",
5− "api_endpoint": "https://inference.baseten.co/v1",
6− "type": "openai-compat",
7− "default_large_model_id": "deepseek-ai/DeepSeek-V4-Pro",
8− "default_small_model_id": "openai/gpt-oss-120b",
9− "models": [
10− {
11− "id": "deepseek-ai/DeepSeek-V4-Pro",
12− "name": "Deepseek V4 Pro",
13− "cost_per_1m_in": 1.74,
14− "cost_per_1m_out": 3.48,
15− "cost_per_1m_in_cached": 0.145,
16− "cost_per_1m_out_cached": 0,
17− "context_window": 262144,
18− "default_max_tokens": 262144,
19− "can_reason": true,
20− "reasoning_levels": [
21− "none",
22− "minimal",
23− "low",
24− "medium",
25− "high",
26− "xhigh",
27− "max"
28− ],
29− "default_reasoning_effort": "medium",
30− "supports_attachments": false
31− },
32− {
33− "id": "zai-org/GLM-4.7",
34− "name": "GLM 4.7",
35− "cost_per_1m_in": 0.6,
36− "cost_per_1m_out": 2.2,
37− "cost_per_1m_in_cached": 0.12,
38− "cost_per_1m_out_cached": 0,
39− "context_window": 200000,
40− "default_max_tokens": 200000,
41− "can_reason": false,
42− "supports_attachments": false
43− },
44− {
45− "id": "zai-org/GLM-5",
46− "name": "GLM 5",
47− "cost_per_1m_in": 0.95,
48− "cost_per_1m_out": 3.15,
49− "cost_per_1m_in_cached": 0.2,
50− "cost_per_1m_out_cached": 0,
51− "context_window": 202800,
52− "default_max_tokens": 202800,
53− "can_reason": false,
54− "supports_attachments": false
55− },
56− {
57− "id": "zai-org/GLM-5.1",
58− "name": "GLM 5.1",
59− "cost_per_1m_in": 1.3,
60− "cost_per_1m_out": 4.3,
61− "cost_per_1m_in_cached": 0.26,
62− "cost_per_1m_out_cached": 0,
63− "context_window": 202800,
64− "default_max_tokens": 202800,
65− "can_reason": false,
66− "supports_attachments": false
67− },
68− {
69− "id": "zai-org/GLM-5.2",
70− "name": "GLM 5.2",
71− "cost_per_1m_in": 1.4,
72− "cost_per_1m_out": 4.4,
73− "cost_per_1m_in_cached": 0.26,
74− "cost_per_1m_out_cached": 0,
75− "context_window": 202720,
76− "default_max_tokens": 32768,
77− "can_reason": true,
78− "reasoning_levels": [
79− "none",
80− "high",
81− "max"
82− ],
83− "default_reasoning_effort": "high",
84− "supports_attachments": false
85− },
86− {
87− "id": "moonshotai/Kimi-K2.5",
88− "name": "Kimi K2.5",
89− "cost_per_1m_in": 0.6,
90− "cost_per_1m_out": 3,
91− "cost_per_1m_in_cached": 0.12,
92− "cost_per_1m_out_cached": 0,
93− "context_window": 262000,
94− "default_max_tokens": 262000,
95− "can_reason": false,
96− "supports_attachments": true
97− },
98− {
99− "id": "moonshotai/Kimi-K2.6",
100− "name": "Kimi K2.6",
101− "cost_per_1m_in": 0.95,
102− "cost_per_1m_out": 4,
103− "cost_per_1m_in_cached": 0.16,
104− "cost_per_1m_out_cached": 0,
105− "context_window": 262000,
106− "default_max_tokens": 262000,
107− "can_reason": true,
108− "reasoning_levels": [
109− "low",
110− "medium",
111− "high"
112− ],
113− "default_reasoning_effort": "medium",
114− "supports_attachments": true
115− },
116− {
117− "id": "moonshotai/Kimi-K2.7-Code",
118− "name": "Kimi K2.7 Code",
119− "cost_per_1m_in": 0.95,
120− "cost_per_1m_out": 4,
121− "cost_per_1m_in_cached": 0.16,
122− "cost_per_1m_out_cached": 0,
123− "context_window": 262000,
124− "default_max_tokens": 32768,
125− "can_reason": true,
126− "supports_attachments": true
127− },
128− {
129− "id": "nvidia/Nemotron-120B-A12B",
130− "name": "Nemotron Super",
131− "cost_per_1m_in": 0.3,
132− "cost_per_1m_out": 0.75,
133− "cost_per_1m_in_cached": 0.06,
134− "cost_per_1m_out_cached": 0,
135− "context_window": 202800,
136− "default_max_tokens": 202800,
137− "can_reason": true,
138− "reasoning_levels": [
139− "low",
140− "medium",
141− "high"
142− ],
143− "default_reasoning_effort": "medium",
144− "supports_attachments": false
145− },
146− {
147− "id": "nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B",
148− "name": "Nemotron Ultra",
149− "cost_per_1m_in": 0.6,
150− "cost_per_1m_out": 2.4,
151− "cost_per_1m_in_cached": 0.12,
152− "cost_per_1m_out_cached": 0,
153− "context_window": 202800,
154− "default_max_tokens": 202800,
155− "can_reason": true,
156− "reasoning_levels": [
157− "low",
158− "medium",
159− "high"
160− ],
161− "default_reasoning_effort": "medium",
162− "supports_attachments": false
163− },
164− {
165− "id": "openai/gpt-oss-120b",
166− "name": "OpenAI GPT 120B",
167− "cost_per_1m_in": 0.1,
168− "cost_per_1m_out": 0.5,
169− "cost_per_1m_in_cached": 0.1,
170− "cost_per_1m_out_cached": 0,
171− "context_window": 128072,
172− "default_max_tokens": 128072,
173− "can_reason": true,
174− "reasoning_levels": [
175− "none",
176− "minimal",
177− "low",
178− "medium",
179− "high",
180− "xhigh",
181− "max"
182− ],
183− "default_reasoning_effort": "medium",
184− "supports_attachments": false
185− }
186− ]
187−}
vendor/charm.land/catwalk/internal/providers/configs/bedrock-europe.jsondeleted−115
@@ -1,115 +0,0 @@
1−{
2− "name": "AWS Bedrock Europe",
3− "id": "bedrock-europe",
4− "type": "bedrock",
5− "api_key": "",
6− "api_endpoint": "",
7− "default_large_model_id": "eu.anthropic.claude-sonnet-4-6",
8− "default_small_model_id": "eu.anthropic.claude-haiku-4-5-20251001-v1:0",
9− "models": [
10− {
11− "id": "eu.anthropic.claude-sonnet-4-6",
12− "name": "Claude Sonnet 4.6",
13− "cost_per_1m_in": 3.3,
14− "cost_per_1m_out": 16.5,
15− "cost_per_1m_in_cached": 4.125,
16− "cost_per_1m_out_cached": 0.33,
17− "context_window": 1000000,
18− "default_max_tokens": 64000,
19− "can_reason": true,
20− "reasoning_levels": ["low", "medium", "high", "max"],
21− "default_reasoning_effort": "high",
22− "supports_attachments": true
23− },
24− {
25− "id": "eu.anthropic.claude-sonnet-4-5-20250929-v1:0",
26− "name": "Claude Sonnet 4.5",
27− "cost_per_1m_in": 3.3,
28− "cost_per_1m_out": 16.5,
29− "cost_per_1m_in_cached": 4.125,
30− "cost_per_1m_out_cached": 0.33,
31− "context_window": 200000,
32− "default_max_tokens": 64000,
33− "can_reason": true,
34− "supports_attachments": true
35− },
36− {
37− "id": "eu.anthropic.claude-haiku-4-5-20251001-v1:0",
38− "name": "Claude Haiku 4.5",
39− "cost_per_1m_in": 1.1,
40− "cost_per_1m_out": 5.5,
41− "cost_per_1m_in_cached": 1.375,
42− "cost_per_1m_out_cached": 0.11,
43− "context_window": 200000,
44− "default_max_tokens": 64000,
45− "can_reason": true,
46− "supports_attachments": true
47− },
48− {
49− "id": "eu.anthropic.claude-opus-4-8",
50− "name": "Claude Opus 4.8",
51− "cost_per_1m_in": 5.5,
52− "cost_per_1m_out": 27.5,
53− "cost_per_1m_in_cached": 6.875,
54− "cost_per_1m_out_cached": 0.55,
55− "context_window": 1000000,
56− "default_max_tokens": 128000,
57− "can_reason": true,
58− "reasoning_levels": ["low", "medium", "high", "xhigh", "max"],
59− "default_reasoning_effort": "high",
60− "supports_attachments": true
61− },
62− {
63− "id": "eu.anthropic.claude-opus-4-7",
64− "name": "Claude Opus 4.7",
65− "cost_per_1m_in": 5.5,
66− "cost_per_1m_out": 27.5,
67− "cost_per_1m_in_cached": 6.875,
68− "cost_per_1m_out_cached": 0.55,
69− "context_window": 1000000,
70− "default_max_tokens": 128000,
71− "can_reason": true,
72− "reasoning_levels": ["low", "medium", "high", "xhigh", "max"],
73− "default_reasoning_effort": "high",
74− "supports_attachments": true
75− },
76− {
77− "id": "eu.anthropic.claude-opus-4-6-v1",
78− "name": "Claude Opus 4.6",
79− "cost_per_1m_in": 5.5,
80− "cost_per_1m_out": 27.5,
81− "cost_per_1m_in_cached": 6.875,
82− "cost_per_1m_out_cached": 0.55,
83− "context_window": 1000000,
84− "default_max_tokens": 128000,
85− "can_reason": true,
86− "reasoning_levels": ["low", "medium", "high", "max"],
87− "default_reasoning_effort": "high",
88− "supports_attachments": true
89− },
90− {
91− "id": "eu.anthropic.claude-opus-4-5-20251101-v1:0",
92− "name": "Claude Opus 4.5",
93− "cost_per_1m_in": 5.5,
94− "cost_per_1m_out": 27.5,
95− "cost_per_1m_in_cached": 6.875,
96− "cost_per_1m_out_cached": 0.55,
97− "context_window": 200000,
98− "default_max_tokens": 64000,
99− "can_reason": true,
100− "supports_attachments": true
101− },
102− {
103− "id": "eu.anthropic.claude-opus-4-1-20250805-v1:0",
104− "name": "Claude Opus 4.1",
105− "cost_per_1m_in": 16.5,
106− "cost_per_1m_out": 82.5,
107− "cost_per_1m_in_cached": 20.625,
108− "cost_per_1m_out_cached": 1.65,
109− "context_window": 200000,
110− "default_max_tokens": 32000,
111− "can_reason": true,
112− "supports_attachments": true
113− }
114− ]
115−}
vendor/charm.land/catwalk/internal/providers/configs/bedrock-united-states.jsondeleted−143
@@ -1,143 +0,0 @@
1−{
2− "name": "AWS Bedrock US",
3− "id": "bedrock",
4− "type": "bedrock",
5− "api_key": "",
6− "api_endpoint": "",
7− "default_large_model_id": "us.anthropic.claude-sonnet-4-6",
8− "default_small_model_id": "us.anthropic.claude-haiku-4-5-20251001-v1:0",
9− "models": [
10− {
11− "id": "us.anthropic.claude-sonnet-5",
12− "name": "Claude Sonnet 5",
13− "cost_per_1m_in": 3,
14− "cost_per_1m_out": 15,
15− "cost_per_1m_in_cached": 3.75,
16− "cost_per_1m_out_cached": 0.3,
17− "context_window": 1000000,
18− "default_max_tokens": 128000,
19− "can_reason": true,
20− "reasoning_levels": ["low", "medium", "high", "xhigh", "max"],
21− "default_reasoning_effort": "high",
22− "supports_attachments": true
23− },
24− {
25− "id": "us.anthropic.claude-sonnet-4-6",
26− "name": "Claude Sonnet 4.6",
27− "cost_per_1m_in": 3,
28− "cost_per_1m_out": 15,
29− "cost_per_1m_in_cached": 3.75,
30− "cost_per_1m_out_cached": 0.3,
31− "context_window": 1000000,
32− "default_max_tokens": 64000,
33− "can_reason": true,
34− "reasoning_levels": ["low", "medium", "high", "max"],
35− "default_reasoning_effort": "high",
36− "supports_attachments": true
37− },
38− {
39− "id": "us.anthropic.claude-sonnet-4-5-20250929-v1:0",
40− "name": "Claude Sonnet 4.5",
41− "cost_per_1m_in": 3,
42− "cost_per_1m_out": 15,
43− "cost_per_1m_in_cached": 3.75,
44− "cost_per_1m_out_cached": 0.3,
45− "context_window": 200000,
46− "default_max_tokens": 64000,
47− "can_reason": true,
48− "supports_attachments": true
49− },
50− {
51− "id": "us.anthropic.claude-haiku-4-5-20251001-v1:0",
52− "name": "Claude Haiku 4.5",
53− "cost_per_1m_in": 1,
54− "cost_per_1m_out": 5,
55− "cost_per_1m_in_cached": 1.25,
56− "cost_per_1m_out_cached": 0.1,
57− "context_window": 200000,
58− "default_max_tokens": 64000,
59− "can_reason": true,
60− "supports_attachments": true
61− },
62− {
63− "id": "us.anthropic.claude-opus-4-8",
64− "name": "Claude Opus 4.8",
65− "cost_per_1m_in": 5,
66− "cost_per_1m_out": 25,
67− "cost_per_1m_in_cached": 6.25,
68− "cost_per_1m_out_cached": 0.5,
69− "context_window": 1000000,
70− "default_max_tokens": 128000,
71− "can_reason": true,
72− "reasoning_levels": ["low", "medium", "high", "xhigh", "max"],
73− "default_reasoning_effort": "high",
74− "supports_attachments": true
75− },
76− {
77− "id": "us.anthropic.claude-opus-4-7",
78− "name": "Claude Opus 4.7",
79− "cost_per_1m_in": 5,
80− "cost_per_1m_out": 25,
81− "cost_per_1m_in_cached": 6.25,
82− "cost_per_1m_out_cached": 0.5,
83− "context_window": 1000000,
84− "default_max_tokens": 128000,
85− "can_reason": true,
86− "reasoning_levels": ["low", "medium", "high", "xhigh", "max"],
87− "default_reasoning_effort": "high",
88− "supports_attachments": true
89− },
90− {
91− "id": "us.anthropic.claude-opus-4-6-v1",
92− "name": "Claude Opus 4.6",
93− "cost_per_1m_in": 5,
94− "cost_per_1m_out": 25,
95− "cost_per_1m_in_cached": 6.25,
96− "cost_per_1m_out_cached": 0.5,
97− "context_window": 1000000,
98− "default_max_tokens": 128000,
99− "can_reason": true,
100− "reasoning_levels": ["low", "medium", "high", "max"],
101− "default_reasoning_effort": "high",
102− "supports_attachments": true
103− },
104− {
105− "id": "us.anthropic.claude-opus-4-5-20251101-v1:0",
106− "name": "Claude Opus 4.5",
107− "cost_per_1m_in": 5,
108− "cost_per_1m_out": 25,
109− "cost_per_1m_in_cached": 6.25,
110− "cost_per_1m_out_cached": 0.5,
111− "context_window": 200000,
112− "default_max_tokens": 64000,
113− "can_reason": true,
114− "supports_attachments": true
115− },
116− {
117− "id": "us.anthropic.claude-opus-4-1-20250805-v1:0",
118− "name": "Claude Opus 4.1",
119− "cost_per_1m_in": 15,
120− "cost_per_1m_out": 75,
121− "cost_per_1m_in_cached": 18.75,
122− "cost_per_1m_out_cached": 1.5,
123− "context_window": 200000,
124− "default_max_tokens": 32000,
125− "can_reason": true,
126− "supports_attachments": true
127− },
128− {
129− "id": "us.anthropic.claude-fable-5",
130− "name": "Claude Fable 5",
131− "cost_per_1m_in": 10,
132− "cost_per_1m_out": 50,
133− "cost_per_1m_in_cached": 12.5,
134− "cost_per_1m_out_cached": 1,
135− "context_window": 1000000,
136− "default_max_tokens": 128000,
137− "can_reason": true,
138− "reasoning_levels": ["low", "medium", "high", "xhigh", "max"],
139− "default_reasoning_effort": "high",
140− "supports_attachments": true
141− }
142− ]
143−}
vendor/charm.land/catwalk/internal/providers/configs/cerebras.jsondeleted−42
@@ -1,42 +0,0 @@
1−{
2− "name": "Cerebras",
3− "id": "cerebras",
4− "type": "openai-compat",
5− "api_key": "$CEREBRAS_API_KEY",
6− "api_endpoint": "https://api.cerebras.ai/v1",
7− "default_large_model_id": "gpt-oss-120b",
8− "default_small_model_id": "zai-glm-4.7",
9− "default_headers": {
10− "X-Cerebras-3rd-Party-Integration": "crush"
11− },
12− "models": [
13− {
14− "id": "gpt-oss-120b",
15− "name": "OpenAI GPT OSS",
16− "cost_per_1m_in": 0.35,
17− "cost_per_1m_out": 0.75,
18− "context_window": 131072,
19− "default_max_tokens": 25000,
20− "can_reason": true,
21− "reasoning_levels": [
22− "low",
23− "medium",
24− "high"
25− ],
26− "default_reasoning_effort": "medium",
27− "supports_attachments": false
28− },
29− {
30− "id": "zai-glm-4.7",
31− "name": "Z.ai GLM 4.7",
32− "cost_per_1m_in": 2.25,
33− "cost_per_1m_out": 2.75,
34− "context_window": 131072,
35− "default_max_tokens": 25000,
36− "can_reason": false,
37− "supports_attachments": false,
38− "temperature": 1,
39− "top_p": 0.95
40− }
41− ]
42−}
vendor/charm.land/catwalk/internal/providers/configs/chutes.jsondeleted−227
@@ -1,227 +0,0 @@
1−{
2− "name": "Chutes",
3− "id": "chutes",
4− "api_key": "$CHUTES_API_KEY",
5− "api_endpoint": "https://llm.chutes.ai/v1",
6− "type": "openai-compat",
7− "default_large_model_id": "moonshotai/Kimi-K2.6-TEE",
8− "default_small_model_id": "google/gemma-4-31B-turbo-TEE",
9− "models": [
10− {
11− "id": "deepseek-ai/DeepSeek-V3.2-TEE",
12− "name": "DeepSeek-V3.2-TEE",
13− "cost_per_1m_in": 1,
14− "cost_per_1m_out": 1,
15− "cost_per_1m_in_cached": 0.5,
16− "cost_per_1m_out_cached": 0,
17− "context_window": 131072,
18− "default_max_tokens": 65536,
19− "can_reason": true,
20− "reasoning_levels": [
21− "low",
22− "medium",
23− "high"
24− ],
25− "default_reasoning_effort": "medium",
26− "supports_attachments": false
27− },
28− {
29− "id": "zai-org/GLM-5-TEE",
30− "name": "GLM-5-TEE",
31− "cost_per_1m_in": 0.95,
32− "cost_per_1m_out": 2.55,
33− "cost_per_1m_in_cached": 0.475,
34− "cost_per_1m_out_cached": 0,
35− "context_window": 202752,
36− "default_max_tokens": 65535,
37− "can_reason": true,
38− "reasoning_levels": [
39− "low",
40− "medium",
41− "high"
42− ],
43− "default_reasoning_effort": "medium",
44− "supports_attachments": false
45− },
46− {
47− "id": "zai-org/GLM-5.1-TEE",
48− "name": "GLM-5.1-TEE",
49− "cost_per_1m_in": 0.98,
50− "cost_per_1m_out": 3.08,
51− "cost_per_1m_in_cached": 0.49,
52− "cost_per_1m_out_cached": 0,
53− "context_window": 202752,
54− "default_max_tokens": 65535,
55− "can_reason": true,
56− "reasoning_levels": [
57− "low",
58− "medium",
59− "high"
60− ],
61− "default_reasoning_effort": "medium",
62− "supports_attachments": false
63− },
64− {
65− "id": "zai-org/GLM-5.2-TEE",
66− "name": "GLM-5.2-TEE",
67− "cost_per_1m_in": 1.4,
68− "cost_per_1m_out": 4.4,
69− "cost_per_1m_in_cached": 0.7,
70− "cost_per_1m_out_cached": 0,
71− "context_window": 1048576,
72− "default_max_tokens": 65535,
73− "can_reason": true,
74− "reasoning_levels": [
75− "low",
76− "medium",
77− "high"
78− ],
79− "default_reasoning_effort": "medium",
80− "supports_attachments": false
81− },
82− {
83− "id": "moonshotai/Kimi-K2.5-TEE",
84− "name": "Kimi-K2.5-TEE",
85− "cost_per_1m_in": 0.44,
86− "cost_per_1m_out": 2,
87− "cost_per_1m_in_cached": 0.22,
88− "cost_per_1m_out_cached": 0,
89− "context_window": 262144,
90− "default_max_tokens": 65535,
91− "can_reason": true,
92− "reasoning_levels": [
93− "low",
94− "medium",
95− "high"
96− ],
97− "default_reasoning_effort": "medium",
98− "supports_attachments": true
99− },
100− {
101− "id": "moonshotai/Kimi-K2.6-TEE",
102− "name": "Kimi-K2.6-TEE",
103− "cost_per_1m_in": 0.66,
104− "cost_per_1m_out": 3.5,
105− "cost_per_1m_in_cached": 0.33,
106− "cost_per_1m_out_cached": 0,
107− "context_window": 262144,
108− "default_max_tokens": 65535,
109− "can_reason": true,
110− "reasoning_levels": [
111− "low",
112− "medium",
113− "high"
114− ],
115− "default_reasoning_effort": "medium",
116− "supports_attachments": true
117− },
118− {
119− "id": "MiniMaxAI/MiniMax-M2.5-TEE",
120− "name": "MiniMax-M2.5-TEE",
121− "cost_per_1m_in": 0.15,
122− "cost_per_1m_out": 1.2,
123− "cost_per_1m_in_cached": 0.075,
124− "cost_per_1m_out_cached": 0,
125− "context_window": 196608,
126− "default_max_tokens": 65536,
127− "can_reason": true,
128− "reasoning_levels": [
129− "low",
130− "medium",
131− "high"
132− ],
133− "default_reasoning_effort": "medium",
134− "supports_attachments": false
135− },
136− {
137− "id": "Qwen/Qwen3-235B-A22B-Thinking-2507-TEE",
138− "name": "Qwen3-235B-A22B-Thinking-2507-TEE",
139− "cost_per_1m_in": 0.2989,
140− "cost_per_1m_out": 1.1957,
141− "cost_per_1m_in_cached": 0.14945,
142− "cost_per_1m_out_cached": 0,
143− "context_window": 262144,
144− "default_max_tokens": 262144,
145− "can_reason": true,
146− "reasoning_levels": [
147− "low",
148− "medium",
149− "high"
150− ],
151− "default_reasoning_effort": "medium",
152− "supports_attachments": false
153− },
154− {
155− "id": "Qwen/Qwen3-32B-TEE",
156− "name": "Qwen3-32B-TEE",
157− "cost_per_1m_in": 0.104,
158− "cost_per_1m_out": 0.416,
159− "cost_per_1m_in_cached": 0.052,
160− "cost_per_1m_out_cached": 0,
161− "context_window": 40960,
162− "default_max_tokens": 40960,
163− "can_reason": true,
164− "reasoning_levels": [
165− "low",
166− "medium",
167− "high"
168− ],
169− "default_reasoning_effort": "medium",
170− "supports_attachments": false
171− },
172− {
173− "id": "Qwen/Qwen3.5-397B-A17B-TEE",
174− "name": "Qwen3.5-397B-A17B-TEE",
175− "cost_per_1m_in": 0.45,
176− "cost_per_1m_out": 3,
177− "cost_per_1m_in_cached": 0.225,
178− "cost_per_1m_out_cached": 0,
179− "context_window": 262144,
180− "default_max_tokens": 65536,
181− "can_reason": true,
182− "reasoning_levels": [
183− "low",
184− "medium",
185− "high"
186− ],
187− "default_reasoning_effort": "medium",
188− "supports_attachments": true
189− },
190− {
191− "id": "Qwen/Qwen3.6-27B-TEE",
192− "name": "Qwen3.6-27B-TEE",
193− "cost_per_1m_in": 0.3,
194− "cost_per_1m_out": 2,
195− "cost_per_1m_in_cached": 0.15,
196− "cost_per_1m_out_cached": 0,
197− "context_window": 262144,
198− "default_max_tokens": 65536,
199− "can_reason": true,
200− "reasoning_levels": [
201− "low",
202− "medium",
203− "high"
204− ],
205− "default_reasoning_effort": "medium",
206− "supports_attachments": true
207− },
208− {
209− "id": "google/gemma-4-31B-turbo-TEE",
210− "name": "gemma-4-31B-turbo-TEE",
211− "cost_per_1m_in": 0.12,
212− "cost_per_1m_out": 0.37,
213− "cost_per_1m_in_cached": 0.06,
214− "cost_per_1m_out_cached": 0,
215− "context_window": 131072,
216− "default_max_tokens": 65536,
217− "can_reason": true,
218− "reasoning_levels": [
219− "low",
220− "medium",
221− "high"
222− ],
223− "default_reasoning_effort": "medium",
224− "supports_attachments": true
225− }
226− ]
227−}
vendor/charm.land/catwalk/internal/providers/configs/copilot.jsondeleted−310
@@ -1,310 +0,0 @@
1−{
2− "name": "GitHub Copilot",
3− "id": "copilot",
4− "api_endpoint": "https://api.githubcopilot.com",
5− "type": "openai-compat",
6− "default_large_model_id": "claude-sonnet-4.6",
7− "default_small_model_id": "claude-haiku-4.5",
8− "models": [
9− {
10− "id": "claude-fable-5",
11− "name": "Claude Fable 5",
12− "cost_per_1m_in": 0,
13− "cost_per_1m_out": 0,
14− "cost_per_1m_in_cached": 0,
15− "cost_per_1m_out_cached": 0,
16− "context_window": 264000,
17− "default_max_tokens": 64000,
18− "can_reason": false,
19− "supports_attachments": true
20− },
21− {
22− "id": "claude-haiku-4.5",
23− "name": "Claude Haiku 4.5",
24− "cost_per_1m_in": 0,
25− "cost_per_1m_out": 0,
26− "cost_per_1m_in_cached": 0,
27− "cost_per_1m_out_cached": 0,
28− "context_window": 200000,
29− "default_max_tokens": 32000,
30− "can_reason": false,
31− "supports_attachments": true
32− },
33− {
34− "id": "claude-opus-4.5",
35− "name": "Claude Opus 4.5",
36− "cost_per_1m_in": 0,
37− "cost_per_1m_out": 0,
38− "cost_per_1m_in_cached": 0,
39− "cost_per_1m_out_cached": 0,
40− "context_window": 200000,
41− "default_max_tokens": 32000,
42− "can_reason": false,
43− "supports_attachments": true
44− },
45− {
46− "id": "claude-opus-4.7",
47− "name": "Claude Opus 4.7",
48− "cost_per_1m_in": 0,
49− "cost_per_1m_out": 0,
50− "cost_per_1m_in_cached": 0,
51− "cost_per_1m_out_cached": 0,
52− "context_window": 264000,
53− "default_max_tokens": 64000,
54− "can_reason": false,
55− "supports_attachments": true
56− },
57− {
58− "id": "claude-opus-4.8",
59− "name": "Claude Opus 4.8",
60− "cost_per_1m_in": 0,
61− "cost_per_1m_out": 0,
62− "cost_per_1m_in_cached": 0,
63− "cost_per_1m_out_cached": 0,
64− "context_window": 264000,
65− "default_max_tokens": 64000,
66− "can_reason": false,
67− "supports_attachments": true
68− },
69− {
70− "id": "claude-opus-4.8-fast",
71− "name": "Claude Opus 4.8 (fast mode)",
72− "cost_per_1m_in": 0,
73− "cost_per_1m_out": 0,
74− "cost_per_1m_in_cached": 0,
75− "cost_per_1m_out_cached": 0,
76− "context_window": 264000,
77− "default_max_tokens": 64000,
78− "can_reason": false,
79− "supports_attachments": true
80− },
81− {
82− "id": "claude-sonnet-4.5",
83− "name": "Claude Sonnet 4.5",
84− "cost_per_1m_in": 0,
85− "cost_per_1m_out": 0,
86− "cost_per_1m_in_cached": 0,
87− "cost_per_1m_out_cached": 0,
88− "context_window": 200000,
89− "default_max_tokens": 32000,
90− "can_reason": false,
91− "supports_attachments": true
92− },
93− {
94− "id": "claude-sonnet-4.6",
95− "name": "Claude Sonnet 4.6",
96− "cost_per_1m_in": 0,
97− "cost_per_1m_out": 0,
98− "cost_per_1m_in_cached": 0,
99− "cost_per_1m_out_cached": 0,
100− "context_window": 264000,
101− "default_max_tokens": 64000,
102− "can_reason": false,
103− "supports_attachments": true
104− },
105− {
106− "id": "claude-sonnet-5",
107− "name": "Claude Sonnet 5",
108− "cost_per_1m_in": 0,
109− "cost_per_1m_out": 0,
110− "cost_per_1m_in_cached": 0,
111− "cost_per_1m_out_cached": 0,
112− "context_window": 264000,
113− "default_max_tokens": 64000,
114− "can_reason": false,
115− "supports_attachments": true
116− },
117− {
118− "id": "gemini-2.5-pro",
119− "name": "Gemini 2.5 Pro",
120− "cost_per_1m_in": 0,
121− "cost_per_1m_out": 0,
122− "cost_per_1m_in_cached": 0,
123− "cost_per_1m_out_cached": 0,
124− "context_window": 128000,
125− "default_max_tokens": 64000,
126− "can_reason": false,
127− "supports_attachments": true
128− },
129− {
130− "id": "gemini-3-flash-preview",
131− "name": "Gemini 3 Flash (Preview)",
132− "cost_per_1m_in": 0,
133− "cost_per_1m_out": 0,
134− "cost_per_1m_in_cached": 0,
135− "cost_per_1m_out_cached": 0,
136− "context_window": 128000,
137− "default_max_tokens": 64000,
138− "can_reason": false,
139− "supports_attachments": true
140− },
141− {
142− "id": "gemini-3.1-pro-preview",
143− "name": "Gemini 3.1 Pro",
144− "cost_per_1m_in": 0,
145− "cost_per_1m_out": 0,
146− "cost_per_1m_in_cached": 0,
147− "cost_per_1m_out_cached": 0,
148− "context_window": 264000,
149− "default_max_tokens": 64000,
150− "can_reason": false,
151− "supports_attachments": true
152− },
153− {
154− "id": "gemini-3.5-flash",
155− "name": "Gemini 3.5 Flash",
156− "cost_per_1m_in": 0,
157− "cost_per_1m_out": 0,
158− "cost_per_1m_in_cached": 0,
159− "cost_per_1m_out_cached": 0,
160− "context_window": 264000,
161− "default_max_tokens": 64000,
162− "can_reason": false,
163− "supports_attachments": true
164− },
165− {
166− "id": "gpt-3.5-turbo",
167− "name": "GPT 3.5 Turbo",
168− "cost_per_1m_in": 0,
169− "cost_per_1m_out": 0,
170− "cost_per_1m_in_cached": 0,
171− "cost_per_1m_out_cached": 0,
172− "context_window": 16384,
173− "default_max_tokens": 4096,
174− "can_reason": false,
175− "supports_attachments": false
176− },
177− {
178− "id": "gpt-4",
179− "name": "GPT 4",
180− "cost_per_1m_in": 0,
181− "cost_per_1m_out": 0,
182− "cost_per_1m_in_cached": 0,
183− "cost_per_1m_out_cached": 0,
184− "context_window": 32768,
185− "default_max_tokens": 4096,
186− "can_reason": false,
187− "supports_attachments": false
188− },
189− {
190− "id": "gpt-4-0125-preview",
191− "name": "GPT 4 Turbo",
192− "cost_per_1m_in": 0,
193− "cost_per_1m_out": 0,
194− "cost_per_1m_in_cached": 0,
195− "cost_per_1m_out_cached": 0,
196− "context_window": 128000,
197− "default_max_tokens": 4096,
198− "can_reason": false,
199− "supports_attachments": false
200− },
201− {
202− "id": "gpt-4.1",
203− "name": "GPT-4.1",
204− "cost_per_1m_in": 0,
205− "cost_per_1m_out": 0,
206− "cost_per_1m_in_cached": 0,
207− "cost_per_1m_out_cached": 0,
208− "context_window": 128000,
209− "default_max_tokens": 16384,
210− "can_reason": false,
211− "supports_attachments": true
212− },
213− {
214− "id": "gpt-4o",
215− "name": "GPT-4o",
216− "cost_per_1m_in": 0,
217− "cost_per_1m_out": 0,
218− "cost_per_1m_in_cached": 0,
219− "cost_per_1m_out_cached": 0,
220− "context_window": 128000,
221− "default_max_tokens": 4096,
222− "can_reason": false,
223− "supports_attachments": true
224− },
225− {
226− "id": "gpt-4o-mini",
227− "name": "GPT-4o mini",
228− "cost_per_1m_in": 0,
229− "cost_per_1m_out": 0,
230− "cost_per_1m_in_cached": 0,
231− "cost_per_1m_out_cached": 0,
232− "context_window": 128000,
233− "default_max_tokens": 4096,
234− "can_reason": false,
235− "supports_attachments": false
236− },
237− {
238− "id": "gpt-5-mini",
239− "name": "GPT-5 mini",
240− "cost_per_1m_in": 0,
241− "cost_per_1m_out": 0,
242− "cost_per_1m_in_cached": 0,
243− "cost_per_1m_out_cached": 0,
244− "context_window": 264000,
245− "default_max_tokens": 64000,
246− "can_reason": false,
247− "supports_attachments": true
248− },
249− {
250− "id": "gpt-5.3-codex",
251− "name": "GPT-5.3-Codex",
252− "cost_per_1m_in": 0,
253− "cost_per_1m_out": 0,
254− "cost_per_1m_in_cached": 0,
255− "cost_per_1m_out_cached": 0,
256− "context_window": 400000,
257− "default_max_tokens": 128000,
258− "can_reason": false,
259− "supports_attachments": true
260− },
261− {
262− "id": "gpt-5.4",
263− "name": "GPT-5.4",
264− "cost_per_1m_in": 0,
265− "cost_per_1m_out": 0,
266− "cost_per_1m_in_cached": 0,
267− "cost_per_1m_out_cached": 0,
268− "context_window": 400000,
269− "default_max_tokens": 128000,
270− "can_reason": false,
271− "supports_attachments": true
272− },
273− {
274− "id": "gpt-5.4-mini",
275− "name": "GPT-5.4 mini",
276− "cost_per_1m_in": 0,
277− "cost_per_1m_out": 0,
278− "cost_per_1m_in_cached": 0,
279− "cost_per_1m_out_cached": 0,
280− "context_window": 400000,
281− "default_max_tokens": 128000,
282− "can_reason": false,
283− "supports_attachments": true
284− },
285− {
286− "id": "gpt-5.5",
287− "name": "GPT-5.5",
288− "cost_per_1m_in": 0,
289− "cost_per_1m_out": 0,
290− "cost_per_1m_in_cached": 0,
291− "cost_per_1m_out_cached": 0,
292− "context_window": 400000,
293− "default_max_tokens": 128000,
294− "can_reason": false,
295− "supports_attachments": true
296− },
297− {
298− "id": "kimi-k2.7-code",
299− "name": "Kimi K2.7 Code",
300− "cost_per_1m_in": 0,
301− "cost_per_1m_out": 0,
302− "cost_per_1m_in_cached": 0,
303− "cost_per_1m_out_cached": 0,
304− "context_window": 256000,
305− "default_max_tokens": 32000,
306− "can_reason": false,
307− "supports_attachments": true
308− }
309− ]
310−}
vendor/charm.land/catwalk/internal/providers/configs/cortecs.jsondeleted−1697
@@ -1,1697 +0,0 @@
1−{
2− "name": "Cortecs",
3− "id": "cortecs",
4− "api_key": "$CORTECS_API_KEY",
5− "api_endpoint": "https://api.cortecs.ai/v1",
6− "type": "openai",
7− "default_large_model_id": "qwen3-coder-30b-a3b-instruct",
8− "default_small_model_id": "glm-4.7-flash",
9− "models": [
10− {
11− "id": "claude-sonnet-5",
12− "name": "claude-sonnet-5",
13− "cost_per_1m_in": 1.975,
14− "cost_per_1m_out": 9.874,
15− "cost_per_1m_in_cached": 0,
16− "cost_per_1m_out_cached": 0,
17− "context_window": 1000000,
18− "default_max_tokens": 100000,
19− "can_reason": true,
20− "reasoning_levels": [
21− "low",
22− "medium",
23− "high"
24− ],
25− "default_reasoning_effort": "medium",
26− "supports_attachments": true
27− },
28− {
29− "id": "gemma-4-31b-it",
30− "name": "gemma-4-31b-it",
31− "cost_per_1m_in": 0.2,
32− "cost_per_1m_out": 0.35,
33− "cost_per_1m_in_cached": 0,
34− "cost_per_1m_out_cached": 0,
35− "context_window": 128000,
36− "default_max_tokens": 12800,
37− "can_reason": true,
38− "reasoning_levels": [
39− "low",
40− "medium",
41− "high"
42− ],
43− "default_reasoning_effort": "medium",
44− "supports_attachments": true
45− },
46− {
47− "id": "glm-5.2",
48− "name": "glm-5.2",
49− "cost_per_1m_in": 1.077,
50− "cost_per_1m_out": 3.77,
51− "cost_per_1m_in_cached": 0,
52− "cost_per_1m_out_cached": 0,
53− "context_window": 131000,
54− "default_max_tokens": 13100,
55− "can_reason": true,
56− "reasoning_levels": [
57− "low",
58− "medium",
59− "high"
60− ],
61− "default_reasoning_effort": "medium",
62− "supports_attachments": false
63− },
64− {
65− "id": "kimi-k2.7-code",
66− "name": "kimi-k2.7-code",
67− "cost_per_1m_in": 0.673,
68− "cost_per_1m_out": 3.142,
69− "cost_per_1m_in_cached": 0,
70− "cost_per_1m_out_cached": 0,
71− "context_window": 256000,
72− "default_max_tokens": 25600,
73− "can_reason": true,
74− "reasoning_levels": [
75− "low",
76− "medium",
77− "high"
78− ],
79− "default_reasoning_effort": "medium",
80− "supports_attachments": true
81− },
82− {
83− "id": "minimax-m3",
84− "name": "minimax-m3",
85− "cost_per_1m_in": 0.355,
86− "cost_per_1m_out": 1.775,
87− "cost_per_1m_in_cached": 0,
88− "cost_per_1m_out_cached": 0,
89− "context_window": 1048576,
90− "default_max_tokens": 104857,
91− "can_reason": true,
92− "reasoning_levels": [
93− "low",
94− "medium",
95− "high"
96− ],
97− "default_reasoning_effort": "medium",
98− "supports_attachments": true
99− },
100− {
101− "id": "qwen3.6-27b",
102− "name": "qwen3.6-27b",
103− "cost_per_1m_in": 0.4,
104− "cost_per_1m_out": 2.7,
105− "cost_per_1m_in_cached": 0,
106− "cost_per_1m_out_cached": 0,
107− "context_window": 262000,
108− "default_max_tokens": 26200,
109− "can_reason": true,
110− "reasoning_levels": [
111− "low",
112− "medium",
113− "high"
114− ],
115− "default_reasoning_effort": "medium",
116− "supports_attachments": true
117− },
118− {
119− "id": "cosmos3-super-reasoner",
120− "name": "cosmos3-super-reasoner",
121− "cost_per_1m_in": 0.089,
122− "cost_per_1m_out": 0.266,
123− "cost_per_1m_in_cached": 0,
124− "cost_per_1m_out_cached": 0,
125− "context_window": 256000,
126− "default_max_tokens": 25600,
127− "can_reason": true,
128− "reasoning_levels": [
129− "low",
130− "medium",
131− "high"
132− ],
133− "default_reasoning_effort": "medium",
134− "supports_attachments": false
135− },
136− {
137− "id": "claude-opus4-8",
138− "name": "claude-opus4-8",
139− "cost_per_1m_in": 4.881,
140− "cost_per_1m_out": 24.404,
141− "cost_per_1m_in_cached": 0,
142− "cost_per_1m_out_cached": 0,
143− "context_window": 1000000,
144− "default_max_tokens": 100000,
145− "can_reason": true,
146− "reasoning_levels": [
147− "low",
148− "medium",
149− "high"
150− ],
151− "default_reasoning_effort": "medium",
152− "supports_attachments": true
153− },
154− {
155− "id": "gemini-3.5-flash",
156− "name": "gemini-3.5-flash",
157− "cost_per_1m_in": 1.331,
158− "cost_per_1m_out": 7.987,
159− "cost_per_1m_in_cached": 0,
160− "cost_per_1m_out_cached": 0,
161− "context_window": 1048576,
162− "default_max_tokens": 104857,
163− "can_reason": true,
164− "reasoning_levels": [
165− "low",
166− "medium",
167− "high"
168− ],
169− "default_reasoning_effort": "medium",
170− "supports_attachments": true
171− },
172− {
173− "id": "gemini-3.1-flash-lite",
174− "name": "gemini-3.1-flash-lite",
175− "cost_per_1m_in": 0.244,
176− "cost_per_1m_out": 1.464,
177− "cost_per_1m_in_cached": 0,
178− "cost_per_1m_out_cached": 0,
179− "context_window": 1048576,
180− "default_max_tokens": 104857,
181− "can_reason": true,
182− "reasoning_levels": [
183− "low",
184− "medium",
185− "high"
186− ],
187− "default_reasoning_effort": "medium",
188− "supports_attachments": true
189− },
190− {
191− "id": "qwen3.6-35b-a3b",
192− "name": "qwen3.6-35b-a3b",
193− "cost_per_1m_in": 0.25,
194− "cost_per_1m_out": 1.5,
195− "cost_per_1m_in_cached": 0,
196− "cost_per_1m_out_cached": 0,
197− "context_window": 262000,
198− "default_max_tokens": 26200,
199− "can_reason": true,
200− "reasoning_levels": [
201− "low",
202− "medium",
203− "high"
204− ],
205− "default_reasoning_effort": "medium",
206− "supports_attachments": true
207− },
208− {
209− "id": "glm-5v-turbo",
210− "name": "glm-5v-turbo",
211− "cost_per_1m_in": 1.065,
212− "cost_per_1m_out": 3.55,
213− "cost_per_1m_in_cached": 0,
214− "cost_per_1m_out_cached": 0,
215− "context_window": 202752,
216− "default_max_tokens": 20275,
217− "can_reason": true,
218− "reasoning_levels": [
219− "low",
220− "medium",
221− "high"
222− ],
223− "default_reasoning_effort": "medium",
224− "supports_attachments": true
225− },
226− {
227− "id": "glm-5-turbo",
228− "name": "glm-5-turbo",
229− "cost_per_1m_in": 1.065,
230− "cost_per_1m_out": 3.55,
231− "cost_per_1m_in_cached": 0,
232− "cost_per_1m_out_cached": 0,
233− "context_window": 202752,
234− "default_max_tokens": 20275,
235− "can_reason": true,
236− "reasoning_levels": [
237− "low",
238− "medium",
239− "high"
240− ],
241− "default_reasoning_effort": "medium",
242− "supports_attachments": false
243− },
244− {
245− "id": "gemma-4-26b-a4b-it",
246− "name": "gemma-4-26b-a4b-it",
247− "cost_per_1m_in": 0.25,
248− "cost_per_1m_out": 0.5,
249− "cost_per_1m_in_cached": 0,
250− "cost_per_1m_out_cached": 0,
251− "context_window": 262000,
252− "default_max_tokens": 26200,
253− "can_reason": true,
254− "reasoning_levels": [
255− "low",
256− "medium",
257− "high"
258− ],
259− "default_reasoning_effort": "medium",
260− "supports_attachments": true
261− },
262− {
263− "id": "deepseek-v4-pro",
264− "name": "deepseek-v4-pro",
265− "cost_per_1m_in": 1.553,
266− "cost_per_1m_out": 3.106,
267− "cost_per_1m_in_cached": 0,
268− "cost_per_1m_out_cached": 0,
269− "context_window": 1048576,
270− "default_max_tokens": 104857,
271− "can_reason": true,
272− "reasoning_levels": [
273− "low",
274− "medium",
275− "high"
276− ],
277− "default_reasoning_effort": "medium",
278− "supports_attachments": false
279− },
280− {
281− "id": "deepseek-v4-flash",
282− "name": "deepseek-v4-flash",
283− "cost_per_1m_in": 0.133,
284− "cost_per_1m_out": 0.266,
285− "cost_per_1m_in_cached": 0,
286− "cost_per_1m_out_cached": 0,
287− "context_window": 1048576,
288− "default_max_tokens": 104857,
289− "can_reason": true,
290− "reasoning_levels": [
291− "low",
292− "medium",
293− "high"
294− ],
295− "default_reasoning_effort": "medium",
296− "supports_attachments": false
297− },
298− {
299− "id": "mistral-medium-3.5",
300− "name": "mistral-medium-3.5",
301− "cost_per_1m_in": 1.25,
302− "cost_per_1m_out": 6.4,
303− "cost_per_1m_in_cached": 0,
304− "cost_per_1m_out_cached": 0,
305− "context_window": 256000,
306− "default_max_tokens": 25600,
307− "can_reason": true,
308− "reasoning_levels": [
309− "low",
310− "medium",
311− "high"
312− ],
313− "default_reasoning_effort": "medium",
314− "supports_attachments": true
315− },
316− {
317− "id": "nvidia-nemotron-3-nano-omni",
318− "name": "nvidia-nemotron-3-nano-omni",
319− "cost_per_1m_in": 0.053,
320− "cost_per_1m_out": 0.213,
321− "cost_per_1m_in_cached": 0,
322− "cost_per_1m_out_cached": 0,
323− "context_window": 300000,
324− "default_max_tokens": 30000,
325− "can_reason": true,
326− "reasoning_levels": [
327− "low",
328− "medium",
329− "high"
330− ],
331− "default_reasoning_effort": "medium",
332− "supports_attachments": false
333− },
334− {
335− "id": "gpt-5.4",
336− "name": "gpt-5.4",
337− "cost_per_1m_in": 2.601,
338− "cost_per_1m_out": 13.872,
339− "cost_per_1m_in_cached": 0,
340− "cost_per_1m_out_cached": 0,
341− "context_window": 1050000,
342− "default_max_tokens": 105000,
343− "can_reason": true,
344− "reasoning_levels": [
345− "low",
346− "medium",
347− "high"
348− ],
349− "default_reasoning_effort": "medium",
350− "supports_attachments": true
351− },
352− {
353− "id": "kimi-k2.6",
354− "name": "kimi-k2.6",
355− "cost_per_1m_in": 0.694,
356− "cost_per_1m_out": 3.034,
357− "cost_per_1m_in_cached": 0,
358− "cost_per_1m_out_cached": 0,
359− "context_window": 256000,
360− "default_max_tokens": 25600,
361− "can_reason": true,
362− "reasoning_levels": [
363− "low",
364− "medium",
365− "high"
366− ],
367− "default_reasoning_effort": "medium",
368− "supports_attachments": true
369− },
370− {
371− "id": "claude-opus4-7",
372− "name": "claude-opus4-7",
373− "cost_per_1m_in": 4.881,
374− "cost_per_1m_out": 24.404,
375− "cost_per_1m_in_cached": 0,
376− "cost_per_1m_out_cached": 0,
377− "context_window": 1000000,
378− "default_max_tokens": 100000,
379− "can_reason": true,
380− "reasoning_levels": [
381− "low",
382− "medium",
383− "high"
384− ],
385− "default_reasoning_effort": "medium",
386− "supports_attachments": true
387− },
388− {
389− "id": "minimax-m2.7",
390− "name": "minimax-m2.7",
391− "cost_per_1m_in": 0.444,
392− "cost_per_1m_out": 1.331,
393− "cost_per_1m_in_cached": 0,
394− "cost_per_1m_out_cached": 0,
395− "context_window": 196608,
396− "default_max_tokens": 19660,
397− "can_reason": true,
398− "reasoning_levels": [
399− "low",
400− "medium",
401− "high"
402− ],
403− "default_reasoning_effort": "medium",
404− "supports_attachments": false
405− },
406− {
407− "id": "glm-5.1",
408− "name": "glm-5.1",
409− "cost_per_1m_in": 1.242,
410− "cost_per_1m_out": 3.903,
411− "cost_per_1m_in_cached": 0,
412− "cost_per_1m_out_cached": 0,
413− "context_window": 202752,
414− "default_max_tokens": 20275,
415− "can_reason": true,
416− "reasoning_levels": [
417− "low",
418− "medium",
419− "high"
420− ],
421− "default_reasoning_effort": "medium",
422− "supports_attachments": false
423− },
424− {
425− "id": "qwen3.5-122b-a10b",
426− "name": "qwen3.5-122b-a10b",
427− "cost_per_1m_in": 0.444,
428− "cost_per_1m_out": 3.106,
429− "cost_per_1m_in_cached": 0,
430− "cost_per_1m_out_cached": 0,
431− "context_window": 262144,
432− "default_max_tokens": 26214,
433− "can_reason": true,
434− "reasoning_levels": [
435− "low",
436− "medium",
437− "high"
438− ],
439− "default_reasoning_effort": "medium",
440− "supports_attachments": false
441− },
442− {
443− "id": "qwen3.5-9b",
444− "name": "qwen3.5-9b",
445− "cost_per_1m_in": 0.1,
446− "cost_per_1m_out": 0.15,
447− "cost_per_1m_in_cached": 0,
448− "cost_per_1m_out_cached": 0,
449− "context_window": 262000,
450− "default_max_tokens": 26200,
451− "can_reason": true,
452− "reasoning_levels": [
453− "low",
454− "medium",
455− "high"
456− ],
457− "default_reasoning_effort": "medium",
458− "supports_attachments": false
459− },
460− {
461− "id": "nemotron-3-super-120b-a12b",
462− "name": "nemotron-3-super-120b-a12b",
463− "cost_per_1m_in": 0.266,
464− "cost_per_1m_out": 0.799,
465− "cost_per_1m_in_cached": 0,
466− "cost_per_1m_out_cached": 0,
467− "context_window": 262144,
468− "default_max_tokens": 26214,
469− "can_reason": true,
470− "reasoning_levels": [
471− "low",
472− "medium",
473− "high"
474− ],
475− "default_reasoning_effort": "medium",
476− "supports_attachments": false
477− },
478− {
479− "id": "qwen3-coder-next",
480− "name": "qwen3-coder-next",
481− "cost_per_1m_in": 0.15,
482− "cost_per_1m_out": 0.8,
483− "cost_per_1m_in_cached": 0,
484− "cost_per_1m_out_cached": 0,
485− "context_window": 256000,
486− "default_max_tokens": 25600,
487− "can_reason": true,
488− "reasoning_levels": [
489− "low",
490− "medium",
491− "high"
492− ],
493− "default_reasoning_effort": "medium",
494− "supports_attachments": false
495− },
496− {
497− "id": "glm-5",
498− "name": "glm-5",
499− "cost_per_1m_in": 0.887,
500− "cost_per_1m_out": 2.84,
501− "cost_per_1m_in_cached": 0,
502− "cost_per_1m_out_cached": 0,
503− "context_window": 202752,
504− "default_max_tokens": 20275,
505− "can_reason": true,
506− "reasoning_levels": [
507− "low",
508− "medium",
509− "high"
510− ],
511− "default_reasoning_effort": "medium",
512− "supports_attachments": false
513− },
514− {
515− "id": "glm-4.6",
516− "name": "glm-4.6",
517− "cost_per_1m_in": 0.355,
518− "cost_per_1m_out": 1.553,
519− "cost_per_1m_in_cached": 0,
520− "cost_per_1m_out_cached": 0,
521− "context_window": 203000,
522− "default_max_tokens": 20300,
523− "can_reason": true,
524− "reasoning_levels": [
525− "low",
526− "medium",
527− "high"
528− ],
529− "default_reasoning_effort": "medium",
530− "supports_attachments": false
531− },
532− {
533− "id": "deepseek-chat-v3.1",
534− "name": "deepseek-chat-v3.1",
535− "cost_per_1m_in": 0.177,
536− "cost_per_1m_out": 0.71,
537− "cost_per_1m_in_cached": 0,
538− "cost_per_1m_out_cached": 0,
539− "context_window": 164000,
540− "default_max_tokens": 16400,
541− "can_reason": true,
542− "reasoning_levels": [
543− "low",
544− "medium",
545− "high"
546− ],
547− "default_reasoning_effort": "medium",
548− "supports_attachments": false
549− },
550− {
551− "id": "qwen-2.5-72b-instruct",
552− "name": "qwen-2.5-72b-instruct",
553− "cost_per_1m_in": 0.062,
554− "cost_per_1m_out": 0.231,
555− "cost_per_1m_in_cached": 0,
556− "cost_per_1m_out_cached": 0,
557− "context_window": 33000,
558− "default_max_tokens": 3300,
559− "can_reason": false,
560− "supports_attachments": false
561− },
562− {
563− "id": "qwen3.5-397b-a17b",
564− "name": "qwen3.5-397b-a17b",
565− "cost_per_1m_in": 0.6,
566− "cost_per_1m_out": 3.6,
567− "cost_per_1m_in_cached": 0,
568− "cost_per_1m_out_cached": 0,
569− "context_window": 250000,
570− "default_max_tokens": 25000,
571− "can_reason": true,
572− "reasoning_levels": [
573− "low",
574− "medium",
575− "high"
576− ],
577− "default_reasoning_effort": "medium",
578− "supports_attachments": false
579− },
580− {
581− "id": "deepseek-v3.2",
582− "name": "deepseek-v3.2",
583− "cost_per_1m_in": 0.266,
584− "cost_per_1m_out": 0.444,
585− "cost_per_1m_in_cached": 0,
586− "cost_per_1m_out_cached": 0,
587− "context_window": 163840,
588− "default_max_tokens": 16384,
589− "can_reason": true,
590− "reasoning_levels": [
591− "low",
592− "medium",
593− "high"
594− ],
595− "default_reasoning_effort": "medium",
596− "supports_attachments": false
597− },
598− {
599− "id": "mistral-small-2603",
600− "name": "mistral-small-2603",
601− "cost_per_1m_in": 0.128,
602− "cost_per_1m_out": 0.51,
603− "cost_per_1m_in_cached": 0,
604− "cost_per_1m_out_cached": 0,
605− "context_window": 256000,
606− "default_max_tokens": 25600,
607− "can_reason": true,
608− "reasoning_levels": [
609− "low",
610− "medium",
611− "high"
612− ],
613− "default_reasoning_effort": "medium",
614− "supports_attachments": true
615− },
616− {
617− "id": "minimax-m2.5",
618− "name": "minimax-m2.5",
619− "cost_per_1m_in": 0.266,
620− "cost_per_1m_out": 0.976,
621− "cost_per_1m_in_cached": 0,
622− "cost_per_1m_out_cached": 0,
623− "context_window": 65536,
624− "default_max_tokens": 6553,
625− "can_reason": true,
626− "reasoning_levels": [
627− "low",
628− "medium",
629− "high"
630− ],
631− "default_reasoning_effort": "medium",
632− "supports_attachments": false
633− },
634− {
635− "id": "claude-4-6-sonnet",
636− "name": "claude-4-6-sonnet",
637− "cost_per_1m_in": 2.869,
638− "cost_per_1m_out": 14.309,
639− "cost_per_1m_in_cached": 0,
640− "cost_per_1m_out_cached": 0,
641− "context_window": 1000000,
642− "default_max_tokens": 100000,
643− "can_reason": true,
644− "reasoning_levels": [
645− "low",
646− "medium",
647− "high"
648− ],
649− "default_reasoning_effort": "medium",
650− "supports_attachments": true
651− },
652− {
653− "id": "glm-4.7-flash",
654− "name": "glm-4.7-flash",
655− "cost_per_1m_in": 0.072,
656− "cost_per_1m_out": 0.429,
657− "cost_per_1m_in_cached": 0,
658− "cost_per_1m_out_cached": 0,
659− "context_window": 203000,
660− "default_max_tokens": 20300,
661− "can_reason": false,
662− "supports_attachments": false
663− },
664− {
665− "id": "kimi-k2.5",
666− "name": "kimi-k2.5",
667− "cost_per_1m_in": 0.444,
668− "cost_per_1m_out": 2.485,
669− "cost_per_1m_in_cached": 0,
670− "cost_per_1m_out_cached": 0,
671− "context_window": 262144,
672− "default_max_tokens": 26214,
673− "can_reason": true,
674− "reasoning_levels": [
675− "low",
676− "medium",
677− "high"
678− ],
679− "default_reasoning_effort": "medium",
680− "supports_attachments": true
681− },
682− {
683− "id": "claude-opus4-6",
684− "name": "claude-opus4-6",
685− "cost_per_1m_in": 4.769,
686− "cost_per_1m_out": 23.843,
687− "cost_per_1m_in_cached": 0,
688− "cost_per_1m_out_cached": 0,
689− "context_window": 1000000,
690− "default_max_tokens": 100000,
691− "can_reason": true,
692− "reasoning_levels": [
693− "low",
694− "medium",
695− "high"
696− ],
697− "default_reasoning_effort": "medium",
698− "supports_attachments": true
699− },
700− {
701− "id": "minimax-m2",
702− "name": "minimax-m2",
703− "cost_per_1m_in": 0.222,
704− "cost_per_1m_out": 0.887,
705− "cost_per_1m_in_cached": 0,
706− "cost_per_1m_out_cached": 0,
707− "context_window": 196608,
708− "default_max_tokens": 19660,
709− "can_reason": true,
710− "reasoning_levels": [
711− "low",
712− "medium",
713− "high"
714− ],
715− "default_reasoning_effort": "medium",
716− "supports_attachments": false
717− },
718− {
719− "id": "glm-4.7",
720− "name": "glm-4.7",
721− "cost_per_1m_in": 0.532,
722− "cost_per_1m_out": 1.952,
723− "cost_per_1m_in_cached": 0,
724− "cost_per_1m_out_cached": 0,
725− "context_window": 202752,
726− "default_max_tokens": 20275,
727− "can_reason": true,
728− "reasoning_levels": [
729− "low",
730− "medium",
731− "high"
732− ],
733− "default_reasoning_effort": "medium",
734− "supports_attachments": false
735− },
736− {
737− "id": "minimax-m2.1",
738− "name": "minimax-m2.1",
739− "cost_per_1m_in": 0.322,
740− "cost_per_1m_out": 1.288,
741− "cost_per_1m_in_cached": 0,
742− "cost_per_1m_out_cached": 0,
743− "context_window": 196000,
744− "default_max_tokens": 19600,
745− "can_reason": true,
746− "reasoning_levels": [
747− "low",
748− "medium",
749− "high"
750− ],
751− "default_reasoning_effort": "medium",
752− "supports_attachments": false
753− },
754− {
755− "id": "qwen3-vl-235b-a22b",
756− "name": "qwen3-vl-235b-a22b",
757− "cost_per_1m_in": 0.186,
758− "cost_per_1m_out": 1.686,
759− "cost_per_1m_in_cached": 0,
760− "cost_per_1m_out_cached": 0,
761− "context_window": 131000,
762− "default_max_tokens": 13100,
763− "can_reason": true,
764− "reasoning_levels": [
765− "low",
766− "medium",
767− "high"
768− ],
769− "default_reasoning_effort": "medium",
770− "supports_attachments": true
771− },
772− {
773− "id": "nvidia-nemotron-3-nano-30b-a3b",
774− "name": "nvidia-nemotron-3-nano-30b-a3b",
775− "cost_per_1m_in": 0.054,
776− "cost_per_1m_out": 0.215,
777− "cost_per_1m_in_cached": 0,
778− "cost_per_1m_out_cached": 0,
779− "context_window": 128000,
780− "default_max_tokens": 12800,
781− "can_reason": true,
782− "reasoning_levels": [
783− "low",
784− "medium",
785− "high"
786− ],
787− "default_reasoning_effort": "medium",
788− "supports_attachments": false
789− },
790− {
791− "id": "claude-opus4-5",
792− "name": "claude-opus4-5",
793− "cost_per_1m_in": 4.769,
794− "cost_per_1m_out": 23.849,
795− "cost_per_1m_in_cached": 0,
796− "cost_per_1m_out_cached": 0,
797− "context_window": 200000,
798− "default_max_tokens": 20000,
799− "can_reason": true,
800− "reasoning_levels": [
801− "low",
802− "medium",
803− "high"
804− ],
805− "default_reasoning_effort": "medium",
806− "supports_attachments": true
807− },
808− {
809− "id": "qwen3-next-80b-a3b-thinking",
810− "name": "qwen3-next-80b-a3b-thinking",
811− "cost_per_1m_in": 0.134,
812− "cost_per_1m_out": 1.073,
813− "cost_per_1m_in_cached": 0,
814− "cost_per_1m_out_cached": 0,
815− "context_window": 128000,
816− "default_max_tokens": 12800,
817− "can_reason": true,
818− "reasoning_levels": [
819− "low",
820− "medium",
821− "high"
822− ],
823− "default_reasoning_effort": "medium",
824− "supports_attachments": false
825− },
826− {
827− "id": "holo2-30b-a3b",
828− "name": "holo2-30b-a3b",
829− "cost_per_1m_in": 0.3,
830− "cost_per_1m_out": 0.7,
831− "cost_per_1m_in_cached": 0,
832− "cost_per_1m_out_cached": 0,
833− "context_window": 22000,
834− "default_max_tokens": 2200,
835− "can_reason": true,
836− "reasoning_levels": [
837− "low",
838− "medium",
839− "high"
840− ],
841− "default_reasoning_effort": "medium",
842− "supports_attachments": true
843− },
844− {
845− "id": "devstral-2512",
846− "name": "devstral-2512",
847− "cost_per_1m_in": 0.4,
848− "cost_per_1m_out": 2,
849− "cost_per_1m_in_cached": 0,
850− "cost_per_1m_out_cached": 0,
851− "context_window": 200000,
852− "default_max_tokens": 20000,
853− "can_reason": false,
854− "supports_attachments": false
855− },
856− {
857− "id": "nova-2-lite",
858− "name": "nova-2-lite",
859− "cost_per_1m_in": 0.335,
860− "cost_per_1m_out": 2.822,
861− "cost_per_1m_in_cached": 0,
862− "cost_per_1m_out_cached": 0,
863− "context_window": 1000000,
864− "default_max_tokens": 100000,
865− "can_reason": true,
866− "reasoning_levels": [
867− "low",
868− "medium",
869− "high"
870− ],
871− "default_reasoning_effort": "medium",
872− "supports_attachments": true
873− },
874− {
875− "id": "gpt-oss-safeguard-120b",
876− "name": "gpt-oss-safeguard-120b",
877− "cost_per_1m_in": 0.161,
878− "cost_per_1m_out": 0.626,
879− "cost_per_1m_in_cached": 0,
880− "cost_per_1m_out_cached": 0,
881− "context_window": 128000,
882− "default_max_tokens": 12800,
883− "can_reason": true,
884− "reasoning_levels": [
885− "low",
886− "medium",
887− "high"
888− ],
889− "default_reasoning_effort": "medium",
890− "supports_attachments": false
891− },
892− {
893− "id": "mistral-large-2512",
894− "name": "mistral-large-2512",
895− "cost_per_1m_in": 0.5,
896− "cost_per_1m_out": 1.5,
897− "cost_per_1m_in_cached": 0,
898− "cost_per_1m_out_cached": 0,
899− "context_window": 256000,
900− "default_max_tokens": 25600,
901− "can_reason": false,
902− "supports_attachments": true
903− },
904− {
905− "id": "ministral-8b-2512",
906− "name": "ministral-8b-2512",
907− "cost_per_1m_in": 0.15,
908− "cost_per_1m_out": 0.15,
909− "cost_per_1m_in_cached": 0,
910− "cost_per_1m_out_cached": 0,
911− "context_window": 256000,
912− "default_max_tokens": 25600,
913− "can_reason": false,
914− "supports_attachments": true
915− },
916− {
917− "id": "ministral-3b-2512",
918− "name": "ministral-3b-2512",
919− "cost_per_1m_in": 0.1,
920− "cost_per_1m_out": 0.1,
921− "cost_per_1m_in_cached": 0,
922− "cost_per_1m_out_cached": 0,
923− "context_window": 256000,
924− "default_max_tokens": 25600,
925− "can_reason": false,
926− "supports_attachments": true
927− },
928− {
929− "id": "ministral-14b-2512",
930− "name": "ministral-14b-2512",
931− "cost_per_1m_in": 0.2,
932− "cost_per_1m_out": 0.2,
933− "cost_per_1m_in_cached": 0,
934− "cost_per_1m_out_cached": 0,
935− "context_window": 256000,
936− "default_max_tokens": 25600,
937− "can_reason": false,
938− "supports_attachments": true
939− },
940− {
941− "id": "gpt-5.1",
942− "name": "gpt-5.1",
943− "cost_per_1m_in": 1.234,
944− "cost_per_1m_out": 9.838,
945− "cost_per_1m_in_cached": 0,
946− "cost_per_1m_out_cached": 0,
947− "context_window": 400000,
948− "default_max_tokens": 40000,
949− "can_reason": true,
950− "reasoning_levels": [
951− "low",
952− "medium",
953− "high"
954− ],
955− "default_reasoning_effort": "medium",
956− "supports_attachments": true
957− },
958− {
959− "id": "nemotron-nano-v2-12b",
960− "name": "nemotron-nano-v2-12b",
961− "cost_per_1m_in": 0.215,
962− "cost_per_1m_out": 0.635,
963− "cost_per_1m_in_cached": 0,
964− "cost_per_1m_out_cached": 0,
965− "context_window": 128000,
966− "default_max_tokens": 12800,
967− "can_reason": true,
968− "reasoning_levels": [
969− "low",
970− "medium",
971− "high"
972− ],
973− "default_reasoning_effort": "medium",
974− "supports_attachments": true
975− },
976− {
977− "id": "claude-haiku-4-5",
978− "name": "claude-haiku-4-5",
979− "cost_per_1m_in": 0.894,
980− "cost_per_1m_out": 4.472,
981− "cost_per_1m_in_cached": 0,
982− "cost_per_1m_out_cached": 0,
983− "context_window": 200000,
984− "default_max_tokens": 20000,
985− "can_reason": true,
986− "reasoning_levels": [
987− "low",
988− "medium",
989− "high"
990− ],
991− "default_reasoning_effort": "medium",
992− "supports_attachments": true
993− },
994− {
995− "id": "claude-4-5-sonnet",
996− "name": "claude-4-5-sonnet",
997− "cost_per_1m_in": 2.683,
998− "cost_per_1m_out": 13.416,
999− "cost_per_1m_in_cached": 0,
1000− "cost_per_1m_out_cached": 0,
1001− "context_window": 200000,
1002− "default_max_tokens": 20000,
1003− "can_reason": true,
1004− "reasoning_levels": [
1005− "low",
1006− "medium",
1007− "high"
1008− ],
1009− "default_reasoning_effort": "medium",
1010− "supports_attachments": true
1011− },
1012− {
1013− "id": "magistral-small-2509",
1014− "name": "magistral-small-2509",
1015− "cost_per_1m_in": 0.5,
1016− "cost_per_1m_out": 1.5,
1017− "cost_per_1m_in_cached": 0,
1018− "cost_per_1m_out_cached": 0,
1019− "context_window": 128000,
1020− "default_max_tokens": 12800,
1021− "can_reason": true,
1022− "reasoning_levels": [
1023− "low",
1024− "medium",
1025− "high"
1026− ],
1027− "default_reasoning_effort": "medium",
1028− "supports_attachments": true
1029− },
1030− {
1031− "id": "magistral-medium-2509",
1032− "name": "magistral-medium-2509",
1033− "cost_per_1m_in": 2,
1034− "cost_per_1m_out": 5,
1035− "cost_per_1m_in_cached": 0,
1036− "cost_per_1m_out_cached": 0,
1037− "context_window": 128000,
1038− "default_max_tokens": 12800,
1039− "can_reason": true,
1040− "reasoning_levels": [
1041− "low",
1042− "medium",
1043− "high"
1044− ],
1045− "default_reasoning_effort": "medium",
1046− "supports_attachments": true
1047− },
1048− {
1049− "id": "hermes-4-70b",
1050− "name": "hermes-4-70b",
1051− "cost_per_1m_in": 0.116,
1052− "cost_per_1m_out": 0.358,
1053− "cost_per_1m_in_cached": 0,
1054− "cost_per_1m_out_cached": 0,
1055− "context_window": 128000,
1056− "default_max_tokens": 12800,
1057− "can_reason": false,
1058− "supports_attachments": false
1059− },
1060− {
1061− "id": "gpt-5",
1062− "name": "gpt-5",
1063− "cost_per_1m_in": 1.234,
1064− "cost_per_1m_out": 9.838,
1065− "cost_per_1m_in_cached": 0,
1066− "cost_per_1m_out_cached": 0,
1067− "context_window": 400000,
1068− "default_max_tokens": 40000,
1069− "can_reason": true,
1070− "reasoning_levels": [
1071− "low",
1072− "medium",
1073− "high"
1074− ],
1075− "default_reasoning_effort": "medium",
1076− "supports_attachments": true
1077− },
1078− {
1079− "id": "gpt-oss-120b",
1080− "name": "gpt-oss-120b",
1081− "cost_per_1m_in": 0.035,
1082− "cost_per_1m_out": 0.177,
1083− "cost_per_1m_in_cached": 0,
1084− "cost_per_1m_out_cached": 0,
1085− "context_window": 128000,
1086− "default_max_tokens": 12800,
1087− "can_reason": true,
1088− "reasoning_levels": [
1089− "low",
1090− "medium",
1091− "high"
1092− ],
1093− "default_reasoning_effort": "medium",
1094− "supports_attachments": false
1095− },
1096− {
1097− "id": "qwen3-30b-a3b-instruct-2507",
1098− "name": "qwen3-30b-a3b-instruct-2507",
1099− "cost_per_1m_in": 0.089,
1100− "cost_per_1m_out": 0.268,
1101− "cost_per_1m_in_cached": 0,
1102− "cost_per_1m_out_cached": 0,
1103− "context_window": 262000,
1104− "default_max_tokens": 26200,
1105− "can_reason": true,
1106− "reasoning_levels": [
1107− "low",
1108− "medium",
1109− "high"
1110− ],
1111− "default_reasoning_effort": "medium",
1112− "supports_attachments": false
1113− },
1114− {
1115− "id": "gpt-oss-20b",
1116− "name": "gpt-oss-20b",
1117− "cost_per_1m_in": 0.027,
1118− "cost_per_1m_out": 0.124,
1119− "cost_per_1m_in_cached": 0,
1120− "cost_per_1m_out_cached": 0,
1121− "context_window": 128000,
1122− "default_max_tokens": 12800,
1123− "can_reason": true,
1124− "reasoning_levels": [
1125− "low",
1126− "medium",
1127− "high"
1128− ],
1129− "default_reasoning_effort": "medium",
1130− "supports_attachments": false
1131− },
1132− {
1133− "id": "mistral-7b-instruct-v0.3",
1134− "name": "mistral-7b-instruct-v0.3",
1135− "cost_per_1m_in": 0.1,
1136− "cost_per_1m_out": 0.1,
1137− "cost_per_1m_in_cached": 0,
1138− "cost_per_1m_out_cached": 0,
1139− "context_window": 127000,
1140− "default_max_tokens": 12700,
1141− "can_reason": false,
1142− "supports_attachments": false
1143− },
1144− {
1145− "id": "mistral-small-3.2-24b-instruct-2506",
1146− "name": "mistral-small-3.2-24b-instruct-2506",
1147− "cost_per_1m_in": 0.09,
1148− "cost_per_1m_out": 0.28,
1149− "cost_per_1m_in_cached": 0,
1150− "cost_per_1m_out_cached": 0,
1151− "context_window": 128000,
1152− "default_max_tokens": 12800,
1153− "can_reason": false,
1154− "supports_attachments": true
1155− },
1156− {
1157− "id": "mistral-large-2402",
1158− "name": "mistral-large-2402",
1159− "cost_per_1m_in": 3.846,
1160− "cost_per_1m_out": 11.627,
1161− "cost_per_1m_in_cached": 0,
1162− "cost_per_1m_out_cached": 0,
1163− "context_window": 32000,
1164− "default_max_tokens": 3200,
1165− "can_reason": true,
1166− "reasoning_levels": [
1167− "low",
1168− "medium",
1169− "high"
1170− ],
1171− "default_reasoning_effort": "medium",
1172− "supports_attachments": false
1173− },
1174− {
1175− "id": "pixtral-large-2502",
1176− "name": "pixtral-large-2502",
1177− "cost_per_1m_in": 1.789,
1178− "cost_per_1m_out": 5.366,
1179− "cost_per_1m_in_cached": 0,
1180− "cost_per_1m_out_cached": 0,
1181− "context_window": 128000,
1182− "default_max_tokens": 12800,
1183− "can_reason": true,
1184− "reasoning_levels": [
1185− "low",
1186− "medium",
1187− "high"
1188− ],
1189− "default_reasoning_effort": "medium",
1190− "supports_attachments": true
1191− },
1192− {
1193− "id": "qwen3-235b-a22b-instruct-2507",
1194− "name": "qwen3-235b-a22b-instruct-2507",
1195− "cost_per_1m_in": 0.062,
1196− "cost_per_1m_out": 0.408,
1197− "cost_per_1m_in_cached": 0,
1198− "cost_per_1m_out_cached": 0,
1199− "context_window": 131000,
1200− "default_max_tokens": 13100,
1201− "can_reason": true,
1202− "reasoning_levels": [
1203− "low",
1204− "medium",
1205− "high"
1206− ],
1207− "default_reasoning_effort": "medium",
1208− "supports_attachments": false
1209− },
1210− {
1211− "id": "qwen3-coder-30b-a3b-instruct",
1212− "name": "qwen3-coder-30b-a3b-instruct",
1213− "cost_per_1m_in": 0.053,
1214− "cost_per_1m_out": 0.222,
1215− "cost_per_1m_in_cached": 0,
1216− "cost_per_1m_out_cached": 0,
1217− "context_window": 32000,
1218− "default_max_tokens": 3200,
1219− "can_reason": true,
1220− "reasoning_levels": [
1221− "low",
1222− "medium",
1223− "high"
1224− ],
1225− "default_reasoning_effort": "medium",
1226− "supports_attachments": false
1227− },
1228− {
1229− "id": "qwen3-32b",
1230− "name": "qwen3-32b",
1231− "cost_per_1m_in": 0.089,
1232− "cost_per_1m_out": 0.268,
1233− "cost_per_1m_in_cached": 0,
1234− "cost_per_1m_out_cached": 0,
1235− "context_window": 16384,
1236− "default_max_tokens": 1638,
1237− "can_reason": true,
1238− "reasoning_levels": [
1239− "low",
1240− "medium",
1241− "high"
1242− ],
1243− "default_reasoning_effort": "medium",
1244− "supports_attachments": false
1245− },
1246− {
1247− "id": "nova-lite-v1",
1248− "name": "nova-lite-v1",
1249− "cost_per_1m_in": 0.062,
1250− "cost_per_1m_out": 0.247,
1251− "cost_per_1m_in_cached": 0,
1252− "cost_per_1m_out_cached": 0,
1253− "context_window": 300000,
1254− "default_max_tokens": 30000,
1255− "can_reason": true,
1256− "reasoning_levels": [
1257− "low",
1258− "medium",
1259− "high"
1260− ],
1261− "default_reasoning_effort": "medium",
1262− "supports_attachments": true
1263− },
1264− {
1265− "id": "claude-sonnet-4",
1266− "name": "claude-sonnet-4",
1267− "cost_per_1m_in": 2.601,
1268− "cost_per_1m_out": 13.01,
1269− "cost_per_1m_in_cached": 0,
1270− "cost_per_1m_out_cached": 0,
1271− "context_window": 200000,
1272− "default_max_tokens": 20000,
1273− "can_reason": true,
1274− "reasoning_levels": [
1275− "low",
1276− "medium",
1277− "high"
1278− ],
1279− "default_reasoning_effort": "medium",
1280− "supports_attachments": true
1281− },
1282− {
1283− "id": "gpt-4.1-mini",
1284− "name": "gpt-4.1-mini",
1285− "cost_per_1m_in": 0.39,
1286− "cost_per_1m_out": 1.53,
1287− "cost_per_1m_in_cached": 0,
1288− "cost_per_1m_out_cached": 0,
1289− "context_window": 1047576,
1290− "default_max_tokens": 104757,
1291− "can_reason": true,
1292− "reasoning_levels": [
1293− "low",
1294− "medium",
1295− "high"
1296− ],
1297− "default_reasoning_effort": "medium",
1298− "supports_attachments": true
1299− },
1300− {
1301− "id": "gpt-4.1-nano",
1302− "name": "gpt-4.1-nano",
1303− "cost_per_1m_in": 0.1,
1304− "cost_per_1m_out": 0.39,
1305− "cost_per_1m_in_cached": 0,
1306− "cost_per_1m_out_cached": 0,
1307− "context_window": 1047576,
1308− "default_max_tokens": 104757,
1309− "can_reason": true,
1310− "reasoning_levels": [
1311− "low",
1312− "medium",
1313− "high"
1314− ],
1315− "default_reasoning_effort": "medium",
1316− "supports_attachments": true
1317− },
1318− {
1319− "id": "nova-micro-v1",
1320− "name": "nova-micro-v1",
1321− "cost_per_1m_in": 0.036,
1322− "cost_per_1m_out": 0.143,
1323− "cost_per_1m_in_cached": 0,
1324− "cost_per_1m_out_cached": 0,
1325− "context_window": 128000,
1326− "default_max_tokens": 12800,
1327− "can_reason": true,
1328− "reasoning_levels": [
1329− "low",
1330− "medium",
1331− "high"
1332− ],
1333− "default_reasoning_effort": "medium",
1334− "supports_attachments": true
1335− },
1336− {
1337− "id": "gpt-4.1",
1338− "name": "gpt-4.1",
1339− "cost_per_1m_in": 1.968,
1340− "cost_per_1m_out": 7.872,
1341− "cost_per_1m_in_cached": 0,
1342− "cost_per_1m_out_cached": 0,
1343− "context_window": 1047576,
1344− "default_max_tokens": 104757,
1345− "can_reason": true,
1346− "reasoning_levels": [
1347− "low",
1348− "medium",
1349− "high"
1350− ],
1351− "default_reasoning_effort": "medium",
1352− "supports_attachments": true
1353− },
1354− {
1355− "id": "nova-pro-v1",
1356− "name": "nova-pro-v1",
1357− "cost_per_1m_in": 0.824,
1358− "cost_per_1m_out": 3.295,
1359− "cost_per_1m_in_cached": 0,
1360− "cost_per_1m_out_cached": 0,
1361− "context_window": 300000,
1362− "default_max_tokens": 30000,
1363− "can_reason": true,
1364− "reasoning_levels": [
1365− "low",
1366− "medium",
1367− "high"
1368− ],
1369− "default_reasoning_effort": "medium",
1370− "supports_attachments": true
1371− },
1372− {
1373− "id": "llama-3.1-nemotron-ultra-253b-v1",
1374− "name": "llama-3.1-nemotron-ultra-253b-v1",
1375− "cost_per_1m_in": 0.537,
1376− "cost_per_1m_out": 1.61,
1377− "cost_per_1m_in_cached": 0,
1378− "cost_per_1m_out_cached": 0,
1379− "context_window": 128000,
1380− "default_max_tokens": 12800,
1381− "can_reason": true,
1382− "reasoning_levels": [
1383− "low",
1384− "medium",
1385− "high"
1386− ],
1387− "default_reasoning_effort": "medium",
1388− "supports_attachments": false
1389− },
1390− {
1391− "id": "llama-4-maverick",
1392− "name": "llama-4-maverick",
1393− "cost_per_1m_in": 0.124,
1394− "cost_per_1m_out": 0.603,
1395− "cost_per_1m_in_cached": 0,
1396− "cost_per_1m_out_cached": 0,
1397− "context_window": 1050000,
1398− "default_max_tokens": 105000,
1399− "can_reason": false,
1400− "supports_attachments": false
1401− },
1402− {
1403− "id": "deepseek-v3-0324",
1404− "name": "deepseek-v3-0324",
1405− "cost_per_1m_in": 0.266,
1406− "cost_per_1m_out": 0.887,
1407− "cost_per_1m_in_cached": 0,
1408− "cost_per_1m_out_cached": 0,
1409− "context_window": 163840,
1410− "default_max_tokens": 16384,
1411− "can_reason": true,
1412− "reasoning_levels": [
1413− "low",
1414− "medium",
1415− "high"
1416− ],
1417− "default_reasoning_effort": "medium",
1418− "supports_attachments": false
1419− },
1420− {
1421− "id": "mistral-small-2503",
1422− "name": "mistral-small-2503",
1423− "cost_per_1m_in": 0.1,
1424− "cost_per_1m_out": 0.3,
1425− "cost_per_1m_in_cached": 0,
1426− "cost_per_1m_out_cached": 0,
1427− "context_window": 128000,
1428− "default_max_tokens": 12800,
1429− "can_reason": false,
1430− "supports_attachments": true
1431− },
1432− {
1433− "id": "mistral-small-2506",
1434− "name": "mistral-small-2506",
1435− "cost_per_1m_in": 0.1,
1436− "cost_per_1m_out": 0.3,
1437− "cost_per_1m_in_cached": 0,
1438− "cost_per_1m_out_cached": 0,
1439− "context_window": 131072,
1440− "default_max_tokens": 13107,
1441− "can_reason": false,
1442− "supports_attachments": true
1443− },
1444− {
1445− "id": "gemini-2.5-flash",
1446− "name": "gemini-2.5-flash",
1447− "cost_per_1m_in": 0.268,
1448− "cost_per_1m_out": 2.236,
1449− "cost_per_1m_in_cached": 0,
1450− "cost_per_1m_out_cached": 0,
1451− "context_window": 1048576,
1452− "default_max_tokens": 104857,
1453− "can_reason": true,
1454− "reasoning_levels": [
1455− "low",
1456− "medium",
1457− "high"
1458− ],
1459− "default_reasoning_effort": "medium",
1460− "supports_attachments": true
1461− },
1462− {
1463− "id": "gemini-2.5-pro",
1464− "name": "gemini-2.5-pro",
1465− "cost_per_1m_in": 1.342,
1466− "cost_per_1m_out": 8.944,
1467− "cost_per_1m_in_cached": 0,
1468− "cost_per_1m_out_cached": 0,
1469− "context_window": 1048576,
1470− "default_max_tokens": 104857,
1471− "can_reason": true,
1472− "reasoning_levels": [
1473− "low",
1474− "medium",
1475− "high"
1476− ],
1477− "default_reasoning_effort": "medium",
1478− "supports_attachments": true
1479− },
1480− {
1481− "id": "gemma-3-27b-it",
1482− "name": "gemma-3-27b-it",
1483− "cost_per_1m_in": 0.089,
1484− "cost_per_1m_out": 0.268,
1485− "cost_per_1m_in_cached": 0,
1486− "cost_per_1m_out_cached": 0,
1487− "context_window": 40000,
1488− "default_max_tokens": 4000,
1489− "can_reason": true,
1490− "reasoning_levels": [
1491− "low",
1492− "medium",
1493− "high"
1494− ],
1495− "default_reasoning_effort": "medium",
1496− "supports_attachments": true
1497− },
1498− {
1499− "id": "deepseek-r1-0528",
1500− "name": "deepseek-r1-0528",
1501− "cost_per_1m_in": 0.585,
1502− "cost_per_1m_out": 2.307,
1503− "cost_per_1m_in_cached": 0,
1504− "cost_per_1m_out_cached": 0,
1505− "context_window": 164000,
1506− "default_max_tokens": 16400,
1507− "can_reason": true,
1508− "reasoning_levels": [
1509− "low",
1510− "medium",
1511− "high"
1512− ],
1513− "default_reasoning_effort": "medium",
1514− "supports_attachments": false
1515− },
1516− {
1517− "id": "codestral-2508",
1518− "name": "codestral-2508",
1519− "cost_per_1m_in": 0.3,
1520− "cost_per_1m_out": 0.9,
1521− "cost_per_1m_in_cached": 0,
1522− "cost_per_1m_out_cached": 0,
1523− "context_window": 256000,
1524− "default_max_tokens": 25600,
1525− "can_reason": false,
1526− "supports_attachments": false
1527− },
1528− {
1529− "id": "llama-3.3-70b-instruct",
1530− "name": "llama-3.3-70b-instruct",
1531− "cost_per_1m_in": 0.089,
1532− "cost_per_1m_out": 0.275,
1533− "cost_per_1m_in_cached": 0,
1534− "cost_per_1m_out_cached": 0,
1535− "context_window": 128000,
1536− "default_max_tokens": 12800,
1537− "can_reason": true,
1538− "reasoning_levels": [
1539− "low",
1540− "medium",
1541− "high"
1542− ],
1543− "default_reasoning_effort": "medium",
1544− "supports_attachments": false
1545− },
1546− {
1547− "id": "gpt-4o",
1548− "name": "gpt-4o",
1549− "cost_per_1m_in": 2.387,
1550− "cost_per_1m_out": 9.547,
1551− "cost_per_1m_in_cached": 0,
1552− "cost_per_1m_out_cached": 0,
1553− "context_window": 128000,
1554− "default_max_tokens": 12800,
1555− "can_reason": true,
1556− "reasoning_levels": [
1557− "low",
1558− "medium",
1559− "high"
1560− ],
1561− "default_reasoning_effort": "medium",
1562− "supports_attachments": true
1563− },
1564− {
1565− "id": "gpt-5-mini",
1566− "name": "gpt-5-mini",
1567− "cost_per_1m_in": 0.25,
1568− "cost_per_1m_out": 1.968,
1569− "cost_per_1m_in_cached": 0,
1570− "cost_per_1m_out_cached": 0,
1571− "context_window": 400000,
1572− "default_max_tokens": 40000,
1573− "can_reason": true,
1574− "reasoning_levels": [
1575− "low",
1576− "medium",
1577− "high"
1578− ],
1579− "default_reasoning_effort": "medium",
1580− "supports_attachments": true
1581− },
1582− {
1583− "id": "gpt-5-nano",
1584− "name": "gpt-5-nano",
1585− "cost_per_1m_in": 0.054,
1586− "cost_per_1m_out": 0.394,
1587− "cost_per_1m_in_cached": 0,
1588− "cost_per_1m_out_cached": 0,
1589− "context_window": 400000,
1590− "default_max_tokens": 40000,
1591− "can_reason": true,
1592− "reasoning_levels": [
1593− "low",
1594− "medium",
1595− "high"
1596− ],
1597− "default_reasoning_effort": "medium",
1598− "supports_attachments": true
1599− },
1600− {
1601− "id": "hermes-4-405b",
1602− "name": "hermes-4-405b",
1603− "cost_per_1m_in": 0.894,
1604− "cost_per_1m_out": 2.683,
1605− "cost_per_1m_in_cached": 0,
1606− "cost_per_1m_out_cached": 0,
1607− "context_window": 128000,
1608− "default_max_tokens": 12800,
1609− "can_reason": false,
1610− "supports_attachments": false
1611− },
1612− {
1613− "id": "mistral-medium-2508",
1614− "name": "mistral-medium-2508",
1615− "cost_per_1m_in": 0.4,
1616− "cost_per_1m_out": 2,
1617− "cost_per_1m_in_cached": 0,
1618− "cost_per_1m_out_cached": 0,
1619− "context_window": 128000,
1620− "default_max_tokens": 12800,
1621− "can_reason": true,
1622− "reasoning_levels": [
1623− "low",
1624− "medium",
1625− "high"
1626− ],
1627− "default_reasoning_effort": "medium",
1628− "supports_attachments": true
1629− },
1630− {
1631− "id": "mistral-nemo-instruct-2407",
1632− "name": "mistral-nemo-instruct-2407",
1633− "cost_per_1m_in": 0.13,
1634− "cost_per_1m_out": 0.13,
1635− "cost_per_1m_in_cached": 0,
1636− "cost_per_1m_out_cached": 0,
1637− "context_window": 118000,
1638− "default_max_tokens": 11800,
1639− "can_reason": false,
1640− "supports_attachments": false
1641− },
1642− {
1643− "id": "llama-3.1-405b-instruct",
1644− "name": "llama-3.1-405b-instruct",
1645− "cost_per_1m_in": 1.75,
1646− "cost_per_1m_out": 1.75,
1647− "cost_per_1m_in_cached": 0,
1648− "cost_per_1m_out_cached": 0,
1649− "context_window": 128000,
1650− "default_max_tokens": 12800,
1651− "can_reason": true,
1652− "reasoning_levels": [
1653− "low",
1654− "medium",
1655− "high"
1656− ],
1657− "default_reasoning_effort": "medium",
1658− "supports_attachments": false
1659− },
1660− {
1661− "id": "gpt-4o-mini",
1662− "name": "gpt-4o-mini",
1663− "cost_per_1m_in": 0.143,
1664− "cost_per_1m_out": 0.573,
1665− "cost_per_1m_in_cached": 0,
1666− "cost_per_1m_out_cached": 0,
1667− "context_window": 128000,
1668− "default_max_tokens": 12800,
1669− "can_reason": true,
1670− "reasoning_levels": [
1671− "low",
1672− "medium",
1673− "high"
1674− ],
1675− "default_reasoning_effort": "medium",
1676− "supports_attachments": true
1677− },
1678− {
1679− "id": "llama-3.1-8b-instruct",
1680− "name": "llama-3.1-8b-instruct",
1681− "cost_per_1m_in": 0.15,
1682− "cost_per_1m_out": 0.15,
1683− "cost_per_1m_in_cached": 0,
1684− "cost_per_1m_out_cached": 0,
1685− "context_window": 128000,
1686− "default_max_tokens": 12800,
1687− "can_reason": true,
1688− "reasoning_levels": [
1689− "low",
1690− "medium",
1691− "high"
1692− ],
1693− "default_reasoning_effort": "medium",
1694− "supports_attachments": false
1695− }
1696− ]
1697−}
vendor/charm.land/catwalk/internal/providers/configs/deepseek.jsondeleted−45
@@ -1,45 +0,0 @@
1−{
2− "name": "DeepSeek",
3− "id": "deepseek",
4− "type": "openai-compat",
5− "api_key": "$DEEPSEEK_API_KEY",
6− "api_endpoint": "https://api.deepseek.com/v1",
7− "default_large_model_id": "deepseek-v4-pro",
8− "default_small_model_id": "deepseek-v4-flash",
9− "models": [
10− {
11− "id": "deepseek-v4-flash",
12− "name": "DeepSeek-V4-Flash",
13− "cost_per_1m_in": 0.14,
14− "cost_per_1m_out": 0.28,
15− "cost_per_1m_in_cached": 0.0028,
16− "cost_per_1m_out_cached": 0,
17− "context_window": 1000000,
18− "default_max_tokens": 384000,
19− "can_reason": true,
20− "reasoning_levels": [
21− "high",
22− "xhigh"
23− ],
24− "default_reasoning_effort": "high",
25− "supports_attachments": false
26− },
27− {
28− "id": "deepseek-v4-pro",
29− "name": "DeepSeek-V4-Pro",
30− "cost_per_1m_in": 0.435,
31− "cost_per_1m_out": 0.87,
32− "cost_per_1m_in_cached": 0.003625,
33− "cost_per_1m_out_cached": 0,
34− "context_window": 1000000,
35− "default_max_tokens": 384000,
36− "can_reason": true,
37− "reasoning_levels": [
38− "high",
39− "xhigh"
40− ],
41− "default_reasoning_effort": "high",
42− "supports_attachments": false
43− }
44− ]
45−}
vendor/charm.land/catwalk/internal/providers/configs/fireworks.jsondeleted−171
@@ -1,171 +0,0 @@
1−{
2− "name": "Fireworks",
3− "id": "fireworks",
4− "api_key": "$FIREWORKS_API_KEY",
5− "api_endpoint": "https://api.fireworks.ai/inference/v1",
6− "type": "openai-compat",
7− "default_large_model_id": "accounts/fireworks/models/deepseek-v4-pro",
8− "default_small_model_id": "accounts/fireworks/models/deepseek-v4-flash",
9− "models": [
10− {
11− "id": "accounts/fireworks/models/qwen3p7-plus",
12− "name": "Qwen3.7-Plus",
13− "cost_per_1m_in": 0.40,
14− "cost_per_1m_out": 1.60,
15− "cost_per_1m_in_cached": 0.08,
16− "cost_per_1m_out_cached": 0,
17− "context_window": 262144,
18− "default_max_tokens": 65536,
19− "can_reason": true,
20− "supports_attachments": true
21− },
22− {
23− "id": "accounts/fireworks/models/qwen3p6-plus",
24− "name": "Qwen3.6-Plus",
25− "cost_per_1m_in": 0.50,
26− "cost_per_1m_out": 3.00,
27− "cost_per_1m_in_cached": 0.10,
28− "cost_per_1m_out_cached": 0,
29− "context_window": 262144,
30− "default_max_tokens": 65536,
31− "can_reason": true,
32− "supports_attachments": true
33− },
34− {
35− "id": "accounts/fireworks/models/glm-5p2",
36− "name": "GLM-5.2",
37− "cost_per_1m_in": 1.40,
38− "cost_per_1m_out": 4.40,
39− "cost_per_1m_in_cached": 0.26,
40− "cost_per_1m_out_cached": 0,
41− "context_window": 1048576,
42− "default_max_tokens": 131072,
43− "can_reason": true,
44− "reasoning_levels": ["high", "max"],
45− "default_reasoning_effort": "max",
46− "supports_attachments": false
47− },
48− {
49− "id": "accounts/fireworks/models/glm-5p1",
50− "name": "GLM 5.1",
51− "cost_per_1m_in": 1.40,
52− "cost_per_1m_out": 4.40,
53− "cost_per_1m_in_cached": 0.26,
54− "cost_per_1m_out_cached": 0,
55− "context_window": 202800,
56− "default_max_tokens": 131072,
57− "can_reason": true,
58− "reasoning_levels": ["high", "max"],
59− "default_reasoning_effort": "max",
60− "supports_attachments": false
61− },
62− {
63− "id": "accounts/fireworks/models/kimi-k2p7-code",
64− "name": "Kimi K2.7 Code",
65− "cost_per_1m_in": 0.95,
66− "cost_per_1m_out": 4.00,
67− "cost_per_1m_in_cached": 0.19,
68− "cost_per_1m_out_cached": 0,
69− "context_window": 262000,
70− "default_max_tokens": 262000,
71− "can_reason": true,
72− "supports_attachments": true
73− },
74− {
75− "id": "accounts/fireworks/models/kimi-k2p6",
76− "name": "Kimi K2.6",
77− "cost_per_1m_in": 0.95,
78− "cost_per_1m_out": 4.00,
79− "cost_per_1m_in_cached": 0.16,
80− "cost_per_1m_out_cached": 0,
81− "context_window": 262000,
82− "default_max_tokens": 262000,
83− "can_reason": true,
84− "supports_attachments": true
85− },
86− {
87− "id": "accounts/fireworks/models/minimax-m3",
88− "name": "Minimax M3",
89− "cost_per_1m_in": 0.30,
90− "cost_per_1m_out": 1.20,
91− "cost_per_1m_in_cached": 0.06,
92− "cost_per_1m_out_cached": 0,
93− "context_window": 512000,
94− "default_max_tokens": 512000,
95− "can_reason": true,
96− "reasoning_levels": ["low", "medium", "high"],
97− "default_reasoning_effort": "medium",
98− "supports_attachments": true
99− },
100− {
101− "id": "accounts/fireworks/models/minimax-m2p7",
102− "name": "MiniMax M2.7",
103− "cost_per_1m_in": 0.30,
104− "cost_per_1m_out": 1.20,
105− "cost_per_1m_in_cached": 0.06,
106− "cost_per_1m_out_cached": 0,
107− "context_window": 196608,
108− "default_max_tokens": 196608,
109− "can_reason": true,
110− "reasoning_levels": ["low", "medium", "high"],
111− "default_reasoning_effort": "medium",
112− "supports_attachments": false
113− },
114− {
115− "id": "accounts/fireworks/models/deepseek-v4-pro",
116− "name": "DeepSeek V4 Pro",
117− "cost_per_1m_in": 1.74,
118− "cost_per_1m_out": 3.48,
119− "cost_per_1m_in_cached": 0.15,
120− "cost_per_1m_out_cached": 0,
121− "context_window": 1000000,
122− "default_max_tokens": 384000,
123− "can_reason": true,
124− "reasoning_levels": ["none", "high", "xhigh"],
125− "default_reasoning_effort": "high",
126− "supports_attachments": false
127− },
128− {
129− "id": "accounts/fireworks/models/deepseek-v4-flash",
130− "name": "DeepSeek V4 Flash",
131− "cost_per_1m_in": 0.14,
132− "cost_per_1m_out": 0.28,
133− "cost_per_1m_in_cached": 0.03,
134− "cost_per_1m_out_cached": 0,
135− "context_window": 1000000,
136− "default_max_tokens": 384000,
137− "can_reason": true,
138− "reasoning_levels": ["none", "high", "xhigh"],
139− "default_reasoning_effort": "high",
140− "supports_attachments": false
141− },
142− {
143− "id": "accounts/fireworks/models/gpt-oss-120b",
144− "name": "gpt-oss-120b",
145− "cost_per_1m_in": 0.15,
146− "cost_per_1m_out": 0.60,
147− "cost_per_1m_in_cached": 0.01,
148− "cost_per_1m_out_cached": 0,
149− "context_window": 131072,
150− "default_max_tokens": 32768,
151− "can_reason": true,
152− "reasoning_levels": ["low", "medium", "high"],
153− "default_reasoning_effort": "medium",
154− "supports_attachments": false
155− },
156− {
157− "id": "accounts/fireworks/models/gpt-oss-20b",
158− "name": "gpt-oss-20b",
159− "cost_per_1m_in": 0.07,
160− "cost_per_1m_out": 0.30,
161− "cost_per_1m_in_cached": 0.04,
162− "cost_per_1m_out_cached": 0,
163− "context_window": 131072,
164− "default_max_tokens": 32768,
165− "can_reason": true,
166− "reasoning_levels": ["low", "medium", "high"],
167− "default_reasoning_effort": "medium",
168− "supports_attachments": false
169− }
170− ]
171−}
vendor/charm.land/catwalk/internal/providers/configs/gemini.jsondeleted−91
@@ -1,91 +0,0 @@
1−{
2− "name": "Google Gemini",
3− "id": "gemini",
4− "type": "google",
5− "api_key": "$GEMINI_API_KEY",
6− "api_endpoint": "$GEMINI_API_ENDPOINT",
7− "default_large_model_id": "gemini-3.1-pro-preview-customtools",
8− "default_small_model_id": "gemini-3-flash-preview",
9− "models": [
10− {
11− "id": "gemini-3.5-flash",
12− "name": "Gemini 3.5 Flash",
13− "cost_per_1m_in": 1.5,
14− "cost_per_1m_out": 9,
15− "cost_per_1m_in_cached": 0,
16− "cost_per_1m_out_cached": 1,
17− "context_window": 1048576,
18− "default_max_tokens": 64000,
19− "can_reason": true,
20− "reasoning_levels": ["minimal", "low", "medium", "high"],
21− "default_reasoning_effort": "medium",
22− "supports_attachments": true
23− },
24− {
25− "id": "gemini-3.1-pro-preview-customtools",
26− "name": "Gemini 3.1 Pro",
27− "cost_per_1m_in": 2,
28− "cost_per_1m_out": 12,
29− "cost_per_1m_in_cached": 0,
30− "cost_per_1m_out_cached": 0.2,
31− "context_window": 1048576,
32− "default_max_tokens": 64000,
33− "can_reason": true,
34− "reasoning_levels": ["low", "medium", "high"],
35− "default_reasoning_effort": "medium",
36− "supports_attachments": true
37− },
38− {
39− "id": "gemini-3-pro-preview",
40− "name": "Gemini 3 Pro",
41− "cost_per_1m_in": 2,
42− "cost_per_1m_out": 12,
43− "cost_per_1m_in_cached": 0,
44− "cost_per_1m_out_cached": 0.2,
45− "context_window": 1048576,
46− "default_max_tokens": 64000,
47− "can_reason": true,
48− "reasoning_levels": ["low", "high"],
49− "default_reasoning_effort": "high",
50− "supports_attachments": true
51− },
52− {
53− "id": "gemini-3-flash-preview",
54− "name": "Gemini 3 Flash",
55− "cost_per_1m_in": 0.5,
56− "cost_per_1m_out": 3,
57− "cost_per_1m_in_cached": 0,
58− "cost_per_1m_out_cached": 0.05,
59− "context_window": 1048576,
60− "default_max_tokens": 50000,
61− "can_reason": true,
62− "reasoning_levels": ["minimal", "low", "medium", "high"],
63− "default_reasoning_effort": "minimal",
64− "supports_attachments": true
65− },
66− {
67− "id": "gemini-2.5-pro",
68− "name": "Gemini 2.5 Pro",
69− "cost_per_1m_in": 1.25,
70− "cost_per_1m_out": 10,
71− "cost_per_1m_in_cached": 0,
72− "cost_per_1m_out_cached": 0.125,
73− "context_window": 1048576,
74− "default_max_tokens": 50000,
75− "can_reason": true,
76− "supports_attachments": true
77− },
78− {
79− "id": "gemini-2.5-flash",
80− "name": "Gemini 2.5 Flash",
81− "cost_per_1m_in": 0.3,
82− "cost_per_1m_out": 2.5,
83− "cost_per_1m_in_cached": 0,
84− "cost_per_1m_out_cached": 0.03,
85− "context_window": 1048576,
86− "default_max_tokens": 50000,
87− "can_reason": true,
88− "supports_attachments": true
89− }
90− ]
91−}
vendor/charm.land/catwalk/internal/providers/configs/groq.jsondeleted−36
@@ -1,36 +0,0 @@
1−{
2− "name": "Groq",
3− "id": "groq",
4− "api_key": "$GROQ_API_KEY",
5− "api_endpoint": "https://api.groq.com/openai/v1",
6− "type": "openai-compat",
7− "default_large_model_id": "moonshotai/kimi-k2-instruct-0905",
8− "default_small_model_id": "qwen/qwen3-32b",
9− "models": [
10− {
11− "id": "moonshotai/kimi-k2-instruct-0905",
12− "name": "Kimi K2 0905",
13− "cost_per_1m_in": 1,
14− "cost_per_1m_out": 3,
15− "cost_per_1m_in_cached": 0.5,
16− "cost_per_1m_out_cached": 0.5,
17− "context_window": 131072,
18− "can_reason": true,
19− "reasoning_levels": [
20− "low",
21− "medium",
22− "high"
23− ],
24− "default_reasoning_effort": "medium",
25− "default_max_tokens": 10000
26− },
27− {
28− "id": "qwen/qwen3-32b",
29− "name": "Qwen3 32B",
30− "cost_per_1m_in": 0.29,
31− "cost_per_1m_out": 0.59,
32− "context_window": 131072,
33− "default_max_tokens": 10000
34− }
35− ]
36−}
vendor/charm.land/catwalk/internal/providers/configs/huggingface.jsondeleted−267

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/ionet.jsondeleted−335

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/kimi.jsondeleted−23

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/minimax-china.jsondeleted−91

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/minimax.jsondeleted−91

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/moonshot.jsondeleted−131

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/nebius.jsondeleted−419

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/neuralwatt.jsondeleted−155

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/openai.jsondeleted−352

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/opencode-go.jsondeleted−351

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/opencode-zen.jsondeleted−908

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/openrouter.jsondeleted−3831

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/qiniucloud.jsondeleted−179

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/scaleway.jsondeleted−141

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/synthetic.jsondeleted−197

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/venice.jsondeleted−1173

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/vercel.jsondeleted−3072

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/vertexai.jsondeleted−170

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/xai.jsondeleted−59

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/zai.jsondeleted−136

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/zhipu-coding.jsondeleted−136

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/zhipu.jsondeleted−120

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/providers.godeleted−349

This diff is too big to show here.

vendor/charm.land/catwalk/pkg/catwalk/client.godeleted−79

This diff is too big to show here.

vendor/charm.land/catwalk/pkg/catwalk/pkg.godeleted−2

This diff is too big to show here.

vendor/charm.land/catwalk/pkg/catwalk/provider.godeleted−157

This diff is too big to show here.

vendor/charm.land/catwalk/pkg/embedded/embedded.godeleted−13

This diff is too big to show here.

vendor/charm.land/fang/v2/.gitignoredeleted−3

This diff is too big to show here.

vendor/charm.land/fang/v2/.golangci.ymldeleted−47

This diff is too big to show here.

vendor/charm.land/fang/v2/.goreleaser.ymldeleted−5

This diff is too big to show here.

vendor/charm.land/fang/v2/LICENSE.mddeleted−21

This diff is too big to show here.

vendor/charm.land/fang/v2/README.mddeleted−92

This diff is too big to show here.

vendor/charm.land/fang/v2/Taskfile.ymldeleted−7

This diff is too big to show here.

vendor/charm.land/fang/v2/UPGRADE_GUIDE_V2.mddeleted−127

This diff is too big to show here.

vendor/charm.land/fang/v2/fang.godeleted−208

This diff is too big to show here.

vendor/charm.land/fang/v2/fang_other.godeleted−10

This diff is too big to show here.

vendor/charm.land/fang/v2/fang_windows.godeleted−30

This diff is too big to show here.

vendor/charm.land/fang/v2/help.godeleted−482

This diff is too big to show here.

vendor/charm.land/fang/v2/theme.godeleted−222

This diff is too big to show here.

vendor/charm.land/fantasy/.editorconfigdeleted−18

This diff is too big to show here.

vendor/charm.land/fantasy/.gitattributesdeleted−1

This diff is too big to show here.

vendor/charm.land/fantasy/.gitignoredeleted−42

This diff is too big to show here.

vendor/charm.land/fantasy/.golangci.ymldeleted−44

This diff is too big to show here.

vendor/charm.land/fantasy/.goreleaser.ymldeleted−6

This diff is too big to show here.

vendor/charm.land/fantasy/AGENTS.mddeleted−29

This diff is too big to show here.

vendor/charm.land/fantasy/LICENSEdeleted−177

This diff is too big to show here.

vendor/charm.land/fantasy/NOTICEdeleted−13

This diff is too big to show here.

vendor/charm.land/fantasy/README.mddeleted−95

This diff is too big to show here.

vendor/charm.land/fantasy/Taskfile.yamldeleted−45

This diff is too big to show here.

vendor/charm.land/fantasy/agent.godeleted−1702

This diff is too big to show here.

vendor/charm.land/fantasy/content.godeleted−625

This diff is too big to show here.

vendor/charm.land/fantasy/content_json.godeleted−1046

This diff is too big to show here.

vendor/charm.land/fantasy/crush.jsondeleted−6

This diff is too big to show here.

vendor/charm.land/fantasy/cspell.jsondeleted−1

This diff is too big to show here.

vendor/charm.land/fantasy/doc.godeleted−2

This diff is too big to show here.

vendor/charm.land/fantasy/errors.godeleted−155

This diff is too big to show here.

vendor/charm.land/fantasy/jsonrepair/jsonrepair.godeleted−1648

This diff is too big to show here.

vendor/charm.land/fantasy/model.godeleted−261

This diff is too big to show here.

vendor/charm.land/fantasy/model_json.godeleted−156

This diff is too big to show here.

vendor/charm.land/fantasy/object.godeleted−236

This diff is too big to show here.

vendor/charm.land/fantasy/object/object.godeleted−620

This diff is too big to show here.

vendor/charm.land/fantasy/provider.godeleted−11

This diff is too big to show here.

vendor/charm.land/fantasy/provider_registry.godeleted−106

This diff is too big to show here.

vendor/charm.land/fantasy/providers/anthropic/anthropic.godeleted−1707

This diff is too big to show here.

vendor/charm.land/fantasy/providers/anthropic/bedrock.godeleted−15

This diff is too big to show here.

vendor/charm.land/fantasy/providers/anthropic/call_useragent.godeleted−14

This diff is too big to show here.

vendor/charm.land/fantasy/providers/anthropic/computer_use.godeleted−427

This diff is too big to show here.

vendor/charm.land/fantasy/providers/anthropic/error.godeleted−67

This diff is too big to show here.

vendor/charm.land/fantasy/providers/anthropic/google.godeleted−11

This diff is too big to show here.

vendor/charm.land/fantasy/providers/anthropic/provider_options.godeleted−283

This diff is too big to show here.

vendor/charm.land/fantasy/providers/anthropic/sanitize.godeleted−33

This diff is too big to show here.

vendor/charm.land/fantasy/providers/azure/README.mddeleted−6

This diff is too big to show here.

vendor/charm.land/fantasy/providers/azure/azure.godeleted−125

This diff is too big to show here.

vendor/charm.land/fantasy/providers/bedrock/README.mddeleted−10

This diff is too big to show here.

vendor/charm.land/fantasy/providers/bedrock/bedrock.godeleted−87

This diff is too big to show here.

vendor/charm.land/fantasy/providers/google/README.mddeleted−63

This diff is too big to show here.

vendor/charm.land/fantasy/providers/google/auth.godeleted−15

This diff is too big to show here.

vendor/charm.land/fantasy/providers/google/call_useragent.godeleted−53

This diff is too big to show here.

vendor/charm.land/fantasy/providers/google/error.godeleted−51

This diff is too big to show here.

vendor/charm.land/fantasy/providers/google/google.godeleted−1488

This diff is too big to show here.

vendor/charm.land/fantasy/providers/google/provider_options.godeleted−146

This diff is too big to show here.

vendor/charm.land/fantasy/providers/google/slice.godeleted−11

This diff is too big to show here.

vendor/charm.land/fantasy/providers/internal/httpheaders/httpheaders.godeleted−60

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openai/call_useragent.godeleted−31

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openai/error.godeleted−92

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openai/language_model.godeleted−990

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openai/language_model_hooks.godeleted−668

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openai/openai.godeleted−220

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openai/provider_options.godeleted−217

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openai/responses_language_model.godeleted−1678

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openai/responses_options.godeleted−395

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openaicompat/language_model_hooks.godeleted−516

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openaicompat/openaicompat.godeleted−140

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openaicompat/provider_options.godeleted−161

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openrouter/language_model_hooks.godeleted−1063

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openrouter/openrouter.godeleted−121

This diff is too big to show here.

vendor/charm.land/fantasy/providers/openrouter/provider_options.godeleted−218

This diff is too big to show here.

vendor/charm.land/fantasy/providers/vercel/language_model_hooks.godeleted−1074

This diff is too big to show here.

vendor/charm.land/fantasy/providers/vercel/provider_options.godeleted−195

This diff is too big to show here.

vendor/charm.land/fantasy/providers/vercel/vercel.godeleted−122

This diff is too big to show here.

vendor/charm.land/fantasy/retry.godeleted−155

This diff is too big to show here.

vendor/charm.land/fantasy/schema/schema.godeleted−442

This diff is too big to show here.

vendor/charm.land/fantasy/tool.godeleted−176

This diff is too big to show here.

vendor/charm.land/fantasy/util.godeleted−22

This diff is too big to show here.

vendor/charm.land/fantasy/version.godeleted−12

This diff is too big to show here.

vendor/charm.land/fantasy/version.txtdeleted−1

This diff is too big to show here.

vendor/charm.land/glamour/v2/.editorconfigdeleted−18

This diff is too big to show here.

vendor/charm.land/glamour/v2/.gitattributesdeleted−2

This diff is too big to show here.

vendor/charm.land/glamour/v2/.gitignoredeleted−2

This diff is too big to show here.

vendor/charm.land/glamour/v2/.golangci.ymldeleted−44

This diff is too big to show here.

vendor/charm.land/glamour/v2/.goreleaser.ymldeleted−6

This diff is too big to show here.

vendor/charm.land/glamour/v2/CONTRIBUTING.mddeleted−23

This diff is too big to show here.

vendor/charm.land/glamour/v2/LICENSEdeleted−21

This diff is too big to show here.

vendor/charm.land/glamour/v2/README.mddeleted−129

This diff is too big to show here.

vendor/charm.land/glamour/v2/Taskfile.ymldeleted−25

This diff is too big to show here.

vendor/charm.land/glamour/v2/UPGRADE_GUIDE_V2.mddeleted−279

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/ansi.godeleted−3

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/baseelement.godeleted−157

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/blockelement.godeleted−66

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/blockstack.godeleted−95

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/codeblock.godeleted−151

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/codespan.godeleted−15

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/context.godeleted−38

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/elements.godeleted−481

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/emphasis.godeleted−47

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/heading.godeleted−80

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/image.godeleted−57

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/link.godeleted−112

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/listitem.godeleted−29

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/margin.godeleted−231

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/paragraph.godeleted−63

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/renderer.godeleted−166

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/style.godeleted−252

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/table.godeleted−206

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/table_links.godeleted−234

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/task.godeleted−27

This diff is too big to show here.

vendor/charm.land/glamour/v2/ansi/templatehelper.godeleted−86

This diff is too big to show here.

vendor/charm.land/glamour/v2/examples.shdeleted−19

This diff is too big to show here.

vendor/charm.land/glamour/v2/gallery.shdeleted−23

This diff is too big to show here.

vendor/charm.land/glamour/v2/glamour.godeleted−294

This diff is too big to show here.

vendor/charm.land/glamour/v2/internal/autolink/autolink.godeleted−55

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/README.mddeleted−565

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/ascii.jsondeleted−87

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/dark.jsondeleted−191

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/dracula.godeleted−216

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/dracula.jsondeleted−188

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/light.jsondeleted−190

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/notty.jsondeleted−87

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/pink.jsondeleted−90

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/styles.godeleted−691

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/tokyo-night.godeleted−209

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/tokyo-night.jsondeleted−182

This diff is too big to show here.

vendor/charm.land/glamour/v2/styles/tokyo_night.jsondeleted−182

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/.editorconfigdeleted−18

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/.gitattributesdeleted−1

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/.gitignoredeleted−3

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/.golangci.ymldeleted−50

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/.goreleaser.ymldeleted−5

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/LICENSEdeleted−21

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/README.mddeleted−996

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/Taskfile.yamldeleted−24

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/UPGRADE_GUIDE_V2.mddeleted−504

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/align.godeleted−82

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/ansi_unix.godeleted−8

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/ansi_windows.godeleted−30

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/blending.godeleted−196

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/borders.godeleted−587

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/canvas.godeleted−88

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/color.godeleted−359

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/get.godeleted−657

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/join.godeleted−175

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/layer.godeleted−327

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/lipgloss.godeleted−3

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/position.godeleted−134

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/query.godeleted−92

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/ranges.godeleted−48

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/runes.godeleted−43

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/set.godeleted−932

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/size.godeleted−40

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/style.godeleted−637

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/table/resizing.godeleted−489

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/table/rows.godeleted−130

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/table/table.godeleted−568

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/table/util.godeleted−44

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/terminal.godeleted−124

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/tree/children.godeleted−100

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/tree/enumerator.godeleted−74

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/tree/renderer.godeleted−165

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/tree/tree.godeleted−407

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/unset.godeleted−359

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/whitespace.godeleted−76

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/wrap.godeleted−113

This diff is too big to show here.

vendor/charm.land/lipgloss/v2/writer.godeleted−160

This diff is too big to show here.

vendor/charm.land/log/v2/.gitignoredeleted−17

This diff is too big to show here.

vendor/charm.land/log/v2/.golangci.ymldeleted−50

This diff is too big to show here.

vendor/charm.land/log/v2/.goreleaser.ymldeleted−6

This diff is too big to show here.

vendor/charm.land/log/v2/LICENSEdeleted−21

This diff is too big to show here.

vendor/charm.land/log/v2/README.mddeleted−367

This diff is too big to show here.

vendor/charm.land/log/v2/UPGRADE_GUIDE_V2.mddeleted−320

This diff is too big to show here.

vendor/charm.land/log/v2/context.godeleted−23

This diff is too big to show here.

vendor/charm.land/log/v2/doc.godeleted−3

This diff is too big to show here.

vendor/charm.land/log/v2/formatter.godeleted−27

This diff is too big to show here.

vendor/charm.land/log/v2/json.godeleted−157

This diff is too big to show here.

vendor/charm.land/log/v2/level.godeleted−65

This diff is too big to show here.

vendor/charm.land/log/v2/logfmt.godeleted−32

This diff is too big to show here.

vendor/charm.land/log/v2/logger.godeleted−413

This diff is too big to show here.

vendor/charm.land/log/v2/logger_121.godeleted−72

This diff is too big to show here.

vendor/charm.land/log/v2/logger_no121.godeleted−69

This diff is too big to show here.

vendor/charm.land/log/v2/options.godeleted−61

This diff is too big to show here.

vendor/charm.land/log/v2/pkg.godeleted−248

This diff is too big to show here.

vendor/charm.land/log/v2/stdlog.godeleted−67

This diff is too big to show here.

vendor/charm.land/log/v2/styles.godeleted−83

This diff is too big to show here.

vendor/charm.land/log/v2/text.godeleted−272

This diff is too big to show here.

vendor/charm.land/x/vcr/LICENSEdeleted−21

This diff is too big to show here.

vendor/charm.land/x/vcr/doc.godeleted−3

This diff is too big to show here.

vendor/charm.land/x/vcr/hooks.godeleted−33

This diff is too big to show here.

vendor/charm.land/x/vcr/marshaler.godeleted−19

This diff is too big to show here.

vendor/charm.land/x/vcr/matcher.godeleted−70

This diff is too big to show here.

vendor/charm.land/x/vcr/recorder.godeleted−70

This diff is too big to show here.

vendor/cloud.google.com/go/LICENSEdeleted−202

This diff is too big to show here.

vendor/cloud.google.com/go/auth/CHANGES.mddeleted−483

This diff is too big to show here.

vendor/cloud.google.com/go/auth/LICENSEdeleted−202

This diff is too big to show here.

vendor/cloud.google.com/go/auth/README.mddeleted−40

This diff is too big to show here.

vendor/cloud.google.com/go/auth/auth.godeleted−618

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/compute.godeleted−102

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/detect.godeleted−471

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/doc.godeleted−45

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/filetypes.godeleted−329

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/aws_provider.godeleted−531

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/executable_provider.godeleted−284

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/externalaccount.godeleted−431

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/file_provider.godeleted−78

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/info.godeleted−74

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/programmatic_provider.godeleted−30

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/url_provider.godeleted−93

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/x509_provider.godeleted−220

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/externalaccountuser/externalaccountuser.godeleted−115

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/gdch/gdch.godeleted−198

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/impersonate/idtoken.godeleted−105

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/impersonate/impersonate.godeleted−168

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/internal/stsexchange/sts_exchange.godeleted−167

This diff is too big to show here.

vendor/cloud.google.com/go/auth/credentials/selfsignedjwt.godeleted−89

This diff is too big to show here.

vendor/cloud.google.com/go/auth/grpctransport/dial_socketopt.godeleted−62

This diff is too big to show here.

vendor/cloud.google.com/go/auth/grpctransport/directpath.godeleted−177

This diff is too big to show here.

vendor/cloud.google.com/go/auth/grpctransport/grpctransport.godeleted−675

This diff is too big to show here.

vendor/cloud.google.com/go/auth/grpctransport/pool.godeleted−119

This diff is too big to show here.

vendor/cloud.google.com/go/auth/httptransport/httptransport.godeleted−254

This diff is too big to show here.

vendor/cloud.google.com/go/auth/httptransport/transport.godeleted−548

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/compute/compute.godeleted−65

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/compute/manufacturer.godeleted−22

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/compute/manufacturer_linux.godeleted−23

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/compute/manufacturer_windows.godeleted−46

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/credsfile/credsfile.godeleted−63

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/credsfile/filetype.godeleted−159

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/credsfile/parse.godeleted−99

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/internal.godeleted−285

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/jwt/jwt.godeleted−208

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/retry/retry.godeleted−117

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/transport/cba.godeleted−361

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/transport/cert/default_cert.godeleted−65

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/transport/cert/enterprise_cert.godeleted−54

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/transport/cert/secureconnect_cert.godeleted−124

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/transport/cert/workload_cert.godeleted−138

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/transport/headers/headers.godeleted−61

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/transport/s2a.godeleted−138

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/transport/transport.godeleted−137

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/trustboundary/external_accounts_config_providers.godeleted−100

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/trustboundary/trust_boundary.godeleted−392

This diff is too big to show here.

vendor/cloud.google.com/go/auth/internal/version.godeleted−20

This diff is too big to show here.

vendor/cloud.google.com/go/auth/oauth2adapt/CHANGES.mddeleted−82

This diff is too big to show here.

vendor/cloud.google.com/go/auth/oauth2adapt/LICENSEdeleted−202

This diff is too big to show here.

vendor/cloud.google.com/go/auth/oauth2adapt/oauth2adapt.godeleted−200

This diff is too big to show here.

vendor/cloud.google.com/go/auth/threelegged.godeleted−382

This diff is too big to show here.

vendor/cloud.google.com/go/civil/civil.godeleted−500

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/CHANGES.mddeleted−115

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/LICENSEdeleted−202

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/README.mddeleted−27

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/log.godeleted−149

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/metadata.godeleted−937

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/retry.godeleted−117

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/retry_linux.godeleted−31

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/syscheck.godeleted−28

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/syscheck_linux.godeleted−30

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/syscheck_windows.godeleted−39

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/.gitignoredeleted−1

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/ARCHITECTURE.mddeleted−244

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/LICENSEdeleted−61

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/README.mddeleted−86

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/constants.godeleted−65

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/data/xml/dom/xmldocument.godeleted−73

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/ui/notifications/toastnotification.godeleted−88

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/ui/notifications/toastnotificationmanager.godeleted−53

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/ui/notifications/toastnotificationmanagerforuser.godeleted−68

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/ui/notifications/toastnotifier.godeleted−64

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/tmpl/powershell.go.tmpldeleted−14

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/tmpl/tmpl.godeleted−28

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/tmpl/xml.go.tmpldeleted−34

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/toast.godeleted−225

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/bind.godeleted−86

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/bind_noop.godeleted−19

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/bind_windows.godeleted−174

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/impl.godeleted−179

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/procs.godeleted−37

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/registry.godeleted−110

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/CHANGELOG.mddeleted−849

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/LICENSE.txtdeleted−21

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/README.mddeleted−39

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/ci.ymldeleted−29

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/cloud.godeleted−44

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/doc.godeleted−53

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/core.godeleted−173

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/doc.godeleted−264

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/errors.godeleted−17

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/etag.godeleted−57

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/exported.godeleted−175

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/pipeline.godeleted−77

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/request.godeleted−260

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/response_error.godeleted−201

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log/log.godeleted−50

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/async/async.godeleted−159

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/body/body.godeleted−135

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/fake/fake.godeleted−133

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/loc/loc.godeleted−123

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/op/op.godeleted−148

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/poller.godeleted−24

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/util.godeleted−212

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/constants.godeleted−44

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/shared.godeleted−149

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/doc.godeleted−10

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/log.godeleted−55

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/doc.godeleted−10

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/policy.godeleted−198

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/doc.godeleted−10

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/errors.godeleted−27

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pager.godeleted−138

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pipeline.godeleted−94

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_api_version.godeleted−75

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_bearer_token.godeleted−236

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_body_download.godeleted−72

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_header.godeleted−40

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_trace.godeleted−154

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_include_response.godeleted−35

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_key_credential.godeleted−64

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_logging.godeleted−264

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_request_id.godeleted−34

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_retry.godeleted−276

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_sas_credential.godeleted−55

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_telemetry.godeleted−83

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/poller.godeleted−396

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/request.godeleted−281

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/response.godeleted−109

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_other.godeleted−15

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_wasm.godeleted−15

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_http_client.godeleted−48

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/doc.godeleted−9

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/progress.godeleted−89

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/constants.godeleted−41

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/tracing.godeleted−191

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/LICENSE.txtdeleted−21

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/diag.godeleted−51

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/doc.godeleted−7

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/doc.godeleted−7

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/errorinfo.godeleted−46

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/exported/exported.godeleted−129

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/doc.godeleted−7

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/log.godeleted−104

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/poller/util.godeleted−155

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/temporal/resource.godeleted−123

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/doc.godeleted−7

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/uuid.godeleted−76

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/.gitignoredeleted−14

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/CONTRIBUTING.mddeleted

No changes to the content.

vendor/github.com/JohannesKaufmann/html-to-markdown/LICENSEdeleted−21

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/README.mddeleted−242

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/SECURITY.mddeleted−6

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/commonmark.godeleted−393

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/escape/escape.godeleted−65

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/from.godeleted−464

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/logo_five_years.pngdeleted

Binary file not shown.

vendor/github.com/JohannesKaufmann/html-to-markdown/markdown.godeleted−212

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/utils.godeleted−533

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/.gitignoredeleted−16

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/.travis.ymldeleted−9

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/LICENSEdeleted−21

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/Makefiledeleted−32

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/README.mddeleted−232

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/depth.godeleted−129

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/pkg.godeleted−184

This diff is too big to show here.

vendor/github.com/MakeNowJust/heredoc/LICENSEdeleted−21

This diff is too big to show here.

vendor/github.com/MakeNowJust/heredoc/README.mddeleted−52

This diff is too big to show here.

vendor/github.com/MakeNowJust/heredoc/heredoc.godeleted−105

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/.gitattributesdeleted−1

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/.gitignoredeleted−10

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/.golangci.ymldeleted−147

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/CODEOWNERSdeleted−1

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/LICENSEdeleted−22

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/README.mddeleted−89

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/SECURITY.mddeleted−41

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/backup.godeleted−287

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/doc.godeleted−22

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/ea.godeleted−137

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/file.godeleted−320

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/fileinfo.godeleted−106

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/hvsock.godeleted−582

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/fs/doc.godeleted−2

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/fs/fs.godeleted−262

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/fs/security.godeleted−12

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.godeleted−61

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/socket/rawaddr.godeleted−20

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/socket/socket.godeleted−177

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.godeleted−69

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.godeleted−132

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/pipe.godeleted−586

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/pkg/guid/guid.godeleted−232

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/pkg/guid/guid_nonwindows.godeleted−16

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/pkg/guid/guid_windows.godeleted−13

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/pkg/guid/variant_string.godeleted−27

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/privilege.godeleted−196

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/reparse.godeleted−131

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/sd.godeleted−133

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/syscall.godeleted−5

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/zsyscall_windows.godeleted−378

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/.gitattributesdeleted−1

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/.gitignoredeleted−16

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/LICENSEdeleted−12

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/README.mddeleted−218

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/array.godeleted−124

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/doc.godeleted−123

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/expand.godeleted−70

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/filter.godeleted−163

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/iteration.godeleted−61

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/manipulation.godeleted−679

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/property.godeleted−275

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/query.godeleted−49

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/traversal.godeleted−704

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/type.godeleted−203

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/utilities.godeleted−177

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/.editorconfigdeleted−17

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/.gitignoredeleted−28

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/.golangci.ymldeleted−122

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/.goreleaser.ymldeleted−34

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/AGENTS.mddeleted−11

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/BUILD.bitdeleted−93

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/COPYINGdeleted−118

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/Dockerfiledeleted−64

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/Justfiledeleted−59

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/README.mddeleted−309

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/biome.jsondeleted−6

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/chroma.jpgdeleted

Binary file not shown.

vendor/github.com/alecthomas/chroma/v2/coalesce.godeleted−35

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/colour.godeleted−192

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/delegate.godeleted−161

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/doc.godeleted−7

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/emitters.godeleted−233

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatter.godeleted−43

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/api.godeleted−57

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/html/html.godeleted−692

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/json.godeleted−39

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/svg/font_liberation_mono.godeleted−51

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/svg/svg.godeleted−222

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/tokens.godeleted−18

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/tty_indexed.godeleted−284

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/tty_truecolour.godeleted−76

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/iterator.godeleted−93

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexer.godeleted−179

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/README.mddeleted−46

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/caddyfile.godeleted−275

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/cl.godeleted−243

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/dns.godeleted−17

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/emacs.godeleted−533

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/abap.xmldeleted−154

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/abnf.xmldeleted−66

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/actionscript.xmldeleted−68

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/actionscript_3.xmldeleted−163

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ada.xmldeleted−321

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/agda.xmldeleted−66

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/al.xmldeleted−75

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/alloy.xmldeleted−58

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ampl.xmldeleted−98

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/angular2.xmldeleted−109

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/antlr.xmldeleted−317

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/apacheconf.xmldeleted−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/apl.xmldeleted−59

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/applescript.xmldeleted−151

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arangodb_aql.xmldeleted−174

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arduino.xmldeleted−322

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/armasm.xmldeleted−126

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arturo.xmldeleted−119

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/atl.xmldeleted−165

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/autohotkey.xmldeleted−78

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/autoit.xmldeleted−70

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/awk.xmldeleted−95

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ballerina.xmldeleted−97

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bash.xmldeleted−222

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bash_session.xmldeleted−25

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/batchfile.xmldeleted−660

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/beef.xmldeleted−120

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bibtex.xmldeleted−152

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bicep.xmldeleted−84

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/blitzbasic.xmldeleted−141

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bnf.xmldeleted−28

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bqn.xmldeleted−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/brainfuck.xmldeleted−51

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c#.xmldeleted−121

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c++.xmldeleted−331

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c.xmldeleted−260

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c3.xmldeleted−374

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cap_n_proto.xmldeleted−122

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cassandra_cql.xmldeleted−137

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ceylon.xmldeleted−151

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cfengine3.xmldeleted−197

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cfstatement.xmldeleted−92

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/chaiscript.xmldeleted−134

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/chapel.xmldeleted−143

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cheetah.xmldeleted−55

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/clojure.xmldeleted−71

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cmake.xmldeleted−90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cobol.xmldeleted−90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/coffeescript.xmldeleted−210

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/common_lisp.xmldeleted−184

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/coq.xmldeleted−136

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/core.xmldeleted−79

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/crystal.xmldeleted−762

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/css.xmldeleted−323

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/csv.xmldeleted−53

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cue.xmldeleted−85

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cython.xmldeleted−372

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/d.xmldeleted−133

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dart.xmldeleted−213

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dax.xmldeleted−39

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/desktop_entry.xmldeleted−17

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/devicetree.xmldeleted−251

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/diff.xmldeleted−52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/django_jinja.xmldeleted−153

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dns.xmldeleted−44

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/docker.xmldeleted−68

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dtd.xmldeleted−168

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dylan.xmldeleted−176

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ebnf.xmldeleted−90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/elixir.xmldeleted−744

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/elm.xmldeleted−119

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/emacslisp.xmldeleted−132

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/erb.xmldeleted−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/erlang.xmldeleted−166

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/factor.xmldeleted−412

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fennel.xmldeleted−68

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fish.xmldeleted−159

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/forth.xmldeleted−78

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fortran.xmldeleted−102

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fortranfixed.xmldeleted−71

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fsharp.xmldeleted−245

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gas.xmldeleted−150

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gdscript.xmldeleted−259

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gdscript3.xmldeleted−270

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gemfile_lock.xmldeleted−81

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gettext.xmldeleted−24

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gherkin.xmldeleted−263

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gleam.xmldeleted−100

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/glsl.xmldeleted−65

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gnuplot.xmldeleted−289

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/go_template.xmldeleted−114

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/graphql.xmldeleted−92

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/groff.xmldeleted−90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/groovy.xmldeleted−135

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/handlebars.xmldeleted−147

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hare.xmldeleted−98

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/haskell.xmldeleted−275

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hcl.xmldeleted−143

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hexdump.xmldeleted−189

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hlb.xmldeleted−131

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hlsl.xmldeleted−110

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/holyc.xmldeleted−252

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/html.xmldeleted−159

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hy.xmldeleted−104

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/idris.xmldeleted−216

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/igor.xmldeleted−47

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ini.xmldeleted−52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/io.xmldeleted−71

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/iscdhcpd.xmldeleted−96

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/j.xmldeleted−157

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/janet.xmldeleted−48

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/java.xmldeleted−206

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/javascript.xmldeleted−160

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/json.xmldeleted−117

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jsonata.xmldeleted−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jsonnet.xmldeleted−138

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/julia.xmldeleted−400

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jungle.xmldeleted−98

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/kakoune.xmldeleted−96

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/kdl.xmldeleted−75

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/kotlin.xmldeleted−234

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lateralus.xmldeleted−184

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lean.xmldeleted−56

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lighttpd_configuration_file.xmldeleted−42

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lilypond.xmldeleted−133

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/llvm.xmldeleted−73

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lox.xmldeleted−78

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lua.xmldeleted−158

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/luau.xmldeleted−173

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/makefile.xmldeleted−131

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mako.xmldeleted−120

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mason.xmldeleted−89

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/materialize_sql_dialect.xmldeleted−155

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mathematica.xmldeleted−60

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/matlab.xmldeleted−114

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mcfunction.xmldeleted−138

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/meson.xmldeleted−86

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/metal.xmldeleted−270

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/microcad.xmldeleted−139

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/minizinc.xmldeleted−82

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mlir.xmldeleted−73

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/modelica.xmldeleted−106

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/modula-2.xmldeleted−245

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mojo.xmldeleted−228

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/monkeyc.xmldeleted−153

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/moonbit.xmldeleted−75

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/moonscript.xmldeleted−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/morrowindscript.xmldeleted−90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/myghty.xmldeleted−77

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mysql.xmldeleted−121

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nasm.xmldeleted−126

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/natural.xmldeleted−143

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ndisasm.xmldeleted−123

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/newspeak.xmldeleted−121

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nginx_configuration_file.xmldeleted−101

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nim.xmldeleted−211

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nix.xmldeleted−258

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nsis.xmldeleted−59

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nu.xmldeleted−126

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/objective-c.xmldeleted−510

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/objectpascal.xmldeleted−142

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ocaml.xmldeleted−153

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/octave.xmldeleted−101

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/odin.xmldeleted−127

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/onesenterprise.xmldeleted−92

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/openedge_abl.xmldeleted−101

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/openscad.xmldeleted−96

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/org_mode.xmldeleted−329

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pacmanconf.xmldeleted−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/perl.xmldeleted−400

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/php.xmldeleted−258

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pig.xmldeleted−105

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pkgconfig.xmldeleted−73

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pl_pgsql.xmldeleted−119

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/plaintext.xmldeleted−21

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/plutus_core.xmldeleted−105

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pony.xmldeleted−135

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/postgresql_sql_dialect.xmldeleted−155

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/postscript.xmldeleted−93

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/povray.xmldeleted−58

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/powerquery.xmldeleted−51

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/powershell.xmldeleted−230

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/prolog.xmldeleted−115

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/promela.xmldeleted−119

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/promql.xmldeleted−123

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/properties.xmldeleted−45

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/protocol_buffer.xmldeleted−124

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/prql.xmldeleted−161

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/psl.xmldeleted−213

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/puppet.xmldeleted−100

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/python.xmldeleted−595

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/python_2.xmldeleted−356

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/qbasic.xmldeleted−173

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/qml.xmldeleted−113

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/r.xmldeleted−128

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/racket.xmldeleted−260

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ragel.xmldeleted−149

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/react.xmldeleted−236

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/reasonml.xmldeleted−147

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/reg.xmldeleted−68

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rego.xmldeleted−94

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rexx.xmldeleted−127

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rgbasm.xmldeleted−239

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ring.xmldeleted−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rpgle.xmldeleted−176

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rpm_spec.xmldeleted−58

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ruby.xmldeleted−728

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rust.xmldeleted−375

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sas.xmldeleted−191

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sass.xmldeleted−362

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scala.xmldeleted−274

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scdoc.xmldeleted−115

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scheme.xmldeleted−106

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scilab.xmldeleted−98

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scss.xmldeleted−373

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sed.xmldeleted−92

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sieve.xmldeleted−61

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/smali.xmldeleted−73

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/smalltalk.xmldeleted−294

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/smarty.xmldeleted−79

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/snbt.xmldeleted−58

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/snobol.xmldeleted−95

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/solidity.xmldeleted−291

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sourcepawn.xmldeleted−59

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/spade.xmldeleted−292

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sparql.xmldeleted−160

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sql.xmldeleted−90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/squidconf.xmldeleted−63

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/standard_ml.xmldeleted−548

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/stas.xmldeleted−85

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/stylus.xmldeleted−132

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/swift.xmldeleted−207

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/systemd.xmldeleted−63

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/systemverilog.xmldeleted−181

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tablegen.xmldeleted−69

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tal.xmldeleted−43

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tasm.xmldeleted−135

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tcl.xmldeleted−272

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tcsh.xmldeleted−121

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/templ.xmldeleted−315

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/termcap.xmldeleted−75

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/terminfo.xmldeleted−84

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/terraform.xmldeleted−149

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tex.xmldeleted−113

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/thrift.xmldeleted−154

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/toml.xmldeleted−45

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tradingview.xmldeleted−81

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/transact-sql.xmldeleted−137

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/turing.xmldeleted−82

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/turtle.xmldeleted−170

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/twig.xmldeleted−155

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/txtpb.xmldeleted−162

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typescript.xmldeleted−302

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typoscript.xmldeleted−178

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typoscriptcssdata.xmldeleted−52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typoscripthtmldata.xmldeleted−52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typst.xmldeleted−108

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ucode.xmldeleted−147

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/v.xmldeleted−355

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/v_shell.xmldeleted−365

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vala.xmldeleted−72

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vb_net.xmldeleted−162

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/verilog.xmldeleted−158

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vhdl.xmldeleted−171

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vhs.xmldeleted−48

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/viml.xmldeleted−85

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vue.xmldeleted−295

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/wat.xmldeleted−149

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/wdte.xmldeleted−43

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/webgpu_shading_language.xmldeleted−142

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/webvtt.xmldeleted−283

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/whiley.xmldeleted−57

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/xml.xmldeleted−96

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/xorg.xmldeleted−35

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/yaml.xmldeleted−132

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/yang.xmldeleted−99

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/z80_assembly.xmldeleted−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/zed.xmldeleted−51

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/zig.xmldeleted−187

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/erb.godeleted−29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/gemtext.godeleted−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/genshi.godeleted−118

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/go.godeleted−81

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/haxe.godeleted−647

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/html.godeleted−8

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/http.godeleted−131

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/lexers.godeleted−85

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/markdown.godeleted−107

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/markless.godeleted−168

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/mysql.godeleted−33

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/php.godeleted−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/raku.godeleted−1710

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/rst.godeleted−89

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/svelte.godeleted−70

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/typoscript.godeleted−85

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/yaml_jinja.godeleted−20

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/zed.godeleted−24

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/mutators.godeleted−201

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/pygments-lexers.txtdeleted−605

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/quick/quick.godeleted−44

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/regexp.godeleted−533

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/registry.godeleted−228

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/remap.godeleted−94

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/renovate.json5deleted−25

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/serialise.godeleted−483

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/style.godeleted−530

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/abap.xmldeleted−11

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/algol.xmldeleted−18

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/algol_nu.xmldeleted−18

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/api.godeleted−95

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/arduino.xmldeleted−18

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/ashen.xmldeleted−69

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/aura-theme-dark-soft.xmldeleted−107

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/aura-theme-dark.xmldeleted−107

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/autumn.xmldeleted−36

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/average.xmldeleted−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/base16-snazzy.xmldeleted−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/borland.xmldeleted−26

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/bw.xmldeleted−23

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-frappe.xmldeleted−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-latte.xmldeleted−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-macchiato.xmldeleted−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-mocha.xmldeleted−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/colorful.xmldeleted−52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/compat.godeleted−69

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/darcula.xmldeleted−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/doom-one.xmldeleted−51

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/doom-one2.xmldeleted−64

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/dracula.xmldeleted−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/emacs.xmldeleted−44

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/evergarden.xmldeleted−33

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/friendly.xmldeleted−44

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/fruity.xmldeleted−19

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/github-dark.xmldeleted−46

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/github.xmldeleted−39

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/gruvbox-light.xmldeleted−34

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/gruvbox.xmldeleted−34

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/hr_high_contrast.xmldeleted−12

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/hrdark.xmldeleted−10

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/igor.xmldeleted−9

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/kanagawa-dragon.xmldeleted−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/kanagawa-lotus.xmldeleted−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/kanagawa-wave.xmldeleted−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/lovelace.xmldeleted−53

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/manni.xmldeleted−44

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/modus-operandi.xmldeleted−13

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/modus-vivendi.xmldeleted−13

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/monokai.xmldeleted−29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/monokailight.xmldeleted−26

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/murphy.xmldeleted−52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/native.xmldeleted−35

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/nord.xmldeleted−46

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/nordic.xmldeleted−46

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/onedark.xmldeleted−25

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/onesenterprise.xmldeleted−10

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/paraiso-dark.xmldeleted−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/paraiso-light.xmldeleted−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/pastie.xmldeleted−45

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/perldoc.xmldeleted−37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/pygments.xmldeleted−42

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rainbow_dash.xmldeleted−40

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rose-pine-dawn.xmldeleted−29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rose-pine-moon.xmldeleted−29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rose-pine.xmldeleted−29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rpgle.xmldeleted−30

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rrt.xmldeleted−19

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/solarized-dark.xmldeleted−39

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/solarized-dark256.xmldeleted−41

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/solarized-light.xmldeleted−17

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/swapoff.xmldeleted−18

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/tango.xmldeleted−72

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-day.xmldeleted−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-moon.xmldeleted−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-night.xmldeleted−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-storm.xmldeleted−83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/trac.xmldeleted−35

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/vim.xmldeleted−29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/vs.xmldeleted−16

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/vulcan.xmldeleted−74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/witchhazel.xmldeleted−31

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/xcode-dark.xmldeleted−31

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/xcode.xmldeleted−22

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/table.pydeleted−31

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/test.jsonldeleted−2

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/tokentype_enumer.godeleted−588

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/types.godeleted−357

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/.gitignoredeleted−2

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/LICENSEdeleted−19

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/README.mddeleted−19

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/backward_references.godeleted−185

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/backward_references_hq.godeleted−796

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/bit_cost.godeleted−436

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/bit_reader.godeleted−266

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/bitwriter.godeleted−56

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/block_splitter.godeleted−144

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/block_splitter_command.godeleted−434

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/block_splitter_distance.godeleted−433

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/block_splitter_literal.godeleted−433

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/brotli_bit_stream.godeleted−1435

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/cluster.godeleted−30

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/cluster_command.godeleted−164

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/cluster_distance.godeleted−326

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/cluster_literal.godeleted−326

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/command.godeleted−254

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/compress_fragment.godeleted−834

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/compress_fragment_two_pass.godeleted−775

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/constants.godeleted−77

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/context.godeleted−2176

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/decode.godeleted−2581

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/dictionary.godeleted−122890

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/dictionary_hash.godeleted−32779

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/encode.godeleted−1220

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/encoder.godeleted−177

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/encoder_dict.godeleted−22

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/encoder_fast.godeleted−197

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/entropy_encode.godeleted−592

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/entropy_encode_static.godeleted−4399

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/fast_log.godeleted−290

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/find_match_length.godeleted−45

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/LICENSEdeleted−27

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/README.mddeleted−2

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/gzip.godeleted−65

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/huffman_bit_writer.godeleted−517

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/huffman_code.godeleted−346

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/token.godeleted−80

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/writer.godeleted−66

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/h10.godeleted−287

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/h5.godeleted−214

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/h6.godeleted−216

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/hash.godeleted−342

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/hash_composite.godeleted−93

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/hash_forgetful_chain.godeleted−252

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/hash_longest_match_quickly.godeleted−214

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/hash_rolling.godeleted−168

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/histogram.godeleted−226

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/http.godeleted−189

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/huffman.godeleted−653

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/literal_cost.godeleted−182

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/bargain1.godeleted−212

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/bargain2.godeleted−248

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/bargain3.godeleted−278

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/emitter.godeleted−34

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/m0.godeleted−175

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/m4.godeleted−339

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/matchfinder.godeleted−103

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/pathfinder.godeleted−328

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/textencoder.godeleted−53

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/trio.godeleted−326

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/zdfast.godeleted−258

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/zfast.godeleted−206

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/zm.godeleted−301

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/memory.godeleted−66

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/metablock.godeleted−574

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/metablock_command.godeleted−165

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/metablock_distance.godeleted−165

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/metablock_literal.godeleted−165

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/params.godeleted−37

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/platform.godeleted−103

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/prefix.godeleted−30

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/prefix_dec.godeleted−723

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/quality.godeleted−196

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/reader.godeleted−111

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/ringbuffer.godeleted−134

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/state.godeleted−294

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/static_dict.godeleted−662

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/static_dict_lut.go−75094

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/symbol_list.go−22

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/transform.go−641

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/utf8_util.go−70

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/util.go−7

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/write_bits.go−52

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/writer.go−162

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/.travis.yml−14

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/LICENSE−24

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/README.md−144

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/parser.go−889

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/pseudo_classes.go−458

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/selector.go−586

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/serialize.go−176

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/specificity.go−26

This diff is too big to show here.

vendor/github.com/atotto/clipboard/.travis.yml−22

This diff is too big to show here.

vendor/github.com/atotto/clipboard/LICENSE−27

This diff is too big to show here.

vendor/github.com/atotto/clipboard/README.md−48

This diff is too big to show here.

vendor/github.com/atotto/clipboard/clipboard.go−20

This diff is too big to show here.

vendor/github.com/atotto/clipboard/clipboard_darwin.go−52

This diff is too big to show here.

vendor/github.com/atotto/clipboard/clipboard_plan9.go−42

This diff is too big to show here.

vendor/github.com/atotto/clipboard/clipboard_unix.go−149

This diff is too big to show here.

vendor/github.com/atotto/clipboard/clipboard_windows.go−157

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/NOTICE.txt−3

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/accountid_endpoint_mode.go−18

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/checksum.go−33

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/config.go−254

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/context.go−22

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/credential_cache.go−235

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/credentials.go−234

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/auto.go−38

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/configuration.go−43

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/defaults.go−50

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/doc.go−2

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/defaultsmode.go−95

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/doc.go−62

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/endpoints.go−247

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/errors.go−9

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/from_ptr.go−365

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/logging.go−119

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/logging_generate.go−95

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/metadata.go−213

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/middleware.go−168

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/osname.go−24

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/osname_go115.go−24

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/recursion_detection.go−94

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id.go−27

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id_retriever.go−57

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/user_agent.go−398

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/CHANGELOG.md−203

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/debug.go−144

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/decode.go−218

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/encode.go−167

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/error.go−23

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/headers.go−24

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/middleware.go−71

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/transport.go−13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/transport_go117.go−12

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/header.go−175

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/header_value.go−521

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/message.go−99

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/array.go−61

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/encoder.go−80

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/map.go−78

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/middleware.go−62

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/object.go−68

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/value.go−117

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/restjson/decoder_util.go−85

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/xml/error_utils.go−48

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/none.go−20

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/token_bucket.go−96

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/token_rate_limit.go−83

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/request.go−25

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/restrict_file_permissions.go−21

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive.go−156

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive_ratelimit.go−158

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive_token_bucket.go−83

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/attempt_metrics.go−51

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/doc.go−80

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/errors.go−20

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/jitter_backoff.go−124

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/metadata.go−52

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/middleware.go−487

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/retry.go−103

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/retryable_error.go−228

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/standard.go−343

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/throttle_error.go−60

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/timeout_error.go−52

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retryer.go−127

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/runtime.go−14

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/cache.go−115

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/const.go−40

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/header_rules.go−82

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/headers.go−70

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/hmac.go−13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/host.go−75

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/scope.go−13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/time.go−36

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/util.go−80

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/middleware.go−420

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/presign_middleware.go−127

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/stream.go−86

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/v4.go−564

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/to_ptr.go−297

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/client.go−355

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/content_type.go−42

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/response_error.go−33

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/response_error_middleware.go−56

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/timeout_read_closer.go−109

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/types.go−42

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/version.go−8

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/CHANGELOG.md−1097

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/auth_scheme_preference.go−19

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/config.go−237

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/defaultsmode.go−47

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/doc.go−20

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/env_config.go−966

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/generate.go−4

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/errors.go−22

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/ini.go−56

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/parse.go−109

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/sections.go−157

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/strings.go−89

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/token.go−32

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/tokenize.go−92

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/value.go−93

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/load_options.go−1371

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/local.go−51

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/provider.go−802

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/resolve.go−458

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/resolve_bearer_token.go−122

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/resolve_credentials.go−650

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/shared_config.go−1704

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/CHANGELOG.md−990

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/doc.go−4

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds/doc.go−58

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds/provider.go−241

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/auth.go−48

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/client.go−165

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/endpoints.go−20

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/middleware.go−164

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/provider.go−207

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/dpop.go−150

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/file.go−14

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/provider.go−184

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/token.go−110

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/processcreds/doc.go−92

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/processcreds/provider.go−296

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/doc.go−81

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_cached_token.go−232

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_credentials_provider.go−165

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_token_provider.go−147

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/static_provider.go−63

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/stscreds/assume_role_provider.go−338

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/stscreds/web_identity_provider.go−181

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/CHANGELOG.md−584

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_client.go−358

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetDynamicData.go−77

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetIAMInfo.go−103

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetInstanceIdentityDocument.go−110

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetMetadata.go−77

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetRegion.go−73

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetToken.go−119

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetUserData.go−61

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/auth.go−48

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/doc.go−12

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/endpoints.go−20

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/internal/config/resolvers.go−114

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/request_middleware.go−313

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/token_provider.go−261

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/auth.go−45

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/scheme.go−191

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/bearer_token_adapter.go−43

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/bearer_token_signer_adapter.go−35

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/credentials_adapter.go−46

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/smithy.go−2

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/v4signer_adapter.go−57

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/v4signer_adapter_eventstream.go−51

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/CHANGELOG.md−544

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/config.go−65

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/endpoints.go−57

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/context/context.go−65

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/arn.go−94

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/doc.go−3

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/generate.go−7

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/host.go−51

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partition.go−76

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.go−496

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.json−267

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/endpoints.go−201

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/CHANGELOG.md−519

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/endpoints.go−302

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/rand/rand.go−33

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sdk/interfaces.go−9

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sdk/time.go−74

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sdkio/byte.go−12

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/shareddefaults/shared_config.go−47

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/strings/strings.go−11

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/LICENSE−28

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/docs.go−7

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/singleflight.go−210

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/timeconv/duration.go−13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/CHANGELOG.md−486

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/credentials.go−141

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/error.go−17

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/crypto/compare.go−30

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/crypto/ecc.go−113

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/const.go−36

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/header_rules.go−82

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/headers.go−68

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/hmac.go−13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/host.go−75

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/time.go−36

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/util.go−64

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/middleware.go−118

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/presign_middleware.go−117

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/smithy.go−92

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/v4a.go−520

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/CHANGELOG.md−220

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/accept_encoding_gzip.go−176

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/doc.go−22

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/CHANGELOG.md−571

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/context.go−56

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/doc.go−3

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/middleware.go−110

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/CHANGELOG.md−85

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_client.go−945

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_CreateOAuth2Token.go−212

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_DeleteConsoleAuthorizationConfiguration.go−168

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_DeleteResourcePermissionStatement.go−196

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_GetConsoleAuthorizationConfiguration.go−168

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_GetResourcePolicy.go−155

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_ListResourcePermissionStatements.go−261

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_PutConsoleAuthorizationConfiguration.go−168

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_PutResourcePermissionStatement.go−216

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/auth.go−361

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/deserializers.go−2474

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/doc.go−9

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/endpoints.go−854

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/generated.json−40

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/internal/endpoints/endpoints.go−333

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/options.go−242

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/serializers.go−724

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/types/enums.go−46

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/types/errors.go−247

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/types/types.go−162

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/validators.go−111

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/CHANGELOG.md−792

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_client.go−929

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_GetRoleCredentials.go−165

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_ListAccountRoles.go−263

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_ListAccounts.go−261

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_Logout.go−164

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/auth.go−379

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/deserializers.go−1171

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/doc.go−27

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/endpoints.go−570

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/generated.json−35

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/internal/endpoints/endpoints.go−628

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/options.go−238

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/serializers.go−309

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/types/errors.go−115

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/types/types.go−63

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/validators.go−175

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/CHANGELOG.md−790

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_client.go−929

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_CreateToken.go−235

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_CreateTokenWithIAM.go−282

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_RegisterClient.go−206

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_StartDeviceAuthorization.go−188

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/auth.go−373

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/deserializers.go−2244

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/doc.go−49

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/endpoints.go−570

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/generated.json−36

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/internal/endpoints/endpoints.go−628

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/options.go−238

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/serializers.go−512

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/types/enums.go−44

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/types/errors.go−430

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/types/types.go−25

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/validators.go−184

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/CHANGELOG.md−832

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/LICENSE.txt−202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_client.go−1115

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRole.go−544

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoleWithSAML.go−455

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoleWithWebIdentity.go−472

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoot.go−229

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_DecodeAuthorizationMessage.go−189

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetAccessKeyInfo.go−180

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetCallerIdentity.go−192

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetDelegatedAccessToken.go−169

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetFederationToken.go−393

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetSessionToken.go−239

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetWebIdentityToken.go−192

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/auth.go−377

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/deserializers.go−3456

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/doc.go−13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/endpoints.go−683

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/generated.json−45

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/internal/endpoints/endpoints.go−585

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/options.go−286

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/serializers.go−1198

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/types/errors.go−363

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/types/types.go−144

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/validators.go−433

This diff is too big to show here.

vendor/github.com/aws/smithy-go/.gitignore−29

This diff is too big to show here.

vendor/github.com/aws/smithy-go/.travis.yml−28

This diff is too big to show here.

vendor/github.com/aws/smithy-go/AGENTS.md−172

This diff is too big to show here.

vendor/github.com/aws/smithy-go/CHANGELOG.md−454

This diff is too big to show here.

vendor/github.com/aws/smithy-go/CODE_OF_CONDUCT.md−4

This diff is too big to show here.

vendor/github.com/aws/smithy-go/CONTRIBUTING.md−90

This diff is too big to show here.

vendor/github.com/aws/smithy-go/LICENSE−175

This diff is too big to show here.

vendor/github.com/aws/smithy-go/Makefile−130

This diff is too big to show here.

vendor/github.com/aws/smithy-go/NOTICE−1

This diff is too big to show here.

vendor/github.com/aws/smithy-go/README.md−107

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/auth.go−3

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/bearer/docs.go−3

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/bearer/middleware.go−104

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/bearer/token.go−50

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/bearer/token_cache.go−208

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/identity.go−47

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/option.go−25

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/scheme_id.go−20

This diff is too big to show here.

vendor/github.com/aws/smithy-go/changelog-template.json−9

This diff is too big to show here.

vendor/github.com/aws/smithy-go/context/suppress_expired.go−81

This diff is too big to show here.

vendor/github.com/aws/smithy-go/doc.go−2

This diff is too big to show here.

vendor/github.com/aws/smithy-go/document.go−10

This diff is too big to show here.

vendor/github.com/aws/smithy-go/document/doc.go−12

This diff is too big to show here.

vendor/github.com/aws/smithy-go/document/document.go−239

This diff is too big to show here.

vendor/github.com/aws/smithy-go/document/errors.go−75

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/doc.go−4

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/encoding.go−40

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/httpbinding/encode.go−123

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/httpbinding/header.go−122

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/httpbinding/path_replace.go−108

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/httpbinding/query.go−107

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/httpbinding/uri.go−111

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/array.go−35

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/constants.go−15

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/decoder_util.go−139

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/encoder.go−30

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/escape.go−198

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/object.go−40

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/value.go−154

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/array.go−49

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/constants.go−10

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/doc.go−49

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/element.go−91

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/encoder.go−51

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/error_utils.go−51

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/escape.go−137

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/map.go−53

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/value.go−302

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/xml_decoder.go−154

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/endpoint.go−23

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/bdd/evaluate.go−35

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/doc.go−4

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/split.go−16

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/string_slice.go−18

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/strings.go−25

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/uri.go−133

This diff is too big to show here.

vendor/github.com/aws/smithy-go/errors.go−137

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/const.go−24

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/debug.go−144

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/decode.go−218

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/deserializer.go−294

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/encode.go−167

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/error.go−23

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/header.go−175

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/header_value.go−521

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/message.go−99

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/serializer.go−228

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/signer.go−82

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/types.go−26

This diff is too big to show here.

vendor/github.com/aws/smithy-go/go_module_metadata.go−6

This diff is too big to show here.

vendor/github.com/aws/smithy-go/internal/sync/singleflight/LICENSE−28

This diff is too big to show here.

vendor/github.com/aws/smithy-go/internal/sync/singleflight/docs.go−8

This diff is too big to show here.

vendor/github.com/aws/smithy-go/internal/sync/singleflight/singleflight.go−210

This diff is too big to show here.

vendor/github.com/aws/smithy-go/io/byte.go−12

This diff is too big to show here.

vendor/github.com/aws/smithy-go/io/doc.go−2

This diff is too big to show here.

vendor/github.com/aws/smithy-go/io/reader.go−16

This diff is too big to show here.

vendor/github.com/aws/smithy-go/io/ringbuffer.go−94

This diff is too big to show here.

vendor/github.com/aws/smithy-go/local-mod-replace.sh−39

This diff is too big to show here.

vendor/github.com/aws/smithy-go/logging/logger.go−82

This diff is too big to show here.

vendor/github.com/aws/smithy-go/metrics/metrics.go−136

This diff is too big to show here.

vendor/github.com/aws/smithy-go/metrics/nop.go−98

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/context.go−41

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/doc.go−67

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/eventstream_middleware.go−21

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/logging.go−46

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/metadata.go−65

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/middleware.go−71

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/ordered_group.go−270

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/stack.go−209

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/stack_values.go−100

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/step_build.go−298

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/step_deserialize.go−300

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/step_finalize.go−298

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/step_initialize.go−299

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/step_serialize.go−305

This diff is too big to show here.

vendor/github.com/aws/smithy-go/modman.toml−9

This diff is too big to show here.

vendor/github.com/aws/smithy-go/private/requestcompression/gzip.go−30

This diff is too big to show here.

vendor/github.com/aws/smithy-go/private/requestcompression/middleware_capture_request_compression.go−52

This diff is too big to show here.

vendor/github.com/aws/smithy-go/private/requestcompression/request_compression.go−103

This diff is too big to show here.

vendor/github.com/aws/smithy-go/properties.go−69

This diff is too big to show here.

vendor/github.com/aws/smithy-go/ptr/doc.go−5

This diff is too big to show here.

vendor/github.com/aws/smithy-go/ptr/from_ptr.go−601

This diff is too big to show here.

vendor/github.com/aws/smithy-go/ptr/gen_scalars.go−83

This diff is too big to show here.

vendor/github.com/aws/smithy-go/ptr/to_ptr.go−499

This diff is too big to show here.

vendor/github.com/aws/smithy-go/rand/doc.go−3

This diff is too big to show here.

vendor/github.com/aws/smithy-go/rand/rand.go−31

This diff is too big to show here.

vendor/github.com/aws/smithy-go/rand/uuid.go−87

This diff is too big to show here.

vendor/github.com/aws/smithy-go/schema.go−328

This diff is too big to show here.

vendor/github.com/aws/smithy-go/schema_ext.go−37

This diff is too big to show here.

vendor/github.com/aws/smithy-go/serde.go−229

This diff is too big to show here.

vendor/github.com/aws/smithy-go/sync/error.go−53

This diff is too big to show here.

vendor/github.com/aws/smithy-go/time/time.go−134

This diff is too big to show here.

vendor/github.com/aws/smithy-go/tracing/context.go−96

This diff is too big to show here.

vendor/github.com/aws/smithy-go/tracing/nop.go−32

This diff is too big to show here.

vendor/github.com/aws/smithy-go/tracing/tracing.go−95

This diff is too big to show here.

vendor/github.com/aws/smithy-go/trait.go−21

This diff is too big to show here.

vendor/github.com/aws/smithy-go/traits/http.go−69

This diff is too big to show here.

vendor/github.com/aws/smithy-go/traits/index.go−107

This diff is too big to show here.

vendor/github.com/aws/smithy-go/traits/serde.go−56

This diff is too big to show here.

vendor/github.com/aws/smithy-go/traits/traits.go−72

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/auth.go−30

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/auth_schemes.go−45

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/checksum_middleware.go−70

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/client.go−161

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/doc.go−5

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/eventstream.go−209

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/eventstream_middleware.go−69

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/headerlist.go−163

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/host.go−89

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/interceptor.go−321

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/interceptor_middleware.go−325

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/internal/io/safe.go−75

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/md5_checksum.go−25

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/metrics.go−204

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_close_response_body.go−79

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_content_length.go−84

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_header_comment.go−81

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_headers.go−167

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_http_logging.go−75

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_metadata.go−51

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_min_proto.go−79

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/properties.go−80

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/protocol.go−27

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/request.go−188

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/response.go−34

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/time.go−13

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/url.go−44

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/user_agent.go−37

This diff is too big to show here.

vendor/github.com/aws/smithy-go/type_registry.go−70

This diff is too big to show here.

vendor/github.com/aws/smithy-go/validation.go−140

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/LICENSE-BSD−27

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/LICENSE-MIT−21

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/Makefile−4

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/README.md−142

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/diff.go−177

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/export.go−16

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/common.go−179

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/doc.go−156

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/export.go−11

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/git.sh−33

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/labels.go−55

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/old.go−475

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/sequence.go−70

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/merge.go−81

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/ndiff.go−118

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/unified.go−314

This diff is too big to show here.

vendor/github.com/aymerick/douceur/LICENSE−22

This diff is too big to show here.

vendor/github.com/aymerick/douceur/css/declaration.go−60

This diff is too big to show here.

vendor/github.com/aymerick/douceur/css/rule.go−230

This diff is too big to show here.

vendor/github.com/aymerick/douceur/css/stylesheet.go−25

This diff is too big to show here.

vendor/github.com/aymerick/douceur/parser/parser.go−409

This diff is too big to show here.

vendor/github.com/bahlo/generic-list-go/LICENSE−27

This diff is too big to show here.

vendor/github.com/bahlo/generic-list-go/README.md−5

This diff is too big to show here.

vendor/github.com/bahlo/generic-list-go/list.go−235

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/.codecov.yml−10

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/.gitignore−32

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/LICENSE−22

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/README.md−495

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/UPGRADING.md−63

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/doublestar.go−13

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/glob.go−497

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/globoptions.go−188

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/globwalk.go−438

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/match.go−419

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/utils.go−165

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/utils_unix.go−19

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/utils_windows.go−43

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/validate.go−80

This diff is too big to show here.

vendor/github.com/buger/jsonparser/.gitignore−12

This diff is too big to show here.

vendor/github.com/buger/jsonparser/.travis.yml−12

This diff is too big to show here.

vendor/github.com/buger/jsonparser/Dockerfile−12

This diff is too big to show here.

vendor/github.com/buger/jsonparser/LICENSE−21

This diff is too big to show here.

vendor/github.com/buger/jsonparser/Makefile−36

This diff is too big to show here.

vendor/github.com/buger/jsonparser/README.md−361

This diff is too big to show here.

vendor/github.com/buger/jsonparser/bytes.go−47

This diff is too big to show here.

vendor/github.com/buger/jsonparser/bytes_safe.go−25

This diff is too big to show here.

vendor/github.com/buger/jsonparser/bytes_unsafe.go−44

This diff is too big to show here.

vendor/github.com/buger/jsonparser/escape.go−173

This diff is too big to show here.

vendor/github.com/buger/jsonparser/fuzz.go−117

This diff is too big to show here.

vendor/github.com/buger/jsonparser/oss-fuzz-build.sh−47

This diff is too big to show here.

vendor/github.com/buger/jsonparser/parser.go−1318

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/LICENSE.txt−22

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/README.md−74

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/testall.sh−10

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash.go−243

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s−209

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_arm64.s−183

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_asm.go−15

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_other.go−76

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_safe.go−16

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go−58

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/.gitignore−2

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/LICENSE−21

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/Makefile−101

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/README.md−193

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/adapters.go−102

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/dirent.go−73

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/dirent_portable.go−134

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/dirent_unix.go−146

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/entry_filter_portable.go−37

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/entry_filter_unix.go−59

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/entry_filter_windows.go−156

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/fastwalk.go−697

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/fastwalk_darwin.go−122

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/fastwalk_portable.go−65

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/fastwalk_unix.go−131

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/go.LICENSE−27

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent.go−85

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_aix.go−29

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_dragonfly.go−54

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_freebsd.go−46

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_js.go−27

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_linux.go−50

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_netbsd.go−46

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_openbsd.go−46

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_solaris.go−29

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/doc.go−2

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/fmtdirent/fmtdirent_go120.go−31

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/fmtdirent/fmtdirent_go121.go−15

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/zsyscall_darwin.go−93

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/zsyscall_darwin_amd64.1_13.s−22

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/zsyscall_darwin_arm64.1_13.s−22

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/.gitignore−4

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/.release-please-manifest.json−3

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/.stats.yml−4

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/Brewfile−1

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/CHANGELOG.md−641

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/CONTRIBUTING.md−65

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/LICENSE−8

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/README.md−999

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/SECURITY.md−27

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/aliases.go−72

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/api.md−545

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/bedrock/bedrock.go−295

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/beta.go−374

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betafile.go−273

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betamessage.go−11734

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betamessagebatch.go−925

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betamessageutil.go−459

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betamodel.go−151

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betaskill.go−362

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betaskillversion.go−373

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betatoolrunner.go−435

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/client.go−157

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/completion.go−196

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/field.go−46

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apierror/apierror.go−58

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/encoder.go−473

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/form.go−5

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/richparam.go−21

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/tag.go−51

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/decoder.go−709

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/encoder.go−392

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/enum.go−145

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/field.go−23

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/port.go−120

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/registry.go−59

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/subfield.go−68

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/tag.go−47

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/union.go−209

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/encoder.go−414

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/query.go−55

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/richparam.go−20

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/tag.go−44

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/decode.go−1325

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/encode.go−1396

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/fold.go−48

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/indent.go−182

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/scanner.go−610

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/sentinel/null.go−47

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/shims/shims.go−113

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/stream.go−512

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/tables.go−218

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/tags.go−38

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/time.go−62

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/paramutil/field.go−30

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/paramutil/union.go−49

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/requestconfig/requestconfig.go−638

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/version.go−5

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/message.go−9436

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/messagebatch.go−827

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/messageutil.go−413

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/model.go−151

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/option/middleware.go−38

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/option/requestoption.go−285

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/jsonl/jsonl.go−62

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/pagination/pagination.go−351

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/encoder.go−109

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/null.go−19

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/option.go−122

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/param.go−189

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/respjson/respjson.go−88

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/ssestream/ssestream.go−198

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/release-please-config.json−68

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/schemautil.go−244

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/shared/constant/constants.go−487

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/shared/shared.go−346

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/tools.md−292

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/vertex/vertex.go−134

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/.golangci.yml−47

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/.goreleaser.yml−6

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/README.md−109

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/doc.go−4

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/env.go−294

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/env_other.go−8

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/env_windows.go−40

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/profile.go−108

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/writer.go−171

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/.gitignore−4

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/.release-please-manifest.json−3

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/.stats.yml−4

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/Brewfile−1

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/CHANGELOG.md−1171

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/CONTRIBUTING.md−65

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/LICENSE−201

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/MIGRATION.md−284

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/README.md−1007

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/SECURITY.md−29

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/aliases.go−585

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/api.md−774

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/audio.go−61

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/audiospeech.go−179

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/audiotranscription.go−950

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/audiotranslation.go−120

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/azure/azure.go−269

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/batch.go−464

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/beta.go−36

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betaassistant.go−2284

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betachatkit.go−125

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betachatkitsession.go−83

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betachatkitthread.go−1564

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betathread.go−1574

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betathreadmessage.go−1717

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betathreadrun.go−974

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betathreadrunstep.go−1396

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/chat.go−30

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/chatcompletion.go−3521

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/chatcompletionmessage.go−100

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/client.go−185

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/completion.go−436

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/container.go−648

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/containerfile.go−287

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/containerfilecontent.go−50

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/conversations/aliases.go−585

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/conversations/api.md−31

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/conversations/conversation.go−493

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/conversations/item.go−1082

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/embedding.go−207

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/field.go−45

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/file.go−352

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuning.go−35

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningalpha.go−29

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningalphagrader.go−675

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningcheckpoint.go−29

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningcheckpointpermission.go−352

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningjob.go−884

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningjobcheckpoint.go−152

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningmethod.go−1487

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/grader.go−28

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/gradergradermodel.go−1753

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/image.go−1337

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apierror/apierror.go−58

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiform/encoder.go−473

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiform/form.go−5

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiform/richparam.go−20

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiform/tag.go−72

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/decoder.go−688

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/encoder.go−371

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/enum.go−140

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/field.go−23

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/port.go−120

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/registry.go−51

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/subfield.go−67

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/tag.go−69

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/union.go−208

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiquery/encoder.go−394

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiquery/query.go−55

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiquery/richparam.go−20

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiquery/tag.go−44

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/decode.go−1324

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/encode.go−1396

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/fold.go−48

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/indent.go−182

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/scanner.go−610

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/sentinel/null.go−46

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/shims/shims.go−113

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/stream.go−512

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/tables.go−218

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/tags.go−38

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/time.go−61

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/paramutil/field.go−30

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/paramutil/union.go−48

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/requestconfig/requestconfig.go−644

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/version.go−5

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/model.go−137

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/moderation.go−489

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/option/middleware.go−38

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/option/requestoption.go−299

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/pagination/pagination.go−329

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/param/encoder.go−109

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/param/null.go−19

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/param/option.go−122

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/param/param.go−186

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/respjson/respjson.go−88

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/ssestream/ssestream.go−247

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/polling.go−129

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/realtime/aliases.go−585

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/realtime/api.md−55

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/realtime/call.go−133

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/realtime/clientsecret.go−1826

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/realtime/realtime.go−1979

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/release-please-config.json−68

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/responses/aliases.go−585

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/responses/api.md−240

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/responses/inputitem.go−135

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/responses/inputtoken.go−336

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/responses/response.go−21786

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/shared/constant/constants.go−1143

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/shared/shared.go−1183

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/skill.go−292

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/skillcontent.go−46

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/skillversion.go−283

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/skillversioncontent.go−50

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/streamaccumulator.go−215

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/upload.go−238

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/uploadpart.go−115

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/vectorstore.go−911

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/vectorstorefile.go−535

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/vectorstorefilebatch.go−427

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/video.go−677

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/webhooks/aliases.go−585

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/webhooks/api.md−20

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/webhooks/webhook.go−1306

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/.gitattributes−1

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/.golangci.yml−48

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/.goreleaser.yml−5

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/README.md−161

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/TUTORIAL.md−175

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/border.go−231

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/buffer.go−831

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/cancelreader_other.go−16

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/cancelreader_windows.go−139

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/cell.go−465

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/console.go−219

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/console_unix.go−13

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/console_windows.go−13

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/cursor.go−22

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/decoder.go−2102

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/doc.go−46

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/environ.go−32

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/event.go−567

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/internal/casso/math.go−172

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/internal/casso/solver.go−275

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/internal/lru/lru.go−69

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/key.go−762

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/key_table.go−664

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/layout/cache.go−29

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/layout/constraint.go−174

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/layout/flex.go−210

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/layout/layout.go−973

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/layout/padding.go−66

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/logger.go−6

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/mouse.go−150

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll.go−38

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_bsd.go−165

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_default.go−12

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_fallback.go−158

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_linux.go−175

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_select.go−156

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_solaris.go−12

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_windows.go−217

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/screen/context.go−379

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/screen/screen.go−117

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/styled.go−337

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/tabstop.go−142

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal.go−394

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_bsdly.go−10

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_bsdly_other.go−8

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_other.go−22

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_reader.go−503

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_reader_other.go−13

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_reader_windows.go−336

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_renderer.go−1639

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_renderer_hardscroll.go−243

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_renderer_hashmap.go−298

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_screen.go−837

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_tabdly.go−10

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_tabdly_other.go−8

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_unix.go−56

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_windows.go−77

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/tty.go−42

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/tty_other.go−26

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/tty_unix.go−39

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/tty_windows.go−39

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/utils.go−15

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/uv.go−406

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/winch.go−62

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/winch_other.go−17

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/winch_unix.go−50

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/window.go−147

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/ansi.go−11

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/ascii.go−8

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/background.go−178

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/c0.go−79

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/c1.go−72

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/charset.go−55

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/clipboard.go−75

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/color.go−784

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/ctrl.go−156

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/cursor.go−637

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/cwd.go−26

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/doc.go−7

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/finalterm.go−67

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/focus.go−9

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/graphics.go−62

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/hyperlink.go−28

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/inband.go−24

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/iterm2.go−18

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/keypad.go−28

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty.go−90

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty/decoder.go−86

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty/encoder.go−64

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty/graphics.go−414

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty/options.go−373

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty/writer.go−187

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/method.go−196

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/mode.go−690

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/mode_deprecated.go−495

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/modes.go−65

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/mouse.go−172

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/notification.go−32

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/palette.go−34

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser.go−417

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser/const.go−79

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser/seq.go−136

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser/transition_table.go−273

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser_decode.go−525

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser_handler.go−60

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser_sync.go−29

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/passthrough.go−60

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/paste.go−7

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/progress.go−49

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/reset.go−11

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/screen.go−410

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/sgr.go−79

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/status.go−168

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/style.go−819

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/termcap.go−41

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/title.go−48

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/truncate.go−290

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/urxvt.go−17

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/util.go−92

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/width.go−107

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/winop.go−59

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/wrap.go−472

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/xterm.go−138

This diff is too big to show here.

vendor/github.com/charmbracelet/x/editor/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/editor/editor.go−140

This diff is too big to show here.

vendor/github.com/charmbracelet/x/etag/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/etag/etag.go−48

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/charmtone/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/charmtone/charmtone.go−443

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/golden/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/golden/golden.go−83

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/ordered/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/ordered/ordered.go−42

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/slice/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/slice/slice.go−148

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/strings/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/strings/contains.go−16

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/strings/join.go−134

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/config/config.go−118

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/config/lsps.json−367

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/config/overrides.go−85

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/client.go−875

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/language.go−158

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol.go−50

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/LICENSE−27

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/interface.go−132

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/pattern_interfaces.go−79

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tables.go−31

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tsdocument-changes.go−83

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tsjson.go−3072

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tsprotocol.go−6963

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/uri.go−192

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/sync.go−240

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/types.go−93

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/transport/connection.go−130

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/transport/router.go−107

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/transport/transport.go−214

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term.go−51

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_other.go−39

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_plan9.go−118

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_unix.go−96

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_unix_bsd.go−11

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_unix_other.go−11

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_windows.go−87

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/terminal.go−12

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/util.go−47

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/bit_bsd.go−7

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/bit_darwin.go−7

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/bit_other.go−7

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/syscalls_bsd.go−11

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/syscalls_darwin.go−10

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/syscalls_linux.go−14

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/termios.go−249

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/termios_bsd.go−13

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/termios_linux.go−13

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/termios_other.go−15

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/termios_solaris.go−26

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/LICENSE−21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/doc.go−4

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/syscall_windows.go−14

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/types.go−221

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/types_windows.go−142

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/zsyscall_windows.go−77

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/.gitignore−3

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/AGENTS.md−51

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/CHANGELOG.md−129

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/LICENSE−21

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/README.md−190

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/gen.go−3

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/graphemes.go−73

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/options.go−30

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/trie.go−1699

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/truncate.go−149

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/width.go−239

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/LICENSE−21

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/README.md−120

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/ansi.go−138

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/ansi8.go−79

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/iterator.go−144

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/reader.go−25

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/splitfunc.go−205

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/trie.go−1717

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/README.md−121

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/bleve_compat.go−104

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/iterator.go−126

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/joiners.go−41

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/reader.go−34

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/seek.go−43

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/splitfunc.go−269

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/trie.go−3774

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/.golangci.yml−60

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/CHANGELOG.md−453

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/COPYING.md−447

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/LICENSE.BSD−28

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/LICENSE.MPL-2.0−373

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/README.md−184

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/VERSION−1

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/codecov.yml−29

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/doc.go−47

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/internal/consts/consts.go−15

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/join.go−169

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/vfs.go−37

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/LICENSE−15

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/bypass.go−145

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/bypasssafe.go−38

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/common.go−341

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/config.go−306

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/doc.go−211

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/dump.go−509

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/format.go−419

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/spew.go−148

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/.gitignore−29

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/LICENSE.md−22

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/README.md−182

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/helper.go−36

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/id.go−45

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/id_bsd.go−42

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/id_darwin.go−37

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/id_linux.go−27

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/id_windows.go−23

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/logo.png

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/makefile−12

This diff is too big to show here.

vendor/github.com/disintegration/imaging/.travis.yml−12

This diff is too big to show here.

vendor/github.com/disintegration/imaging/LICENSE−21

This diff is too big to show here.

vendor/github.com/disintegration/imaging/README.md−226

This diff is too big to show here.

vendor/github.com/disintegration/imaging/adjust.go−253

This diff is too big to show here.

vendor/github.com/disintegration/imaging/convolution.go−148

This diff is too big to show here.

vendor/github.com/disintegration/imaging/doc.go−7

This diff is too big to show here.

vendor/github.com/disintegration/imaging/effects.go−169

This diff is too big to show here.

vendor/github.com/disintegration/imaging/histogram.go−52

This diff is too big to show here.

vendor/github.com/disintegration/imaging/io.go−444

This diff is too big to show here.

vendor/github.com/disintegration/imaging/resize.go−595

This diff is too big to show here.

vendor/github.com/disintegration/imaging/scanner.go−285

This diff is too big to show here.

vendor/github.com/disintegration/imaging/tools.go−249

This diff is too big to show here.

vendor/github.com/disintegration/imaging/transform.go−268

This diff is too big to show here.

vendor/github.com/disintegration/imaging/utils.go−167

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/.gitignore−29

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/ATTRIB−133

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/LICENSE−21

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/README.md−283

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/Taskfile.yml−64

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/bufferpool.go−76

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/fastclock.go−141

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/helpers/indexof.go−394

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/helpers/math.go−15

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/helpers/runes.go−58

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/helpers/searchvalues.go−180

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/match.go−455

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/options.go−157

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/regexp.go−717

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/regexp_codegen.go−70

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/replace.go−357

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/runner.go−2197

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/split.go−67

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/stringprefixfilter.go−375

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/charclass.go−1507

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/code.go−316

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/escape.go−94

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/fuzz.go−21

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/optimizations.go−672

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/parser.go−2529

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/prefix.go−943

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/prefixanalyzer.go−1491

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/replacerdata.go−87

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/tree.go−2362

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/unicode_alias_tables.go−6058

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/writer.go−500

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/.travis.yml−21

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/LICENSE−21

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/README.markdown−124

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/big.go−31

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/bigbytes.go−189

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/bytes.go−143

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/comma.go−116

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/commaf.go−41

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/ftoa.go−49

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/humanize.go−8

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/number.go−192

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/ordinals.go−25

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/si.go−127

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/times.go−117

This diff is too big to show here.

vendor/github.com/ebitengine/purego/.gitignore−1

This diff is too big to show here.

vendor/github.com/ebitengine/purego/LICENSE−201

This diff is too big to show here.

vendor/github.com/ebitengine/purego/README.md−119

This diff is too big to show here.

vendor/github.com/ebitengine/purego/abi_amd64.h−99

This diff is too big to show here.

vendor/github.com/ebitengine/purego/abi_arm64.h−39

This diff is too big to show here.

vendor/github.com/ebitengine/purego/abi_loong64.h−60

This diff is too big to show here.

vendor/github.com/ebitengine/purego/cgo.go−19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlerror.go−17

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn.go−99

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_android.go−34

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_darwin.go−20

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_freebsd.go−14

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_linux.go−16

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_netbsd.go−15

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_nocgo_freebsd.go−11

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_nocgo_linux.go−19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_nocgo_netbsd.go−9

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_playground.go−24

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_stubs.s−22

This diff is too big to show here.

vendor/github.com/ebitengine/purego/func.go−564

This diff is too big to show here.

vendor/github.com/ebitengine/purego/gen.go−6

This diff is too big to show here.

vendor/github.com/ebitengine/purego/go_runtime.go−13

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/cgo/dlfcn_cgo_unix.go−56

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/cgo/empty.go−6

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/cgo/syscall_cgo_unix.go−55

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/abi_amd64.h−99

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/abi_arm64.h−39

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/abi_loong64.h−60

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/abi_ppc64x.h−195

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_386.s−29

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_amd64.s−39

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_arm.s−52

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_arm64.s−36

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_loong64.s−40

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_ppc64le.s−82

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_riscv64.s−78

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_s390x.s−55

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/callbacks.go−93

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/doc.go−32

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/fakecgo.go−14

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/freebsd.go−27

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_darwin.go−88

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_freebsd.go−100

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_libinit.go−72

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_linux.go−100

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_netbsd.go−106

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_setenv.go−18

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_util.go−38

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/iscgo.go−19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo.go−39

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_darwin.go−26

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_freebsd.go−20

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_linux.go−20

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_netbsd.go−26

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/netbsd.go−23

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/setenv.go−19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_386.s−107

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_amd64.s−107

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_arm.s−81

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_arm64.s−84

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_loong64.s−88

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_ppc64le.s−227

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_riscv64.s−72

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols.go−165

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_darwin.go−59

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_freebsd.go−48

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_linux.go−48

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_netbsd.go−59

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_darwin.s−19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_freebsd.s−16

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_linux.s−16

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_netbsd.s−19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_stubs.s−55

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/strings/strings.go−40

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/xreflect/reflect_go124.go−15

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/xreflect/reflect_go125.go−12

This diff is too big to show here.

vendor/github.com/ebitengine/purego/is_ios.go−13

This diff is too big to show here.

vendor/github.com/ebitengine/purego/nocgo.go−25

This diff is too big to show here.

vendor/github.com/ebitengine/purego/objc/objc_block_darwin.go−272

This diff is too big to show here.

vendor/github.com/ebitengine/purego/objc/objc_runtime_darwin.go−709

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_386.go−41

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_amd64.go−286

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_arm.go−85

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_arm64.go−549

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_loong64.go−213

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_ppc64le.go−143

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_riscv64.go−143

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_s390x.go−143

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_386.s−147

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_amd64.s−170

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_arm.s−142

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_arm64.s−97

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_loong64.s−96

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_ppc64le.s−120

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_riscv64.s−101

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_s390x.s−114

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_386.s−226

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_arm.s−89

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_arm64.s−70

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_loong64.s−75

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_ppc64le.s−114

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_riscv64.s−79

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_s390x.s−109

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall.go−83

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall_32bit.go−109

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall_cgo_linux.go−21

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall_sysv.go−317

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall_sysv_others.go−28

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall_sysv_stackargs.go−33

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall_windows.go−46

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_386.s−4014

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_amd64.s−2014

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_arm.s−4014

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_arm64.s−4014

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_loong64.s−4014

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_ppc64le.s−4014

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_riscv64.s−4051

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_s390x.s−4015

This diff is too big to show here.

vendor/github.com/esiqveland/notify/.gitignore−1

This diff is too big to show here.

vendor/github.com/esiqveland/notify/LICENSE.txt−27

This diff is too big to show here.

vendor/github.com/esiqveland/notify/README.md−54

This diff is too big to show here.

vendor/github.com/esiqveland/notify/doc.go−18

This diff is too big to show here.

vendor/github.com/esiqveland/notify/notification.go−547

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/.gitignore

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/LICENSE.txt−19

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/Makefile−10

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/README.md−95

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/capture_metrics.go−121

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/docs.go−10

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/wrap_generated.go−16179

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/.cirrus.yml−14

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/.gitignore−10

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/.mailmap−2

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/CHANGELOG.md−602

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/CONTRIBUTING.md−145

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/LICENSE−25

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/README.md−182

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/backend_fen.go−467

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/backend_inotify.go−583

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/backend_kqueue.go−705

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/backend_other.go−22

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/backend_windows.go−680

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/fsnotify.go−496

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/darwin.go−39

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/debug_darwin.go−57

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/debug_dragonfly.go−33

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/debug_freebsd.go−42

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/debug_kqueue.go−32

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/debug_linux.go−56

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/debug_netbsd.go−25

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/debug_openbsd.go−28

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/debug_solaris.go−45

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/debug_windows.go−40

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/freebsd.go−31

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/internal.go−2

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/unix.go−31

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/unix2.go−7

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/windows.go−41

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/shared.go−64

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/staticcheck.conf−3

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/system_bsd.go−7

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/system_darwin.go−8

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/LICENSE−23

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/README.md−41

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/alert_darwin.go−8

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/alert_js.go−12

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/alert_unix.go−17

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/alert_unsupported.go−8

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/alert_windows.go−43

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/beeep.go−55

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/beep_darwin.go−32

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/beep_js.go−39

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/beep_unix.go−100

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/beep_unsupported.go−15

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/beep_windows.go−52

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/notify_darwin.go−131

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/notify_js.go−63

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/notify_unix.go−181

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/notify_unix_nodbus.go−78

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/notify_unsupported.go−8

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/notify_windows.go−157

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/notify_windows_compat.go−109

This diff is too big to show here.

vendor/github.com/go-git/gcfg/.gitignore−1

This diff is too big to show here.

vendor/github.com/go-git/gcfg/LICENSE−28

This diff is too big to show here.

vendor/github.com/go-git/gcfg/Makefile−17

This diff is too big to show here.

vendor/github.com/go-git/gcfg/README−4

This diff is too big to show here.

vendor/github.com/go-git/gcfg/doc.go−145

This diff is too big to show here.

vendor/github.com/go-git/gcfg/errors.go−41

This diff is too big to show here.

vendor/github.com/go-git/gcfg/read.go−273

This diff is too big to show here.

vendor/github.com/go-git/gcfg/scanner/errors.go−121

This diff is too big to show here.

vendor/github.com/go-git/gcfg/scanner/scanner.go−334

This diff is too big to show here.

vendor/github.com/go-git/gcfg/set.go−334

This diff is too big to show here.

vendor/github.com/go-git/gcfg/token/position.go−435

This diff is too big to show here.

vendor/github.com/go-git/gcfg/token/serialize.go−56

This diff is too big to show here.

vendor/github.com/go-git/gcfg/token/token.go−83

This diff is too big to show here.

vendor/github.com/go-git/gcfg/types/bool.go−23

This diff is too big to show here.

vendor/github.com/go-git/gcfg/types/doc.go−4

This diff is too big to show here.

vendor/github.com/go-git/gcfg/types/enum.go−44

This diff is too big to show here.

vendor/github.com/go-git/gcfg/types/int.go−86

This diff is too big to show here.

vendor/github.com/go-git/gcfg/types/scan.go−23

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/.gitignore−4

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/LICENSE−201

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/Makefile−18

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/README.md−77

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/fs.go−210

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/helper/chroot/chroot.go−444

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/helper/polyfill/polyfill.go−114

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/memfs/memory.go−428

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/memfs/storage.go−251

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/osfs/os.go−132

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/osfs/os_bound.go−351

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/osfs/os_chroot.go−126

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/osfs/os_js.go−25

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/osfs/os_options.go−3

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/osfs/os_plan9.go−91

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/osfs/os_posix.go−38

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/osfs/os_wasip1.go−34

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/osfs/os_windows.go−58

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/util/glob.go−111

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/util/util.go−282

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/util/walk.go−72

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/LICENSE−201

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/config/branch.go−123

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/config/config.go−727

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/config/modules.go−191

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/config/optbool.go−82

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/config/refspec.go−155

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/config/url.go−81

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/internal/path_util/path_util.go−29

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/internal/pathutil/dotgit.go−21

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/internal/pathutil/hfs.go−99

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/internal/pathutil/ntfs.go−187

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/internal/pathutil/tree.go−66

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/internal/url/url.go−72

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/error.go−35

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/config/common.go−109

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/config/decoder.go−37

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/config/doc.go−122

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/config/encoder.go−82

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/config/format.go−53

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/config/option.go−127

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/config/section.go−181

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore/dir.go−148

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore/doc.go−70

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore/matcher.go−30

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore/pattern.go−155

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/hash.go−84

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/hash/hash.go−60

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/hash/hash_sha1.go−15

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/hash/hash_sha256.go−15

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/memory.go−72

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/object.go−111

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/reference.go−315

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/revision.go−11

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/utils/ioutil/common.go−210

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/AUTHORS−3

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/CONTRIBUTORS−3

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/LICENSE−27

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/README.md−176

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/alias.go−943

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/api.png

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/arshal.go−569

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/arshal_any.go−289

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/arshal_default.go−2043

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/arshal_embedded.go−230

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/arshal_funcs.go−428

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/arshal_methods.go−378

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/arshal_time.go−795

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/doc.go−247

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/errors.go−465

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/fields.go−656

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/fold.go−58

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/intern.go−88

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/internal/internal.go−42

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/internal/jsonflags/flags.go−223

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/internal/jsonopts/options.go−217

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/internal/jsonopts/options_format.go−124

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/internal/jsonwire/decode.go−606

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/internal/jsonwire/encode.go−290

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/internal/jsonwire/wire.go−209

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/jsontext/alias.go−555

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/jsontext/decode.go−1218

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/jsontext/doc.go−111

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/jsontext/encode.go−993

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/jsontext/errors.go−213

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/jsontext/export.go−91

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/jsontext/options.go−304

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/jsontext/pools.go−164

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/jsontext/quote.go−41

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/jsontext/state.go−828

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/jsontext/token.go−697

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/jsontext/value.go−414

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/migrate.sh−60

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/options.go−290

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/options_format.go−122

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/options_format_global.go−30

This diff is too big to show here.

vendor/github.com/go-logfmt/logfmt/.gitignore−1

This diff is too big to show here.

vendor/github.com/go-logfmt/logfmt/CHANGELOG.md−82

This diff is too big to show here.

vendor/github.com/go-logfmt/logfmt/LICENSE−22

This diff is too big to show here.

vendor/github.com/go-logfmt/logfmt/README.md−41

This diff is too big to show here.

vendor/github.com/go-logfmt/logfmt/decode.go−254

This diff is too big to show here.

vendor/github.com/go-logfmt/logfmt/doc.go−6

This diff is too big to show here.

vendor/github.com/go-logfmt/logfmt/encode.go−322

This diff is too big to show here.

vendor/github.com/go-logfmt/logfmt/jsonstring.go−277

This diff is too big to show here.

vendor/github.com/go-logr/logr/.golangci.yaml−28

This diff is too big to show here.

vendor/github.com/go-logr/logr/CHANGELOG.md−6

This diff is too big to show here.

vendor/github.com/go-logr/logr/CONTRIBUTING.md−17

This diff is too big to show here.

vendor/github.com/go-logr/logr/LICENSE−201

This diff is too big to show here.

vendor/github.com/go-logr/logr/README.md−407

This diff is too big to show here.

vendor/github.com/go-logr/logr/SECURITY.md−18

This diff is too big to show here.

vendor/github.com/go-logr/logr/context.go−33

This diff is too big to show here.

vendor/github.com/go-logr/logr/context_noslog.go−49

This diff is too big to show here.

vendor/github.com/go-logr/logr/context_slog.go−83

This diff is too big to show here.

vendor/github.com/go-logr/logr/discard.go−24

This diff is too big to show here.

vendor/github.com/go-logr/logr/funcr/funcr.go−914

This diff is too big to show here.

vendor/github.com/go-logr/logr/funcr/slogsink.go−105

This diff is too big to show here.

vendor/github.com/go-logr/logr/logr.go−520

This diff is too big to show here.

vendor/github.com/go-logr/logr/sloghandler.go−192

This diff is too big to show here.

vendor/github.com/go-logr/logr/slogr.go−100

This diff is too big to show here.

vendor/github.com/go-logr/logr/slogsink.go−120

This diff is too big to show here.

vendor/github.com/go-logr/stdr/LICENSE−201

This diff is too big to show here.

vendor/github.com/go-logr/stdr/README.md−6

This diff is too big to show here.

vendor/github.com/go-logr/stdr/stdr.go−170

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/.travis.yml−8

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/ChangeLog.md−49

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/LICENSE−21

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/README.md−46

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/SECURITY.md−13

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/appveyor.yml−68

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/com.go−386

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/com_func.go−174

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/connect.go−192

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/constants.go−153

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/error.go−51

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/error_func.go−8

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/error_windows.go−24

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/guid.go−284

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/iconnectionpoint.go−20

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/iconnectionpoint_func.go−21

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/iconnectionpoint_windows.go−43

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/iconnectionpointcontainer.go−17

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/iconnectionpointcontainer_func.go−11

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/iconnectionpointcontainer_windows.go−25

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/idispatch.go−94

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/idispatch_func.go−19

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/idispatch_windows.go−203

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/ienumvariant.go−19

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/ienumvariant_func.go−19

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/ienumvariant_windows.go−63

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/iinspectable.go−18

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/iinspectable_func.go−15

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/iinspectable_windows.go−72

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/iprovideclassinfo.go−21

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/iprovideclassinfo_func.go−7

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/iprovideclassinfo_windows.go−21

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/itypeinfo.go−34

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/itypeinfo_func.go−7

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/itypeinfo_windows.go−21

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/iunknown.go−57

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/iunknown_func.go−19

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/iunknown_windows.go−58

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/ole.go−190

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/safearray.go−27

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/safearray_func.go−211

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/safearray_windows.go−337

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/safearrayconversion.go−140

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/safearrayslices.go−33

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/utility.go−101

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/variables.go−15

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/variant.go−105

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/variant_386.go−11

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/variant_amd64.go−12

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/variant_arm.go−11

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/variant_arm64.go−13

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/variant_date_386.go−22

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/variant_date_amd64.go−20

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/variant_date_arm.go−22

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/variant_date_arm64.go−23

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/variant_ppc64le.go−12

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/variant_s390x.go−12

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/vt_string.go−58

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/winrt.go−99

This diff is too big to show here.

vendor/github.com/go-ole/go-ole/winrt_doc.go−36

This diff is too big to show here.

vendor/github.com/go-openapi/jsonpointer/.editorconfig−26

This diff is too big to show here.

vendor/github.com/go-openapi/jsonpointer/.gitignore−1

This diff is too big to show here.

vendor/github.com/go-openapi/jsonpointer/.travis.yml−15

This diff is too big to show here.

vendor/github.com/go-openapi/jsonpointer/CODE_OF_CONDUCT.md−74

This diff is too big to show here.

vendor/github.com/go-openapi/jsonpointer/LICENSE−202

This diff is too big to show here.

vendor/github.com/go-openapi/jsonpointer/README.md−15

This diff is too big to show here.

vendor/github.com/go-openapi/jsonpointer/pointer.go−390

This diff is too big to show here.

vendor/github.com/go-openapi/jsonreference/.gitignore−1

This diff is too big to show here.

vendor/github.com/go-openapi/jsonreference/.golangci.yml−41

This diff is too big to show here.

vendor/github.com/go-openapi/jsonreference/.travis.yml−24

This diff is too big to show here.

vendor/github.com/go-openapi/jsonreference/CODE_OF_CONDUCT.md−74

This diff is too big to show here.

vendor/github.com/go-openapi/jsonreference/LICENSE−202

This diff is too big to show here.

vendor/github.com/go-openapi/jsonreference/README.md−15

This diff is too big to show here.

vendor/github.com/go-openapi/jsonreference/internal/normalize_url.go−63

This diff is too big to show here.

vendor/github.com/go-openapi/jsonreference/reference.go−158

This diff is too big to show here.

vendor/github.com/go-openapi/spec/.editorconfig−26

This diff is too big to show here.

vendor/github.com/go-openapi/spec/.gitignore−2

This diff is too big to show here.

vendor/github.com/go-openapi/spec/.golangci.yml−42

This diff is too big to show here.

vendor/github.com/go-openapi/spec/.travis.yml−31

This diff is too big to show here.

vendor/github.com/go-openapi/spec/CODE_OF_CONDUCT.md−74

This diff is too big to show here.

vendor/github.com/go-openapi/spec/LICENSE−202

This diff is too big to show here.

vendor/github.com/go-openapi/spec/README.md−34

This diff is too big to show here.

vendor/github.com/go-openapi/spec/bindata.go−297

This diff is too big to show here.

vendor/github.com/go-openapi/spec/cache.go−98

This diff is too big to show here.

vendor/github.com/go-openapi/spec/contact_info.go−57

This diff is too big to show here.

vendor/github.com/go-openapi/spec/debug.go−49

This diff is too big to show here.

vendor/github.com/go-openapi/spec/errors.go−19

This diff is too big to show here.

vendor/github.com/go-openapi/spec/expander.go−594

This diff is too big to show here.

vendor/github.com/go-openapi/spec/external_docs.go−24

This diff is too big to show here.

vendor/github.com/go-openapi/spec/header.go−203

This diff is too big to show here.

vendor/github.com/go-openapi/spec/info.go−165

This diff is too big to show here.

vendor/github.com/go-openapi/spec/items.go−234

This diff is too big to show here.

vendor/github.com/go-openapi/spec/license.go−56

This diff is too big to show here.

vendor/github.com/go-openapi/spec/normalizer.go−203

This diff is too big to show here.

vendor/github.com/go-openapi/spec/normalizer_nonwindows.go−43

This diff is too big to show here.

vendor/github.com/go-openapi/spec/normalizer_windows.go−154

This diff is too big to show here.

vendor/github.com/go-openapi/spec/operation.go−397

This diff is too big to show here.

vendor/github.com/go-openapi/spec/parameter.go−326

This diff is too big to show here.

vendor/github.com/go-openapi/spec/path_item.go−87

This diff is too big to show here.

vendor/github.com/go-openapi/spec/paths.go−97

This diff is too big to show here.

vendor/github.com/go-openapi/spec/properties.go−91

This diff is too big to show here.

vendor/github.com/go-openapi/spec/ref.go−193

This diff is too big to show here.

vendor/github.com/go-openapi/spec/resolver.go−127

This diff is too big to show here.

vendor/github.com/go-openapi/spec/response.go−152

This diff is too big to show here.

vendor/github.com/go-openapi/spec/responses.go−127

This diff is too big to show here.

vendor/github.com/go-openapi/spec/schema.go−646

This diff is too big to show here.

vendor/github.com/go-openapi/spec/schema_loader.go−338

This diff is too big to show here.

vendor/github.com/go-openapi/spec/security_scheme.go−170

This diff is too big to show here.

vendor/github.com/go-openapi/spec/spec.go−78

This diff is too big to show here.

vendor/github.com/go-openapi/spec/swagger.go−448

This diff is too big to show here.

vendor/github.com/go-openapi/spec/tag.go−75

This diff is too big to show here.

vendor/github.com/go-openapi/spec/validations.go−215

This diff is too big to show here.

vendor/github.com/go-openapi/spec/xml_object.go−68

This diff is too big to show here.

vendor/github.com/go-openapi/swag/.editorconfig−26

This diff is too big to show here.

vendor/github.com/go-openapi/swag/.gitignore−4

This diff is too big to show here.

vendor/github.com/go-openapi/swag/.golangci.yml−41

This diff is too big to show here.

vendor/github.com/go-openapi/swag/.travis.yml−37

This diff is too big to show here.

vendor/github.com/go-openapi/swag/CODE_OF_CONDUCT.md−74

This diff is too big to show here.

vendor/github.com/go-openapi/swag/LICENSE−202

This diff is too big to show here.

vendor/github.com/go-openapi/swag/README.md−21

This diff is too big to show here.

vendor/github.com/go-openapi/swag/convert.go−208

This diff is too big to show here.

vendor/github.com/go-openapi/swag/convert_types.go−730

This diff is too big to show here.

vendor/github.com/go-openapi/swag/doc.go−32

This diff is too big to show here.

vendor/github.com/go-openapi/swag/json.go−312

This diff is too big to show here.

vendor/github.com/go-openapi/swag/loading.go−120

This diff is too big to show here.

vendor/github.com/go-openapi/swag/name_lexem.go−87

This diff is too big to show here.

vendor/github.com/go-openapi/swag/net.go−38

This diff is too big to show here.

vendor/github.com/go-openapi/swag/path.go−59

This diff is too big to show here.

vendor/github.com/go-openapi/swag/post_go18.go−23

This diff is too big to show here.

vendor/github.com/go-openapi/swag/post_go19.go−67

This diff is too big to show here.

vendor/github.com/go-openapi/swag/pre_go18.go−23

This diff is too big to show here.

vendor/github.com/go-openapi/swag/pre_go19.go−69

This diff is too big to show here.

vendor/github.com/go-openapi/swag/split.go−262

This diff is too big to show here.

vendor/github.com/go-openapi/swag/util.go−385

This diff is too big to show here.

vendor/github.com/go-openapi/swag/yaml.go−246

This diff is too big to show here.

vendor/github.com/go-viper/mapstructure/v2/.editorconfig−24

This diff is too big to show here.

vendor/github.com/go-viper/mapstructure/v2/.envrc−7

This diff is too big to show here.

vendor/github.com/go-viper/mapstructure/v2/.gitignore−10

This diff is too big to show here.

vendor/github.com/go-viper/mapstructure/v2/.golangci.yaml−48

This diff is too big to show here.

vendor/github.com/go-viper/mapstructure/v2/CHANGELOG.md−104

This diff is too big to show here.

vendor/github.com/go-viper/mapstructure/v2/LICENSE−21

This diff is too big to show here.

vendor/github.com/go-viper/mapstructure/v2/README.md−81

This diff is too big to show here.

vendor/github.com/go-viper/mapstructure/v2/decode_hooks.go−714

This diff is too big to show here.

vendor/github.com/go-viper/mapstructure/v2/devenv.lock−103

This diff is too big to show here.

vendor/github.com/go-viper/mapstructure/v2/devenv.nix−14

This diff is too big to show here.

vendor/github.com/go-viper/mapstructure/v2/devenv.yaml−4

This diff is too big to show here.

vendor/github.com/go-viper/mapstructure/v2/errors.go−244

This diff is too big to show here.

vendor/github.com/go-viper/mapstructure/v2/internal/errors/errors.go−11

This diff is too big to show here.

vendor/github.com/go-viper/mapstructure/v2/internal/errors/join.go−9

This diff is too big to show here.

vendor/github.com/go-viper/mapstructure/v2/internal/errors/join_go1_19.go−61

This diff is too big to show here.

vendor/github.com/go-viper/mapstructure/v2/mapstructure.go−1948

This diff is too big to show here.

vendor/github.com/go-viper/mapstructure/v2/reflect_go1_19.go−44

This diff is too big to show here.

vendor/github.com/go-viper/mapstructure/v2/reflect_go1_20.go−10

This diff is too big to show here.

vendor/github.com/goccy/go-json/.codecov.yml−32

This diff is too big to show here.

vendor/github.com/goccy/go-json/.gitignore−2

This diff is too big to show here.

vendor/github.com/goccy/go-json/.golangci.yml−86

This diff is too big to show here.

vendor/github.com/goccy/go-json/CHANGELOG.md−425

This diff is too big to show here.

vendor/github.com/goccy/go-json/LICENSE−21

This diff is too big to show here.

vendor/github.com/goccy/go-json/Makefile−39

This diff is too big to show here.

vendor/github.com/goccy/go-json/README.md−529

This diff is too big to show here.

vendor/github.com/goccy/go-json/color.go−68

This diff is too big to show here.

vendor/github.com/goccy/go-json/decode.go−263

This diff is too big to show here.

vendor/github.com/goccy/go-json/docker-compose.yml−13

This diff is too big to show here.

vendor/github.com/goccy/go-json/encode.go−326

This diff is too big to show here.

vendor/github.com/goccy/go-json/error.go−41

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/anonymous_field.go−41

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/array.go−176

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/assign.go−438

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/bool.go−83

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/bytes.go−118

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/compile.go−493

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/compile_norace.go−30

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/compile_race.go−38

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/context.go−254

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/float.go−170

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/func.go−146

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/int.go−246

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/interface.go−528

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/invalid.go−55

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/map.go−280

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/number.go−123

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/option.go−17

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/path.go−670

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/ptr.go−97

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/slice.go−380

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/stream.go−556

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/string.go−452

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/struct.go−845

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/type.go−30

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/uint.go−194

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/unmarshal_json.go−104

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/unmarshal_text.go−285

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/decoder/wrapped_string.go−73

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/code.go−1023

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/compact.go−286

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/compiler.go−939

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/compiler_norace.go−33

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/compiler_race.go−46

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/context.go−105

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/decode_rune.go−126

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/encoder.go−601

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/indent.go−211

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/int.go−176

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/map112.go−9

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/map113.go−9

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/opcode.go−752

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/option.go−48

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/optype.go−932

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/query.go−135

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/string.go−483

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/string_table.go−415

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/vm/debug_vm.go−41

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/vm/hack.go−9

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/vm/util.go−207

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/vm/vm.go−4859

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/vm_color/debug_vm.go−35

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/vm_color/hack.go−9

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/vm_color/util.go−274

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/vm_color/vm.go−4859

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/vm_color_indent/debug_vm.go−35

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/vm_color_indent/util.go−297

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/vm_color_indent/vm.go−4859

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/vm_indent/debug_vm.go−35

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/vm_indent/hack.go−9

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/vm_indent/util.go−230

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/encoder/vm_indent/vm.go−4859

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/errors/error.go−183

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/runtime/rtype.go−262

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/runtime/struct_field.go−91

This diff is too big to show here.

vendor/github.com/goccy/go-json/internal/runtime/type.go−98

This diff is too big to show here.

vendor/github.com/goccy/go-json/json.go−368

This diff is too big to show here.

vendor/github.com/goccy/go-json/option.go−79

This diff is too big to show here.

vendor/github.com/goccy/go-json/path.go−84

This diff is too big to show here.

vendor/github.com/goccy/go-json/query.go−47

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/.codecov.yml−31

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/.gitignore−3

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/.golangci.yml−65

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/CHANGELOG.md−186

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/LICENSE−21

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/Makefile−55

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/README.md−420

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/ast/ast.go−2381

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/context.go−37

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/decode.go−2037

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/encode.go−1074

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/error.go−77

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/internal/errors/error.go−246

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/internal/format/format.go−541

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/lexer/lexer.go−23

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/option.go−352

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/parser/color.go−28

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/parser/context.go−187

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/parser/node.go−257

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/parser/option.go−12

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/parser/parser.go−1330

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/parser/token.go−746

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/path.go−835

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/printer/color.go−83

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/printer/printer.go−353

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/scanner/context.go−452

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/scanner/error.go−17

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/scanner/scanner.go−1536

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/stdlib_quote.go−113

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/struct.go−128

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/token/token.go−1177

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/validate.go−13

This diff is too big to show here.

vendor/github.com/goccy/go-yaml/yaml.go−357

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/.cirrus.yml−11

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/.golangci.yml−13

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/CONTRIBUTING.md−50

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/LICENSE−25

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/MAINTAINERS−3

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/README.md−47

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/SECURITY.md−13

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/auth.go−257

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/auth_anonymous.go−16

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/auth_default_other.go−7

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/auth_default_windows.go−5

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/auth_external.go−26

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/auth_sha1_windows.go−109

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/call.go−66

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/conn.go−1009

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/conn_darwin.go−36

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/conn_other.go−83

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/conn_unix.go−40

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/conn_windows.go−13

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/dbus.go−427

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/decoder.go−376

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/default_handler.go−338

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/doc.go−70

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/encoder.go−235

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/escape.go−84

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/export.go−484

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/match.go−89

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/message.go−393

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/object.go−181

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/sequence.go−24

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/sequential_handler.go−125

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/server_interfaces.go−107

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/sig.go−298

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/transport_darwin.go−6

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/transport_generic.go−52

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/transport_nonce_tcp.go−41

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/transport_tcp.go−41

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/transport_unix.go−291

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/transport_unixcred_dragonfly.go−95

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/transport_unixcred_freebsd.go−94

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/transport_unixcred_linux.go−25

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/transport_unixcred_netbsd.go−14

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/transport_unixcred_openbsd.go−14

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/transport_zos.go−6

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/variant.go−169

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/variant_lexer.go−284

This diff is too big to show here.

vendor/github.com/godbus/dbus/v5/variant_parser.go−815

This diff is too big to show here.

vendor/github.com/golang/freetype/AUTHORS−20

This diff is too big to show here.

vendor/github.com/golang/freetype/CONTRIBUTORS−38

This diff is too big to show here.

vendor/github.com/golang/freetype/LICENSE−12

This diff is too big to show here.

vendor/github.com/golang/freetype/raster/geom.go−245

This diff is too big to show here.

vendor/github.com/golang/freetype/raster/paint.go−287

This diff is too big to show here.

vendor/github.com/golang/freetype/raster/raster.go−601

This diff is too big to show here.

vendor/github.com/golang/freetype/raster/stroke.go−483

This diff is too big to show here.

vendor/github.com/golang/freetype/truetype/face.go−507

This diff is too big to show here.

vendor/github.com/golang/freetype/truetype/glyph.go−522

This diff is too big to show here.

vendor/github.com/golang/freetype/truetype/hint.go−1770

This diff is too big to show here.

vendor/github.com/golang/freetype/truetype/opcodes.go−289

This diff is too big to show here.

vendor/github.com/golang/freetype/truetype/truetype.go−653

This diff is too big to show here.

vendor/github.com/google/go-cmp/LICENSE−27

This diff is too big to show here.

vendor/github.com/google/go-cmp/cmp/compare.go−671

This diff is too big to show here.

vendor/github.com/google/go-cmp/cmp/export.go−31

This diff is too big to show here.

vendor/github.com/google/go-cmp/cmp/internal/diff/debug_disable.go−18

This diff is too big to show here.

vendor/github.com/google/go-cmp/cmp/internal/diff/debug_enable.go−123

This diff is too big to show here.

vendor/github.com/google/go-cmp/cmp/internal/diff/diff.go−402

This diff is too big to show here.

vendor/github.com/google/go-cmp/cmp/internal/flags/flags.go−9

This diff is too big to show here.

vendor/github.com/google/go-cmp/cmp/internal/function/func.go−106

This diff is too big to show here.

vendor/github.com/google/go-cmp/cmp/internal/value/name.go−164

This diff is too big to show here.

vendor/github.com/google/go-cmp/cmp/internal/value/pointer.go−34

This diff is too big to show here.

vendor/github.com/google/go-cmp/cmp/internal/value/sort.go−106

This diff is too big to show here.

vendor/github.com/google/go-cmp/cmp/options.go−562

This diff is too big to show here.

vendor/github.com/google/go-cmp/cmp/path.go−390

This diff is too big to show here.

vendor/github.com/google/go-cmp/cmp/report.go−54

This diff is too big to show here.

vendor/github.com/google/go-cmp/cmp/report_compare.go−433

This diff is too big to show here.

vendor/github.com/google/go-cmp/cmp/report_references.go−264

This diff is too big to show here.

vendor/github.com/google/go-cmp/cmp/report_reflect.go−414

This diff is too big to show here.

vendor/github.com/google/go-cmp/cmp/report_slices.go−614

This diff is too big to show here.

vendor/github.com/google/go-cmp/cmp/report_text.go−432

This diff is too big to show here.

vendor/github.com/google/go-cmp/cmp/report_value.go−121

This diff is too big to show here.

vendor/github.com/google/jsonschema-go/LICENSE−21

This diff is too big to show here.

vendor/github.com/google/jsonschema-go/jsonschema/annotations.go−76

This diff is too big to show here.

vendor/github.com/google/jsonschema-go/jsonschema/doc.go−115

This diff is too big to show here.

vendor/github.com/google/jsonschema-go/jsonschema/infer.go−399

This diff is too big to show here.

vendor/github.com/google/jsonschema-go/jsonschema/json_pointer.go−160

This diff is too big to show here.

vendor/github.com/google/jsonschema-go/jsonschema/resolve.go−589

This diff is too big to show here.

vendor/github.com/google/jsonschema-go/jsonschema/schema.go−642

This diff is too big to show here.

vendor/github.com/google/jsonschema-go/jsonschema/util.go−463

This diff is too big to show here.

vendor/github.com/google/jsonschema-go/jsonschema/validate.go−906

This diff is too big to show here.

vendor/github.com/google/s2a-go/.gitignore−6

This diff is too big to show here.

vendor/github.com/google/s2a-go/CODE_OF_CONDUCT.md−93

This diff is too big to show here.

vendor/github.com/google/s2a-go/CONTRIBUTING.md−29

This diff is too big to show here.

vendor/github.com/google/s2a-go/LICENSE.md−202

This diff is too big to show here.

vendor/github.com/google/s2a-go/README.md−14

This diff is too big to show here.

vendor/github.com/google/s2a-go/fallback/s2a_fallback.go−167

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/authinfo/authinfo.go−119

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/handshaker/handshaker.go−438

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/handshaker/service/service.go−66

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/proto/common_go_proto/common.pb.go−388

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/proto/s2a_context_go_proto/s2a_context.pb.go−267

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/proto/s2a_go_proto/s2a.pb.go−1377

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/proto/s2a_go_proto/s2a_grpc.pb.go−174

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/proto/v2/common_go_proto/common.pb.go−549

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/proto/v2/s2a_context_go_proto/s2a_context.pb.go−249

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/proto/v2/s2a_go_proto/s2a.pb.go−2518

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/proto/v2/s2a_go_proto/s2a_grpc.pb.go−160

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/aeadcrypter.go−34

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/aesgcm.go−70

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/chachapoly.go−67

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/record/internal/aeadcrypter/common.go−92

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/record/internal/halfconn/ciphersuite.go−98

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/record/internal/halfconn/counter.go−60

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/record/internal/halfconn/expander.go−59

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/record/internal/halfconn/halfconn.go−193

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/record/record.go−729

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/record/ticketsender.go−178

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/tokenmanager/tokenmanager.go−79

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/v2/README.md−1

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/v2/certverifier/certverifier.go−122

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/v2/remotesigner/remotesigner.go−186

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/v2/s2av2.go−380

This diff is too big to show here.

vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/tlsconfigstore.go−403

This diff is too big to show here.

vendor/github.com/google/s2a-go/retry/retry.go−144

This diff is too big to show here.

vendor/github.com/google/s2a-go/s2a.go−448

This diff is too big to show here.

vendor/github.com/google/s2a-go/s2a_options.go−272

This diff is too big to show here.

vendor/github.com/google/s2a-go/s2a_utils.go−79

This diff is too big to show here.

vendor/github.com/google/s2a-go/stream/s2a_stream.go−39

This diff is too big to show here.

vendor/github.com/google/uuid/CHANGELOG.md−41

This diff is too big to show here.

vendor/github.com/google/uuid/CONTRIBUTING.md−26

This diff is too big to show here.

vendor/github.com/google/uuid/CONTRIBUTORS−9

This diff is too big to show here.

vendor/github.com/google/uuid/LICENSE−27

This diff is too big to show here.

vendor/github.com/google/uuid/README.md−21

This diff is too big to show here.

vendor/github.com/google/uuid/dce.go−80

This diff is too big to show here.

vendor/github.com/google/uuid/doc.go−12

This diff is too big to show here.

vendor/github.com/google/uuid/hash.go−59

This diff is too big to show here.

vendor/github.com/google/uuid/marshal.go−38

This diff is too big to show here.

vendor/github.com/google/uuid/node.go−90

This diff is too big to show here.

vendor/github.com/google/uuid/node_js.go−12

This diff is too big to show here.

vendor/github.com/google/uuid/node_net.go−33

This diff is too big to show here.

vendor/github.com/google/uuid/null.go−118

This diff is too big to show here.

vendor/github.com/google/uuid/sql.go−59

This diff is too big to show here.

vendor/github.com/google/uuid/time.go−134

This diff is too big to show here.

vendor/github.com/google/uuid/util.go−43

This diff is too big to show here.

vendor/github.com/google/uuid/uuid.go−365

This diff is too big to show here.

vendor/github.com/google/uuid/version1.go−44

This diff is too big to show here.

vendor/github.com/google/uuid/version4.go−76

This diff is too big to show here.

vendor/github.com/google/uuid/version6.go−56

This diff is too big to show here.

vendor/github.com/google/uuid/version7.go−104

This diff is too big to show here.

vendor/github.com/googleapis/enterprise-certificate-proxy/LICENSE−202

This diff is too big to show here.

vendor/github.com/googleapis/enterprise-certificate-proxy/client/client.go−219

This diff is too big to show here.

vendor/github.com/googleapis/enterprise-certificate-proxy/client/util/util.go−100

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/.release-please-manifest.json−3

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/CHANGES.md−231

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/LICENSE−27

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/apierror/apierror.go−413

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/README.md−30

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/custom_error.pb.go−226

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/custom_error.proto−50

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/error.pb.go−232

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/error.proto−46

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/call_option.go−288

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/callctx/callctx.go−146

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/content_type.go−112

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/feature.go−81

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/gax.go−41

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/header.go−200

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/internal/version.go−20

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/internallog/internal/internal.go−134

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/internallog/internallog.go−154

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/invoke.go−141

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/proto_json_stream.go−127

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/release-please-config.json−10

This diff is too big to show here.

vendor/github.com/googleapis/gax-go/v2/telemetry.go−469

This diff is too big to show here.

vendor/github.com/gorilla/css/LICENSE−28

This diff is too big to show here.

vendor/github.com/gorilla/css/scanner/doc.go−33

This diff is too big to show here.

vendor/github.com/gorilla/css/scanner/scanner.go−360

This diff is too big to show here.

vendor/github.com/gorilla/websocket/.gitignore−25

This diff is too big to show here.

vendor/github.com/gorilla/websocket/AUTHORS−9

This diff is too big to show here.

vendor/github.com/gorilla/websocket/LICENSE−22

This diff is too big to show here.

vendor/github.com/gorilla/websocket/README.md−33

This diff is too big to show here.

vendor/github.com/gorilla/websocket/client.go−434

This diff is too big to show here.

vendor/github.com/gorilla/websocket/compression.go−148

This diff is too big to show here.

vendor/github.com/gorilla/websocket/conn.go−1238

This diff is too big to show here.

vendor/github.com/gorilla/websocket/doc.go−227

This diff is too big to show here.

vendor/github.com/gorilla/websocket/join.go−42

This diff is too big to show here.

vendor/github.com/gorilla/websocket/json.go−60

This diff is too big to show here.

vendor/github.com/gorilla/websocket/mask.go−55

This diff is too big to show here.

vendor/github.com/gorilla/websocket/mask_safe.go−16

This diff is too big to show here.

vendor/github.com/gorilla/websocket/prepared.go−102

This diff is too big to show here.

vendor/github.com/gorilla/websocket/proxy.go−77

This diff is too big to show here.

vendor/github.com/gorilla/websocket/server.go−365

This diff is too big to show here.

vendor/github.com/gorilla/websocket/tls_handshake.go−21

This diff is too big to show here.

vendor/github.com/gorilla/websocket/tls_handshake_116.go−21

This diff is too big to show here.

vendor/github.com/gorilla/websocket/util.go−298

This diff is too big to show here.

vendor/github.com/gorilla/websocket/x_net_proxy.go−473

This diff is too big to show here.

vendor/github.com/hashicorp/golang-lru/v2/.gitignore−23

This diff is too big to show here.

vendor/github.com/hashicorp/golang-lru/v2/.golangci.yml−46

This diff is too big to show here.

vendor/github.com/hashicorp/golang-lru/v2/2q.go−267

This diff is too big to show here.

vendor/github.com/hashicorp/golang-lru/v2/LICENSE−364

This diff is too big to show here.

vendor/github.com/hashicorp/golang-lru/v2/README.md−79

This diff is too big to show here.

vendor/github.com/hashicorp/golang-lru/v2/doc.go−24

This diff is too big to show here.

vendor/github.com/hashicorp/golang-lru/v2/internal/list.go−142

This diff is too big to show here.

vendor/github.com/hashicorp/golang-lru/v2/lru.go−250

This diff is too big to show here.

vendor/github.com/hashicorp/golang-lru/v2/simplelru/LICENSE_list−29

This diff is too big to show here.

vendor/github.com/hashicorp/golang-lru/v2/simplelru/lru.go−177

This diff is too big to show here.

vendor/github.com/hashicorp/golang-lru/v2/simplelru/lru_interface.go−46

This diff is too big to show here.

vendor/github.com/inconshreveable/mousetrap/LICENSE−201

This diff is too big to show here.

vendor/github.com/inconshreveable/mousetrap/README.md−23

This diff is too big to show here.

vendor/github.com/inconshreveable/mousetrap/trap_others.go−16

This diff is too big to show here.

vendor/github.com/inconshreveable/mousetrap/trap_windows.go−42

This diff is too big to show here.

vendor/github.com/invopop/jsonschema/.gitignore−2

This diff is too big to show here.

vendor/github.com/invopop/jsonschema/.golangci.yml−80

This diff is too big to show here.

vendor/github.com/invopop/jsonschema/COPYING−19

This diff is too big to show here.

vendor/github.com/invopop/jsonschema/README.md−374

This diff is too big to show here.

vendor/github.com/invopop/jsonschema/id.go−76

This diff is too big to show here.

vendor/github.com/invopop/jsonschema/reflect.go−1178

This diff is too big to show here.

vendor/github.com/invopop/jsonschema/reflect_comments.go−160

This diff is too big to show here.

vendor/github.com/invopop/jsonschema/schema.go−94

This diff is too big to show here.

vendor/github.com/invopop/jsonschema/utils.go−26

This diff is too big to show here.

vendor/github.com/itchyny/gojq/.dockerignore−16

This diff is too big to show here.

vendor/github.com/itchyny/gojq/.gitattributes−3

This diff is too big to show here.

vendor/github.com/itchyny/gojq/.gitignore−7

This diff is too big to show here.

vendor/github.com/itchyny/gojq/CHANGELOG.md−418

This diff is too big to show here.

vendor/github.com/itchyny/gojq/Dockerfile−14

This diff is too big to show here.

vendor/github.com/itchyny/gojq/LICENSE−21

This diff is too big to show here.

vendor/github.com/itchyny/gojq/Makefile−102

This diff is too big to show here.

vendor/github.com/itchyny/gojq/README.md−164

This diff is too big to show here.

vendor/github.com/itchyny/gojq/_gojq−43

This diff is too big to show here.

vendor/github.com/itchyny/gojq/builtin.go−73

This diff is too big to show here.

vendor/github.com/itchyny/gojq/builtin.jq−188

This diff is too big to show here.

vendor/github.com/itchyny/gojq/code.go−108

This diff is too big to show here.

vendor/github.com/itchyny/gojq/compare.go−76

This diff is too big to show here.

vendor/github.com/itchyny/gojq/compiler.go−1715

This diff is too big to show here.

vendor/github.com/itchyny/gojq/debug.go−208

This diff is too big to show here.

vendor/github.com/itchyny/gojq/encoder.go−192

This diff is too big to show here.

vendor/github.com/itchyny/gojq/env.go−49

This diff is too big to show here.

vendor/github.com/itchyny/gojq/error.go−383

This diff is too big to show here.

vendor/github.com/itchyny/gojq/execute.go−443

This diff is too big to show here.

vendor/github.com/itchyny/gojq/func.go−2190

This diff is too big to show here.

vendor/github.com/itchyny/gojq/go.dev.mod−8

This diff is too big to show here.

vendor/github.com/itchyny/gojq/go.dev.sum−4

This diff is too big to show here.

vendor/github.com/itchyny/gojq/gojq.go−5

This diff is too big to show here.

vendor/github.com/itchyny/gojq/iter.go−49

This diff is too big to show here.

vendor/github.com/itchyny/gojq/lexer.go−578

This diff is too big to show here.

vendor/github.com/itchyny/gojq/module_loader.go−184

This diff is too big to show here.

vendor/github.com/itchyny/gojq/operator.go−557

This diff is too big to show here.

vendor/github.com/itchyny/gojq/option.go−96

This diff is too big to show here.

vendor/github.com/itchyny/gojq/parser.go−1506

This diff is too big to show here.

vendor/github.com/itchyny/gojq/parser.go.y−669

This diff is too big to show here.

vendor/github.com/itchyny/gojq/preview.go−77

This diff is too big to show here.

vendor/github.com/itchyny/gojq/query.go−942

This diff is too big to show here.

vendor/github.com/itchyny/gojq/release.go−15

This diff is too big to show here.

vendor/github.com/itchyny/gojq/scope_stack.go−48

This diff is too big to show here.

vendor/github.com/itchyny/gojq/stack.go−52

This diff is too big to show here.

vendor/github.com/itchyny/gojq/term_type.go−77

This diff is too big to show here.

vendor/github.com/itchyny/gojq/type.go−31

This diff is too big to show here.

vendor/github.com/itchyny/timefmt-go/CHANGELOG.md−37

This diff is too big to show here.

vendor/github.com/itchyny/timefmt-go/LICENSE−21

This diff is too big to show here.

vendor/github.com/itchyny/timefmt-go/Makefile−20

This diff is too big to show here.

vendor/github.com/itchyny/timefmt-go/README.md−69

This diff is too big to show here.

vendor/github.com/itchyny/timefmt-go/format.go−462

This diff is too big to show here.

vendor/github.com/itchyny/timefmt-go/parse.go−474

This diff is too big to show here.

vendor/github.com/itchyny/timefmt-go/timefmt.go−2

This diff is too big to show here.

vendor/github.com/jackmordaunt/icns/v3/.gitignore−3

This diff is too big to show here.

vendor/github.com/jackmordaunt/icns/v3/.goreleaser.yml−38

This diff is too big to show here.

vendor/github.com/jackmordaunt/icns/v3/LICENSE−21

This diff is too big to show here.

vendor/github.com/jackmordaunt/icns/v3/doc.go−20

This diff is too big to show here.

vendor/github.com/jackmordaunt/icns/v3/error.go−18

This diff is too big to show here.

vendor/github.com/jackmordaunt/icns/v3/icns.go−220

This diff is too big to show here.

vendor/github.com/jackmordaunt/icns/v3/interpolation.go−24

This diff is too big to show here.

vendor/github.com/jackmordaunt/icns/v3/reader.go−143

This diff is too big to show here.

vendor/github.com/jackmordaunt/icns/v3/readme.md−134

This diff is too big to show here.

vendor/github.com/jackmordaunt/icns/v3/release.sh−15

This diff is too big to show here.